1. Added msg command to allow the changing of To, From, Subject and so on the
[spider.git] / perl / DXMsg.pm
index 42d5c65ed6f772bdcc52987dddaacf23a602da65..3262a44df98f7c13af304c97c8ece3d735154b0c 100644 (file)
@@ -44,7 +44,7 @@ $last_clean = 0;                              # last time we did a clean
 @forward = ();                  # msg forward table
 $timeout = 30*60;               # forwarding timeout
 $waittime = 60*60;              # time an aborted outgoing message waits before trying again
-$queueinterval = 5*60;          # run the queue every 5 minutes
+$queueinterval = 2*60;          # run the queue every 2 minutes
 $lastq = 0;
 
 
@@ -52,28 +52,28 @@ $badmsgfn = "$msgdir/badmsg.pl";  # list of TO address we wont store
 $forwardfn = "$msgdir/forward.pl";  # the forwarding table
 
 %valid = (
-                 fromnode => '9,From Node',
-                 tonode => '9,To Node',
+                 fromnode => '5,From Node',
+                 tonode => '5,To Node',
                  to => '0,To',
                  from => '0,From',
                  t => '0,Msg Time,cldatetime',
-                 private => '9,Private',
+                 private => '5,Private',
                  subject => '0,Subject',
                  linesreq => '0,Lines per Gob',
-                 rrreq => '9,Read Confirm',
+                 rrreq => '5,Read Confirm',
                  origin => '0,Origin',
                  lines => '5,Data',
                  stream => '9,Stream No',
-                 count => '9,Gob Linecnt',
-                 file => '9,File?,yesno',
-                 gotit => '9,Got it Nodes,parray',
-                 lines => '9,Lines,parray',
-                 'read' => '9,Times read',
+                 count => '5,Gob Linecnt',
+                 file => '5,File?,yesno',
+                 gotit => '5,Got it Nodes,parray',
+                 lines => '5,Lines,parray',
+                 'read' => '5,Times read',
                  size => '0,Size',
                  msgno => '0,Msgno',
                  keep => '0,Keep this?,yesno',
-                 lastt => '9,Last processed,cldatetime',
-                 waitt => '9,Wait until,cldatetime',
+                 lastt => '5,Last processed,cldatetime',
+                 waitt => '5,Wait until,cldatetime',
                 );
 
 sub DESTROY
@@ -135,6 +135,7 @@ sub process
                        my $node = $_;
                        my $ref = $busy{$_};
                        if (exists $ref->{lastt} && $main::systime > $ref->{lastt} + $timeout) {
+                               dbg('msg', "Timeout, stopping msgno: $ref->{msgno} -> $node");
                                $ref->stop_msg($node);
 
                                # delay any outgoing messages that fail
@@ -165,6 +166,7 @@ sub process
                        if (exists $busy{$f[2]}) {
                                my $ref = $busy{$f[2]};
                                my $tonode = $ref->{tonode};
+                               dbg('msg', "Busy, stopping msgno: $ref->{msgno} -> $f[2]");
                                $ref->stop_msg($self->call);
                        }
 
@@ -184,6 +186,13 @@ sub process
                        $busy{$f[2]} = $ref; # set interlock
                        $self->send(DXProt::pc30($f[2], $f[1], $stream)); # send ack
                        $ref->{lastt} = $main::systime;
+
+                       # 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) {
+                               $ref->{private} = 1;
+                               dbg('msg', "set bull to $ref->{to} to private");
+                       }
                        last SWITCH;
                }
                
@@ -198,6 +207,9 @@ sub process
                                        $ref->{count} = 0;
                                }
                                $ref->{lastt} = $main::systime;
+                       } else {
+                               dbg('msg', "PC29 from unknown stream $f[3] from $f[2]" );
+                               $self->send(DXProt::pc42($f[2], $f[1], $f[3])); # unknown stream
                        }
                        last SWITCH;
                }
@@ -217,6 +229,7 @@ sub process
                                $ref->send_tranche($self);
                                $ref->{lastt} = $main::systime;
                        } else {
+                               dbg('msg', "PC30 from unknown stream $f[3] from $f[2]" );
                                $self->send(DXProt::pc42($f[2], $f[1], $f[3])); # unknown stream
                        } 
                        last SWITCH;
@@ -229,6 +242,7 @@ sub process
                                $ref->send_tranche($self);
                                $ref->{lastt} = $main::systime;
                        } else {
+                               dbg('msg', "PC31 from unknown stream $f[3] from $f[2]" );
                                $self->send(DXProt::pc42($f[2], $f[1], $f[3])); # unknown stream
                        } 
                        last SWITCH;
@@ -281,6 +295,7 @@ sub process
                                }
                                $ref->stop_msg($self->call);
                        } else {
+                               dbg('msg', "PC32 from unknown stream $f[3] from $f[2]" );
                                $self->send(DXProt::pc42($f[2], $f[1], $f[3])); # unknown stream
                        }
                        # queue_msg(0);
@@ -300,6 +315,7 @@ sub process
                                }
                                $ref->stop_msg($self->call);
                        } else {
+                               dbg('msg', "PC33 from unknown stream $f[3] from $f[2]" );
                                $self->send(DXProt::pc42($f[2], $f[1], $f[3])); # unknown stream
                        } 
 
@@ -337,6 +353,7 @@ sub process
                        $ref->{stream} = $stream;
                        $ref->{count} = 0;      # no of lines between PC31s
                        $ref->{file} = 1;
+                       $ref->{lastt} = $main::systime;
                        $work{"$f[2]$stream"} = $ref; # store in work
                        $self->send(DXProt::pc30($f[2], $f[1], $stream)); # send ack 
                        
@@ -571,7 +588,7 @@ sub queue_msg
 
                # ignore 'delayed' messages until their waiting time has expired
                if (exists $ref->{waitt}) {
-                       next if $ref->{waitt} < $main::systime;
+                       next if $ref->{waitt} > $main::systime;
                        delete $ref->{waitt};
                } 
                
@@ -639,6 +656,7 @@ sub start_msg
        $self->{fromnode} = $main::mycall;
        $busy{$self->{tonode}} = $self;
        $work{$self->{tonode}} = $self;
+       $self->{lastt} = $main::systime;
        $dxchan->send(DXProt::pc28($self->{tonode}, $self->{fromnode}, $self->{to}, $self->{from}, $self->{t}, $self->{private}, $self->{subject}, $self->{origin}, $self->{rrreq}));
 }