fixed compilation probs
authordjk <djk>
Sun, 27 Jun 1999 17:29:44 +0000 (17:29 +0000)
committerdjk <djk>
Sun, 27 Jun 1999 17:29:44 +0000 (17:29 +0000)
Changes
cmd/Commands_en.hlp
cmd/catchup.pl
cmd/kill.pl
cmd/uncatchup.pl
perl/DXCommandmode.pm
perl/DXMsg.pm
perl/DXProt.pm
perl/Messages

diff --git a/Changes b/Changes
index d154f217945d91eab303bc7a6eb45995cdeb5b87..1a214559d4c78ed3127f6b197a085f96b48073b8 100644 (file)
--- a/Changes
+++ b/Changes
@@ -7,6 +7,8 @@ same node.
 4. Added 'catchup' command which will 'catchup' messages to date for a node. 
 This means that when you start forwarding to a node, it doesn't get all the
 messages queued up that are probably old.
+5. added 'uncatchup' which does the opposite of the above.
+6. fixed kill full and PC49 handling so that it actually works.
 21Jun99=======================================================================
 1. changed regex for cluster->client msgs so that strings like |---| are no
 longer ignored.
index f51401e6784b62b20b11512ebd7672a6980abcb8..b41d0d83e92314017eb9fc1b15f6cc15d089dee8 100644 (file)
@@ -34,6 +34,25 @@ DX cluster <callsign>. This process creates a new 'client' process which will
 use the script in /spider/connect/<callsign> to effect the 'chat' exchange
 necessary to traverse the network(s) to logon to the cluster <callsign>.
 
+=== 9^CATCH <node call> All|[<msgno> ...]^Mark a message as sent
+=== 9^UNCATCH <node call> All|[msgno> ...]^Unmark a message as sent
+When you send messages the fact that you have forwarded it to another node 
+is remembered so that it isn't sent again. When you have a new partner
+node and you add their callsign to your /spider/msg/forward.pl file, all
+outstanding non-private messages will be forwarded to them. This may well
+be ALL the non-private messages. You can prevent this by using these 
+commmands:-
+
+    catch GB7DJK all
+    catch GB7DJK 300 301 302 303
+       
+and to undo what you have just done:-
+
+       uncatch GB7DJK all
+       uncatch GB7DJK 300 301 302 303
+
+which will arrange for them to be forward candidates again.
+
 === 9^DEBUG^Set the cluster program into debug mode
 Executing this command will only have an effect if you are running the cluster
 in debug mode i.e.
index 4cda1203fe85d8dc93ae41b0438897a0cb724c3b..41f2edd7e0a7bd358b5e0d98b2936693d603f5b7 100644 (file)
 #
 
 my ($self, $line) = @_;
+return (1, $self->msg('e5')) if $self->priv < 9;
+
 my @f = split /\s+/, $line;
+return (1, "usage: catchup <node call> all|[<msgno ...]") unless @f >= 2;
+
 my $call = uc shift @f;
+my $user = DXUser->get_current($call);
+return (1, "$call not a node") unless $user && $user->sort ne 'U';
+
 my @out;
+my $ref;
+my @ref;
+
+# get a more or less valid set of messages
+foreach my $msgno (@f) {
+       if ($msgno =~ /^al/oi) {
+               @ref = DXMsg::get_all();
+               last;
+       }
+       $ref = DXMsg::get($msgno);
+       unless ($ref) {
+               push @out, $self->msg('m13', $msgno);
+               next;
+       }
+       push @ref, $ref;
+}
 
+foreach $ref (@ref) {
+       next if $ref->{private};
+       unless (grep {$_ eq $call} @{$ref->{gotit}}) {
+               push @{$ref->{gotit}}, $call; # mark this up as being received
+               $ref->store( [ $ref->read_msg_body() ] );       # re- store the file
+               push @out, $self->msg('m14', $ref->{msgno}, $call);
+       }
+}
 
 return (1, @out);
