proftpd-mod-proxy_protocol/t/lib/ProFTPD/TestSuite/ProxiedFTP.pm

67 lines
1.1 KiB
C

package ProFTPD::TestSuite::ProxiedFTP;
use strict;
use vars qw(@ISA);
use Carp;
use Net::FTP;
@ISA = qw(Net::FTP);
my $proxy_info = undef;
sub new {
my $class = shift;
my ($addr, $port, $proxy, $timeout) = @_;
$timeout = 5 unless defined($timeout);
my $debug = undef;
$proxy_info = $proxy;
if ($ENV{TEST_VERBOSE}) {
$debug = 10;
}
my $self = $class->SUPER::new($addr,
Port => $port,
Timeout => $timeout,
Debug => $debug,
);
unless ($self) {
croak($@);
}
return $self;
}
# Override response() from Net::Cmd to trigger sending the PROXY command
sub response {
my $self = shift;
if (defined($proxy_info)) {
if (ref($proxy_info)) {
my ($proto, $src_addr, $dst_addr, $src_port, $dst_port) = @$proxy_info;
$self->command("PROXY", $proto, $src_addr, $dst_addr, $src_port, $dst_port);
} else {
$self->rawdatasend($proxy_info);
}
$proxy_info = undef;
}
$self->SUPER::response();
}
sub login {
my $self = shift;
unless ($self->SUPER::login(@_)) {
croak("Failed to login: " . $self->code . " " . $self->message);
}
return 1;
}
1;