dbg("ROUTE: broadcast_pc92_update $call") if isdbg('obscount');
my $nref = Route::Node::get($call);
+ unless ($nref) {
+ dbg("ERROR: broadcast_pc92_update - Route::Node $call disappeared");
+ return;
+ }
my $l = $nref->last_PC92C(gen_my_pc92_config($nref));
$main::me->broadcast_route_pc9x($main::mycall, undef, $l, 0);
$self->update_pc92_next($pc92_update_period);
# do routing stuff, remove me from routing table
my $node = Route::Node::get($call);
- my @rout;
- if ($node) {
- @rout = $node->del($main::routeroot);
-
- # and all my ephemera as well
- for (@rout) {
- my $c = $_->call;
- eph_del_regex("^PC1[679].*$c");
- }
- }
RouteDB::delete_interface($call);
my $mref = DXMsg::get_busy($call);
$mref->stop_msg($call) if $mref;
- # 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, $main::routeroot, $node) if $node;
- }
-
# remove outstanding pings
delete $pings{$call};
Log('DXProt', $call . " Disconnected");
$self->SUPER::disconnect;
+
+ # here we determine what needs to go out of the routing table
+ my @rout;
+ if ($node) {
+ dbg('%Route::Node::List = ' . join(',', sort keys %Route::Node::list)) if isdbg('routedisc');
+
+ @rout = $node->del($main::routeroot);
+
+ dbg('@rout = ' . join(',', sort map {$_->call} @rout)) if isdbg('routedisc');
+
+ # now we need to see what can't be routed anymore and came
+ # in via this node (probably).
+ my $n = 0;
+ while ($n != @rout) {
+ $n = @rout;
+ for (Route::Node::get_all()) {
+ unless ($_->dxchan) {
+ push @rout, $_->delete;
+ }
+ }
+ dbg('@rout = ' . join(',', sort map {$_->call} @rout)) if isdbg('routedisc');
+ }
+
+ dbg('%Route::Node::List = ' . join(',', sort keys %Route::Node::list)) if isdbg('routedisc');
+
+ # and all my ephemera as well
+ for (@rout) {
+ my $c = $_->call;
+ eph_del_regex("^PC1[679].*$c");
+ }
+ }
+
+ # 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, $main::routeroot, $node) if $node;
+ }
}
Log('ann', $target, $main::mycall, $text);
$main::me->normal(DXProt::pc93($target, $main::mycall, $via, $text));
} else {
- $main::me->send_chats($target, $text);
+ DXCommandmode::send_chats($main::me, $target, $text);
}
}
}