X-Git-Url: http://dxcluster.org/gitweb/gitweb.cgi?a=blobdiff_plain;f=perl%2FDXProt.pm;h=aa848eb72eabca27461d215621a02f46e95db387;hb=7bba989c01312790704a42153bbd87bcbb3f084e;hp=4bdb307fe49b589c5bd367fae12d66f4afceb552;hpb=d99e357e5203c7742b57c51b7c2dd103c1836c01;p=spider.git diff --git a/perl/DXProt.pm b/perl/DXProt.pm index 4bdb307f..aa848eb7 100644 --- a/perl/DXProt.pm +++ b/perl/DXProt.pm @@ -178,6 +178,14 @@ sub normal } if ($pcno == 11 || $pcno == 26) { # dx spot + + # route 'foreign' pc26s + if ($pcno == 26) { + if ($field[7] ne $main::mycall) { + route($field[7], $line); + return; + } + } # if this is a 'nodx' node then ignore it last SWITCH if grep $field[7] =~ /^$_/, @DXProt::nodx_node; @@ -305,8 +313,8 @@ sub normal if ($pcno == 16) { # add a user my $node = DXCluster->get_exact($field[1]); - last SWITCH if !$node; # ignore if havn't seen a PC19 for this one yet - last SWITCH unless $node->isa('DXNode'); + return unless $node; # ignore if havn't seen a PC19 for this one yet + return unless $node->isa('DXNode'); if ($node->dxchan != $self) { dbg('chan', "LOOP: come in on wrong channel"); return; @@ -341,7 +349,8 @@ sub normal if ($pcno == 17) { # remove a user my $node = DXCluster->get_exact($field[2]); - last SWITCH unless $node->isa('DXNode'); + return unless $node; + return unless $node->isa('DXNode'); if ($node->dxchan != $self) { dbg('chan', "LOOP: come in on wrong channel"); return; @@ -367,12 +376,12 @@ sub normal my $ver = $field[$i+3]; # now check the call over - my $node = DXCluster->get_exact($call); # we already have this + my $node = DXCluster->get_exact($call); if ($node && $node->dxchan != $self) { dbg('chan', "LOOP: come in on wrong channel"); return; } - next if $node; + next if $node; # we already have this # check for sane parameters next if $ver < 5000; # only works with version 5 software @@ -440,6 +449,15 @@ sub normal } if ($pcno == 23 || $pcno == 27) { # WWV info + + # route 'foreign' pc27s + if ($pcno == 27) { + if ($field[8] ne $main::mycall) { + route($field[8], $line); + return; + } + } + # do some de-duping my $d = cltounix($field[1], sprintf("%02d18Z", $field[2])); my $sfi = unpad($field[3]); @@ -494,7 +512,7 @@ sub normal my @in = reverse Spot::search(1, undef, undef, 0, $field[3]-1); my $in; foreach $in (@in) { - $self->send(pc26(@{$in}[0..4], $in->[7])); + $self->send(pc26(@{$in}[0..4], $field[2])); } } @@ -503,14 +521,18 @@ sub normal my @in = reverse Geomag::search(0, $field[4], time, 1); my $in; foreach $in (@in) { - $self->send(pc27(@{$in})); + $self->send(pc27(@{$in}[0..5], $field[2])); } } return; } - + if (($pcno >= 28 && $pcno <= 33) || $pcno == 40 || $pcno == 42 || $pcno == 49) { # mail/file handling - DXMsg::process($self, $line); + if ($field[1] eq $main::mycall) { + DXMsg::process($self, $line); + } else { + route($field[1], $line); + } return; } @@ -558,10 +580,8 @@ sub normal return; } - if ($pcno == 37) { - last SWITCH; - } - + # for pc 37 see 44 onwards + if ($pcno == 38) { # node connected list from neighbour return; } @@ -598,25 +618,21 @@ sub normal if ($pcno == 43) { last SWITCH; } - if ($pcno == 44) { - last SWITCH; - } - if ($pcno == 45) { - last SWITCH; - } - if ($pcno == 46) { - last SWITCH; - } - if ($pcno == 47) { - last SWITCH; - } - if ($pcno == 48) { - last SWITCH; + if ($pcno == 37 || $pcno == 44 || $pcno == 45 || $pcno == 46 || $pcno == 47 || $pcno == 49) { + if ($field[1] eq $main::mycall) { + ; + } else { + route($field[1], $line); + } + return; } if ($pcno == 50) { # keep alive/user list - my $ref = DXCluster->get_exact($field[1]); - $ref->update_users($field[2]) if $ref; + my $node = DXCluster->get_exact($field[1]); + if ($node) { + return unless $node->dxchan == $self; + $node->update_users($field[2]); + } last SWITCH; }