X-Git-Url: http://gb7djk.dxcluster.net/gitweb/gitweb.cgi?a=blobdiff_plain;f=perl%2FDXProt.pm;h=88433b5726985a04dc17ed47163c270d272a125c;hb=7daa8d6f851534f39e6ed305b49d1f95c994bce6;hp=6202bb7a657cb0accbe6f9e31df00528381cc342;hpb=234277129947277869ddb9cadd853e42b9ffd3f5;p=spider.git diff --git a/perl/DXProt.pm b/perl/DXProt.pm index 6202bb7a..88433b57 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,14 +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); - - # dup check it - if (eph_dup($line)) { - dbg("PCPROT: ephemeral PC41 dup dropped") if isdbg('chanerr'); - return; - } +# 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); @@ -902,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; @@ -1582,9 +1591,9 @@ sub process_rcmd } else { my $ref = DXUser->get_current($tonode); if ($ref && $ref->is_clx) { - $self->route($tonode, pc84($tonode, $fromnode, $user, $cmd)); + $self->route($tonode, pc84($fromnode, $tonode, $user, $cmd)); } else { - $self->route($tonode, pc34($tonode, $fromnode, $cmd)); + $self->route($tonode, pc34($fromnode, $tonode, $cmd)); } } } @@ -1596,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 { @@ -1829,7 +1838,7 @@ sub eph_dup my $s = shift; # chop the end off - $s =~ s/\^H\d\d?\^?~?$//; + $s =~ s/\^H\d\d?\^?\~?$//; return 1 if exists $eph{$s}; $eph{$s} = $main::systime; return undef;