use Errno;
$VERSION = '0.11';
-@ISA = qw(IO::Socket::INET);
+@ISA = qw(IO::Socket::INET);
-sub reading
-{
- my $data = shift;
- ${*$data}{'net_ftp_bytesread'} = 0;
-}
-sub abort
-{
- my $data = shift;
- my $ftp = ${*$data}{'net_ftp_cmd'};
+sub reading {
+ my $data = shift;
+ ${*$data}{'net_ftp_bytesread'} = 0;
+}
- # no need to abort if we have finished the xfer
- return $data->close
- if ${*$data}{'net_ftp_eof'};
- # for some reason if we continously open RETR connections and not
- # read a single byte, then abort them after a while the server will
- # close our connection, this prevents the unexpected EOF on the
- # command channel -- GMB
- if(exists ${*$data}{'net_ftp_bytesread'}
- && (${*$data}{'net_ftp_bytesread'} == 0)) {
- my $buf="";
- my $timeout = $data->timeout;
- $data->can_read($timeout) && sysread($data,$buf,1);
- }
+sub abort {
+ my $data = shift;
+ my $ftp = ${*$data}{'net_ftp_cmd'};
- ${*$data}{'net_ftp_eof'} = 1; # fake
+ # no need to abort if we have finished the xfer
+ return $data->close
+ if ${*$data}{'net_ftp_eof'};
- $ftp->abort; # this will close me
+ # for some reason if we continously open RETR connections and not
+ # read a single byte, then abort them after a while the server will
+ # close our connection, this prevents the unexpected EOF on the
+ # command channel -- GMB
+ if (exists ${*$data}{'net_ftp_bytesread'}
+ && (${*$data}{'net_ftp_bytesread'} == 0))
+ {
+ my $buf = "";
+ my $timeout = $data->timeout;
+ $data->can_read($timeout) && sysread($data, $buf, 1);
+ }
+
+ ${*$data}{'net_ftp_eof'} = 1; # fake
+
+ $ftp->abort; # this will close me
}
-sub _close
-{
- my $data = shift;
- my $ftp = ${*$data}{'net_ftp_cmd'};
- $data->SUPER::close();
+sub _close {
+ my $data = shift;
+ my $ftp = ${*$data}{'net_ftp_cmd'};
+
+ $data->SUPER::close();
- delete ${*$ftp}{'net_ftp_dataconn'}
- if exists ${*$ftp}{'net_ftp_dataconn'} &&
- $data == ${*$ftp}{'net_ftp_dataconn'};
+ delete ${*$ftp}{'net_ftp_dataconn'}
+ if exists ${*$ftp}{'net_ftp_dataconn'}
+ && $data == ${*$ftp}{'net_ftp_dataconn'};
}
-sub close
-{
- my $data = shift;
- my $ftp = ${*$data}{'net_ftp_cmd'};
- if(exists ${*$data}{'net_ftp_bytesread'} && !${*$data}{'net_ftp_eof'}) {
- my $junk;
- $data->read($junk,1,0);
- return $data->abort unless ${*$data}{'net_ftp_eof'};
- }
+sub close {
+ my $data = shift;
+ my $ftp = ${*$data}{'net_ftp_cmd'};
+
+ if (exists ${*$data}{'net_ftp_bytesread'} && !${*$data}{'net_ftp_eof'}) {
+ my $junk;
+ $data->read($junk, 1, 0);
+ return $data->abort unless ${*$data}{'net_ftp_eof'};
+ }
- $data->_close;
+ $data->_close;
- $ftp->response() == CMD_OK &&
- $ftp->message =~ /unique file name:\s*(\S*)\s*\)/ &&
- (${*$ftp}{'net_ftp_unique'} = $1);
+ $ftp->response() == CMD_OK
+ && $ftp->message =~ /unique file name:\s*(\S*)\s*\)/
+ && (${*$ftp}{'net_ftp_unique'} = $1);
- $ftp->status == CMD_OK;
+ $ftp->status == CMD_OK;
}
+
sub _select {
- my ($data, $timeout, $do_read) = @_;
- my ($rin,$rout,$win,$wout,$tout,$nfound);
+ my ($data, $timeout, $do_read) = @_;
+ my ($rin, $rout, $win, $wout, $tout, $nfound);
+
+ vec($rin = '', fileno($data), 1) = 1;
- vec($rin='',fileno($data),1) = 1;
+ ($win, $rin) = ($rin, $win) unless $do_read;
- ($win, $rin) = ($rin, $win) unless $do_read;
+ while (1) {
+ $nfound = select($rout = $rin, $wout = $win, undef, $tout = $timeout);
- while (1) {
- $nfound = select($rout=$rin, $wout=$win, undef, $tout=$timeout);
+ last if $nfound >= 0;
- last if $nfound >= 0;
-
- croak "select: $!"
- unless $!{EINTR};
- }
+ croak "select: $!"
+ unless $!{EINTR};
+ }
- $nfound;
+ $nfound;
}
-sub can_read
-{
- _select(@_[0,1],1);
+
+sub can_read {
+ _select(@_[0, 1], 1);
}
-sub can_write
-{
- _select(@_[0,1],0);
+
+sub can_write {
+ _select(@_[0, 1], 0);
}
-sub cmd
-{
- my $ftp = shift;
- ${*$ftp}{'net_ftp_cmd'};
+sub cmd {
+ my $ftp = shift;
+
+ ${*$ftp}{'net_ftp_cmd'};
}
+
sub bytes_read {
- my $ftp = shift;
+ my $ftp = shift;
- ${*$ftp}{'net_ftp_bytesread'} || 0;
+ ${*$ftp}{'net_ftp_bytesread'} || 0;
}
1;