X-Git-Url: http://dxcluster.org/gitweb/gitweb.cgi?a=blobdiff_plain;f=perl%2FDXProtHandle.pm;h=fc05280a92afd22317cce66601e064478fcd3caf;hb=b953903f1c33ae35ce24bad344e46ab17b0b5d95;hp=26781885eb318f38292b2a9d1858c6549614ddc1;hpb=db0959118b4c5045e842cf07c399e2924bd6ca10;p=spider.git diff --git a/perl/DXProtHandle.pm b/perl/DXProtHandle.pm index 26781885..fc05280a 100644 --- a/perl/DXProtHandle.pm +++ b/perl/DXProtHandle.pm @@ -1339,7 +1339,7 @@ sub gen_pc9x_t if (!$_last_time || $_last_time != $main::systime) { $_last_time = $main::systime; $_last_occurs = 0; - return $_last_time; + return $_last_time - $main::systime_daystart; } else { $_last_occurs++; return sprintf "$_last_time.%02d", $_last_occurs; @@ -1356,10 +1356,12 @@ sub check_pc9x_t my $parent = ref $call ? $call : Route::Node::get($call); if ($parent) { my $lastid = $parent->lastid->{$pc} || 0; + $t += 86400 if $t < $lastid - 43200; if ($lastid >= $t) { dbg("PCPROT: dup / old id on $call <= $lastid, ignored") if isdbg('chanerr'); return; } + $t -= 86400 if $t >= 86400; } elsif ($create) { $parent = Route::Node->new($call); } @@ -1394,6 +1396,7 @@ sub handle_92 } my $parent = check_pc9x_t($pcall, $t, 92, 1); + return unless $parent; $parent->lastid->{92} = $t; $parent->do_pc92(1); @@ -1404,6 +1407,10 @@ sub handle_92 # and update any information that needs to be done. my ($call, $is_node, $is_extnode, $here, $version, $build) = _decode_pc92_call($ent[0]); if ($call && $is_node) { + if ($call eq $main::mycall) { + dbg("PCPROT: looped back on node entry, ignored") if isdbg('chanerr'); + return; + } if ($is_extnode) { # 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