X-Git-Url: http://dxcluster.net/gitweb/gitweb.cgi?p=spider.git;a=blobdiff_plain;f=perl%2FDXProt.pm;fp=perl%2FDXProt.pm;h=41f1debe7bc3a9f1f90bc06218f140c037d98790;hp=eec6b67b2d731730b7df2d52f42c5ee530208d23;hb=2c50f9b4b2b3f29b000d77623a9d7c3748933aef;hpb=7e2b5e1e1f0543a093151889d6e76bcce82bae86 diff --git a/perl/DXProt.pm b/perl/DXProt.pm index eec6b67b..41f1debe 100644 --- a/perl/DXProt.pm +++ b/perl/DXProt.pm @@ -46,6 +46,8 @@ use vars qw($pc11_max_age $pc23_max_age $last_pc50 $eph_restime $eph_info_restim $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 @@ -73,13 +75,12 @@ $chatdupeage = 20 * 60; $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 = @@ -214,11 +215,19 @@ sub check 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"; @@ -239,7 +248,7 @@ sub init $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); } # @@ -348,8 +357,12 @@ sub start 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; } # @@ -430,12 +443,6 @@ sub process 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; @@ -466,16 +473,20 @@ sub process 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; @@ -487,14 +498,32 @@ sub process # 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; } } } @@ -936,7 +965,7 @@ sub broadcast_pc92_update 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 @@ -1462,11 +1491,13 @@ sub route_pc41 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, @_); }