add node to call in tell_login and tell_buddies.
[spider.git] / perl / DXProt.pm
index c056db9706e72ff1f6abb708d00855a0524e04fe..8a672744b45395c7a02450910780cabcea03253c 100644 (file)
@@ -82,7 +82,7 @@ $handle_xml = 0;                              # handle XML sentences
 @checklist = 
 (
  [ qw(i c c m bp bc c) ],                      # pc10
- [ qw(i f bm d t m c c h) ],           # pc11
+ [ qw(i f m d t m c c h) ],            # pc11
  [ qw(i c bm m bm bm p h) ],           # pc12
  [ qw(i c h) ],                                        # 
  [ qw(i c h) ],                                        # 
@@ -477,6 +477,18 @@ sub handle_11
                        
        # rsfp check
        #                       return if $rspfcheck and !$self->rspfcheck(1, $_[7], $_[6]);
+       
+       # is the spotted callsign blank? This should really be trapped earlier but it
+       # could break other protocol sentences. Also check for lower case characters.
+       if ($_[2] =~ /^\s*$/) {
+               dbg("PCPROT: blank callsign, dropped") if isdbg('chanerr');
+               return;
+       }
+       if ($_[2] =~ /[a-z]/) {
+               dbg("PCPROT: lowercase characters, dropped") if isdbg('chanerr');
+               return;
+       }
+
 
        # if this is a 'nodx' node then ignore it
        if ($badnode->in($_[7])) {
@@ -833,9 +845,12 @@ sub handle_16
                        push @rout, $parent->add_user($call, $flags);
                }
                
+               # send info to all logged in thingies
+               $self->tell_login('loginu', "$ncall: $call") if DXUser->get_current($ncall)->is_local_node;
+               $self->tell_buddies('loginb', "$ncall: $call");
                                
                # add this station to the user database, if required
-               $call =~ s/-\d+$//o;    # remove ssid for users
+#              $call =~ s/-\d+$//o;    # remove ssid for users
                my $user = DXUser->get_current($call);
                $user = DXUser->new($call) if !$user;
                $user->homenode($parent->call) if !$user->homenode;
@@ -904,6 +919,10 @@ sub handle_17
                $parent = Route->new($ncall);  # throw away
        }
 
+       # send info to all logged in thingies
+       $self->tell_login('logoutu', "$ncall: $ucall") if DXUser->get_current($ncall)->is_local_node;
+       $self->tell_buddies('logoutb', "$ncall: $ucall");
+
        if (eph_dup($line)) {
                dbg("PCPROT: dup PC17 detected") if isdbg('chanerr');
                return;
@@ -1002,6 +1021,7 @@ sub handle_19
                                
                # check for sane parameters
                #                               $ver = 5000 if $ver eq '0000';
+               next unless $ver && $ver =~ /^\d+$/;
                next if $ver < 5000;    # only works with version 5 software
                next if length $call < 3; # min 3 letter callsigns
                next if $call eq $main::mycall;