X-Git-Url: http://scm.dxcluster.org/gitweb/gitweb.cgi?a=blobdiff_plain;ds=sidebyside;f=perl%2FDXProtHandle.pm;h=df2957a18e5b5c699be7b2e6c042b0cab4cd2e86;hb=ad7e69f78ee4c0593e1d7576a7c1fd3b13931f84;hp=9e5d249f33e9af00fed07ce032c3be65b4aafbab;hpb=7e4d1632dbe6cb79a43e4954919c6744513fed56;p=spider.git diff --git a/perl/DXProtHandle.pm b/perl/DXProtHandle.pm index 9e5d249f..df2957a1 100644 --- a/perl/DXProtHandle.pm +++ b/perl/DXProtHandle.pm @@ -37,6 +37,9 @@ use RouteDB; use strict; +use vars qw($VERSION $BRANCH); +($VERSION, $BRANCH) = dxver(q$Revision$); + use vars qw($pc11_max_age $pc23_max_age $last_pc50 $eph_restime $eph_info_restime $eph_pc34_restime $last_hour $last10 %eph %pings %rcmds $ann_to_talk $pingint $obscount %pc19list $chatdupeage $chatimportfn @@ -491,7 +494,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 +649,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 +735,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 +764,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 +835,8 @@ sub handle_22 my $origin = shift; $self->state('normal'); $self->{lastping} = 0; + + $self->send_delayed_pc92 } # WWV info @@ -1264,7 +1285,7 @@ sub _decode_pc92_call my $icall = shift; my @part = split /:/, $icall; my ($flag, $call) = unpack "A A*", $part[0]; - return () unless $flag && $flag ge '0' && $flag le '7'; + return () unless defined $flag && $flag ge '0' && $flag le '7'; return () unless $call && is_callsign($call); my $is_node = $flag & 4; my $is_extnode = $flag & 2;