my $node;
my @rawintcalls = map { $_->nodes } @localnodes if @localnodes;
my @intcalls;
- for $node (@rawintcalls) {
- push @intcalls, $node unless grep $node eq $_, @intcalls;
+ foreach $node (@rawintcalls) {
+ push @intcalls, $node if grep $_ && $node != $_, @intcalls;
}
my $ref = Route::Node::get($self->{call});
my @rnodes = $ref->nodes;
- for $node (@intcalls) {
- push @remotenodes, Route::Node::get($node) unless grep $node eq $_, @rnodes, @remotenodes;
+ foreach $node (@intcalls) {
+ push @remotenodes, Route::Node::get($node) if grep $_ && $node != $_, @rnodes, @remotenodes;
}
$self->send_route($main::mycall, \&pc19, scalar(@remotenodes), @remotenodes);
}
dbg("ROUTE: broadcast_pc92_update $call") if isdbg('obscount');
my $nref = Route::Node::get($call);
+ unless ($nref) {
+ dbg("ERROR: broadcast_pc92_update - Route::Node $call disappeared");
+ return;
+ }
my $l = $nref->last_PC92C(gen_my_pc92_config($nref));
$main::me->broadcast_route_pc9x($main::mycall, undef, $l, 0);
$self->update_pc92_next($pc92_update_period);
my $call = $self->{call};
my $hops;
- if (($hops) = $s =~ /\^H(\d+)\^?~?$/o) {
+ if (($hops) = $s =~ /\^H([-\d]+)\^?~?$/o) {
my ($pcno) = $s =~ /^PC(\d\d)/o;
confess "$call called adjust_hops with '$s'" unless $pcno;
my $ref = $nodehops{$call} if %nodehops;
return "" if defined $newhops && $newhops == 0;
$newhops = $ref->{default} unless $newhops;
return "" if defined $newhops && $newhops == 0;
- $newhops = $hops if !$newhops;
- $s =~ s/\^H(\d+)(\^~?)$/\^H$newhops$2/ if $newhops;
+ $newhops = $hops unless $newhops;
+ return "" unless $newhops > 0;
+ $s =~ s/\^H(\d+)(\^~?)$/\^H$newhops$2/ if $newhops != $hops;
+ } else {
+ return "" unless $hops > 0;
}
}
return $s;
for (; @_ && $no; $no--) {
my $r = shift;
+ # don't send messages with $self's call in back to them
+ if ($r->call eq $self->{call}) {
+ dbg("PCPROT: trying to send $self->{call} back itself") if isdbg('chanerr');
+ next;
+ }
+
if (!$self->{isolate} && $self->{routefilter}) {
$filter = undef;
if ($r) {
next if $origin eq $dxchan->{call}; # don't route some from this call back again.
next unless $dxchan->isa('DXProt');
next if $dxchan->{do_pc9x};
- next if ($generate == \&pc16 || $generate==\&pc17) && !$dxchan->user->wantsendpc16;
-
+ if ($generate == \&pc16 || $generate==\&pc17) {
+ next unless $dxchan->user->wantsendpc16;
+ }
$dxchan->send_route($origin, $generate, @_);
}
}