add ip addresses to dxspots emitted as PC61
[spider.git] / perl / Spot.pm
index 5224f11f8bf261007e939299b27138c0a2017526..b8efd3d17c7af576ef387c908e41acfbb3eef8d5 100644 (file)
@@ -21,7 +21,8 @@ use QSL;
 
 use strict;
 
-use vars qw($fp $statp $maxspots $defaultspots $maxdays $dirprefix $duplth $dupage $filterdef $totalspots $hfspots $vhfspots $maxcalllth $can_encode);
+use vars qw($fp $statp $maxspots $defaultspots $maxdays $dirprefix $duplth $dupage $filterdef
+                       $totalspots $hfspots $vhfspots $maxcalllth $can_encode $use_db_for_search);
 
 $fp = undef;
 $statp = undef;
@@ -52,6 +53,7 @@ $filterdef = bless ([
                                         
                         ], 'Filter::Cmd');
 $totalspots = $hfspots = $vhfspots = 0;
+$use_db_for_search = 0;
 
 # create a Spot Object
 sub new
@@ -159,7 +161,7 @@ sub prefix
 # fix up the full spot data from the basic spot data
 sub prepare
 {
-       # $freq, $call, $t, $comment, $spotter = @_
+       # $freq, $call, $t, $comment, $spotter, node, ip address = @_
        my @out = @_[0..4];      # just up to the spotter
 
        # normalise frequency
@@ -178,7 +180,9 @@ sub prepare
        my @spt = Prefix::cty_data($out[4]);
        push @out, $spt[0];
        push @out, $_[5];
-       return (@out, @spd[1,2], @spt[1,2], $spd[3], $spt[3]);
+       push @out, @spd[1,2], @spt[1,2], $spd[3], $spt[3];
+       push @out, $_[6] if $_[6] && is_ipaddr($_[6]);
+       return @out;
 }
 
 sub add
@@ -250,7 +254,7 @@ sub search
        
        $to = $from + $maxspots if $to - $from > $maxspots || $to - $from <= 0;
 
-       if ($main::dbh) {
+       if ($main::dbh && $use_db_for_search) {
                return $main::dbh->spot_search($expr, $dayfrom, $dayto, $to-$from, $dxchan);
        }
 
@@ -402,11 +406,10 @@ sub dup
                }
        }
        my $otext = $text;
-       $text = Encode::encode("iso-8859-1", $text) if $main::can_encode && Encode::is_utf8($text, 1);
+#      $text = Encode::encode("iso-8859-1", $text) if $main::can_encode && Encode::is_utf8($text, 1);
        $text =~ s/^\+\w+\s*//;                 # remove leading LoTW callsign
-       $text = pack("C*", map {$_ & 127} unpack("C*", $text));
        $text =~ s/\s{2,}[\dA-Z]?[A-Z]\d?$// if length $text > 24;
-       $text =~ s/[^\w]//g;
+       $text =~ s/[\W\x00-\x2F\x7B-\xFF]//g; # tautology, just to make quite sure!
        $text = substr($text, 0, $duplth) if length $text > $duplth; 
        my $ldupkey = "X$freq|$call|$by|$text";
        my $t = DXDupe::find($ldupkey);