X-Git-Url: http://gb7djk.dxcluster.net/gitweb/gitweb.cgi?a=blobdiff_plain;f=perl%2Fclient.pl;h=f153b589cb455b7eaf3348088697c13daa6f8977;hb=b73aa9d811a4a1691f4ec2a9aaba0eb51f5ff62d;hp=ff2ca473f82b03451e0f023d7d72d3ee6e9adc5b;hpb=c20a2c1e01d707d6c3fa25067df93d491aba8fff;p=spider.git diff --git a/perl/client.pl b/perl/client.pl index ff2ca473..f153b589 100755 --- a/perl/client.pl +++ b/perl/client.pl @@ -88,8 +88,10 @@ sub setmode { if ($mode == 1) { $mynl = "\r"; + $out_lineend = "\r"; } else { $mynl = "\n"; + $out_lineend = "\r\n"; } $/ = $mynl; } @@ -119,7 +121,7 @@ sub rec_socket if ($buffered) { if (length $outqueue >= $client_buffer_lth) { print $stdout $outqueue; - pop @echo if @echo > $maxecho; + pop @echo while (@echo > $maxecho); push @echo, $outqueue; $outqueue = ""; } @@ -146,7 +148,7 @@ sub rec_socket } elsif ($sort eq 'B') { if ($buffered && $outqueue) { print $stdout $outqueue; - pop @echo if @echo > $maxecho; + pop @echo while(@echo > $maxecho); push @echo, $outqueue; $outqueue = ""; } @@ -233,7 +235,7 @@ sub doconnect $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); + $sock->binmode(0); $mode = 3; } elsif ($sort eq 'ax25' || $sort eq 'prog') { my @args = split /\s+/, $line; @@ -265,6 +267,16 @@ sub dotimeout $timeout = $val; } +sub dolineend +{ + my $val = shift; + $out_lineend = $val; + $out_lineend =~ s/\\r/\r/g; + $out_lineend =~ s/\\n/\n/g; + dbg('connect', "lineend set to $val "); + $out_lineend = $mynl unless $out_lineend; +} + sub dochat { my ($expect, $send) = @_; @@ -304,9 +316,10 @@ sub dochat } if ($send) { if ($csort eq 'telnet') { +# local $\ = $out_lineend; $sock->print("$send\n"); } elsif ($csort eq 'ax25') { - local $\ = "\r"; + local $\ = $out_lineend; $wfh->print("$send"); } dbg('connect', "sent \"$send\""); @@ -350,6 +363,7 @@ $maxecho = 5; # length of max echo queue $pid = 0; # the pid of the child program $csort = ""; # the connection type $sock = 0; # connection socket +$out_lineend = $mynl; # connection lineending (used for outgoing connects) $stdin = *STDIN; $stdout = *STDOUT; @@ -419,7 +433,7 @@ if ($loginreq) { $s =~ s/\s+//og; $s =~ s/-\d+$//o; # no ssids! cease(0) unless $s && $s gt ' '; - unless (iscallsign($s)) { + unless (is_callsign($s)) { $stdout->print("Sorry, $s is an invalid callsign"); cease(0); } @@ -444,7 +458,9 @@ 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; + dolineend($1) if /^\s*[Ll]\w*\s+\'((?:\\[rn])+)\'/; dochat($1, $2) if /^\s*\'(.*)\'\s+\'(.*)\'/io; + if (/^\s*cl\w+\s+(.*)/io) { doclient($1); last;