X-Git-Url: http://scm.dxcluster.org/gitweb/gitweb.cgi?a=blobdiff_plain;f=perl%2Fclient.pl;h=66c7b0927337d88443097fb62b2c1daa1cc5dce9;hb=502f900651a46b96008028945616a3b610d6cc7a;hp=642f80c6e0bf6b54604dbdf2758820bc035fde53;hpb=a57ea9d5501f6d319a8cbfff997bad077cc31010;p=spider.git diff --git a/perl/client.pl b/perl/client.pl index 642f80c6..66c7b092 100755 --- a/perl/client.pl +++ b/perl/client.pl @@ -46,16 +46,15 @@ use Net::Telnet qw(TELOPT_ECHO); use IO::File; use IO::Socket; use IPC::Open2; -use Carp qw{cluck}; # cease communications sub cease { my $sendz = shift; - if ($conn && $sendz) { - $conn->send_now("Z$call|bye...\n"); - sleep(1); - } +# if ($conn && $sendz) { +# $conn->send_now("Z$call|bye..."); +# sleep(1); +# } $stdout->flush if $stdout; if ($pid) { dbg('connect', "killing $pid"); @@ -100,15 +99,16 @@ sub rec_socket { my ($con, $msg, $err) = @_; if (defined $err && $err) { - cease(1); + cease(0); } if (defined $msg) { - my ($sort, $call, $line) = $msg =~ /^(\w)([A-Z0-9\-]+)\|(.*)$/; + my ($sort, $call, $line) = $msg =~ /^(\w)([^\|]+)\|(.*)$/; if ($sort eq 'D') { my $snl = $mynl; my $newsavenl = ""; $snl = "" if $mode == 0; + $snl = "\r\n" if $mode == 2; if ($mode == 2 && $line =~ />$/) { $newsavenl = $snl; $snl = ' '; @@ -148,7 +148,15 @@ sub rec_socket $buffered = $line; # set buffered or unbuffered } elsif ($sort eq 'Z') { # end, disconnect, go, away ..... cease(0); - } + } + + # ****************************************************** + # ****************************************************** + # any other sorts that might happen are silently ignored. + # ****************************************************** + # ****************************************************** + } else { + cease(0); } $lasttime = time; } @@ -172,8 +180,9 @@ sub rec_stdin cease(1); } elsif ($r > 0) { if ($mode) { - $buf =~ s/\r/\n/og if $mode == 1; - $buf =~ s/\r\n/\n/og if $mode == 2; + $buf =~ s/\r/\n/g if $mode == 1; + $buf =~ s/[\r\x00]//g if $mode == 2; + $dangle = !($buf =~ /\n$/); if ($buf eq "\n") { @lines = (" "); @@ -268,16 +277,21 @@ sub dochat if ($csort eq 'telnet') { $line = $sock->get(); cease(11) unless $line; # the socket has gone away? - $line =~ s/\r\n/\n/og; + if (length $line == 0) { + dbg('connect', "received 0 length line, aborting..."); + cease(11); + } + $line =~ s/\r//g; chomp; } elsif ($csort eq 'ax25' || $csort eq 'prog') { local $/ = "\r"; $line = <$rfh>; - $line =~ s/\r//og; - } - if (length $line == 0) { - dbg('connect', "received 0 length line, aborting..."); - cease(11); + if (length $line == 0) { + dbg('connect', "received 0 length line, aborting..."); + cease(11); + } + $line =~ s/\r/\n/g; + chomp; } dbg('connect', "received \"$line\""); if ($abort && $line =~ /$abort/i) { @@ -428,8 +442,8 @@ if ($connsort eq "connect") { doconnect($1, $2) if /^\s*co\w*\s+(\w+)\s+(.*)$/io; doabort($1) if /^\s*a\w*\s+(.*)/io; dotimeout($1) if /^\s*t\w*\s+(\d+)/io; - dochat($1, $2) if /\s*\'(.*)\'\s+\'(.*)\'/io; - if (/\s*cl\w+\s+(.*)/io) { + dochat($1, $2) if /^\s*\'(.*)\'\s+\'(.*)\'/io; + if (/^\s*cl\w+\s+(.*)/io) { doclient($1); last; }