From: minima <minima>
Date: Sat, 9 Jun 2001 01:37:35 +0000 (+0000)
Subject: various fixes
X-Git-Url: http://dxspider.org/gitweb/gitweb.cgi?a=commitdiff_plain;h=3f93e02718a31f272434796e151cb3358a1fd7ed;p=spider.git

various fixes
---

diff --git a/perl/DXProt.pm b/perl/DXProt.pm
index 9fb40a81..59e7ca07 100644
--- a/perl/DXProt.pm
+++ b/perl/DXProt.pm
@@ -1366,27 +1366,31 @@ sub send_local_config
 	my $self = shift;
 	my $n;
 	my @nodes;
-	my @localcalls;
-	my @remotecalls;
+	my @localnodes;
+	my @remotenodes;
 		
 	# send our nodes
 	if ($self->{isolate}) {
-		@localcalls = ( $main::mycall );
+		@localnodes = ( $main::routeroot );
 	} else {
 		# create a list of all the nodes that are not connected to this connection
 		# 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} && !$_->{isolate} } DXChannel::get_all_nodes();
-		@localcalls = map { $_->{call} } @dxchan if @dxchan;
-		@remotecalls = map {my $r = Route::Node::get($_); $r ? $r->rnodes(@localcalls, $main::mycall, $self->{call}) : () } @localcalls if @localcalls;
-		unshift @localcalls, $main::mycall;
+		my @dxchan = grep { $_->call ne $main::mycall && $_->call ne $self->{call} } DXChannel::get_all_nodes();
+		@localnodes = map { Route::Node::get($_->{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;
+		}
+		unshift @localnodes, $main::routeroot;
 	}
-	@nodes = map {my $r = Route::Node::get($_); $r ? $r : ()} (@localcalls, @remotecalls);
 	
-	send_route($self, \&pc19, scalar @nodes, @nodes);
+	send_route($self, \&pc19, scalar(@localnodes)+scalar(@remotenodes), @localnodes, @remotenodes);
 	
 	# get all the users connected on the above nodes and send them out
-	foreach $n (@nodes) {
+	foreach $n (@localnodes, @remotenodes) {
 		send_route($self, \&pc16, 1, $n, map {my $r = Route::User::get($_); $r ? ($r) : ()} $n->users);
 	}
 }
diff --git a/perl/Route/Node.pm b/perl/Route/Node.pm
index c7068204..3e0c3b08 100644
--- a/perl/Route/Node.pm
+++ b/perl/Route/Node.pm
@@ -219,7 +219,9 @@ sub get
 {
 	my $call = shift;
 	$call = shift if ref $call;
-	return $list{uc $call};
+	my $ref = $list{uc $call};
+	dbg('routerr', "Failed to get Node $call" ) unless $ref;
+	return $ref;
 }
 
 sub get_all
diff --git a/perl/Route/User.pm b/perl/Route/User.pm
index adb2bbd1..2bbfe5b7 100644
--- a/perl/Route/User.pm
+++ b/perl/Route/User.pm
@@ -66,7 +66,9 @@ sub get
 {
 	my $call = shift;
 	$call = shift if ref $call;
-	return $list{uc $call};
+	my $ref = $list{uc $call};
+	dbg('routerr', "Failed to get User $call" ) unless $ref;
+	return $ref;
 }
 
 sub addparent