X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ian/git?a=blobdiff_plain;f=conn.c;h=c99174c59317482768167b6f520e2e278471af6d;hb=bd52671fe8ab7e1fcef0e82a91d6bf4d5d6130eb;hp=301d0258d81e8746c5b4f2a28bc85d7afe7318e0;hpb=f4aee95c41a0d6231d115386b8fbb23f6b8e349a;p=innduct.git diff --git a/conn.c b/conn.c index 301d025..c99174c 100644 --- a/conn.c +++ b/conn.c @@ -1,3 +1,31 @@ +/* + * innduct + * tailing reliable realtime streaming feeder for inn + * conn.c - connection establishment and teardown + * + * 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" + /*========== management of connections ==========*/ static void reconnect_blocking_event(void) { @@ -10,7 +38,7 @@ void conn_closefd(Conn *conn, const char *msgprefix) { conn->fd, msgprefix, strerror(errno)); } -static int conn_busy(Conn *conn) { +int conn_busy(Conn *conn) { return conn->waiting.count || conn->priority.count || @@ -18,7 +46,7 @@ static int conn_busy(Conn *conn) { conn->xmitu; } -static void conn_dispose(Conn *conn) { +void conn_dispose(Conn *conn) { if (!conn) return; if (conn->rd) { oop_rd_cancel(conn->rd); @@ -46,7 +74,7 @@ static void *conn_exception(oop_source *lp, int fd, return OOP_CONTINUE; } -static void vconnfail(Conn *conn, const char *fmt, va_list al) { +void vconnfail(Conn *conn, const char *fmt, va_list al) { int requeue[art_MaxState]; memset(requeue,0,sizeof(requeue)); @@ -82,7 +110,7 @@ static void vconnfail(Conn *conn, const char *fmt, va_list al) { check_assign_articles(); } -static void connfail(Conn *conn, const char *fmt, ...) { +void connfail(Conn *conn, const char *fmt, ...) { va_list al; va_start(al,fmt); vconnfail(conn,fmt,al); @@ -118,7 +146,7 @@ static void conn_idle_close(Conn *conn, const char *why) { * For our last connection, we also shut it down if we have had * less than K in the last L */ -static void check_idle_conns(void) { +void check_idle_conns(void) { Conn *conn; int volthisperiod= lowvol_perperiod[lowvol_circptr]; @@ -162,7 +190,7 @@ static void check_idle_conns(void) { /*---------- making new connections ----------*/ -static pid_t connecting_child; +pid_t connecting_child; int connecting_fdpass_sock; static void connect_attempt_discard(void) { @@ -294,13 +322,13 @@ static void *connchild_event(oop_source *lp, int fd, oop_event e, void *u) { return OOP_CONTINUE; } -static int allow_connect_start(void) { +int allow_connect_start(void) { return conns.count < max_connections && !connecting_child && !until_connect; } -static void connect_start(void) { +void connect_start(void) { assert(!connecting_child); assert(!connecting_fdpass_sock);