$last_hour $last10 %eph %pings %rcmds $ann_to_talk
$pingint $obscount %pc19list $chatdupeage $chatimportfn
$investigation_int $pc19_version $myprot_version
- %nodehops $baddx $badspotter $badnode $censorpc $rspfcheck
+ %nodehops $baddx $badspotter $badnode $censorpc
$allowzero $decode_dk0wcy $send_opernam @checklist
$eph_pc15_restime $pc92_update_period $pc92_obs_timeout
%pc92_find $pc92_find_timeout $pc92_short_update_period
$badnode = new DXHash "badnode";
$last10 = $last_pc50 = time;
$ann_to_talk = 1;
-$rspfcheck = 1;
-$eph_restime = 180;
+$eph_restime = 60;
$eph_info_restime = 60*60;
$eph_pc15_restime = 6*60;
$eph_pc34_restime = 30;
# 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);
}
}
}