X-Git-Url: http://dxcluster.net/gitweb/gitweb.cgi?a=blobdiff_plain;f=perl%2FDXProt.pm;h=52e7b3eda744774ad3e6f9ce673c4214d4e1faaa;hb=f811f3e99bb81aaeed8949cf56fe435181b0814f;hp=f72fe8903a37bbe5c1c17a201b99eb936e69b49c;hpb=9685d27bb27511ec2409f323096c68a3b25156fd;p=spider.git diff --git a/perl/DXProt.pm b/perl/DXProt.pm index f72fe890..52e7b3ed 100644 --- a/perl/DXProt.pm +++ b/perl/DXProt.pm @@ -275,10 +275,8 @@ sub normal # print join(',', @field), "\n"; - # ignore any lines that don't start with PC - return if !$field[0] =~ /^PC/; - # process PC frames + # process PC frames, this will fail unless the frame starts PCnn my ($pcno) = $field[0] =~ /^PC(\d\d)/; # just get the number return unless $pcno; return if $pcno < 10 || $pcno > 99; @@ -785,16 +783,23 @@ sub normal if ($pcno == 24) { # set here status my $call = uc $field[1]; - my $ref = Route::Node::get($call); - $ref->here($field[2]) if $ref; - $ref = Route::User::get($call); - $ref->here($field[2]) if $ref; - $ref ||= Route->new($call); + my ($nref, $uref); + $nref = Route::Node::get($call); + $uref = Route::User::get($call); + return unless $nref || $uref; # if we don't know where they are, it's pointless sending it on - # input filter if required - return unless $self->in_filter_route($ref); - - $self->route_pc24($ref, $field[3]) if $ref && !eph_dup($line); + unless (eph_dup($line)) { + if ($nref) { + $nref->here($field[2]); + return unless $self->in_filter_route($nref); + $self->route_pc24($nref, $field[3]) + } + if ($uref) { + $uref->here($field[2]); + return unless $self->in_filter_route($uref); + $self->route_pc24($uref, $field[3]); + } + } return; } @@ -1449,7 +1454,7 @@ sub send_local_config # and are not themselves isolated, this to make sure that isolated nodes # don't appear outside of this node my @dxchan = grep { $_->call ne $main::mycall && $_->call ne $self->{call} } DXChannel::get_all_nodes(); - @localnodes = map { Route::Node::get($_->{call}) or die "connot find node $_->{call}" } @dxchan if @dxchan; + @localnodes = map { my $r = Route::Node::get($_->{call}); $r ? $r : () } @dxchan if @dxchan; my @intcalls = map { $_->nodes } @localnodes if @localnodes; my $ref = Route::Node::get($self->{call}); my @rnodes = $ref->nodes;