fix missing under test
[spider.git] / perl / DXProt.pm
index 32d63b1f4d5c37608eb25d73f5cbe0649b71c99a..612e59b6c93e62fbefa1a52a6dc4823ed5e001a1 100644 (file)
@@ -223,7 +223,7 @@ sub init
        $main::me->{metric} = 0;
        $main::me->{pingave} = 0;
        $main::me->{registered} = 1;
-       $main::me->{version} = 5251 + $main::version;
+       $main::me->{version} = 5252 + $main::version;
        $main::me->{build} = $main::build;
 }
 
@@ -441,8 +441,8 @@ sub handle_10
 #      RouteDB::update($to, $_[6]);
 
        # it is here and logged on
-       $dxchan = DXChannel->get($main::myalias) if $to eq $main::mycall;
-       $dxchan = DXChannel->get($to) unless $dxchan;
+       $dxchan = DXChannel::get($main::myalias) if $to eq $main::mycall;
+       $dxchan = DXChannel::get($to) unless $dxchan;
        if ($dxchan && $dxchan->is_user) {
                $_[3] =~ s/\%5E/^/g;
                $dxchan->talk($from, $to, $via, $_[3]);
@@ -640,7 +640,7 @@ sub handle_12
 
        my $dxchan;
        
-       if ((($dxchan = DXChannel->get($_[2])) && $dxchan->is_user) || $_[4] =~ /^[\#\w.]+$/){
+       if ((($dxchan = DXChannel::get($_[2])) && $dxchan->is_user) || $_[4] =~ /^[\#\w.]+$/){
                $self->send_chat($line, @_[1..6]);
        } elsif ($_[2] eq '*' || $_[2] eq $main::mycall) {
 
@@ -756,7 +756,7 @@ sub handle_16
                                                }
                                        }
                                        $user->wantroutepc19(1) unless defined $wantpc19; # for now we work on the basis that pc16 = real route 
-                                       $user->lastin($main::systime) unless DXChannel->get($ncall);
+                                       $user->lastin($main::systime) unless DXChannel::get($ncall);
                                        $user->put;
                                                
                                        # route the pc19 - this will cause 'stuttering PC19s' for a while
@@ -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,26 +814,26 @@ 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);
                $user = DXUser->new($call) if !$user;
                $user->homenode($parent->call) if !$user->homenode;
                $user->node($parent->call);
-               $user->lastin($main::systime) unless DXChannel->get($call);
+               $user->lastin($main::systime) unless DXChannel::get($call);
                $user->put;
        }
        $self->route_pc16($origin, $line, $parent, @rout) if @rout;
@@ -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);  
@@ -993,7 +1005,7 @@ sub handle_19
                next if $call eq $main::mycall;
 
                # check that this PC19 isn't trying to alter the wrong dxchan
-               my $dxchan = DXChannel->get($call);
+               my $dxchan = DXChannel::get($call);
                if ($dxchan && $dxchan != $self) {
                        dbg("PCPROT: PC19 from $origin trying to alter wrong locally connected $call, ignored!") if isdbg('chanerr');
                        next;
@@ -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 && $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;
@@ -1075,7 +1092,7 @@ sub handle_19
                my $mref = DXMsg::get_busy($call);
                $mref->stop_msg($call) if $mref;
                                
-               $user->lastin($main::systime) unless DXChannel->get($call);
+               $user->lastin($main::systime) unless DXChannel::get($call);
                $user->put;
        }
 
@@ -1094,6 +1111,10 @@ sub handle_20
        $self->send(pc22());
        $self->state('normal');
        $self->{lastping} = 0;
