X-Git-Url: http://scm.dxcluster.org/gitweb/gitweb.cgi?a=blobdiff_plain;ds=sidebyside;f=perl%2FDXProt.pm;h=ebc23561dae10ac0c7cf4760836870b96b01cbd9;hb=129b45395239f73e39ccb5f251e492bbdecb47e2;hp=78e0e0d1262a984052057cd3f872bf546b358394;hpb=3eb722692c2c1e9de84752391d5b6330e062c7e6;p=spider.git diff --git a/perl/DXProt.pm b/perl/DXProt.pm index 78e0e0d1..ebc23561 100644 --- a/perl/DXProt.pm +++ b/perl/DXProt.pm @@ -149,7 +149,13 @@ sub normal my ($pcno) = $field[0] =~ /^PC(\d\d)/; # just get the number return unless $pcno; return if $pcno < 10 || $pcno > 51; - + + # dump bad protocol messages unless it is a PC29 + if ($line =~ /\%[0-9A-F][0-9A-F]/o && $pcno != 29) { + dbg('chan', "CORRUPT protocol message - dumped"); + return; + } + # local processing 1 my $pcr; eval { @@ -220,6 +226,12 @@ sub normal dbg('chan', "Bad DX spot, ignored"); return; } + + # are any of the crucial fields invalid? + if ($field[2] =~ /[a-z]/ || $field[6] =~ /[a-z]/ || $field[7] =~ /[a-z]/) { + dbg('chan', "Spot contains lower case callsigns, rejected"); + return; + } my @spot = Spot::add($freq, $field[2], $d, $text, $spotter, $field[7]); @@ -421,7 +433,7 @@ sub normal # unbusy and stop and outgoing mail (ie if somehow we receive another PC19 without a disconnect) my $mref = DXMsg::get_busy($call); - $mref->stop_msg($self) if $mref; + $mref->stop_msg($call) if $mref; # add this station to the user database, if required (don't remove SSID from nodes) my $user = DXUser->get_current($call); @@ -437,8 +449,6 @@ sub normal $user->put; } - # queue up any messages - DXMsg::queue_msg(0) if $self->state eq 'normal'; return if $newline eq "PC19^"; # add hop count @@ -451,10 +461,6 @@ sub normal $self->send_local_config(); $self->send(pc22()); $self->state('normal'); - - # queue mail - DXMsg::queue_msg(0); - return; } @@ -483,12 +489,9 @@ sub normal if ($pcno == 22) { $self->state('normal'); - - # queue mail - DXMsg::queue_msg(0); return; } - + if ($pcno == 23 || $pcno == 27) { # WWV info # route 'foreign' pc27s @@ -772,7 +775,7 @@ sub finish # unbusy and stop and outgoing mail my $mref = DXMsg::get_busy($call); - $mref->stop_msg($self) if $mref; + $mref->stop_msg($call) if $mref; # broadcast to all other nodes that all the nodes connected to via me are gone my @gonenodes = map { $_->dxchan == $self ? $_ : () } DXNode::get_all();