add 't' action to filter.pm
[spider.git] / perl / DXMsg.pm
index 55834fc3a6edf0a408c6091df4fe7e0caffcef0e..dce9c04f28f0b8df2b902ece0ba6c12d145968a9 100644 (file)
@@ -144,6 +144,7 @@ sub process
                                my $ref = $busy{$_};
                                if (exists $ref->{lastt} && $main::systime >= $ref->{lastt} + $timeout) {
                                        dbg('msg', "Timeout, stopping msgno: $ref->{msgno} -> $node");
+                                       Log('msg', "Timeout, stopping msgno: $ref->{msgno} -> $node");
                                        $ref->stop_msg($node);
                                        
                                        # delay any outgoing messages that fail
@@ -202,7 +203,7 @@ sub process
 
                        # look to see whether this is a non private message sent to a known callsign
                        my $uref = DXUser->get_current($ref->{to});
-                       if (iscallsign($ref->{to}) && !$ref->{private} && $uref && $uref->homenode) {
+                       if (is_callsign($ref->{to}) && !$ref->{private} && $uref && $uref->homenode) {
                                $ref->{private} = 1;
                                dbg('msg', "set bull to $ref->{to} to private");
                        }
@@ -458,7 +459,7 @@ sub del_msg
        my $self = shift;
        
        # remove it from the active message list
-       @msg = map { $_ != $self ? $_ : () } @msg;
+       @msg = grep { ref($_) && $_ != $self } @msg;
        
        # belt and braces (one day I will ask someone if this is REALLY necessary)
        delete $self->{gotit};
@@ -476,7 +477,7 @@ sub clean_old
        
        # mark old messages for deletion
        foreach $ref (@msg) {
-               if (!$ref->{keep} && $ref->{t} < $main::systime - $maxage) {
+               if (ref($ref) && !$ref->{keep} && $ref->{t} < $main::systime - $maxage) {
                        $ref->{deleteme} = 1;
                        delete $ref->{gotit};
                        delete $ref->{list};
@@ -486,7 +487,7 @@ sub clean_old
        }
        
        # remove them all from the active message list
-       @msg = map { $_->{deleteme} ? () : $_ } @msg;
+       @msg = grep { ref($_) && !$_->{deleteme} } @msg;
        $last_clean = $main::systime;
 }
 
@@ -612,7 +613,7 @@ sub queue_msg
                } 
 
                # deal with routed private messages
-               my $noderef;
+               my $dxchan;
                if ($ref->{private}) {
                        next if $ref->{'read'};           # if it is read, it is stuck here
                        $clref = DXCluster->get_exact($ref->{to});
@@ -621,10 +622,10 @@ sub queue_msg
                                my $hnode =  $uref->homenode if $uref;
                                $clref = DXCluster->get_exact($hnode) if $hnode;
                        }
-                       if ($clref && !grep { $clref->{dxchan} == $_ } DXCommandmode::get_all()) {
+                       if ($clref && !grep { $clref->dxchan == $_ } DXCommandmode::get_all()) {
                                next if $clref->call eq $main::mycall;  # i.e. it lives here
-                               $noderef = $clref->{dxchan};
-                               $ref->start_msg($noderef) if !get_busy($noderef->call)  && $noderef->state eq 'normal';
+                               $dxchan = $clref->dxchan;
+                               $ref->start_msg($dxchan) if $dxchan && !get_busy($dxchan->call)  && $dxchan->state eq 'normal';
                        }
                }
                
@@ -633,13 +634,13 @@ sub queue_msg
                # the nodelist up above, if there are sites that haven't got it yet
                # then start sending it - what happens when we get loops is anyone's
                # guess, use (to, from, time, subject) tuple?
-               foreach $noderef (@nodelist) {
-                       next if $noderef->call eq $main::mycall;
-                       next if grep { $_ eq $noderef->call } @{$ref->{gotit}};
-                       next unless $ref->forward_it($noderef->call);           # check the forwarding file
+               foreach $dxchan (@nodelist) {
+                       next if $dxchan->call eq $main::mycall;
+                       next if ref $ref->{gotit} && grep $_ eq $dxchan->call, @{$ref->{gotit}};
+                       next unless $ref->forward_it($dxchan->call);           # check the forwarding file
 
                        # if we are here we have a node that doesn't have this message
-                       $ref->start_msg($noderef) if !get_busy($noderef->call)  && $noderef->state eq 'normal';
+                       $ref->start_msg($dxchan) if !get_busy($dxchan->call)  && $dxchan->state eq 'normal';
                        last;
                }
 
@@ -669,7 +670,7 @@ sub start_msg
        my ($self, $dxchan) = @_;
        
        dbg('msg', "start msg $self->{msgno}\n");
-       $self->{linesreq} = 5;
+       $self->{linesreq} = 10;
        $self->{count} = 0;
        $self->{tonode} = $dxchan->call;
        $self->{fromnode} = $main::mycall;