make sure the version no is updated correctly
[spider.git] / perl / DXProt.pm
index 59e7ca07d7bf2ad89622a3c1096ae237d123cf65..3f4575aa3907ca18ac361c364d5978eaff05a2e9 100644 (file)
@@ -191,6 +191,12 @@ sub init
 sub new 
 {
        my $self = DXChannel::alloc(@_);
+
+       # add this node to the table, the values get filled in later
+       my $pkg = shift;
+       my $call = shift;
+       $main::routeroot->add($call, '0000', Route::here(1)) if $call ne $main::mycall;
+
        return $self;
 }
 
@@ -252,9 +258,6 @@ sub start
        # send info to all logged in thingies
        $self->tell_login('loginn');
 
-       # add this node to the table, the values get filled in later
-       $main::routeroot->add($call);
-
        Log('DXProt', "$call connected");
 }
 
@@ -631,6 +634,7 @@ sub normal
                                next if length $call < 3; # min 3 letter callsigns
 
                                # update it if required
+                               my $r;
                                if ($parent->call eq $call && !$parent->version) {
                                        $parent->version($ver);
                                        $parent->flags(Route::here($here)|Route::conf($conf));
@@ -640,6 +644,13 @@ sub normal
 
                                        my $r = $parent->add($call, $ver, Route::here($here)|Route::conf($conf));
                                        push @rout, $r if $r;
+                               } else {
+                                       $r = Route::Node::get($call);
+                                       if ($r && (!$r->version || $r->version eq '0000')) {
+                                               $r->version($ver);
+                                               $r->flags(Route::here($here)|Route::conf($conf));
+                                               push @rout, $r;
+                                       }
                                }
 
                                # unbusy and stop and outgoing mail (ie if somehow we receive another PC19 without a disconnect)
@@ -1368,7 +1379,9 @@ sub send_local_config
        my @nodes;
        my @localnodes;
        my @remotenodes;
-               
+
+       dbg('trace', 'DXProt::send_local_config');
+       
        # send our nodes
        if ($self->{isolate}) {
                @localnodes = ( $main::routeroot );
@@ -1377,12 +1390,12 @@ sub send_local_config
                # and are not themselves isolated, this to make sure that isolated nodes
         # don't appear outside of this node
                my @dxchan = grep { $_->call ne $main::mycall && $_->call ne $self->{call} } DXChannel::get_all_nodes();
-               @localnodes = map { Route::Node::get($_->{call}) } @dxchan if @dxchan;
+               @localnodes = map { Route::Node::get($_->{call}) or die "connot find node $_->{call}" } @dxchan if @dxchan;
                my @intcalls = map { $_->nodes } @localnodes if @localnodes;
                my $ref = Route::Node::get($self->{call});
                my @rnodes = $ref->nodes;
                for my $n (@intcalls) {
-                       push @remotenodes, Route::Node::get($n) if grep $n ne $_, @rnodes;
+                       push @remotenodes, Route::Node::get($n) unless grep $n eq $_, @rnodes;
                }
                unshift @localnodes, $main::routeroot;
        }