X-Git-Url: http://gb7djk.dxcluster.net/gitweb/gitweb.cgi?a=blobdiff_plain;f=perl%2FDXProtHandle.pm;h=d7350f4e60a678f4f3d35846f8ce3943a5250d4b;hb=c0b8fc3a5577205c33e9fe59ee18d9d020c845e1;hp=59c1351cd274666de7ee561961c6dc2335394f5c;hpb=4e9daf652dc564582a7c4d663de9764f3e79ae9b;p=spider.git diff --git a/perl/DXProtHandle.pm b/perl/DXProtHandle.pm index 59c1351c..d7350f4e 100644 --- a/perl/DXProtHandle.pm +++ b/perl/DXProtHandle.pm @@ -491,7 +491,7 @@ sub handle_16 } if (@rout) { $self->route_pc16($origin, $line, $parent, @rout); - $self->route_pc92a($main::mycall, undef, $parent, @rout); + $self->route_pc92a($main::mycall, undef, $parent, @rout) if $self->{state} eq 'normal'; } } @@ -646,7 +646,8 @@ sub handle_19 # The justification for this is that most of it is wrong or out of date # anyway. # - # From now on we are only going to believe PC92 data. + # From now on we are only going to believe PC92 data and locally connected + # non-pc92 nodes. # for ($i = 1; $i < $#_-1; $i += 4) { my $here = $_[$i]; @@ -731,10 +732,24 @@ sub handle_19 if (@rout) { $self->route_pc21($self->{call}, $line, @rout); $self->route_pc19($self->{call}, $line, @rout); - $self->route_pc92a($main::mycall, $line, $main::routeroot, @rout); + $self->route_pc92a($main::mycall, $line, $main::routeroot, @rout) if $self->{state} eq 'normal'; } } +sub send_delayed_pc92 +{ + my $self = shift; + + # send out delayed PC92 config for this node if it is external + unless ($self->{do_pc92}) { + my $node = Route::Node::get($self->{call}); + if ($node) { + my @rout = map {my $r = Route::User::get($_); $r ? ($r) : ()} $node->users; + $self->route_pc92c($main::mycall, undef, $node, @rout); + } + } +} + # send local configuration sub handle_20 { @@ -746,6 +761,7 @@ sub handle_20 $self->send(pc22()); $self->state('normal'); $self->{lastping} = 0; + $self->send_delayed_pc92; } # delete a cluster from the list @@ -816,6 +832,8 @@ sub handle_22 my $origin = shift; $self->state('normal'); $self->{lastping} = 0; + + $self->send_delayed_pc92 } # WWV info @@ -1475,12 +1493,10 @@ sub handle_92 $self->route_pc21($pcall, undef, $r) if $r->isa('Route::Node'); $self->route_pc17($pcall, undef, $parent, $r) if $r->isa('Route::User'); } - foreach my $r (@radd) { - next unless $r; - - $self->route_pc19($pcall, undef, $r) if $r->isa('Route::Node'); - $self->route_pc16($pcall, undef, $parent, $r) if $r->isa('Route::User'); - } + my @pc19 = grep { $_ && $_->isa('Route::Node') } @radd; + my @pc16 = grep { $_ && $_->isa('Route::User') } @radd; + $self->route_pc19($pcall, undef, @pc19) if @pc19; + $self->route_pc16($pcall, undef, $parent, @pc16) if @pc16; } # if get here then rebroadcast the thing with its Hop count decremented (if