X-Git-Url: http://gb7djk.dxcluster.net/gitweb/gitweb.cgi?a=blobdiff_plain;f=perl%2FDXMsg.pm;h=dce9c04f28f0b8df2b902ece0ba6c12d145968a9;hb=20a1e972197e2d479bd35da2deb2bce22209a10e;hp=55834fc3a6edf0a408c6091df4fe7e0caffcef0e;hpb=15a742ea0f1983282fdff272a362555afbdb99ad;p=spider.git diff --git a/perl/DXMsg.pm b/perl/DXMsg.pm index 55834fc3..dce9c04f 100644 --- a/perl/DXMsg.pm +++ b/perl/DXMsg.pm @@ -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;