]> code.citadel.org Git - citadel.git/blobdiff - citadel/event_client.h
Switch handling to have a pointer to the target address
[citadel.git] / citadel / event_client.h
index 208a716616a7122ca8340490d2fa2511ffcc9d15..4bd86bd9f52171e8b6a5742ad0503a6a467232a8 100644 (file)
@@ -15,29 +15,44 @@ typedef enum _eNextState {
        eAbort
 }eNextState;
 
-typedef int (*EventContextAttach)(void *Data);
 typedef eNextState (*IO_CallBack)(AsyncIO *IO);
 typedef eReadState (*IO_LineReaderCallback)(AsyncIO *IO);
 typedef void (*ParseDNSAnswerCb)(AsyncIO*, unsigned char*, int);
 typedef void (*FreeDNSReply)(void *DNSData);
 
+typedef struct _DNSQueryParts {
+       ParseDNSAnswerCb DNS_CB;
+       IO_CallBack PostDNS;
+
+       int DNSStatus;
+       void *VParsedDNSReply;
+       FreeDNSReply DNSReplyFree;
+       void *Data;
+} DNSQueryParts;
+
+
 struct AsyncIO {
        StrBuf *Host;
        char service[32];
 
-       /* To cycle through several possible services... */
+       /* To cycle through several possible services... * /
        struct addrinfo *res;
        struct addrinfo *curr_ai;
+       */
 
        /* connection related */
        int IP6;
-       struct hostent *HEnt;
+       struct sockaddr_in6 *Addr;
+
        int sock;
        unsigned short dport;
                eNextState NextState;
+       
+       ev_cleanup abort_by_shutdown;
 
        ev_timer conn_fail, 
                rw_timeout;
+       ev_idle unwind_stack;
        ev_io recv_event, 
                send_event, 
                conn_event;
@@ -53,23 +68,16 @@ struct AsyncIO {
                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? */
+               ConnFail,     /* What to do when one connection failed? */
+               ShutdownAbort;/* we're going down. make your piece. */ 
 
        IO_LineReaderCallback LineReader; /* if we have linereaders, maybe we want to read more lines before the real application logic is called? */
 
-
-       int active_dns_event;
        ev_io dns_recv_event, 
                dns_send_event;
        struct ares_options DNSOptions;
        ares_channel DNSChannel;
-
-       ParseDNSAnswerCb DNS_CB;
-       IO_CallBack PostDNS;
-
-       int DNSStatus;
-       void *VParsedDNSReply;
-       FreeDNSReply DNSReplyFree;
+       DNSQueryParts *DNSQuery;
 
        /* Custom data; its expected to contain  AsyncIO so we can save malloc()s... */
        DeleteHashDataFunc DeleteData; /* so if we have to destroy you, what to do... */
@@ -77,28 +85,29 @@ struct AsyncIO {
 };
 
 typedef struct _IOAddHandler {
-       void *Ctx;
-       EventContextAttach EvAttch;
+       AsyncIO *IO;
+       IO_CallBack EvAttch;
 }IOAddHandler; 
 
 void FreeAsyncIOContents(AsyncIO *IO);
 
-int QueueEventContext(void *Ctx, AsyncIO *IO, EventContextAttach CB);
+int QueueEventContext(AsyncIO *IO, IO_CallBack CB);
 int ShutDownEventQueue(void);
 
-void InitEventIO(AsyncIO *IO, 
-                void *pData, 
-                IO_CallBack ReadDone, 
-                IO_CallBack SendDone, 
-                IO_CallBack Terminate, 
-                IO_CallBack Timeout, 
-                IO_CallBack ConnFail, 
-                IO_LineReaderCallback LineReader,
-                double conn_timeout, double first_rw_timeout,
-                int ReadFirst);
+eNextState InitEventIO(AsyncIO *IO, 
+                      void *pData, 
+                      double conn_timeout, 
+                      double first_rw_timeout,
+                      int ReadFirst);
+void IO_postdns_callback(struct ev_loop *loop, ev_idle *watcher, int revents);
 
-int QueueQuery(ns_type Type, char *name, AsyncIO *IO, IO_CallBack PostDNS);
+int QueueQuery(ns_type Type, const char *name, AsyncIO *IO, DNSQueryParts *QueryParts, IO_CallBack PostDNS);
+void QueueGetHostByName(AsyncIO *IO, const char *Hostname, DNSQueryParts *QueryParts, IO_CallBack PostDNS);
+
+void QueryCbDone(AsyncIO *IO);
 
 void StopClient(AsyncIO *IO);
 
 void SetNextTimeout(AsyncIO *IO, double timeout);
+
+void InitC_ares_dns(AsyncIO *IO);