X-Git-Url: http://dxcluster.net/gitweb/gitweb.cgi?a=blobdiff_plain;f=perl%2FDXProt.pm;h=c039659bd96dbfab15373c542cf92578f449e503;hb=1479f550842390ca770899e5cf1c6ce79087fe82;hp=32d5e3b381933292e90cd502f7dc569773e86c59;hpb=6f9f47b53d1b6c2a52722b525695fa1c03ab1ed7;p=spider.git diff --git a/perl/DXProt.pm b/perl/DXProt.pm index 32d5e3b3..c039659b 100644 --- a/perl/DXProt.pm +++ b/perl/DXProt.pm @@ -318,6 +318,8 @@ sub normal # add it to the node table if it isn't present and it's # connected locally $node = DXNode->new($dxchan, $field[1], 0, 1, 5400); + broadcast_ak1a(pc19($dxchan, $node), $dxchan, $self) unless $dxchan->{isolate}; + } return unless $node; # ignore if havn't seen a PC19 for this one yet return unless $node->isa('DXNode'); @@ -358,13 +360,20 @@ sub normal if ($pcno == 17) { # remove a user my $node = DXCluster->get_exact($field[2]); + my $dxchan; + if (!$node && ($dxchan = DXChannel->get($field[2]))) { + # add it to the node table if it isn't present and it's + # connected locally + $node = DXNode->new($dxchan, $field[2], 0, 1, 5400); + broadcast_ak1a(pc19($dxchan, $node), $dxchan, $self) unless $dxchan->{isolate}; + return; + } return unless $node; return unless $node->isa('DXNode'); if ($node->dxchan != $self) { dbg('chan', "LOOP: $field[2] came in on wrong channel"); return; } - my $dxchan; if (($dxchan = DXChannel->get($field[2])) && $dxchan != $self) { dbg('chan', "LOOP: $field[2] connected locally"); return;