$eph_pc15_restime $pc92_update_period $pc92_obs_timeout
%pc92_find $pc92_find_timeout $pc92_short_update_period
$next_pc92_obs_timeout $pc92_slug_changes $last_pc92_slug
+ $pc92_extnode_update_period $pc50_interval
+ $pc92_keepalive_period
);
$pc11_max_age = 1*3600; # the maximum age for an incoming 'real-time' pc11
$chatimportfn = "$main::root/chat_import";
$investigation_int = 12*60*60; # time between checks to see if we can see this node
$pc19_version = 5454; # the visible version no for outgoing PC19s generated from pc59
-$pc92_update_period = 60*60; # the period between outgoing PC92 C updates
-$pc92_short_update_period = 15*60; # shorten the update period after a connection
+$pc92_update_period = 24*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 = 2*60*60; # the update period for external nodes
+$pc92_keepalive_period = 60*60; # frequency of PC92 K (keepalive) records
%pc92_find = (); # outstanding pc92 find operations
$pc92_find_timeout = 30; # maximum time to wait for a reply
-#$pc92_obs_timeout = $pc92_update_period; # the time between obscount countdowns
-$pc92_obs_timeout = 60*60; # the time between obscount for incoming countdowns
-$next_pc92_obs_timeout = $main::systime + 60*60; # the time between obscount countdowns
@checklist =
sub update_pc92_next
{
my $self = shift;
- my $period = shift || $pc92_update_period;
+ my $period = shift || ($self->{do_pc9x} ? $pc92_update_period : $pc92_extnode_update_period);
$self->{next_pc92_update} = $main::systime + $period - int rand($period / 4);
dbg("ROUTE: update_pc92_next: $self->{call} " . atime($self->{next_pc92_update})) if isdbg('obscount');
}
+sub update_pc92_keepalive
+{
+ my $self = shift;
+ my $period = shift || $pc92_keepalive_period;
+ $self->{next_pc92_keepalive} = $main::systime + $period - int rand($period / 4);
+ dbg("ROUTE: update_pc92_keepalive: $self->{call} " . atime($self->{next_pc92_keepalive})) if isdbg('obscount');
+}
+
sub init
{
do "$main::data/hop_table.pl" if -e "$main::data/hop_table.pl";
$main::me->{version} = $main::version;
$main::me->{build} = "$main::subversion.$main::build";
$main::me->{do_pc9x} = 1;
- $main::me->update_pc92_next($pc92_update_period);
+ $main::me->update_pc92_next($pc92_short_update_period);
}
#
my $script = new Script(lc $call) || new Script('node_default');
$script->run($self) if $script;
- # set next_pc92_update time for this node sooner
- $self->update_pc92_next($self->{outbound} ? $pc92_short_update_period : $pc92_update_period);
+ # set up a config broadcast "quite soon" to converge tables quicker
+ $main::me->update_pc92_next($pc92_short_update_period);
+ $self->update_pc92_next($pc92_short_update_period);
+
+ # set next keepalive time
+ $self->update_pc92_keepalive;
}
#
my $dxchan;
my $pc50s;
- # send out a pc50 on EVERY channel all at once
- if ($t >= $last_pc50 + $DXProt::pc50_interval) {
- $pc50s = pc50($main::me, scalar DXChannel::get_all_users);
- eph_dup($pc50s);
- $last_pc50 = $t;
- }
foreach $dxchan (@dxchan) {
next unless $dxchan->is_node;
if ($t - $last10 >= 10) {
# clean out ephemera
+
eph_clean();
import_chat();
- if ($main::systime >= $next_pc92_obs_timeout) {
+ $last10 = $t;
+
+ # send out a pc50 on EVERY channel all at once
+ if ($t >= $last_pc50 + $pc50_interval) {
+ $pc50s = pc50($main::me, scalar DXChannel::get_all_users);
+ eph_dup($pc50s);
+ $last_pc50 = $t;
time_out_pc92_routes();
- $next_pc92_obs_timeout = $main::systime + $pc92_obs_timeout;
}
- $last10 = $t;
-
# send out config broadcasts
foreach $dxchan (@dxchan) {
next unless $dxchan->is_node;
# records. Someone will win, it does not really matter who, because
# we always believe "us".
if ($main::systime >= $dxchan->{next_pc92_update}) {
- dbg("ROUTE: pc92 broadcast candidate: $dxchan->{call}") if isdbg('obscount');
if ($dxchan == $main::me || !$dxchan->{do_pc9x}) {
+ dbg("ROUTE: pc92 broadcast 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_update_period/2)) {
+ if ($dxchan == $main::me || ($ref && ($ref->measure_pc9x_t($main::systime-$main::systime_daystart)) >= $pc92_extnode_update_period/2)) {
$dxchan->broadcast_pc92_update($dxchan->{call});
} else {
- $dxchan->update_pc92_next($pc92_update_period - rand($pc92_update_period/4));
+ $dxchan->update_pc92_next;
}
+ } else {
+ $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_update($dxchan->{call});
+# } else {
+# $dxchan->update_pc92_next($pc92_extnode_update_period);
+# }
+# } else {
+# $dxchan->update_pc92_next; # this won't actually do anything, it's just to be tidy
+ $dxchan->update_pc92_keepalive;
}
}
}
my $l = $nref->last_PC92C(gen_my_pc92_config($nref));
$nref->lastid(last_pc9x_id());
$main::me->broadcast_route_pc9x($main::mycall, undef, $l, 0);
- $self->update_pc92_next($pc92_update_period);
+ $self->update_pc92_next;
}
sub time_out_pc92_routes
broadcast_route($self, $origin, \&pc41, $line, 1, @_);
}
+# this is probably obsolete now
sub route_pc50
{
my $self = shift;
my $origin = shift;
my $line = shift;
+
broadcast_route($self, $origin, \&pc50, $line, 1, @_);
}