+
+ /* connection related */
+ ParsedURL *ConnectMe;
+
+ /* read/send related... */
+ StrBuf *IOBuf;
+ IOBuffer SendBuf,
+ RecvBuf;
+
+ FDIOBuffer IOB; /* when sending from / reading into files, this is used. */
+
+ /* our events... */
+ ev_cleanup abort_by_shutdown, /* server wants to go down... */
+ db_abort_by_shutdown; /* server wants to go down... */
+ ev_timer conn_fail, /* connection establishing timed out */
+ rw_timeout; /* timeout while sending data */
+ ev_idle unwind_stack, /* get c-ares out of the stack */
+ db_unwind_stack, /* wait for next db operation... */
+ conn_fail_immediate; /* unwind stack, but fail immediately. */
+ ev_io recv_event, /* receive data from the client */
+ send_event, /* send more data to the client */
+ conn_event; /* Connection successfully established */
+
+ StrBuf *ErrMsg; /* if we fail to connect, or lookup, error goes here. */
+
+ /* Citadel application callbacks... */
+ IO_CallBack ReadDone, /* Theres new data to read... */
+ SendDone, /* we may send more data */
+ Terminate, /* shutting down... */
+ Timeout, /* Timeout handler; may also be connection timeout */
+ ConnFail, /* What to do when one connection failed? */
+ ShutdownAbort,/* we're going down. make your piece. */
+ NextDBOperation; /* Perform Database IO */
+
+ IO_LineReaderCallback LineReader; /* if we have linereaders, maybe we want to read more lines before the real application logic is called? */
+
+ evcares_data DNS;
+
+ evcurl_request_data HttpReq;
+
+ /* Saving / loading a message async from / to disk */
+ ReadAsyncMsg *ReadMsg;
+ struct CtdlMessage *AsyncMsg;
+ struct recptypes *AsyncRcp;
+
+ /* Custom data; its expected to contain AsyncIO so we can save malloc()s... */
+ void *Data; /* application specific data */
+ void *CitContext; /* Citadel Session context... */