remove leading 0 from ssids on login
[spider.git] / perl / ExtMsg.pm
index c5d6d85486ff5092ec958e89f4714ded0ae2743b..a55de7e7600271846c0f6cf95523dedf727e401f 100644 (file)
@@ -19,6 +19,8 @@ use Msg;
 use DXVars;
 use DXUtil;
 use DXDebug;
+use DXTimer;
+
 use IO::File;
 use IO::Socket;
 use IPC::Open3;
@@ -64,6 +66,24 @@ sub echo
        $conn->{echo} = shift;
 }
 
+sub _rcv
+{
+    my $conn = shift; # $rcv_now complement of $flush
+       my $msg = shift;
+    my $sock = $conn->{sock};
+    return unless defined($sock);
+       return if $conn->{disconnecting};
+
+       if ($conn->{state} eq 'WL' && $conn->{sort} =~ /^I/ && $msg =~ /^PROXY/) {
+               my $echo = $conn->{echo};
+               $conn->{echo} = 0;
+               $conn->SUPER::_rcv($msg);
+               $conn->{echo} = $echo;
+       } else {
+               $conn->SUPER::_rcv($msg);
+       }
+}
+
 sub dequeue
 {
        my $conn = shift;
@@ -89,6 +109,8 @@ sub dequeue
                } else {
                        $conn->{msg} =~ s/([^\cM\cJ]*)\cM?\cJ//g;
                }
+               $conn->{linesin} += @lines;
+               $Msg::total_lines_in += @lines;
                while (defined ($msg = shift @lines)) {
                        dbg("connect $conn->{cnum}: $msg") if $conn->{state} ne 'C' && isdbg('connect');
                
@@ -112,12 +134,13 @@ sub dequeue
                                                $conn->disconnect;
                                        }
                                } elsif (is_callsign($msg)) {
+                                       my $call = normalise_call($msg);
                                        if ($main::allowslashcall || $msg !~ m|/|) {
                                                my $sort = $conn->{csort};
                                                $sort = 'local' if $conn->{peerhost} =~ /127\.\d+\.\d+\.\d+$/ || $conn->{peerhost} eq '::1';
                                                my $uref;
-                                               if ($main::passwdreq || ($uref = DXUser::get_current($msg)) && $uref->passwd ) {
-                                                       $conn->conns($msg);
+                                               if ($main::passwdreq || ($uref = DXUser::get_current($call)) && $uref->passwd ) {
+                                                       $conn->conns($call);
                                                        $conn->{state} = 'WP';
                                                        $conn->{decho} = $conn->{echo};
                                                        $conn->{echo} = 0;
@@ -182,7 +205,7 @@ sub new_client {
        $conn->_send_file(localdata("issue"));
        $conn->send_raw("login: ");
        $conn->_dotimeout(60);
-       $conn->{echo} = 1;
+#      $conn->{echo} = 1;
 }
 
 sub start_connect
@@ -282,7 +305,7 @@ sub _dotimeout
        dbg("connect $conn->{cnum}: timeout set to $val") if isdbg('connect');
        $conn->{timeout}->del if $conn->{timeout};
        $conn->{timeval} = $val;
-       $conn->{timeout} = Timer->new($val, sub{ &_timedout($conn) });
+       $conn->{timeout} = DXTimer->new($val, sub{ &_timedout($conn) });
 }
 
 sub _dolineend