From 24e7cdb8b2479635fc99952e007bfc6c4c7f6a9a Mon Sep 17 00:00:00 2001 From: minima Date: Tue, 22 Feb 2005 19:25:50 +0000 Subject: [PATCH] add in last config time make the aranea protocol stuff master! --- perl/Aranea.pm | 1 + perl/DXChannel.pm | 1 + perl/DXProt.pm | 51 +++++++++++++++++++++++++++++++++++------------ perl/Thingy/Rt.pm | 7 ++++++- 4 files changed, 46 insertions(+), 14 deletions(-) diff --git a/perl/Aranea.pm b/perl/Aranea.pm index 726a068d..787fc538 100644 --- a/perl/Aranea.pm +++ b/perl/Aranea.pm @@ -124,6 +124,7 @@ sub start unless ($self->{outbound}) { my $thing = Thingy::Rt->new_cf; $thing->broadcast; + $self->lastcf($main::systime); } # run a script send the output to the debug file diff --git a/perl/DXChannel.pm b/perl/DXChannel.pm index ad6e46b7..f6a98cb1 100644 --- a/perl/DXChannel.pm +++ b/perl/DXChannel.pm @@ -118,6 +118,7 @@ $count = 0; lastmsgpoll => '0,Last Msg Poll,atime', inscript => '9,In a script,yesno', inqueue => '9,Input Queue,parray', + lastcf => '1,Last CF Update,atime', ); use vars qw($VERSION $BRANCH); diff --git a/perl/DXProt.pm b/perl/DXProt.pm index 8f16da66..4b34975c 100644 --- a/perl/DXProt.pm +++ b/perl/DXProt.pm @@ -786,18 +786,24 @@ sub handle_16 # input filter if required return unless $self->in_filter_route($parent); } + + # is he under the control of the new protocol? + if ($parent && $parent->np) { + dbg("PCPROT: $ncall aranea node, ignored") if isdbg('chanerr'); + return; + } - my $i; + my $i; my @rout; - for ($i = 2; $i < $#_; $i++) { - my ($call, $conf, $here) = $_[$i] =~ /^(\S+) (\S) (\d)/o; - next unless $call && $conf && defined $here && is_callsign($call); - next if $call eq $main::mycall; - - eph_del_regex("^PC17\\^$call\\^$ncall"); - + for ($i = 2; $i < $#_; $i++) { + my ($call, $conf, $here) = $_[$i] =~ /^(\S+) (\S) (\d)/o; + next unless $call && $conf && defined $here && is_callsign($call); + next if $call eq $main::mycall; + + eph_del_regex("^PC17\\^$call\\^$ncall"); + $conf = $conf eq '*'; - + # reject this if we think it is a node already my $r = Route::Node::get($call); my $u = DXUser->get_current($call) unless $r; @@ -808,19 +814,19 @@ sub handle_16 $r = Route::User::get($call); my $flags = Route::here($here)|Route::conf($conf); - + if ($r) { my $au = $r->addparent($parent); if ($r->flags != $flags) { $r->flags($flags); $au = $r; - } + } push @rout, $r if $au; - } else { + } else { push @rout, $parent->add_user($call, $flags); } - + # add this station to the user database, if required $call =~ s/-\d+$//o; # remove ssid for users my $user = DXUser->get_current($call); @@ -883,6 +889,12 @@ sub handle_17 return; } + # is he under the control of the new protocol? + if ($parent && $parent->np) { + dbg("PCPROT: $ncall aranea node, ignored") if isdbg('chanerr'); + return; + } + # input filter if required and then remove user if present if ($parent) { # return unless $self->in_filter_route($parent); @@ -1036,6 +1048,11 @@ sub handle_19 my $r = Route::Node::get($call); my $flags = Route::here($here)|Route::conf($conf); + # is he under the control of the new protocol? + if ($r->np) { + dbg("PCPROT: $call aranea node, ignored") if isdbg('chanerr'); + next; + } # modify the routing table if it is in it, otherwise store it in the pc19list for now if ($r) { my $ar; @@ -1097,6 +1114,7 @@ sub handle_20 my $thing = Thingy::Rt->new(user=>$self->{call}); my $nref = Route::Node::get($self->{call}); $thing->broadcast if $thing->copy_pc16_data($nref); + $self->lastcf($main::systime); } # delete a cluster from the list @@ -1155,6 +1173,12 @@ sub handle_21 # input filter it return unless $self->in_filter_route($node); + + # is he under the control of the new protocol? + if ($node->np) { + dbg("PCPROT: $call aranea node, ignored") if isdbg('chanerr'); + return; + } # routing objects push @rout, $node->del($parent); @@ -1180,6 +1204,7 @@ sub handle_22 my $thing = Thingy::Rt->new(user=>$self->{call}); my $nref = Route::Node::get($self->{call}); $thing->broadcast if $thing->copy_pc16_data($nref); + $self->lastcf($main::systime); } # WWV info diff --git a/perl/Thingy/Rt.pm b/perl/Thingy/Rt.pm index fe26feaf..362904d0 100644 --- a/perl/Thingy/Rt.pm +++ b/perl/Thingy/Rt.pm @@ -24,12 +24,16 @@ use Thingy; use Thingy::RouteFilter; use Spot; -use vars qw(@ISA); +use vars qw(@ISA $update_interval); @ISA = qw(Thingy Thingy::RouteFilter); +$update_interval = 30 * 60; # the interval between 'cf' updates for an interface + sub gen_Aranea { my $thing = shift; + my $dxchan = shift; + unless ($thing->{Aranea}) { my $ref; if ($ref = $thing->{anodes}) { @@ -43,6 +47,7 @@ sub gen_Aranea } $thing->{Aranea} = Aranea::genmsg($thing, [qw(s a n u)]); } + return $thing->{Aranea}; } -- 2.34.1