chiark / gitweb /
changelog: Finalise 2.2
[innduct.git] / recv.c
diff --git a/recv.c b/recv.c
index dbeb4b68bb47b3815ba8b25ecc56e41d462e8657..44587bf1fb954dca661bf9e1a0569b1f5b26b26a 100644 (file)
--- a/recv.c
+++ b/recv.c
@@ -3,25 +3,9 @@
  *  tailing reliable realtime streaming feeder for inn
  *  recv.c - receiving peer responses and disposing of articles
  *
- *  Copyright (C) 2010 Ian Jackson <ijackson@chiark.greenend.org.uk>
- * 
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 3 of the License, or
- *  (at your option) any later version.
- * 
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- * 
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- *
- *  (I believe that when you compile and link this as part of the inn2
- *  build, with the Makefile runes I have provided, all the libraries
- *  and files which end up included in innduct are licence-compatible
- *  with GPLv3.  If not then please let me know.  -Ian Jackson.)
+ *  Copyright Ian Jackson <ijackson@chiark.greenend.org.uk>
+ *  and contributors; see LICENCE.txt.
+ *  SPDX-License-Identifier: GPL-3.0-or-later
  */
 
 #include "innduct.h"
@@ -117,10 +101,13 @@ static void update_nocheck(int accepted) {
 
 void article_done(Article *art, int whichcount) {
   if (whichcount>=0 && !art->missing)
-    art->ipf->counts[art->state][whichcount]++;
+    art->ipf->counts.results[art->state][whichcount]++;
 
-  if (whichcount == RC_accepted) update_nocheck(1);
-  else if (whichcount == RC_unwanted) update_nocheck(0);
+  if (whichcount == RC_accepted)
+    update_nocheck(1);
+  else if (whichcount == RC_unwanted ||
+          (whichcount == RC_rejected && art->state == art_Unsolicited))
+    update_nocheck(0);
 
   InputFile *ipf= art->ipf;
 
@@ -185,8 +172,9 @@ void *peer_rd_ok(oop_source *lp, oop_read *oread, oop_rd_event ev,
               conn->quitting, sani);
     } else {
       LIST_REMOVE(conns,conn);
-      notice("C%d (now %d) idle connection closed (%s)",
+      info("C%d (now %d) idle connection closed (%s)",
             conn->fd, conns.count, conn->quitting);
+      notice_conns_fewer();
       assert(!busy);
       conn_dispose(conn);
     }
@@ -223,8 +211,9 @@ void *peer_rd_ok(oop_source *lp, oop_read *oread, oop_rd_event ev,
       PEERBADMSG("peer timed us out or stopped accepting articles");
 
     LIST_REMOVE(conns,conn);
-    notice("C%d (now %d) idle connection closed by peer",
-          conns.count, conn->fd);
+    info("C%d (now %d) idle connection closed by peer",
+        conns.count, conn->fd);
+    notice_conns_fewer();
     conn_dispose(conn);
     return OOP_CONTINUE;
 
@@ -242,7 +231,7 @@ void *peer_rd_ok(oop_source *lp, oop_read *oread, oop_rd_event ev,
   case 335: /* IHAVE says send it */
     GET_ARTICLE(-1);
     assert(art->state == art_Unchecked);
-    art->ipf->counts[art->state][RC_accepted]++;
+    art->ipf->counts.results[art->state][RC_accepted]++;
     art->state= art_Wanted;
     LIST_ADDTAIL(conn->priority, art);
     break;