try to make sure that local nodes take precedence over external ones
authorDirk Koopman <djk@tobit.co.uk>
Sat, 7 Jul 2007 10:34:28 +0000 (11:34 +0100)
committerDirk Koopman <djk@tobit.co.uk>
Sat, 7 Jul 2007 10:34:28 +0000 (11:34 +0100)
There seems to be a problem with localnodes sometimes being overridden by
data from external PC92 data. Usually (but not always) data for local
PC19 nodes being overridden by data from other PC92 with the same node
connected.

Also put in a frig for the sysop announce problem.

perl/DXProt.pm
perl/DXProtHandle.pm
perl/Version.pm

index 53695e51846a0bf140f75efe0ff3bf6cd42af065..5e967fd228c83bfcf21c106b9314ca909f300ce4 100644 (file)
@@ -659,7 +659,8 @@ sub send_announce
                }
        }
 
-       if (AnnTalk::dup($from, $target, $_[2])) {
+       # the sysop ('*') thing is an attempt to minimise the damage caused by non-updated PC93 generators
+       if (AnnTalk::dup($from, $target, $_[2]) || ($_[3] eq '*' && AnnTalk::dup($from, 'ALL', $_[2]))) {
                my $dxchan = DXChannel::get($from);
                if ($self == $main::me && $dxchan && $dxchan->is_user) {
                        if ($dxchan->priv < 5) {
index 9a4104e5c8ad70d4d4f81bacef83fc4ea3a8e746..5e3f0597d9405d2279ad1d7fab742a3da36b39ff 100644 (file)
@@ -1560,12 +1560,14 @@ sub handle_92
                                                dbg("PCPROT: $call looped back onto $main::mycall, ignored") if isdbg('chanerr');
                                                return;
                                        }
+                                       # this is only accepted from my "self".
+                                       # this also kills configs from PC92 nodes with external PC19 nodes that are also
+                                       # locally connected. Local nodes always take precedence.
+                                       if (DXChannel::get($call) && $call ne $self->{call}) {
+                                               dbg("PCPROT: locally connected node $call from other another node $self->{call}, ignored") if isdbg('chanerr');
+                                               return;
+                                       }
                                        if ($is_extnode) {
-                                               # this is only accepted from my "self"
-                                               if (DXChannel::get($call) && $call ne $self->{call}) {
-                                                       dbg("PCPROT: locally connected node config for $call from other another node $self->{call}, ignored") if isdbg('chanerr');
-                                                       return;
-                                               }
                                                # reparent to external node (note that we must have received a 'C' or 'A' record
                                                # from the true parent node for this external before we get one for the this node
                                                unless ($parent = Route::Node::get($call)) {
index 82018c146ef08bd17e6f810727c87009680db0d9..a95140f851e2defddf215fe8eb35c9f8c32266b8 100644 (file)
@@ -11,6 +11,6 @@ use vars qw($version $subversion $build);
 
 $version = '1.54';
 $subversion = '0';
-$build = '106';
+$build = '107';
 
 1;