X-Git-Url: http://dxcluster.net/gitweb/gitweb.cgi?a=blobdiff_plain;f=perl%2FDXProt.pm;h=53ca8ea37131662cbc0e3583e510c240eace6905;hb=9b47e7023d41616a9efa885ef9338277dc2ab851;hp=c056db9706e72ff1f6abb708d00855a0524e04fe;hpb=cea55a2faa24cd58756e48a54b5e00e43a16bbae;p=spider.git diff --git a/perl/DXProt.pm b/perl/DXProt.pm index c056db97..53ca8ea3 100644 --- a/perl/DXProt.pm +++ b/perl/DXProt.pm @@ -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', $call, $ncall); # 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', $ucall, $ncall); + 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;