X-Git-Url: http://gb7djk.dxcluster.net/gitweb/gitweb.cgi?a=blobdiff_plain;f=perl%2FDXProt.pm;h=f72fe8903a37bbe5c1c17a201b99eb936e69b49c;hb=9685d27bb27511ec2409f323096c68a3b25156fd;hp=d5e886e5a37f33bad133c89146c239c7a8e86824;hpb=24656c96ca7d059dd24ac5a53a3ed55b164e756f;p=spider.git diff --git a/perl/DXProt.pm b/perl/DXProt.pm index d5e886e5..f72fe890 100644 --- a/perl/DXProt.pm +++ b/perl/DXProt.pm @@ -648,27 +648,30 @@ sub normal # update it if required my $r = Route::Node::get($call); my $flags = Route::here($here)|Route::conf($conf); - if ($parent->call eq $call && ($parent->version ne $ver || $parent->flags != $flags)) { - $parent->version($ver); - $parent->flags($flags); - push @rout, $parent; - } elsif ($r) { - my $ar = $parent->add($r); - push @rout, $ar if $ar; + if ($r) { + my $ar; + if ($call ne $parent->call) { + if ($self->in_filter_route($r)) { + $ar = $parent->add($call, $ver, $flags); + push @rout, $ar if $ar; + } else { + next; + } + } if ($r->version ne $ver || $r->flags != $flags) { $r->version($ver); - $r->flags(Route::here($here)|Route::conf($conf)); + $r->flags($flags); push @rout, $r unless $ar; } - } elsif ($parent->call ne $call) { + } else { next if $call eq $main::mycall || $call eq $self->{call}; - my $new = Route::Node->new($call, $ver, Route::here($here)|Route::conf($conf)); + my $new = Route->new($call); # throw away if ($self->in_filter_route($new)) { - $parent->add($new); - push @rout, $new; + my $r = $parent->add($call, $ver, $flags); + push @rout, $r; } else { - $new->del($parent); + next; } } @@ -786,6 +789,7 @@ sub normal $ref->here($field[2]) if $ref; $ref = Route::User::get($call); $ref->here($field[2]) if $ref; + $ref ||= Route->new($call); # input filter if required return unless $self->in_filter_route($ref); @@ -928,7 +932,7 @@ sub normal } $user->lastoper($main::systime); # to cut down on excessive for/opers being generated $user->put; - my $ref = Route::get($call); + my $ref = Route::get($call) || Route->new($call); # input filter if required return unless $self->in_filter_route($ref); @@ -1484,7 +1488,7 @@ sub route # always send it down the local interface if available my $dxchan = DXChannel->get($call); unless ($dxchan) { - my $cl = Route::Node::get($call); + my $cl = Route::get($call); $dxchan = $cl->dxchan if $cl; if (ref $dxchan) { if (ref $self && $dxchan eq $self) { @@ -1793,7 +1797,7 @@ sub broadcast_route foreach $dxchan (@dxchan) { next if $dxchan == $self; next if $dxchan == $me; - if ($self->{routefilter} || !$self->{isolate}) { + if ($dxchan->{routefilter} || !$self->{isolate}) { $dxchan->send_route($generate, @_) } else { dbg('DXPROT: isolated') if isdbg('chanerr');