From 3eb722692c2c1e9de84752391d5b6330e062c7e6 Mon Sep 17 00:00:00 2001 From: djk Date: Sun, 27 Jun 1999 17:29:44 +0000 Subject: [PATCH] fixed compilation probs --- Changes | 2 ++ cmd/Commands_en.hlp | 19 +++++++++++++++++++ cmd/catchup.pl | 31 +++++++++++++++++++++++++++++++ cmd/kill.pl | 4 ++-- cmd/uncatchup.pl | 36 ++++++++++++++++++++++++++++++++++-- perl/DXCommandmode.pm | 2 +- perl/DXMsg.pm | 39 ++++++++++++++++++++------------------- perl/DXProt.pm | 4 ++-- perl/Messages | 4 ++++ 9 files changed, 115 insertions(+), 26 deletions(-) diff --git a/Changes b/Changes index d154f217..1a214559 100644 --- 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. diff --git a/cmd/Commands_en.hlp b/cmd/Commands_en.hlp index f51401e6..b41d0d83 100644 --- a/cmd/Commands_en.hlp +++ b/cmd/Commands_en.hlp @@ -34,6 +34,25 @@ DX cluster . This process creates a new 'client' process which will use the script in /spider/connect/ to effect the 'chat' exchange necessary to traverse the network(s) to logon to the cluster . +=== 9^CATCH All|[ ...]^Mark a message as sent +=== 9^UNCATCH 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. diff --git a/cmd/catchup.pl b/cmd/catchup.pl index 4cda1203..41f2edd7 100644 --- a/cmd/catchup.pl +++ b/cmd/catchup.pl @@ -10,9 +10,40 @@ # my ($self, $line) = @_; +return (1, $self->msg('e5')) if $self->priv < 9; + my @f = split /\s+/, $line; +return (1, "usage: catchup all|[= 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); diff --git a/cmd/kill.pl b/cmd/kill.pl index fb58bc24..c2062ba4 100644 --- a/cmd/kill.pl +++ b/cmd/kill.pl @@ -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); diff --git a/cmd/uncatchup.pl b/cmd/uncatchup.pl index 15edb1a4..2c750b5e 100644 --- a/cmd/uncatchup.pl +++ b/cmd/uncatchup.pl @@ -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$ @@ -10,9 +10,41 @@ # my ($self, $line) = @_; +return (1, $self->msg('e5')) if $self->priv < 9; + my @f = split /\s+/, $line; +return (1, "usage: catchup all|[= 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); + diff --git a/perl/DXCommandmode.pm b/perl/DXCommandmode.pm index 24d3f0a9..35fd35cc 100644 --- a/perl/DXCommandmode.pm +++ b/perl/DXCommandmode.pm @@ -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); diff --git a/perl/DXMsg.pm b/perl/DXMsg.pm index c1f0ae7a..146392f4 100644 --- a/perl/DXMsg.pm +++ b/perl/DXMsg.pm @@ -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}; diff --git a/perl/DXProt.pm b/perl/DXProt.pm index 0d137e52..78e0e0d1 100644 --- a/perl/DXProt.pm +++ b/perl/DXProt.pm @@ -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 { diff --git a/perl/Messages b/perl/Messages index b1ef57ad..646840c8 100644 --- a/perl/Messages +++ b/perl/Messages @@ -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 ', namee2 => 'Can\'t find user $_[0]!', -- 2.43.0