1. Various detail changes to remove some more warning with -w on
[spider.git] / perl / DXProt.pm
index c1fad11126edbc072d6681e71a70834ef5856f8e..8bd96984b3278837974d71d6600c91859cf0cd2f 100644 (file)
@@ -177,7 +177,7 @@ sub normal
                        
                        $spotdup{$dupkey} = $d;
                        
-                       my $spot = Spot::add($freq, $field[2], $d, $text, $spotter);
+                       my $spot = Spot::add($freq, $field[2], $d, $text, $spotter, $field[7]);
                        
                        # send orf to the users
                        if ($spot && $pcno == 11) {
@@ -244,12 +244,13 @@ sub normal
                if ($pcno == 16) {              # add a user
                        my $node = DXCluster->get_exact($field[1]); 
                        last SWITCH if !$node; # ignore if havn't seen a PC19 for this one yet
+                       last SWITCH unless $node->isa('DXNode');
                        my $i;
                        
                        
                        for ($i = 2; $i < $#field; $i++) {
-                               my ($call, $confmode, $here) = $field[$i] =~ /^(\S+) (-) (\d)/o;
-                               next if length $call < 3;
+                               my ($call, $confmode, $here) = $field[$i] =~ /^(\S+) (\S) (\d)/o;
+                               next if length $call < 3 || length $call > 8;
                                next if !$confmode;
                                $call = uc $call;
                                next if DXCluster->get_exact($call); # we already have this (loop?)
@@ -380,8 +381,32 @@ sub normal
                        last SWITCH;
                }
                
-               if ($pcno == 25) {
-                       last SWITCH;
+               if ($pcno == 25) {      # merge request
+                       unless ($field[1] eq $main::mycall) {
+                               dbg('chan', "merge request to $field[1] from $field[2] ignored");
+                               return;
+                       }
+
+                       Log('DXProt', "Merge request for $field[3] spots and $field[4] WWV from $field[1]");
+                       
+                       # spots
+                       if ($field[3] > 0) {
+                               my @in = reverse Spot::search(1, undef, undef, 0, $field[3]-1);
+                               my $in;
+                               foreach $in (@in) {
+                                       $self->send(pc26(@{$in}[0..4], $in->[7]));
+                               }
+                       }
+
+                       # wwv
+                       if ($field[4] > 0) {
+                               my @in = reverse Geomag::search(0, $field[4], time, 1);
+                               my $in;
+                               foreach $in (@in) {
+                                       $self->send(pc27(@{$in}));
+                               }
+                       }
+                       return;
                }
                
                if (($pcno >= 28 && $pcno <= 33) || $pcno == 40 || $pcno == 42 || $pcno == 49) { # mail/file handling