X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ian/git?p=innduct.git;a=blobdiff_plain;f=recv.c;h=00ec7bc22adb4644846466e04d413bc8d0b4f785;hp=870e0e52ec38e83d0f06d77fdc08190e5e4b4db3;hb=854f19ae391120e6dd11c33c66250745b3d21aa7;hpb=f4aee95c41a0d6231d115386b8fbb23f6b8e349a diff --git a/recv.c b/recv.c index 870e0e5..00ec7bc 100644 --- a/recv.c +++ b/recv.c @@ -1,14 +1,42 @@ +/* + * innduct + * tailing reliable realtime streaming feeder for inn + * recv.c - receiving peer responses and disposing of articles + * + * Copyright (C) 2010 Ian Jackson + * + * 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 . + * + * (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.) + */ + +#include "innduct.h" + /*========== handling responses from peer ==========*/ -static const oop_rd_style peer_rd_style= { +const oop_rd_style peer_rd_style= { OOP_RD_DELIM_STRIP, '\n', OOP_RD_NUL_FORBID, OOP_RD_SHORTREC_FORBID }; -static void *peer_rd_err(oop_source *lp, oop_read *oread, oop_rd_event ev, - const char *errmsg, int errnoval, - const char *data, size_t recsz, void *conn_v) { +void *peer_rd_err(oop_source *lp, oop_read *oread, oop_rd_event ev, + const char *errmsg, int errnoval, + const char *data, size_t recsz, void *conn_v) { Conn *conn= conn_v; connfail(conn, "error receiving from peer: %s", errmsg); return OOP_CONTINUE; @@ -87,9 +115,9 @@ static void update_nocheck(int accepted) { nocheck= new_nocheck; } -static void article_done(Article *art, int whichcount) { +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); @@ -129,9 +157,9 @@ static void article_done(Article *art, int whichcount) { queue_check_input_done(); } -static void *peer_rd_ok(oop_source *lp, oop_read *oread, oop_rd_event ev, - const char *errmsg, int errnoval, - const char *data, size_t recsz, void *conn_v) { +void *peer_rd_ok(oop_source *lp, oop_read *oread, oop_rd_event ev, + const char *errmsg, int errnoval, + const char *data, size_t recsz, void *conn_v) { Conn *conn= conn_v; if (ev == OOP_RD_EOF) { @@ -157,8 +185,9 @@ static 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); } @@ -195,8 +224,9 @@ static 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; @@ -214,7 +244,7 @@ static 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;