+20Nov00=======================================================================
+1. added even more checking to PC16,17 and 39
19Nov00=======================================================================
1. improve reaping code a bit more.
2. put some extra checking in the PC16,17,19,21 code.
# broadcast_ak1a(pc19($dxchan, $node), $dxchan, $self) unless $dxchan->{isolate};
}
- return unless $node; # ignore if havn't seen a PC19 for this one yet
+ if ($field[2] eq $main::mycall || $field[2] eq $main::myalias || $field[1] eq $main::myalias || $field[1] eq $main::mycall) {
+ dbg('chan', "LOOP: trying to connect myself!");
+ return;
+ }
+ unless ($node) {
+ dbg('chan', "Node $field[1] not in config");
+ return;
+ }
unless ($node->isa('DXNode')) {
dbg('chan', "$field[1] is not a node");
return;
dbg('chan', "$field[2] no PC19 yet, autovivified as node");
# broadcast_ak1a(pc19($dxchan, $node), $dxchan, $self) unless $dxchan->{isolate};
}
- return unless $node;
+ if ($field[2] eq $main::mycall || $field[2] eq $main::myalias || $field[1] eq $main::myalias || $field[1] eq $main::mycall) {
+ dbg('chan', "LOOP: trying to disconnect me!");
+ return;
+ }
+ unless ($node) {
+ dbg('chan', "Node $field[2] not in config");
+ return;
+ }
unless ($node->isa('DXNode')) {
dbg('chan', "LOOP: $field[2] is not a node");
return;
$ref->del;
} else {
dbg('chan', "$field[1] not known" );
+ return;
}
last SWITCH;
}
dbg('chan', "$call not in table, dropped");
return;
}
+ } else {
+ dbg('chan', "I WILL NOT be disconnected!");
+ return;
}
last SWITCH;
}
}
if ($pcno == 39) { # incoming disconnect
- $self->disconnect(1);
+ if ($field[1] eq $self->{call}) {
+ $self->disconnect(1);
+ } else {
+ dbg('chan', "LOOP: came in on wrong channel");
+ }
return;
}
dbg('err', "reading in duplicate spot and WWV info ...");
DXProt->init();
-
# put in a DXCluster node for us here so we can add users and take them away
DXNode->new($DXProt::me, $mycall, 0, 1, $DXProt::myprot_version);