+       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
@@ -1144,7 +1165,7 @@ sub handle_21
                        my $node = Route::Node::get($call);
                        if ($node) {
                                                
-                               my $dxchan = DXChannel->get($call);
+                               my $dxchan = DXChannel::get($call);
                                if ($dxchan && $dxchan != $self) {
                                        dbg("PCPROT: PC21 from $origin trying to alter locally connected $call, ignored!") if isdbg('chanerr');
                                        return;
@@ -1152,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);
@@ -1174,6 +1201,10 @@ sub handle_22
        my $origin = shift;
        $self->state('normal');
        $self->{lastping} = 0;
+       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
@@ -1526,10 +1557,10 @@ sub handle_51
                        # it's a reply, look in the ping list for this one
                        my $ref = $pings{$from};
                        if ($ref) {
-                               my $tochan =  DXChannel->get($from);
+                               my $tochan =  DXChannel::get($from);
                                while (@$ref) {
                                        my $r = shift @$ref;
-                                       my $dxchan = DXChannel->get($r->{call});
+                                       my $dxchan = DXChannel::get($r->{call});
                                        next unless $dxchan;
                                        my $t = tv_interval($r->{t}, [ gettimeofday ]);
                                        if ($dxchan->is_user) {
@@ -1677,7 +1708,7 @@ sub handle_default
 sub process
 {
        my $t = time;
-       my @dxchan = DXChannel->get_all();
+       my @dxchan = DXChannel::get_all();
        my $dxchan;
        my $pc50s;
        
@@ -1759,7 +1790,7 @@ sub send_wwv_spot
 {
        my $self = shift;
        my $line = shift;
-       my @dxchan = DXChannel->get_all();
+       my @dxchan = DXChannel::get_all();
        my $dxchan;
        my @dxcc = ((Prefix::cty_data($_[6]))[0..2], (Prefix::cty_data($_[7]))[0..2]);
 
@@ -1793,7 +1824,7 @@ sub send_wcy_spot
 {
        my $self = shift;
        my $line = shift;
-       my @dxchan = DXChannel->get_all();
+       my @dxchan = DXChannel::get_all();
        my $dxchan;
        my @dxcc = ((Prefix::cty_data($_[10]))[0..2], (Prefix::cty_data($_[11]))[0..2]);
        
@@ -1826,7 +1857,7 @@ sub send_announce
 {
        my $self = shift;
        my $line = shift;
-       my @dxchan = DXChannel->get_all();
+       my @dxchan = DXChannel::get_all();
        my $dxchan;
        my $target;
        my $to = 'To ';
@@ -1891,7 +1922,7 @@ sub send_chat
 {
        my $self = shift;
        my $line = shift;
-       my @dxchan = DXChannel->get_all();
+       my @dxchan = DXChannel::get_all();
        my $dxchan;
        my $target = $_[3];
        my $text = unpad($_[2]);
@@ -1987,7 +2018,7 @@ sub send_local_config
         # don't appear outside of this node
 
                # send locally connected nodes
-               my @dxchan = grep { $_->call ne $main::mycall && $_ != $self && !$_->{isolate} } DXChannel::get_all_nodes();
+               my @dxchan = grep { $_->call ne $main::mycall && $_ != $self && !$_->{isolate} && ($_->is_node || $_->is_aranea) } DXChannel::get_all();
                @localnodes = map { my $r = Route::Node::get($_->{call}); $r ? $r : () } @dxchan if @dxchan;
                $self->send_route($main::mycall, \&pc19, scalar(@localnodes)+1, $main::routeroot, @localnodes);
 
@@ -2032,7 +2063,7 @@ sub route
        }
 
        # always send it down the local interface if available
-       my $dxchan = DXChannel->get($call);
+       my $dxchan = DXChannel::get($call);
        if ($dxchan) {
                dbg("route: $call -> $dxchan->{call} direct" ) if isdbg('route');
        } else {
@@ -2055,7 +2086,7 @@ sub route
                                dbg("PCPROT: Trying to route back to source, dropped") if isdbg('chanerr');
                                return;
                        }
-                       $dxchan = DXChannel->get($rcall);
+                       $dxchan = DXChannel::get($rcall);
                        dbg("route: $call -> $rcall using RouteDB" ) if isdbg('route') && $dxchan;
                }
        }
@@ -2136,7 +2167,7 @@ sub addping
        my $r = {};
        $r->{call} = $from;
        $r->{t} = [ gettimeofday ];
-       if ($via && (my $dxchan = DXChannel->get($via))) {
+       if ($via && (my $dxchan = DXChannel::get($via))) {
                $dxchan->send(pc51($to, $main::mycall, 1));
        } else {
                route(undef, $to, pc51($to, $main::mycall, 1));
@@ -2188,13 +2219,13 @@ sub process_rcmd_reply
        if ($tonode eq $main::mycall) {
                my $s = $rcmds{$fromnode};
                if ($s) {
-                       my $dxchan = DXChannel->get($s->{call});
-                       my $ref = $user eq $tonode ? $dxchan : (DXChannel->get($user) || $dxchan);
+                       my $dxchan = DXChannel::get($s->{call});
+                       my $ref = $user eq $tonode ? $dxchan : (DXChannel::get($user) || $dxchan);
                        $ref->send($line) if $ref;
                        delete $rcmds{$fromnode} if !$dxchan;
                } else {
                        # send unsolicited ones to the sysop
-                       my $dxchan = DXChannel->get($main::myalias);
+                       my $dxchan = DXChannel::get($main::myalias);
                        $dxchan->send($line) if $dxchan;
                }
        } else {