added RR handling
authordjk <djk>
Mon, 8 Feb 1999 21:42:21 +0000 (21:42 +0000)
committerdjk <djk>
Mon, 8 Feb 1999 21:42:21 +0000 (21:42 +0000)
Changes
cmd/read.pl

diff --git a/Changes b/Changes
index 64e40c93d6909f548b3300489985e6d3ceac3465..9a06a748addc952598970f3af8060a3ab62f7d07 100644 (file)
--- a/Changes
+++ b/Changes
@@ -1,6 +1,10 @@
 08Feb99========================================================================
 1. added a $SIG{ALRM} in the client to actually catch the alarm when it goes 
-off which means that the netrom/ax25 call programs terminate properly!
+off which means that the netrom/ax25 call programs terminate properly (and not
+loop as fast as their little legs can paddle, soaking up CPU time).
+2. Implemented read receipts as an especial request from G4PDQ.
+3. Fiddled with DXUser a bit to see whether I can stop it core dumping on new
+users in PC16s on his machine.
 30Jan99========================================================================
 1. Some of the dates we get can cause crashes, tried to make it more robust (oh
 and Y2K compliant)
index e21a77e6eaf5d891791aa725ab081d2de665d73d..fbd243cf3513a326653f8dfe9d0588c5941fb558 100644 (file)
@@ -16,39 +16,58 @@ my $ref;
 # if there are no specified message numbers, try and find a private one
 # that I haven't read yet
 if (@f == 0) {
-  foreach $ref (DXMsg::get_all()) {
-       if ($ref->to eq $self->call && $ref->private && !$ref->read) {
-         push @f, $ref->msgno;
-         last;
+       foreach $ref (DXMsg::get_all()) {
+               if ($ref->to eq $self->call && $ref->private && !$ref->read) {
+                       push @f, $ref->msgno;
+                       last;
+               }
        }
-  }
 }
 
 return (1, $self->msg('read1')) if @f == 0;
 
 for $msgno (@f) {
-  $ref = DXMsg::get($msgno);
-  if (!$ref) {
-    push @out, $self->msg('read2', $msgno);
-       next;
-  }
-  if ($self->priv < 5 && $ref->private && $ref->to ne $self->call && $ref->from ne $self->call ) {
-    push @out, $self->msg('read3', $msgno);
-       next;
-  }
-  push @out, sprintf "Msg: %d From: %s Date: %6.6s %5.5s Subj: %-30.30s", $msgno,
-                     $ref->from, cldate($ref->t), ztime($ref->t), $ref->subject;
-  @body = $ref->read_msg_body;
-  push @out, @body;
-  
-  # mark my privates as read
-  if ($ref->private && $self->call eq $ref->to && $ref->read == 0) {
-    $ref->read(1);
-    $ref->store(\@body);    # note call by reference!
-  }
-  
-  # remember this one as the last one read
-  $self->lastread($msgno);
+       $ref = DXMsg::get($msgno);
+       if (!$ref) {
+               push @out, $self->msg('read2', $msgno);
+               next;
+       }
+       if ($self->priv < 5 && $ref->private && $ref->to ne $self->call && $ref->from ne $self->call ) {
+               push @out, $self->msg('read3', $msgno);
+               next;
+       }
+       push @out, sprintf "Msg: %d From: %s Date: %6.6s %5.5s Subj: %-30.30s", $msgno,
+               $ref->from, cldate($ref->t), ztime($ref->t), $ref->subject;
+       @body = $ref->read_msg_body;
+       push @out, @body;
+       
+       # mark my privates as read
+       if ($ref->private && $self->call eq $ref->to && $ref->read == 0) {
+               $ref->read(1);
+               $ref->store(\@body);    # note call by reference!
+
+               # if it had a read receipt on it generate a new message to send back to
+        # the sender.
+               if ($ref->rrreq) {
+                       my $sub = $ref->subject;
+                       $sub = "Re: $sub" unless $sub =~ /^\s*re:/i;
+                       my $to = $ref->to;
+                       my $from = $ref->from;
+                       my $rref = DXMsg->alloc(1, $from, $main::mycall, time, 
+                                                                       1, $sub, $main::mycall, 0, 0 );
+                       my $msgno = DXMsg::next_transno("Msgno");
+                       $rref->msgno($msgno);
+                       $rref->gotit( [ "$main::mycall" ] );
+                       $rref->store( [ "Return receipt from delivering node. Message read by $to." ] );
+                       DXMsg::add_dir($rref);
+                       DXMsg::queue_msg(0);
+               }
+       }
+       
+       # remember this one as the last one read
+       $self->lastread($msgno);
+
+
 }
 
 return (1, @out);