X-Git-Url: http://dxcluster.org/gitweb/gitweb.cgi?a=blobdiff_plain;f=perl%2Fclient.pl;h=740a9e7211d45bb27c4dfadf8cebe3f0243e0e7c;hb=3f1c5ab45aa13e99da6bea0bfcc6d4434beb5871;hp=66c7b0927337d88443097fb62b2c1daa1cc5dce9;hpb=502f900651a46b96008028945616a3b610d6cc7a;p=spider.git diff --git a/perl/client.pl b/perl/client.pl index 66c7b092..740a9e72 100755 --- a/perl/client.pl +++ b/perl/client.pl @@ -42,7 +42,7 @@ use Msg; use DXVars; use DXDebug; use DXUtil; -use Net::Telnet qw(TELOPT_ECHO); +use Net::Telnet qw(TELOPT_ECHO TELOPT_BINARY); use IO::File; use IO::Socket; use IPC::Open2; @@ -108,7 +108,8 @@ sub rec_socket my $snl = $mynl; my $newsavenl = ""; $snl = "" if $mode == 0; - $snl = "\r\n" if $mode == 2; + $snl = "\r\n" if $mode == 3; + $snl = "\n" if $mode == 2; if ($mode == 2 && $line =~ />$/) { $newsavenl = $snl; $snl = ' '; @@ -181,7 +182,7 @@ sub rec_stdin } elsif ($r > 0) { if ($mode) { $buf =~ s/\r/\n/g if $mode == 1; - $buf =~ s/[\r\x00]//g if $mode == 2; + $buf =~ s/[\r\x00]//g if $mode == 2 || $mode == 3; $dangle = !($buf =~ /\n$/); if ($buf eq "\n") { @@ -222,19 +223,13 @@ sub doconnect my ($host, $port) = split /\s+/, $line; $port = 23 if !$port; -# if ($port == 23) { - - $sock = new Net::Telnet (Timeout => $timeout, Port => $port); - $sock->option_callback(\&optioncb); - $sock->output_record_separator(''); -# $sock->option_log('option_log'); -# $sock->dump_log('dump'); - $sock->option_accept(Dont => TELOPT_ECHO, Wont => TELOPT_ECHO); - $sock->open($host) or die "Can't connect to $host port $port $!"; -# } else { -# $sock = IO::Socket::INET->new(PeerAddr => "$host:$port", Proto => 'tcp') -# or die "Can't connect to $host port $port $!"; -# } + $sock = new Net::Telnet (Timeout => $timeout, Port => $port); + $sock->option_callback(\&optioncb); + $sock->output_record_separator(''); + $sock->option_accept(Dont => TELOPT_ECHO, Wont => TELOPT_ECHO); + $sock->open($host) or die "Can't connect to $host port $port $!"; + $sock->binmode(1); + $mode = 3; } elsif ($sort eq 'ax25' || $sort eq 'prog') { my @args = split /\s+/, $line; $rfh = new IO::File; @@ -244,6 +239,7 @@ sub doconnect die "no transmit channel $!" unless $wfh; dbg('connect', "got pid $pid"); $wfh->autoflush(1); + $mode = 1; } else { die "invalid type of connection ($sort)"; } @@ -293,7 +289,7 @@ sub dochat $line =~ s/\r/\n/g; chomp; } - dbg('connect', "received \"$line\""); + dbg('connect', map { "received \"$_\"" } split /\n/, $line); if ($abort && $line =~ /$abort/i) { dbg('connect', "aborted on /$abort/"); cease(11); @@ -472,12 +468,12 @@ if ($connsort eq "connect") { $outbound = 1; $connsort = $csort; $stdout->autoflush(1); + $mode = ($connsort eq 'ax25') ? 1 : $mode; close STDIN; close STDOUT; close STDERR; } -$mode = ($connsort eq 'ax25') ? 1 : 2; setmode(); # adjust the callsign if it has an SSID, SSID <= 8 are legal > 8 are netrom connections