X-Git-Url: http://dxcluster.net/gitweb/gitweb.cgi?a=blobdiff_plain;f=perl%2Fclient.pl;h=1b6757b48c27c09c63ea7f19f1a4167a50c014d8;hb=f155969d600561b9ef151a7ce2494a0c89aed033;hp=bc2d46c7f9b2e322b55275f1991b91fd51133e8b;hpb=632bda2671a8b0cf73b1a0bffa7b906c8744b14f;p=spider.git diff --git a/perl/client.pl b/perl/client.pl index bc2d46c7..1b6757b4 100755 --- a/perl/client.pl +++ b/perl/client.pl @@ -46,14 +46,13 @@ 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"); + $conn->send_now("Z$call|bye..."); sleep(1); } $stdout->flush if $stdout; @@ -103,12 +102,13 @@ sub rec_socket cease(1); } 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,13 @@ 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. + # ****************************************************** + # ****************************************************** } $lasttime = time; } @@ -172,8 +178,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 +275,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) {