X-Git-Url: http://dxcluster.org/gitweb/gitweb.cgi?a=blobdiff_plain;f=perl%2FDXProt.pm;h=7359fdead0d7a85f2c6d51ff4ab36e2a0c147329;hb=dd564b3f95c49b8e78566100119945ba5352740a;hp=ced5b4f05f68c46d7cf9dd431136108075dbb18b;hpb=d491ec44ddeb21146694280f4540991759b556b3;p=spider.git diff --git a/perl/DXProt.pm b/perl/DXProt.pm index ced5b4f0..7359fdea 100644 --- a/perl/DXProt.pm +++ b/perl/DXProt.pm @@ -406,7 +406,7 @@ sub normal my $user = DXUser->get_current($spot[4]); if ($user) { my $qra = $user->qra; - unless ($qra && DXBearing::is_qra($qra)) { + unless ($qra && is_qra($qra)) { my $lat = $user->lat; my $long = $user->long; if (defined $lat && defined $long) { @@ -884,8 +884,8 @@ sub normal my $call = $field[1]; # input filter if required - my $ref = Route::get($call) || Route->new($call); - return unless $self->in_filter_route($ref); +# my $ref = Route::get($call) || Route->new($call); +# return unless $self->in_filter_route($ref); # add this station to the user database, if required my $user = DXUser->get_current($call); @@ -896,12 +896,27 @@ sub normal } elsif ($field[2] == 2) { $user->qth($field[3]); } elsif ($field[2] == 3) { - my ($lat, $long) = DXBearing::stoll($field[3]); - $user->lat($lat); - $user->long($long); - $user->qra(DXBearing::lltoqra($lat, $long)) unless $user->qra && DXBearing::is_qra($user->qra); + if (is_latlong($field[3])) { + my ($lat, $long) = DXBearing::stoll($field[3]); + $user->lat($lat); + $user->long($long); + $user->qra(DXBearing::lltoqra($lat, $long)); + } else { + dbg('PCPROT: not a valid lat/long') if isdbg('chanerr'); + return; + } } elsif ($field[2] == 4) { $user->homenode($field[3]); + } elsif ($field[2] == 5) { + if (is_qra($field[3])) { + my ($lat, $long) = DXBearing::qratoll($field[3]); + $user->lat($lat); + $user->long($long); + $user->qra($field[3]); + } else { + dbg('PCPROT: not a valid QRA locator') if isdbg('chanerr'); + return; + } } $user->lastoper($main::systime); # to cut down on excessive for/opers being generated $user->put; @@ -1590,7 +1605,7 @@ sub process_rcmd_reply my $s = $rcmds{$fromnode}; if ($s) { my $dxchan = DXChannel->get($s->{call}); - my $ref = DXChannel->get($user) || $dxchan; + my $ref = $user eq $tonode ? $dxchan : (DXChannel->get($user) || $dxchan); $ref->send($line) if $ref; delete $rcmds{$fromnode} if !$dxchan; } else { @@ -1739,7 +1754,7 @@ sub send_route $routeit = adjust_hops($self, $line); # adjust its hop count by node name next unless $routeit; } - $self->send($routeit) if $self->{routefilter} || !$self->{isolate}; + $self->send($routeit); } } } @@ -1755,7 +1770,7 @@ sub broadcast_route foreach $dxchan (@dxchan) { next if $dxchan == $self; next if $dxchan == $me; - if ($dxchan->{routefilter} || !$self->{isolate}) { + if ($dxchan->{routefilter} || (!$self->{isolate} && !$dxchan->{isolate})) { $dxchan->send_route($generate, @_) } else { dbg('DXPROT: isolated') if isdbg('chanerr');