typedef enum _eNextState {
eSendDNSQuery,
eReadDNSReply,
+
eDBQuery,
+
eConnect,
eSendReply,
eSendMore,
+ eSendFile,
+
eReadMessage,
eReadMore,
eReadPayload,
+ eReadFile,
+
eTerminateConnection,
eAbort
}eNextState;
} evcurl_request_data;
struct AsyncIO {
+ long ID;
eNextState NextState;
/* connection related */
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... */
Terminate, /* shutting down... */
Timeout, /* Timeout handler; may also be connection timeout */
ConnFail, /* What to do when one connection failed? */
+ DNSFail, /* the dns lookup didn't work out. */
ShutdownAbort,/* we're going down. make your piece. */
NextDBOperation; /* Perform Database IO */
/* DNS Related */
ev_io dns_recv_event,
dns_send_event;
+#ifdef DEBUG_CARES
+ short int DnsSourcePort;
+#endif
struct ares_options DNSOptions;
ares_channel DNSChannel;
DNSQueryParts *DNSQuery;
IO_CallBack EvAttch;
}IOAddHandler;
+#define CCID ((CitContext*)IO->CitContext)->cs_pid
+#define EV_syslog(LEVEL, FORMAT, ...) syslog(LEVEL, "IO[%ld]CC[%d]" FORMAT, IO->ID, CCID, __VA_ARGS__)
+#define EVM_syslog(LEVEL, FORMAT) syslog(LEVEL, "IO[%ld]CC[%d]" FORMAT, IO->ID, CCID)
+
+#define EVNC_syslog(LEVEL, FORMAT, ...) syslog(LEVEL, "IO[%ld]" FORMAT, IO->ID, __VA_ARGS__)
+#define EVNCM_syslog(LEVEL, FORMAT) syslog(LEVEL, "IO[%ld]" FORMAT, IO->ID)
+
void FreeAsyncIOContents(AsyncIO *IO);
eNextState NextDBOperation(AsyncIO *IO, IO_CallBack CB);
-int QueueDBOperation(AsyncIO *IO, IO_CallBack CB);
-int QueueEventContext(AsyncIO *IO, IO_CallBack CB);
+eNextState QueueDBOperation(AsyncIO *IO, IO_CallBack CB);
+eNextState QueueEventContext(AsyncIO *IO, IO_CallBack CB);
+eNextState QueueCurlContext(AsyncIO *IO);
int ShutDownEventQueue(void);
eNextState InitEventIO(AsyncIO *IO,
do { \
sta = curl_easy_setopt(chnd, (CURLOPT_##s), (v)); \
if (sta) { \
- CtdlLogPrintf(CTDL_ERR, "error setting option " #s " on curl handle: %s", curl_easy_strerror(sta)); \
+ syslog(LOG_ERR, "error setting option " #s " on curl handle: %s", curl_easy_strerror(sta)); \
} } while (0)
-
-int evcurl_init(AsyncIO *IO,
- void *CustomData,
- const char* Desc,
- IO_CallBack CallBack,
- IO_CallBack Terminate);
+int evcurl_init(AsyncIO *IO,
+ void *CustomData,
+ const char* Desc,
+ IO_CallBack CallBack,
+ IO_CallBack Terminate,
+ IO_CallBack ShutdownAbort);
eNextState ReAttachIO(AsyncIO *IO,
void *pData,
int ReadFirst);
-void evcurl_handle_start(AsyncIO *IO);
-
#endif /* __EVENT_CLIENT_H__ */