changed order of nodes going out for AK1A's benefit
[spider.git] / perl / DXProt.pm
index 7f145114feb61ecd5a9f9c66af2a797b61fc6c7b..fbc63bc09ed2df2a5c2304ecf627ca86a0851be7 100644 (file)
@@ -238,9 +238,10 @@ sub normal
                        foreach $dxchan (@dxchan) {
                                next if $dxchan == $self;
                                my $routeit;
-                               my ($filter, $hops) = Filter::it($dxchan->{spotfilter}, @spot) if $dxchan->{spotfilter};
+                               my ($filter, $hops) = Filter::it($dxchan->{spotfilter}, @spot, $self->{call} ) if $dxchan->{spotfilter};
                                if ($hops) {
-                                       $line =~ s/\^H\d+\^\~$/\^H$hops\^\~/;
+                                       $routeit = $line;
+                                       $routeit =~ s/\^H\d+\^\~$/\^H$hops\^\~/;
                                } else {
                                        $routeit = adjust_hops($dxchan, $line);  # adjust its hop count by node name
                                        next unless $routeit;
@@ -403,6 +404,7 @@ sub normal
                        
                        # queue mail
                        DXMsg::queue_msg(0);
+
                        return;
                }
                
@@ -715,27 +717,32 @@ sub send_local_config
        my $self = shift;
        my $n;
        my @nodes;
-       
+       my @localnodes;
+       my @remotenodes;
+               
        # send our nodes
        if ($self->{isolate}) {
-               @nodes = (DXCluster->get_exact($main::mycall));
+               @localnodes = (DXCluster->get_exact($main::mycall));
        } 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
-               @nodes = DXNode::get_all(); 
+               @nodes = DXNode::get_all();
                @nodes = grep { $_->dxchan != $self } @nodes;
-               @nodes = grep { !($_->dxchan && $_->dxchan->isolate) } @nodes;
+               @nodes = grep { $_->{call} ne $main::mycall } @nodes;
+               @localnodes = grep { $_->dxchan->{call} eq $_->{call} && !$_->dxchan->{isolate} } @nodes if @nodes;
+               unshift @localnodes, DXCluster->get_exact($main::mycall);
+               @remotenodes = grep { $_->dxchan->{call} ne $_->{call} } @nodes if @nodes;
        }
 
-       my @s = $me->pc19(@nodes);
+       my @s = $me->pc19(@localnodes, @remotenodes);
        for (@s) {
                my $routeit = adjust_hops($self, $_);
                $self->send($routeit) if $routeit;
        }
        
        # get all the users connected on the above nodes and send them out
-       foreach $n (@nodes) {
+       foreach $n (@localnodes, @remotenodes) {
                my @users = values %{$n->list};
                my @s = pc16($n, @users);
                for (@s) {