added baddx and badmsg functionality
[spider.git] / perl / DXMsg.pm
index 8dcb09924630aab7de7c3a3547b6988f54dd75fc..f10debfe8818d4f2c567e47c30e859df4a580ea8 100644 (file)
@@ -29,7 +29,8 @@ use FileHandle;
 use Carp;
 
 use strict;
-use vars qw(%work @msg $msgdir %valid %busy $maxage $last_clean);
+use vars qw(%work @msg $msgdir %valid %busy $maxage $last_clean
+                       @badmsg $badmsgfn);
 
 %work = ();                                            # outstanding jobs
 @msg = ();                                             # messages we have
@@ -38,6 +39,8 @@ $msgdir = "$main::root/msg";  # directory contain the msgs
 $maxage = 30 * 86400;                  # the maximum age that a message shall live for if not marked 
 $last_clean = 0;                               # last time we did a clean
 
+$badmsgfn = "$main::data/badmsg.pl";  # list of TO address we wont store
+
 %valid = (
                  fromnode => '9,From Node',
                  tonode => '9,To Node',
@@ -195,6 +198,14 @@ sub process
                                                                return;
                                                        }
                                                }
+                                                       
+                                               # look for 'bad' to addresses 
+                                               if (grep $ref->{to} eq $_, @badmsg) {
+                                                       $ref->stop_msg($self);
+                                                       dbg('msg', "'Bad' TO address $ref->{to}");
+                                                       Log('msg', "'Bad' TO address $ref->{to}");
+                                                       return;
+                                               }
 
                                                $ref->{msgno} = next_transno("Msgno");
                                                push @{$ref->{gotit}}, $f[2]; # mark this up as being received
@@ -621,7 +632,10 @@ sub init
        my $dir = new FileHandle;
        my @dir;
        my $ref;
-       
+
+       do "$badmsgfn" if -e "$badmsgfn";
+       print "$@\n" if $@;
+
        # read in the directory
        opendir($dir, $msgdir) or confess "can't open $msgdir $!";
        @dir = readdir($dir);
@@ -629,15 +643,21 @@ sub init
 
        @msg = ();
        for (sort @dir) {
-               next if /^\./o;
-               next if ! /^m\d+/o;
+               next unless /^m\d+/o;
                
                $ref = read_msg_header("$msgdir/$_");
-               next if !$ref;
+               next unless $ref;
                
+               # delete any messages to 'badmsg.pl' places
+               if (grep $ref->{to} eq $_, @badmsg) {
+                       dbg('msg', "'Bad' TO address $ref->{to}");
+                       Log('msg', "'Bad' TO address $ref->{to}");
+                       $ref->del_msg;
+                       next;
+               }
+
                # add the message to the available queue
                add_dir($ref); 
-               
        }
 }