index fb58bc247c09655408dbb91193f7fe596c518e75..c2062ba4bd69e0327ad98fac206f5e1b66f75279 100644 (file)
@@ -64,10 +64,10 @@ while (@f) {
 foreach $ref ( @refs) {
        Log('msg', "Message $ref->{msgno} from $ref->{from} to $ref->{to} deleted by $call");
        if ($full) {
-               DXProt::broadcast_all_ak1a(DXProt::pc49($self->call, $ref->{subject}), $DXProt::me);
+               DXProt::broadcast_ak1a(DXProt::pc49($ref->{from}, $ref->{subject}), $DXProt::me);
        }
        $ref->del_msg;
-       push @out, "Message $ref->{msgno} deleted";
+       push @out, $self->msg('m12', $ref->msgno);
 }
 
 return (1, @out);
index 15edb1a48f5141ea4e300e865f4f8504f8b5a40a..2c750b5eefdcc4e0a03f6d3b6b7894becc7611d6 100644 (file)
@@ -1,7 +1,7 @@
 #
-# uncatchup some or all of the non-private messages for a node.
+# catchup some or all of the non-private messages for a node.
 #
-# in other words mark  messages as NOT being already received
+# in other words mark all messages as being already received
 # by this node.
 #
 # $Id$
 #
 
 my ($self, $line) = @_;
+return (1, $self->msg('e5')) if $self->priv < 9;
+
 my @f = split /\s+/, $line;
+return (1, "usage: catchup <node call> all|[<msgno ...]") unless @f >= 2;
+
 my $call = uc shift @f;
+my $user = DXUser->get_current($call);
+return (1, "$call not a node") unless $user && $user->sort ne 'U';
+
 my @out;
+my $ref;
+my @ref;
+
+# get a more or less valid set of messages
+foreach my $msgno (@f) {
+       if ($msgno =~ /^al/oi) {
+               @ref = DXMsg::get_all();
+               last;
+       }
+       $ref = DXMsg::get($msgno);
+       unless ($ref) {
+               push @out, $self->msg('m13', $msgno);
+               next;
+       }
+       push @ref, $ref;
+}
 
+foreach $ref (@ref) {
+       next if $ref->{private};
+       if (grep {$_ eq $call} @{$ref->{gotit}}) {
+               $ref->{gotit} = [ grep {$_ ne $call} @{$ref->{gotit}} ]; # mark this up as NOT being received
+               $ref->store( [ $ref->read_msg_body() ] );       # re- store the file
+               push @out, $self->msg('m15', $ref->{msgno}, $call);
+       }
+}
 
 return (1, @out);
+               
index 24d3f0a9597fe475c2e178290fe1b2f3e2e3d17f..35fd35cc5fc4b510f3acc70675616dcb168c9b36 100644 (file)
@@ -89,7 +89,7 @@ sub start
        $self->send($self->msg('qthe1')) if !$user->qth;
        $self->send($self->msg('qll')) if !$user->qra || (!$user->lat && !$user->long);
        $self->send($self->msg('hnodee1')) if !$user->qth;
-       $self->send($self->msg('msgnew')) if DXMsg::for_me($call);
+       $self->send($self->msg('m9')) if DXMsg::for_me($call);
 
        # get the filters
        $self->{spotfilter} = Filter::read_in('spots', $call);
index c1f0ae7a2ac8ef3ef970edda16f733485721f90c..146392f44f970a83eb269167c1590a29b71cb414 100644 (file)
@@ -124,17 +124,17 @@ sub process
        my ($self, $line) = @_;
 
        # this is periodic processing
-       if (undef $self || undef $line) {
+       if (!$self || !$line) {
 
                # wander down the work queue stopping any messages that have timed out
-               for (keys %work) {
-                       my $ref = $work{$_};
+               for (keys %busy) {
+                       my $node = $_;
+                       my $ref = $busy{$_};
                        if ($main::systime > $ref->{lastt} + $timeout) {
-                               my $tonode = $ref->{tonode};
-                               $ref->stop_msg();
+                               $ref->stop_msg($node);
 
                                # delay any outgoing messages that fail
-                               $ref->{waitt} = $main::systime + $waittime if $tonode ne $main::mycall;
+                               $ref->{waitt} = $main::systime + $waittime if $node ne $main::mycall;
                        }
                }
                
@@ -155,7 +155,7 @@ sub process
                        if (exists $busy{$f[2]}) {
                                my $ref = $busy{$f[2]};
                                my $tonode = $ref->{tonode};
-                               $ref->stop_msg();
+                               $ref->stop_msg($self->call);
                        }
 
                        my $t = cltounix($f[5], $f[6]);
@@ -243,7 +243,7 @@ sub process
                                                my $m;
                                                for $m (@msg) {
                                                        if ($ref->{subject} eq $m->{subject} && $ref->{t} == $m->{t} && $ref->{from} eq $m->{from}) {
-                                                               $ref->stop_msg();
+                                                               $ref->stop_msg($self->call);
                                                                my $msgno = $m->{msgno};
                                                                dbg('msg', "duplicate message to $msgno\n");
                                                                Log('msg', "duplicate message to $msgno");
@@ -253,7 +253,7 @@ sub process
                                                        
                                                # look for 'bad' to addresses 
                                                if (grep $ref->{to} eq $_, @badmsg) {
-                                                       $ref->stop_msg();
+                                                       $ref->stop_msg($self->call);
                                                        dbg('msg', "'Bad' TO address $ref->{to}");
                                                        Log('msg', "'Bad' TO address $ref->{to}");
                                                        return;
@@ -268,7 +268,7 @@ sub process
                                                Log('msg', "Message $ref->{msgno} from $ref->{from} received from $f[2] for $ref->{to}");
                                        }
                                }
-                               $ref->stop_msg();
+                               $ref->stop_msg($self->call);
                                queue_msg(0);
                        } else {
                                $self->send(DXProt::pc42($f[2], $f[1], $f[3])); # unknown stream
@@ -288,7 +288,7 @@ sub process
                                        push @{$ref->{gotit}}, $f[2]; # mark this up as being received
                                        $ref->store($ref->{lines});     # re- store the file
                                }
-                               $ref->stop_msg();
+                               $ref->stop_msg($self->call);
                        } else {
                                $self->send(DXProt::pc42($f[2], $f[1], $f[3])); # unknown stream
                        } 
@@ -335,7 +335,7 @@ sub process
                        dbg('msg', "stream $f[3]: abort received\n");
                        my $ref = $work{"$f[2]$f[3]"};
                        if ($ref) {
-                               $ref->stop_msg();
+                               $ref->stop_msg($self->call);
                                $ref = undef;
                        }
                        
@@ -344,9 +344,10 @@ sub process
 
                if ($pcno == 49) {      # global delete on subject
                        for (@msg) {
-                               if ($_->{subject} eq $f[2]) {
+                               if ($_->{from} eq $f[1] && $_->{subject} eq $f[2]) {
                                        $_->del_msg();
-                                       Log('msg', "Message $_->{msgno} fully deleted by $f[1]");
+                                       Log('msg', "Message $_->{msgno} from $_->{from} ($_->{subject}) fully deleted");
+                                       DXProt::broadcast_ak1a($line, $self);
                                }
                        }
                }
@@ -624,8 +625,8 @@ sub start_msg
        $self->{count} = 0;
        $self->{tonode} = $dxchan->call;
        $self->{fromnode} = $main::mycall;
-       $busy{$dxchan->call} = $self;
-       $work{"$self->{tonode}"} = $self;
+       $busy{$self->{tonode}} = $self;
+       $work{$self->{tonode}} = $self;
        $dxchan->send(DXProt::pc28($self->{tonode}, $self->{fromnode}, $self->{to}, $self->{from}, $self->{t}, $self->{private}, $self->{subject}, $self->{origin}, $self->{rrreq}));
 }
 
@@ -651,8 +652,8 @@ sub get_fwq
 # stop a message from continuing, clean it out, unlock interlocks etc
 sub stop_msg
 {
-       my ($self, $dxchan) = @_;
-       my $node = $self->{tonode}
+       my $self = shift;
+       my $node = shift;
        my $stream = $self->{stream} if exists $self->{stream};
        
        
@@ -791,7 +792,7 @@ sub do_send_stuff
                $loc->{lines} = [];
                $self->state('sendbody');
                #push @out, $self->msg('sendbody');
-               push @out, $self->msg('m8');)
+               push @out, $self->msg('m8');
        } elsif ($self->state eq 'sendbody') {
                confess "local var gone missing" if !ref $self->{loc};
                my $loc = $self->{loc};
index 0d137e529bd3710f7dd391eadf9ee126f4fe0083..78e0e0d1262a984052057cd3f872bf546b358394 100644 (file)
@@ -573,7 +573,7 @@ sub normal
                }
 
                if (($pcno >= 28 && $pcno <= 33) || $pcno == 40 || $pcno == 42 || $pcno == 49) { # mail/file handling
-                       if ($field[1] eq $main::mycall) {
+                       if ($pcno == 49 || $field[1] eq $main::mycall) {
                                DXMsg::process($self, $line);
                        } else {
                                route($field[1], $line);
@@ -663,7 +663,7 @@ sub normal
                if ($pcno == 43) {
                        last SWITCH;
                }
-               if ($pcno == 37 || $pcno == 44 || $pcno == 45 || $pcno == 46 || $pcno == 47 || $pcno == 49) {
+               if ($pcno == 37 || $pcno == 44 || $pcno == 45 || $pcno == 46 || $pcno == 47) {
                        if ($field[1] eq $main::mycall) {
                                ;
                        } else {
index b1ef57ad351c3d1034cf2a1a8d8bc0e108857e9c..646840c8b9b4ae9ba5c08dd033a3369e676b9ac3 100644 (file)
@@ -82,6 +82,10 @@ package DXM;
                                m9 => 'New mail has arrived for you',
                                m10 => 'Message Aborted',
                                m11 => 'Message no $_[0] saved and directed to $_[1]',
+                               m12 => 'Message no $_[0] deleted',
+                               m13 => 'Message no $_[0] missing',
+                               m14 => 'Message no $_[0] marked as sent to $_[1]',
+                               m15 => 'Message no $_[0] unmarked as sent to $_[1]',
                                merge1 => 'Merge request for $_[1] spots and $_[2] WWV sent to $_[0]',
                                namee1 => 'Please enter your name, set/name <your name>',
                                namee2 => 'Can\'t find user $_[0]!',