$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
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) {
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)) {
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