X-Git-Url: http://dxcluster.net/gitweb/gitweb.cgi?a=blobdiff_plain;f=perl%2FDXProt.pm;h=d9b03a907d1768420574dcb9ffb51e19266cc983;hb=0e84728de35d2dadbb9d624614a471b68ae9eef6;hp=b2978b5c330110f3eb4d9d757867ee602d277749;hpb=3ebd2e180d7315ffd9a2c0eaed558238b6c6bed3;p=spider.git diff --git a/perl/DXProt.pm b/perl/DXProt.pm index b2978b5c..d9b03a90 100644 --- a/perl/DXProt.pm +++ b/perl/DXProt.pm @@ -24,6 +24,7 @@ use DXProtout; use DXDebug; use Filter; use Local; +use DXDb; use Carp; @@ -267,7 +268,7 @@ sub normal if ($pcno == 12) { # announces # announce duplicate checking my $text = substr(uc unpad($field[3]), 0, $pc12_dup_lth); - my $dupkey = $field[1].$field[2].$text.$field[4].$field[6]; + my $dupkey = $field[1].$field[2].$text; if ($anndup{$dupkey}) { dbg('chan', "Duplicate Announce ignored\n"); return; @@ -291,7 +292,7 @@ sub normal if ($decode_dk0wcy && $field[1] eq $decode_dk0wcy) { my ($hour, $k, $next, $a, $r, $sfi, $alarm) = $field[3] =~ /^Aurora Beacon\s+(\d+)UTC,\s+Kiel\s+K=(\d+),.*ed\s+K=(\d+),\s+A=(\d+),\s+R=(\d+),\s+SFI=(\d+),.*larm:\s+(\w+)/; $alarm = ($alarm =~ /^Y/i) ? ', Aurora in DE' : ''; - my $wwv = Geomag::update($main::systime, $hour, $sfi, $a, $k, "R=$r, Next K=$next$alarm", $decode_dk0wcy, $field[5], $r); + my $wwv = Geomag::update($main::systime, $hour, $sfi, $a, $k, "R=$r, Next K=$next$alarm", $decode_dk0wcy, $field[5], $r) if $sfi && $r; } } else { @@ -670,11 +671,7 @@ sub normal last SWITCH; } if ($pcno == 37 || $pcno == 44 || $pcno == 45 || $pcno == 46 || $pcno == 47) { - if ($field[1] eq $main::mycall) { - ; - } else { - $self->route($field[1], $line); - } + DXDb::process($self, $line); return; } @@ -699,9 +696,11 @@ sub normal # it's a reply, look in the ping list for this one my $ref = $pings{$field[2]}; if ($ref) { - my $r = shift @$ref; - my $dxchan = DXChannel->get($r->{call}); - $dxchan->send($dxchan->msg('pingi', $field[2], atime($main::systime), $main::systime - $r->{t})) if $dxchan; + while (@$ref) { + my $r = shift @$ref; + my $dxchan = DXChannel->get($r->{call}); + $dxchan->send($dxchan->msg('pingi', $field[2], atime($main::systime), $main::systime - $r->{t})) if $dxchan; + } } } @@ -721,7 +720,7 @@ sub normal # REBROADCAST!!!! # - if (!$self->{isolate}) { + unless ($self->{isolate}) { broadcast_ak1a($line, $self); # send it to everyone but me } } @@ -744,7 +743,7 @@ sub process if ($t >= $dxchan->pc50_t + $DXProt::pc50_interval) { $dxchan->send(pc50()); $dxchan->pc50_t($t); - } + } } my $key; @@ -1006,7 +1005,10 @@ sub route my ($self, $call, $line) = @_; my $cl = DXCluster->get_exact($call); if ($cl) { # don't route it back down itself - return if ref $self && $call eq $self->{call}; + if (ref $self && $call eq $self->{call}) { + dbg('chan', "Trying to route back to source, dropped"); + return; + } my $hops; my $dxchan = $cl->{dxchan}; if ($dxchan) {