From: Dirk Koopman Date: Wed, 10 Oct 2007 10:37:24 +0000 (+0100) Subject: push non-pc9x nodes to the back for routing X-Git-Tag: 1.55~47 X-Git-Url: http://dxcluster.org/gitweb/gitweb.cgi?p=spider.git;a=commitdiff_plain;h=be8bb8ddece08d2893896418423a95548cbf316f push non-pc9x nodes to the back for routing Currently, if a directly connected non-pc9x node advertises a route to another node, even if that node --- diff --git a/perl/DXProtHandle.pm b/perl/DXProtHandle.pm index cd4cdd44..eea43772 100644 --- a/perl/DXProtHandle.pm +++ b/perl/DXProtHandle.pm @@ -1559,7 +1559,7 @@ sub pc92_handle_first_slot } $parent->here(Route::here($here)); $parent->version($version || $pc19_version) if $version; - $parent->build($build) if $build && $build > $parent->build; + $parent->build($build) if $build; $parent->PC92C_dxchan($self->{call}) unless $self->{call} eq $parent->call; return ($parent, @radd); } @@ -1674,16 +1674,9 @@ sub handle_92 # this is the main route section # here is where all the routes are created and destroyed - # cope with missing duplicate node calls in the first slot for A or D + # cope with missing duplicate node calls in the first slot my $me = $_[4] || ''; - if (($sort eq 'A' || $sort eq 'D')) { - $me ||= _encode_pc92_call($parent) unless $me ; - } else { - unless ($me) { - dbg("PCPROT: this type of PC92 *must* have a node call in the first slot, ignored") if is_dbg('chanerr'); - return; - } - } + $me ||= _encode_pc92_call($parent) unless $me ; my @ent = map {my @a = _decode_pc92_call($_); @a ? \@a : ()} grep {$_ && /^[0-7]/} $me, @_[5 .. $#_]; diff --git a/perl/DXProtout.pm b/perl/DXProtout.pm index 03676089..8c5e56d9 100644 --- a/perl/DXProtout.pm +++ b/perl/DXProtout.pm @@ -422,7 +422,7 @@ sub pc92d # send a config sub pc92c { - return _gen_pc92('C', 1, @_); + return _gen_pc92('C', 0, @_); } # send a keep alive diff --git a/perl/Route.pm b/perl/Route.pm index 290cd762..0f23d455 100644 --- a/perl/Route.pm +++ b/perl/Route.pm @@ -296,6 +296,8 @@ sub findroutes # recursion detector return () if $seen->{$call}; + + # return immediately if we are directly connected if (my $dxchan = DXChannel::get($call)) { $seen->{$call}++; push @out, $level ? [$level, $dxchan] : $dxchan; @@ -308,8 +310,11 @@ sub findroutes return () unless $nref; foreach my $ncall (@{$nref->{parent}}) { unless ($seen->{$ncall}) { - dbg("recursing from $call -> $ncall") if isdbg('routec'); - my @rout = findroutes($ncall, $level+1, $seen); + + # put non-pc9x nodes to the back of the queue + my $l = $level + ($nref->{do_pc9x} ? 0 : 30); + dbg("recursing from $call -> $ncall level $l") if isdbg('routec'); + my @rout = findroutes($ncall, $l+1, $seen); push @out, @rout; } } diff --git a/perl/Version.pm b/perl/Version.pm index 4cf30ad0..71aff4a0 100644 --- a/perl/Version.pm +++ b/perl/Version.pm @@ -11,6 +11,6 @@ use vars qw($version $subversion $build); $version = '1.54'; $subversion = '0'; -$build = '167'; +$build = '168'; 1;