+/*
+ * innduct
+ * tailing reliable realtime streaming feeder for inn
+ *
+ * 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.)
+ */
+
+/*
+ * todo
+ * specify perms of /tmp/innduct.control
+ */
+
/*
* 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,...]\
/*---------- 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);
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);
DUMPV("%d",,filemon_inotify_fd);
DUMPV("%d",,filemon_inotify_wdmax);
for (i=0; i<filemon_inotify_wdmax; i++)
- fprintf(f," wd2ipf[%d]=%p\n", i, filemon_inotify_wd2ipf[i],);
+ fprintf(f," wd2ipf[%d]=%p\n", i, filemon_inotify_wd2ipf[i]);
}
#endif /* HAVE_INOTIFY && !HAVE_FILEMON */
DUMPV("%d", ipf->,readcount_ok);
DUMPV("%d", ipf->,readcount_blank);
DUMPV("%d", ipf->,readcount_err);
+ DUMPV("%d", ipf->,count_nooffer_missing);
}
fprintf(f,"\n");
if (ipf) {
notice("starting");
+ int val= 1;
+ r= SMsetup(SM_PREOPEN, &val); if (!r) warn("SMsetup SM_PREOPEN failed");
+ r= SMinit(); if (!r) die("storage manager initialisation (SMinit) failed");
+
if (!become_daemon)
control_stdio();