$self->{pingint} = $ping;
$self->{nopings} = $user->nopings || 2;
$self->{pingtime} = [ ];
- $self->{pingave} = 0;
+ $self->{pingave} = 999;
+ $self->{lastping} = $main::systime;
# send initialisation string
unless ($self->{outbound}) {
$self->send(pc18());
- $self->{lastping} = $main::systime;
- } else {
- $self->{lastping} = $main::systime + ($self->pingint / 2);
}
+
$self->state('init');
$self->{pc50_t} = $main::systime;
# first clear out any nodes on this dxchannel
my $parent = Route::Node::get($self->{call});
my @rout = $parent->del_nodes;
- $self->route_pc21(@rout, $parent);
+ $self->route_pc21(@rout, $parent) if @rout;
$self->send_local_config();
$self->send(pc20());
return; # we don't pass these on
$self->send_local_config();
$self->send(pc22());
$self->state('normal');
+ $self->{lastping} = 0;
return;
}
if ($pcno == 22) {
$self->state('normal');
+ $self->{lastping} = 0;
return;
}
foreach $dxchan (@dxchan) {
next if $dxchan == $me;
next if $dxchan == $self && $self->is_node;
- my $routeit;
- my ($filter, $hops);
-
- $dxchan->announce($line, $self->{isolate}, $to, $target, $text, @_, $self->{call}, $ann_dxcc, $ann_itu, $ann_cq, $org_dxcc, $org_itu, $org_cq)
+ $dxchan->announce($line, $self->{isolate}, $to, $target, $text, @_, $self->{call}, $ann_dxcc, $ann_itu, $ann_cq, $org_dxcc, $org_itu, $org_cq);
}
}
my $isolate = shift;
my $to = shift;
my $target = shift;
+ my $text = shift;
my ($filter, $hops);
if ($self->{annfilter}) {
# 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} } DXChannel::get_all_nodes();
+ my @dxchan = grep { $_->call ne $main::mycall && $_ != $self && !$_->{isolate} } DXChannel::get_all_nodes();
@localnodes = map { my $r = Route::Node::get($_->{call}); $r ? $r : () } @dxchan if @dxchan;
my @intcalls = map { $_->nodes } @localnodes if @localnodes;
my $ref = Route::Node::get($self->{call});
my $pc39flag = shift;
my $call = $self->call;
+ return if $self->{disconnecting}++;
+
unless ($pc39flag && $pc39flag == 1) {
$self->send_now("D", DXProt::pc39($main::mycall, $self->msg('disc1', "System Op")));
}
for (; @_ && $no; $no--) {
my $r = shift;
- if ($self->{routefilter}) {
+ if (!$self->{isolate} && $self->{routefilter}) {
$filter = undef;
if ($r) {
($filter, $hops) = $self->{routefilter}->it($self->{call}, $self->{dxcc}, $self->{itu}, $self->{cq}, $r->call, $r->dxcc, $r->itu, $r->cq);
dbg("was sent a null value") if isdbg('chanerr');
}
} else {
- push @rin, $r;
+ push @rin, $r unless $self->{isolate} && $r->call ne $main::mycall;
}
}
if (@rin) {
my $dxchan;
my $line;
- foreach $dxchan (@dxchan) {
- next if $dxchan == $self;
- next if $dxchan == $me;
- if ($dxchan->{routefilter}) {
+ unless ($self->{isolate}) {
+ foreach $dxchan (@dxchan) {
+ next if $dxchan == $self;
+ next if $dxchan == $me;
$dxchan->send_route($generate, @_);
- } else {
- $dxchan->send_route($generate, @_) unless $self->{isolate} || $dxchan->{isolate};
}
}
}