From: minima Date: Thu, 24 Feb 2005 14:25:49 +0000 (+0000) Subject: fix here X-Git-Tag: R_1_52~140 X-Git-Url: http://gb7djk.dxcluster.net/gitweb/gitweb.cgi?a=commitdiff_plain;h=9311d6940faf0e9952d6d65d9ead572b06a52434;p=spider.git fix here --- diff --git a/perl/DXProt.pm b/perl/DXProt.pm index 595cfae8..1d28e402 100644 --- a/perl/DXProt.pm +++ b/perl/DXProt.pm @@ -1062,11 +1062,6 @@ sub handle_19 next; } } - if ($r->version ne $ver || $r->flags != $flags) { - $r->version($ver); - $r->flags($flags); - push @rout, $r unless $ar; - } } else { # if he is directly connected or allowed then add him, otherwise store him up for later diff --git a/perl/Route.pm b/perl/Route.pm index 0676139a..03dd1f43 100644 --- a/perl/Route.pm +++ b/perl/Route.pm @@ -60,7 +60,9 @@ $filterdef = bless ([ sub new { - my ($pkg, $call) = @_; + my $pkg = shift; + my $call = shift; + $pkg = ref $pkg if ref $pkg; my $self = bless {call => $call}, $pkg; diff --git a/perl/Route/Node.pm b/perl/Route/Node.pm index d46733bb..bd69d3d7 100644 --- a/perl/Route/Node.pm +++ b/perl/Route/Node.pm @@ -58,7 +58,7 @@ sub max # object with that callsign. The upper layers are expected to do something # sensible with this! # -# called as $parent->add(call, dxchan, version, flags) +# called as $parent->add(call, version, flags) # sub add @@ -66,13 +66,21 @@ sub add my $parent = shift; my $call = uc shift; confess "Route::add trying to add $call to myself" if $call eq $parent->{call}; + my $version = shift; + my $here = shift; + my $self = get($call); if ($self) { $self->_addparent($parent); $parent->_addnode($self); + if ($self->{version} != $version || $self->{flags} != $here) { + $self->{version} = $version; + $self->{flags} = $here; + return $self; + } return undef; } - $self = $parent->new($call, @_); + $self = $parent->new($call, $version, $here); $parent->_addnode($self); return $self; } diff --git a/perl/Thingy/Rt.pm b/perl/Thingy/Rt.pm index bdc4bf41..89c8452e 100644 --- a/perl/Thingy/Rt.pm +++ b/perl/Thingy/Rt.pm @@ -52,7 +52,9 @@ sub gen_Aranea sub from_Aranea { my $thing = shift; - return unless $thing; + $thing->{u} ||= ''; + $thing->{n} ||= ''; + $thing->{a} ||= ''; return $thing; } @@ -89,20 +91,20 @@ sub handle_cf } # do nodes - my ($del, $add); my %in; if ($thing->{n}) { - %in = (map {my ($here, $call) = unpack("A1 A*", $_); ($call, $here)} split /:/, $thing->{n}); - my ($tdel, $tadd) = $parent->diff_nodes(keys %in); - $add = $tadd; - $del = $tdel; + for (split(/:/, $thing->{n})) { + my ($here, $call) = unpack("A1 A*", $_); + $in{$call} = $here; + } } if ($thing->{a}) { - %in = (map {my ($here, $call) = unpack("A1 A*", $_); ($call, $here)} split /:/, $thing->{a}); - my ($tdel, $tadd) = $parent->diff_nodes(keys %in); - push @$add, @$tadd; - push @$del, @$tdel; + for (split(/:/, $thing->{a})) { + my ($here, $call) = unpack("A1 A*", $_); + $in{$call} = $here; + } } + my ($del, $add) = $parent->diff_nodes(keys %in); if ($add) { my @pc21; foreach my $call (@$del) { @@ -116,8 +118,8 @@ sub handle_cf my @pc19; foreach my $call (@$add) { RouteDB::update($call, $chan_call); - my $ref = Route::Node::get($call); - push @pc19, $parent->add($call, 0, $in{$call}) unless $ref; + my $here = $in{$call}; + push @pc19, $parent->add($call, 0, $here); } $thing->{pc19n} = \@pc19 if @pc19; } @@ -237,7 +239,7 @@ sub copy_pc16_data $thing->{'s'} = 'cf'; my @u = map {Route::User::get($_)} $uref->users; - $thing->{ausers} = \@u; + $thing->{ausers} = \@u if @u; return @u; }