X-Git-Url: http://dxcluster.net/gitweb/gitweb.cgi?a=blobdiff_plain;f=perl%2FExtMsg.pm;h=be7d0e84c0ada79e8b349e83c445e59b01b4165c;hb=95a03441d20680a914673d1b6bbf46c0d673ad4c;hp=3f8159aa54699357bff0ac074a4a9235928a2698;hpb=ecd9c3904c5859a2db92fd2668ea756186eda699;p=spider.git diff --git a/perl/ExtMsg.pm b/perl/ExtMsg.pm index 3f8159aa..be7d0e84 100644 --- a/perl/ExtMsg.pm +++ b/perl/ExtMsg.pm @@ -90,7 +90,9 @@ sub dequeue } elsif ($conn->{state} eq 'WL' ) { $msg = uc $msg; if (is_callsign($msg)) { - $conn->to_connected($msg, 'A', $conn->{csort}); + my $sort = $conn->{csort}; + $sort = 'local' if $conn->{peerhost} eq "127.0.0.1"; + $conn->to_connected($msg, 'A', $sort); } else { $conn->send_now("Sorry $msg is an invalid callsign"); $conn->disconnect; @@ -116,7 +118,7 @@ sub to_connected $conn->{timeout}->del if $conn->{timeout}; delete $conn->{timeout}; &{$conn->{rproc}}($conn, "$dir$call|$sort"); - $conn->_send_file("$main::data/connected"); + $conn->_send_file("$main::data/connected") unless $conn->{outgoing}; } sub new_client { @@ -127,28 +129,35 @@ sub new_client { $conn->{sock} = $sock; Msg::blocking($sock, 0); $conn->{blocking} = 0; - - my ($rproc, $eproc) = &{$server_conn->{rproc}} ($conn, $conn->{peerhost} = $sock->peerhost(), $conn->{peerport} = $sock->peerport()); - dbg('connll', "accept $conn->{cnum} from $conn->{peerhost} $conn->{peerport}"); - if ($eproc) { - $conn->{eproc} = $eproc; - Msg::set_event_handler ($sock, "error" => $eproc); - } - if ($rproc) { - $conn->{rproc} = $rproc; - my $callback = sub {$conn->_rcv}; - Msg::set_event_handler ($sock, "read" => $callback); - # send login prompt - $conn->{state} = 'WL'; - # $conn->send_raw("\xff\xfe\x01\xff\xfc\x01\ff\fd\x22"); - # $conn->send_raw("\xff\xfa\x22\x01\x01\xff\xf0"); - # $conn->send_raw("\xFF\xFC\x01"); - $conn->_send_file("$main::data/issue"); - $conn->send_raw("login: "); - $conn->_dotimeout(60); - } else { - &{$conn->{eproc}}() if $conn->{eproc}; - $conn->disconnect(); + eval {$conn->{peerhost} = $sock->peerhost}; + if ($@) { + dbg('conn', $@); + $conn->disconnect; + } else { + eval {$conn->{peerport} = $sock->peerport}; + $conn->{peerport} = 0 if $@; + my ($rproc, $eproc) = &{$server_conn->{rproc}} ($conn, $conn->{peerhost}, $conn->{peerport}); + dbg('connll', "accept $conn->{cnum} from $conn->{peerhost} $conn->{peerport}"); + if ($eproc) { + $conn->{eproc} = $eproc; + Msg::set_event_handler ($sock, "error" => $eproc); + } + if ($rproc) { + $conn->{rproc} = $rproc; + my $callback = sub {$conn->_rcv}; + Msg::set_event_handler ($sock, "read" => $callback); + # send login prompt + $conn->{state} = 'WL'; + # $conn->send_raw("\xff\xfe\x01\xff\xfc\x01\ff\fd\x22"); + # $conn->send_raw("\xff\xfa\x22\x01\x01\xff\xf0"); + # $conn->send_raw("\xFF\xFC\x01"); + $conn->_send_file("$main::data/issue"); + $conn->send_raw("login: "); + $conn->_dotimeout(60); + } else { + &{$conn->{eproc}}() if $conn->{eproc}; + $conn->disconnect(); + } } } else { dbg('err', "ExtMsg: error on accept ($!)"); @@ -160,6 +169,7 @@ sub start_connect my $call = shift; my $fn = shift; my $conn = ExtMsg->new(\&main::new_channel); + $conn->{outgoing} = 1; $conn->conns($call); my $f = new IO::File $fn;