X-Git-Url: http://gb7djk.dxcluster.net/gitweb/gitweb.cgi?a=blobdiff_plain;f=perl%2FDXProt.pm;h=3ec113276691965301e3ed6f536c2da33cfb9822;hb=c004658d7d35fc317ae52e40a5280aa067eac6b7;hp=1094578e61e08429ab4df159c237c75c2720708f;hpb=ed6790555f077eb521b8805113155a2ff99cc47e;p=spider.git diff --git a/perl/DXProt.pm b/perl/DXProt.pm index 1094578e..3ec11327 100644 --- a/perl/DXProt.pm +++ b/perl/DXProt.pm @@ -365,6 +365,7 @@ sub normal $hops--; return if $hops < 0; $line =~ s/\^H(\d+)(\^?\~?)?$/sprintf('^H%d%s', $hops, $trail)/e; + $field[-1] = "H$hops"; } # send it out for processing @@ -768,11 +769,26 @@ sub send_pc92_config my $node; dbg('DXProt::send_pc92_config') if isdbg('trace'); - + + # send 'my' configuration for all users and pc92 capable nodes my @dxchan = grep { $_->call ne $main::mycall && $_ != $self && !$_->{isolate} } DXChannel::get_all(); - my @localnodes = map { my $r = Route::get($_->{call}); $r ? $r : () } @dxchan if @dxchan; - $self->send_route_pc92($main::mycall, \&pc92c, scalar @localnodes, @localnodes); -} + my @localnodes = map { my $r = Route::Node::get($_->{call}); $r ? $r : () } @dxchan; +# push @localnodes, map { my $r = Route::Node::get($_->{call}); $r ? $r : () } DXChannel::get_all_users(); + $self->send_route_pc92($main::mycall, \&pc92c, (scalar @localnodes)+1, $main::routeroot, @localnodes); + + # send the configuration of all the 'external' nodes that don't handle PC92 + # out with the 'external' marker on the first node. + @dxchan = grep { $_->call ne $main::mycall && $_ != $self && !$_->{isolate} && !$_->{do_pc92} } DXChannel::get_all_nodes(); + @localnodes = map { my $r = Route::Node::get($_->{call}); $r ? $r : () } @dxchan; + foreach $node (@localnodes) { + if ($node) { + my @rout = map {my $r = Route::User::get($_); $r ? ($r) : ()} $node->users; + $self->send_route_pc92($main::mycall, \&pc92c, 1, $node, @rout) if @rout; + } else { + dbg("sent a null value") if isdbg('chanerr'); + } + } +} # # route a message down an appropriate interface for a callsign @@ -1012,7 +1028,7 @@ sub disconnect # broadcast to all other nodes that all the nodes connected to via me are gone unless ($pc39flag && $pc39flag == 2) { $self->route_pc21($main::mycall, undef, @rout) if @rout; - $self->route_pc92d($main::mycall, undef, $node); + $self->route_pc92d($main::mycall, undef, $main::routeroot, $node) if $node; } # remove outstanding pings @@ -1145,7 +1161,7 @@ sub broadcast_route_pc9x $line = &$generate(@_); } - $line =~ /\^H(\d+)\^$/; + $line =~ /\^H(\d+)\^\~?$/; unless ($1 > 0 && $self->{isolate}) { foreach $dxchan (@dxchan) { next if $dxchan == $self;