X-Git-Url: http://dxcluster.org/gitweb/gitweb.cgi?a=blobdiff_plain;f=perl%2FDXProtHandle.pm;h=f7f8d0742eb8ecb3ac9090c33be3787ffe8f4c9c;hb=c32170b5b05416143021fb165a27072ce861350b;hp=7db433e5205f8273c6a00bc5d7f9fbc624a0147f;hpb=f4c54c5174d50224a745d5ed71ad1563a9440083;p=spider.git diff --git a/perl/DXProtHandle.pm b/perl/DXProtHandle.pm index 7db433e5..f7f8d074 100644 --- a/perl/DXProtHandle.pm +++ b/perl/DXProtHandle.pm @@ -45,6 +45,7 @@ use vars qw($pc11_max_age $pc23_max_age $last_pc50 $eph_restime $eph_info_restim $allowzero $decode_dk0wcy $send_opernam @checklist $eph_pc15_restime $pc9x_past_age $pc9x_future_age $pc10_dupe_age $pc92_slug_changes $last_pc92_slug + $pc92Ain $pc92Cin $pc92Din $pc92Kin ); $pc9x_past_age = 62*60; # maximum age in the past of a px9x (a config record might be the only @@ -1559,7 +1560,7 @@ sub pc92_handle_first_slot } $parent->here(Route::here($here)); $parent->version($version || $pc19_version) if $version; - $parent->build($build) if $build && $build > $parent->build; + $parent->build($build) if $build; $parent->PC92C_dxchan($self->{call}) unless $self->{call} eq $parent->call; return ($parent, @radd); } @@ -1651,6 +1652,8 @@ sub handle_92 } } elsif ($sort eq 'K') { + $pc92Kin += length $line if $sort eq 'K'; + # remember the last channel we arrived on $parent->PC92C_dxchan($self->{call}) unless $self->{call} eq $parent->call; @@ -1668,24 +1671,21 @@ sub handle_92 } } elsif ($sort eq 'A' || $sort eq 'D' || $sort eq 'C') { + $pc92Ain += length $line if $sort eq 'A'; + $pc92Cin += length $line if $sort eq 'C'; + $pc92Din += length $line if $sort eq 'D'; + # remember the last channel we arrived on $parent->PC92C_dxchan($self->{call}) unless $self->{call} eq $parent->call; # this is the main route section # here is where all the routes are created and destroyed - # cope with missing duplicate node calls in the first slot for A or D + # cope with missing duplicate node calls in the first slot my $me = $_[4] || ''; - if (($sort eq 'A' || $sort eq 'D')) { - $me ||= _encode_pc92_call($parent) if !$me ; - } else { - unless ($me) { - dbg("PCPROT: this type of PC92 *must* have a node call in the first slot, ignored") if is_dbg('chanerr'); - return; - } - } + $me ||= _encode_pc92_call($parent) unless $me ; - my @ent = map {[ _decode_pc92_call($_) ]} grep {$_ && /^[0-7]/} $me, @_[5 .. $#_]; + my @ent = map {my @a = _decode_pc92_call($_); @a ? \@a : ()} grep {$_ && /^[0-7]/} $me, @_[5 .. $#_]; if (@ent) { @@ -1705,7 +1705,7 @@ sub handle_92 # do a pass through removing any references to either locally connected nodes or mycall my @nent; for (@ent) { - next unless $_; + next unless $_ && @$_; if ($_->[0] eq $main::mycall || DXChannel::get($_->[0])) { dbg("PCPROT: $_->[0] refers to locally connected node, ignored") if isdbg('chanerr'); next;