X-Git-Url: http://gb7djk.dxcluster.net/gitweb/gitweb.cgi?a=blobdiff_plain;f=perl%2FDXProt.pm;h=612e59b6c93e62fbefa1a52a6dc4823ed5e001a1;hb=5aaaa0212b6bda5def233ffce515d889b8e547e7;hp=2bf621e1a1883d61776c0b689bb2c3b5961e917b;hpb=bcf099764f49e68ef016964e420b906e7900623e;p=spider.git diff --git a/perl/DXProt.pm b/perl/DXProt.pm index 2bf621e1..612e59b6 100644 --- a/perl/DXProt.pm +++ b/perl/DXProt.pm @@ -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 {