X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ian/git?a=blobdiff_plain;f=backends%2Finnduct.c;h=005df921d90ec2ecf0fabd4fbb51ee6f86fd70a0;hb=55f4f72edbae3d5d9b96ca0fabdd745300373a51;hp=df2cdb9d95b5057258693dd2e533a420a15533d2;hpb=ab4ead2e729edcd5b23356e394b929d5afca977e;p=inn-innduct.git diff --git a/backends/innduct.c b/backends/innduct.c index df2cdb9..005df92 100644 --- a/backends/innduct.c +++ b/backends/innduct.c @@ -1,28 +1,34 @@ +/* + * innduct + * tailing reliable realtime streaming feeder for inn + * + * 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.) + */ + + /* * debugging rune: * build-lfs/backends/innduct --connection-timeout=30 --no-daemon -C ../inn.conf -f `pwd`/fee sit localhost */ -/*-- -flow control notes -to ensure articles go away eventually -separate queue for each input file - queue expiry - every period, check head of backlog queue for expiry with SMretrieve - if too old: discard, and check next article - also check every backlog article as we read it - flush expiry - after too long in SEPARATED/DROPPING ie Separated/Finishing/Dropping - one-off: eat queued articles from flushing and write them to defer - one-off: connfail all connections which have any articles from flushing - newly read articles from flushing go straight to defer - this should take care of it and get us out of this state -to avoid filling up ram needlessly - input control - limit number of queued articles for each ipf - pause/resume inputfile tailing ---*/ - /* * Newsfeeds file entries should look like this: * host.name.of.site[/exclude,exclude,...]\ @@ -1539,6 +1545,26 @@ static void conn_maybe_write(Conn *conn) { /*---------- expiry, flow control and deferral ----------*/ +/* + * flow control notes + * to ensure articles go away eventually + * separate queue for each input file + * queue expiry + * every period, check head of backlog queue for expiry with SMretrieve + * if too old: discard, and check next article + * also check every backlog article as we read it + * flush expiry + * after too long in SEPARATED/DROPPING ie Separated/Finishing/Dropping + * one-off: eat queued articles from flushing and write them to defer + * one-off: connfail all connections which have any articles from flushing + * newly read articles from flushing go straight to defer + * this should take care of it and get us out of this state + * to avoid filling up ram needlessly + * input control + * limit number of queued articles for each ipf + * pause/resume inputfile tailing + */ + static void check_reading_pause_resume(InputFile *ipf) { if (ipf->queue.count >= max_queue_per_ipf) inputfile_reading_pause(ipf); @@ -1941,11 +1967,12 @@ static void *peer_rd_ok(oop_source *lp, oop_read *oread, oop_rd_event ev, switch (code) { - case 400: PEERBADMSG("peer stopped accepting articles"); default: PEERBADMSG("peer sent unexpected message"); - case 503: - if (conn_busy) PEERBADMSG("peer timed us out"); + case 400: + if (conn_busy) + PEERBADMSG("peer timed us out or stopped accepting articles"); + notice("C%d idle connection closed by peer", conn->fd); LIST_REMOVE(conns,conn); conn_dispose(conn); @@ -2278,7 +2305,7 @@ static void filemon_method_dump_info(FILE *f) { DUMPV("%d",,filemon_inotify_fd); DUMPV("%d",,filemon_inotify_wdmax); for (i=0; i