chiark / gitweb /
Make FOR_LIST_NODE and use it for FOR_CONN
[innduct.git] / innduct.h
index 919b734abfc986b829226a7c89b58eb6277b7829..273fb5ec7758df00f196a34dfe8580621b45c5c4 100644 (file)
--- a/innduct.h
+++ b/innduct.h
 
 #define DUMPV(fmt,pfx,v) fprintf(f, " " #v "=" fmt, pfx v);
 
-#define FOR_CONN(conn) \
-  for ((conn)=LIST_HEAD(conns); (conn); (conn)=LIST_NEXT((conn)))
+#define FOR_LIST_NODE(nodevar, list) \
+  for ((nodevar)=LIST_HEAD(list); (nodevar); (nodevar)=LIST_NEXT((nodevar)))
+
+#define FOR_CONN(conn) FOR_LIST_NODE(conn, conns)
 
 /*----- doubly linked lists -----*/
 
@@ -218,6 +220,10 @@ typedef enum {
   RCI_max
 } ResultCountIndex;
 
+typedef enum {
+  read_ok, read_blank, read_err, nooffer_missing,
+  ECI_max
+} EventCountIndex;
 
 /*----- transmission buffers -----*/
 
@@ -238,8 +244,8 @@ struct XmitDetails {
 /*----- core operational data structure types -----*/
 
 typedef struct {
-  int counts[art_MaxState][RCI_max];
-  int read_ok, read_blank, read_err, nooffer_missing;
+  int results[art_MaxState][RCI_max];
+  int events[ECI_max];
 } Counts;
 
 struct InputFile {
@@ -323,7 +329,8 @@ char *xasprintf(const char *fmt, ...) PRINTF(1,2);
 int close_perhaps(int *fd);
 void xclose(int fd, const char *what, const char *what2);
 void xclose_perhaps(int *fd, const char *what, const char *what2);
-pid_t xfork(const char *what);
+pid_t xfork(const char *what); /* also runs postfork in child */
+pid_t xfork_bare(const char *what);
 
 void on_fd_read_except(int fd, oop_call_fd callback);
 void cancel_fd_read_except(int fd);
@@ -387,6 +394,10 @@ void conn_dispose(Conn *conn);
 void vconnfail(Conn *conn, const char *fmt, va_list al) PRINTF(2,0);
 void connfail(Conn *conn, const char *fmt, ...)         PRINTF(2,3);
 
+void notice_conns_more(const char *new_kind);
+void notice_conns_fewer(void);
+void notice_conns_stats(void);
+
 int allow_connect_start(void);
 void connect_start(void);
 
@@ -493,6 +504,8 @@ extern int until_stats_log;
 extern StateMachineState sms;
 extern int until_flush;
 extern InputFile *main_input_file, *flushing_input_file, *backlog_input_file;
+extern Counts backlog_counts;
+extern int backlog_counts_report;
 extern FILE *defer;
 extern int until_connect, until_backlog_nextscan;
 extern double accept_proportion;