X-Git-Url: http://scm.dxcluster.org/gitweb/gitweb.cgi?a=blobdiff_plain;f=perl%2FDXProtHandle.pm;h=5e3f0597d9405d2279ad1d7fab742a3da36b39ff;hb=387b0fecfd3b200cb9c6094103954c2c0ebad7c6;hp=7d2968cedb626ccdc85be4a3e656eacdade0da57;hpb=3065f0dd2c80cd59b7a2b17d397a343b6521b1f4;p=spider.git diff --git a/perl/DXProtHandle.pm b/perl/DXProtHandle.pm index 7d2968ce..5e3f0597 100644 --- a/perl/DXProtHandle.pm +++ b/perl/DXProtHandle.pm @@ -46,7 +46,8 @@ use vars qw($pc11_max_age $pc23_max_age $last_pc50 $eph_restime $eph_info_restim $eph_pc15_restime $pc9x_past_age $pc9x_future_age ); -$pc9x_past_age = 15*60; # maximum age in the past of a px9x +$pc9x_past_age = 62*60; # maximum age in the past of a px9x (a config record might be the only + # thing a node might send - once an hour) $pc9x_future_age = 5*60; # maximum age in the future ditto # incoming talk commands @@ -1422,14 +1423,19 @@ sub check_pc9x_t if ($parent->call ne $main::mycall) { my $lastid = $parent->lastid->{$pc} || 0; if ($t < $lastid) { - if ($lastid-86400+$t > $pc9x_past_age) { - dbg("PCPROT: dup id on $t <= $lastid (midnight rollover), ignored") if isdbg('chanerr'); + if ($t+86400-$lastid > $pc9x_past_age) { + dbg("PCPROT: dup id on $t <= $lastid, ignored") if isdbg('chanerr'); return; } - } - if ($lastid >= $t) { - dbg("PCPROT: dup id on $call $lastid >= $t, ignored") if isdbg('chanerr'); + } elsif ($t == $lastid) { + dbg("PCPROT: dup id on $t == $lastid, ignored") if isdbg('chanerr'); return; + } else { + # $t > $lastid, check that the timestamp offered isn't too far away from 'now' + if ($t+$main::systime_daystart-$main::systime > $pc9x_future_age ) { + dbg("PCPROT: id $t too far in the future, ignored") if isdbg('chanerr'); + return; + } } } } elsif ($create) { @@ -1554,12 +1560,14 @@ sub handle_92 dbg("PCPROT: $call looped back onto $main::mycall, ignored") if isdbg('chanerr'); return; } + # this is only accepted from my "self". + # this also kills configs from PC92 nodes with external PC19 nodes that are also + # locally connected. Local nodes always take precedence. + if (DXChannel::get($call) && $call ne $self->{call}) { + dbg("PCPROT: locally connected node $call from other another node $self->{call}, ignored") if isdbg('chanerr'); + return; + } if ($is_extnode) { - # this is only accepted from my "self" - if (DXChannel::get($call) && $call ne $self->{call}) { - dbg("PCPROT: locally connected node config for $call from other another node $self->{call}, ignored") if isdbg('chanerr'); - return; - } # reparent to external node (note that we must have received a 'C' or 'A' record # from the true parent node for this external before we get one for the this node unless ($parent = Route::Node::get($call)) { @@ -1758,7 +1766,7 @@ sub handle_93 my $wx = uc $to eq 'WX' ? '1' : '0'; my $local = $via eq 'LOCAL' ? '*' : $via; - $self->send_announce(1, pc12($from, $text, $local, $via, $sysop, $wx, $pcall), $from, $local, $text, $sysop, $pcall, $wx, $via eq 'LOCAL' ? $via : undef); + $self->send_announce(1, pc12($from, $text, $local, $sysop, $wx, $pcall), $from, $local, $text, $sysop, $pcall, $wx, $via eq 'LOCAL' ? $via : undef); return if $via eq 'LOCAL'; } else { # chat messages to non-pc9x nodes