remove Prot.pm, sort %valid fields
[spider.git] / perl / DXMsg.pm
index 04ef99cb8ecffccfb21d7215b590a886497d2a8d..153a2c1b1dc998379fd3e69ea999d7bd3f6a47d9 100644 (file)
@@ -4,7 +4,7 @@
 #
 # Copyright (c) 1998 Dirk Koopman G1TLH
 #
-# $Id$
+#
 #
 #
 # Notes for implementors:-
@@ -32,12 +32,6 @@ eval {
 
 use strict;
 
-use vars qw($VERSION $BRANCH);
-$VERSION = sprintf( "%d.%03d", q$Revision$ =~ /(\d+)\.(\d+)/ );
-$BRANCH = sprintf( "%d.%03d", q$Revision$ =~ /\d+\.\d+\.(\d+)\.(\d+)/  || (0,0));
-$main::build += $VERSION;
-$main::branch += $BRANCH;
-
 use vars qw(%work @msg $msgdir %valid %busy $maxage $last_clean $residencetime
                        @badmsg @swop $swopfn $badmsgfn $forwardfn @forward $timeout $waittime
                        $email_server $email_prog $email_from
@@ -72,30 +66,30 @@ $importfn = "$msgdir/import";       # import directory
 
 
 %valid = (
-                 fromnode => '5,From Node',
-                 tonode => '5,To Node',
-                 to => '0,To',
-                 from => '0,From',
-                 t => '0,Msg Time,cldatetime',
-                 private => '5,Private,yesno',
-                 subject => '0,Subject',
-                 linesreq => '0,Lines per Gob',
-                 rrreq => '5,Read Confirm,yesno',
-                 origin => '0,Origin',
-                 lines => '5,Data',
-                 stream => '9,Stream No',
+                 'read' => '5,Times read',
                  count => '5,Gob Linecnt',
+                 delete => '5,Awaiting Delete,yesno',
+                 deletetime => '5,Deletion Time,cldatetime',
                  file => '5,File?,yesno',
+                 from => '0,From',
+                 fromnode => '5,From Node',
                  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 => '5,Last processed,cldatetime',
+                 lines => '5,Data',
+                 lines => '5,Lines,parray',
+                 linesreq => '0,Lines per Gob',
+                 msgno => '0,Msgno',
+                 origin => '0,Origin',
+                 private => '5,Private,yesno',
+                 rrreq => '5,Read Confirm,yesno',
+                 size => '0,Size',
+                 stream => '9,Stream No',
+                 subject => '0,Subject',
+                 t => '0,Msg Time,cldatetime',
+                 to => '0,To',
+                 tonode => '5,To Node',
                  waitt => '5,Wait until,cldatetime',
-                 delete => '5,Awaiting Delete,yesno',
-                 deletetime => '5,Deletion Time,cldatetime',
                 );
 
 # fix up the default sendmail if available
@@ -130,7 +124,7 @@ sub alloc
        $self->{gotit} = [];
 #      $self->{lastt} = $main::systime;
        $self->{lines} = [];
-       $self->{private} = 1 if $bulltopriv && DXUser->get_current($self->{to});
+       $self->{private} = 1 if $bulltopriv && DXUser::get_current($self->{to});
     
        return $self;
 }
@@ -151,7 +145,10 @@ sub process
        }
 
        # clean the message queue
-       clean_old() if $main::systime - $last_clean > 3600 ;
+       if ($main::systime >= $last_clean+3600) {
+               clean_old();
+               $last_clean = $main::systime;
+       }
        
        # actual remove all the 'deleted' messages in one hit.
        # this has to be delayed until here otherwise it only does one at 
@@ -161,7 +158,6 @@ sub process
                $_->del_msg;
        }
        
-       $last_clean = $main::systime;
 }
 
 # incoming message
@@ -204,7 +200,7 @@ sub handle_28
        $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});
+       my $uref = DXUser::get_current($ref->{to});
        if (is_callsign($ref->{to}) && !$ref->{private} && $uref && $uref->homenode) {
                $ref->{private} = 1;
                dbg("set bull to $ref->{to} to private") if isdbg('msg');
@@ -312,6 +308,14 @@ sub handle_32
                                $ref->store($ref->{lines});
                        } else {
 
+                               # is it too old
+                               if ($ref->{t}+$maxage < $main::systime ) {
+                                       $ref->stop_msg($fromnode);
+                                       dbg("old message from $ref->{from} -> $ref->{to} " . atime($ref->{t}) . " ignored") if isdbg('msg');
+                                       Log('msg', "old message from $ref->{from} -> $ref->{to} " . cldatetime($ref->{t}) . " ignored");
+                                       return;
+                               }
+
                                # does an identical message already exist?
                                my $m;
                                for $m (@msg) {
@@ -336,17 +340,21 @@ sub handle_32
                                }
 
                                # check the message for bad words 
+                               my @bad;
                                my @words;
+                               @bad = BadWords::check($ref->{subject});
+                               push @words, [$ref->{subject}, @bad] if @bad; 
                                for (@{$ref->{lines}}) {
-                                       push @words, BadWords::check($_);
+                                       @bad = BadWords::check($_);
+                                       push @words, [$_, @bad] if @bad;
                                }
-                               push @words, BadWords::check($ref->{subject});
                                if (@words) {
-                                       dbg("$ref->{from} swore: '@words' -> $ref->{to} '$ref->{subject}' origin: $ref->{origin} via " . $dxchan->call) if isdbg('msg');
-                                       Log('msg',"$ref->{from} swore: '@words' -> $ref->{to} origin: $ref->{origin} via " . $dxchan->call);
-                                       Log('msg',"subject: $ref->{subject}");
-                                       for (@{$ref->{lines}}) {
-                                               Log('msg', "line: $_");
+                                       LogDbg('msg',"$ref->{from} swore: $ref->{to} origin: $ref->{origin} via " . $dxchan->call);
+                                       LogDbg('msg',"subject: $ref->{subject}");
+                                       for (@words) {
+                                               my $r = $_;
+                                               my $line = shift @$r;
+                                               LogDbg('msg', "line: $line (using words: ". join(',', @$r).")");
                                        }
                                        $ref->stop_msg($fromnode);
                                        return;
@@ -468,8 +476,8 @@ sub notify
 {
        my $ref = shift;
        my $to = $ref->{to};
-       my $uref = DXUser->get_current($to);
-       my $dxchan = DXChannel->get($to);
+       my $uref = DXUser::get_current($to);
+       my $dxchan = DXChannel::get($to);
        if (((*Net::SMTP && $email_server) || $email_prog) && $uref && $uref->wantemail) {
                my $email = $uref->email;
                if ($email) {
@@ -1099,7 +1107,7 @@ sub do_send_stuff
                                        $ref->notify;
                                }
                        } else {
-                               Log('msg', $self->call . " swore to @{$loc->{to}} subject: '$loc->{subject}' in msg, REJECTED");
+                               LogDbg('msg', $self->call . " swore to @{$loc->{to}} subject: '$loc->{subject}' in msg, REJECTED");
                        }
                        
                        delete $loc->{lines};