$chatdupeage = 20 * 60;
$chatimportfn = "$main::root/chat_import";
$pc19_version = 5454; # the visible version no for outgoing PC19s generated from pc59
-$pc92_update_period = 2*60*60; # the period between outgoing PC92 C updates
+$pc92_update_period = 4*60*60; # the period between outgoing PC92 C updates
$pc92_short_update_period = 15*60; # shorten the update period after a connection or start up
$pc92_extnode_update_period = 1*60*60; # the update period for external nodes
$pc92_keepalive_period = 1*60*60; # frequency of PC92 K (keepalive) records
}
}
+ if (defined &Local::pcprot) {
+ my $r;
+ eval { $r = Local::pcprot($self, $pcno, $line, @field); };
+ return if $r; # i.e don't process it
+ }
+
# send it out for processing
my $origin = $self->{call};
no strict 'subs';
$pc50s = pc50($main::me, scalar DXChannel::get_all_users);
eph_dup($pc50s);
$last_pc50 = $t;
- time_out_pc92_routes();
}
foreach $dxchan (@dxchan) {
next unless $dxchan->is_node;
- next if $dxchan->handle_xml;
next if $dxchan == $main::me;
# send the pc50
# send a ping out on this channel
if ($dxchan->{pingint} && $t >= $dxchan->{pingint} + $dxchan->{lastping}) {
if ($dxchan->{nopings} <= 0) {
+ dbg("ROUTE: $dxchan->{call} disconnected on ping obscount") if isdbg('obscount');
$dxchan->disconnect;
} else {
DXXml::Ping::add($main::me, $dxchan->call);
$dxchan->{nopings} -= 1;
$dxchan->{lastping} = $t;
$dxchan->{lastping} += $dxchan->{pingint} / 2 unless @{$dxchan->{pingtime}};
+ dbg("ROUTE: $dxchan->{call} ping obscount = $dxchan->{nopings}") if isdbg('obscount');
}
}
}
$dxchan->update_pc92_next; # this won't actually do anything, it's just to be tidy
}
}
+ }
- # do the keepalives in the same way, but use a different timer
- if ($main::systime >= $dxchan->{next_pc92_keepalive}) {
- if ($dxchan == $main::me || !$dxchan->{do_pc9x}) {
- dbg("ROUTE: pc92 keepalive candidate: $dxchan->{call}") if isdbg('obscount');
- my $ref = Route::Node::get($dxchan->{call});
- if ($dxchan == $main::me || ($ref && ($ref->measure_pc9x_t($main::systime-$main::systime_daystart)) >= $pc92_keepalive_period/2)) {
- $dxchan->broadcast_pc92_keepalive($dxchan->{call});
- } else {
- $dxchan->update_pc92_keepalive;
- }
- } else {
-# $dxchan->update_pc92_next; # this won't actually do anything, it's just to be tidy
- $dxchan->update_pc92_keepalive;
- }
- }
+ # do the keepalive for me, if required
+ if ($main::systime >= $main::me->{next_pc92_keepalive}) {
+ time_out_pc92_routes();
+ $main::me->broadcast_pc92_keepalive($main::mycall);
}
if ($pc92_slug_changes && $main::systime >= $last_pc92_slug + $pc92_slug_changes) {
foreach $dxchan (@dxchan) {
next if $dxchan == $main::me;
next if $dxchan == $self && $self->is_node;
+ next if $line =~ /PC61/ && !$dxchan->is_spider && !$dxchan->is_user;
$dxchan->dx_spot($line, $self->{isolate}, @_, $self->{call});
}
}
} elsif ($self->{do_pc9x}) {
dbg("send_local_config: doing pc9x");
my $node = Route::Node::get($self->{call});
- $self->send_last_pc92_config($main::routeroot);
- $self->send(pc92a($main::routeroot, $node)) unless $main::routeroot->last_PC92C =~ /$self->{call}/;
+# $self->send_last_pc92_config($main::routeroot);
+# $self->send(pc92a($main::routeroot, $node)) unless $main::routeroot->last_PC92C =~ /$self->{call}/;
+ $self->send(pc92a($main::routeroot, $node));
+ $self->send(pc92k($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
if ($tonode eq $main::mycall) {
my $ref = DXUser->get_current($fromnode);
my $cref = Route::Node::get($fromnode);
- Log('rcmd', 'in', $ref->{priv}, $fromnode, $cmd);
- if ($cmd !~ /^\s*rcmd/i && $cref && $ref && $cref->call eq $ref->homenode) { # not allowed to relay RCMDS!
+ Log('rcmd', 'in', ($ref->{priv}||0), $fromnode, $cmd);
+ if ($cmd !~ /^\s*rcmd/i && $cref && $ref && $ref->homenode && $cref->call eq $ref->homenode) { # not allowed to relay RCMDS!
if ($ref->{priv}) { # you have to have SOME privilege, the commands have further filtering
$self->{remotecmd} = 1; # for the benefit of any command that needs to know
my $oldpriv = $self->{priv};
sub disconnect
{
my $self = shift;
- my $pc39flag = shift;
+ my $pc39flag = shift || 0;
my $call = $self->call;
return if $self->{disconnecting}++;
- unless ($pc39flag && $pc39flag == 1) {
+ unless ($pc39flag == 1) {
$self->send_now("D", DXProt::pc39($main::mycall, $self->msg('disc1', "System Op")));
}
}
# broadcast to all other nodes that all the nodes connected to via me are gone
- unless ($pc39flag && $pc39flag == 2) {
+ unless ($pc39flag == 2) {
$self->route_pc21($main::mycall, undef, @rout) if @rout;
$self->route_pc92d($main::mycall, undef, $main::routeroot, $node) if $node;
}