EV: expose current event queue state to the RWHO command
[citadel.git] / citadel / modules / c-ares-dns / serv_c-ares-dns.c
index 8878f995f67d63a3fbe0d95866388c75a87472d1..94592a161ea4ecc06b40c7efc5529207b77c02e5 100644 (file)
@@ -268,6 +268,7 @@ void QueryCb(void *arg,
 {
        AsyncIO *IO = arg;
 
+       SetEVState(IO, eCaresStart);
        EV_DNS_syslog(LOG_DEBUG, "C-ARES: %s\n", __FUNCTION__);
 
        EV_DNS_LOGT_STOP(DNS.timeout);
@@ -280,7 +281,11 @@ void QueryCb(void *arg,
                EV_DNS_syslog(LOG_DEBUG, "C-ARES: Failed by: %s error %s\n",
                              __FUNCTION__,
                              ares_strerror(status));
-               StrBufPlain(IO->ErrMsg, ares_strerror(status), -1);
+               StrBufPrintf(IO->ErrMsg,
+                            "%s-lookup %s - %s",
+                            IO->DNS.Query->QueryTYPE,
+                            (IO->DNS.Query->QStr != NULL)? IO->DNS.Query->QStr : "",
+                            ares_strerror(status));
                IO->DNS.Query->DNSStatus = status;
        }
 
@@ -294,6 +299,7 @@ void QueryCb(void *arg,
 
 void QueryCbDone(AsyncIO *IO)
 {
+       SetEVState(IO, eCaresDoneIO);
        EV_DNS_syslog(LOG_DEBUG, "C-ARES: %s\n", __FUNCTION__);
 
        EV_DNS_LOGT_STOP(DNS.timeout);
@@ -305,6 +311,7 @@ void QueryCbDone(AsyncIO *IO)
 
 void DestructCAres(AsyncIO *IO)
 {
+       SetEVState(IO, eCaresX);
        EVNC_syslog(LOG_DEBUG, "C-ARES: %s\n", __FUNCTION__);
 
        EVNC_syslog(LOG_DEBUG, "C-ARES: - stopping %s %d %p \n", "DNS.recv_event", IO->DNS.recv_event.fd, &IO->DNS.recv_event);
@@ -415,6 +422,17 @@ void QueueGetHostByName(AsyncIO *IO,
 
 }
 
+const char* QT[] = {
+       "A",
+       "AAAA",
+       "MX",
+       "NS",
+       "TXT",
+       "SRV",
+       "CNAME",
+       "PTR"
+};
+
 int QueueQuery(ns_type Type,
               const char *name,
               AsyncIO *IO,
@@ -429,6 +447,7 @@ int QueueQuery(ns_type Type,
        IO->DNS.Query = QueryParts;
        IO->DNS.Query->PostDNS = PostDNS;
        IO->DNS.Start = IO->Now;
+       IO->DNS.Query->QStr = name;
 
        InitC_ares_dns(IO);
 
@@ -439,35 +458,41 @@ int QueueQuery(ns_type Type,
        switch(Type) {
        case ns_t_a:
                IO->DNS.Query->DNS_CB = ParseAnswerA;
+               IO->DNS.Query->QueryTYPE = QT[0];
                break;
 
        case ns_t_aaaa:
                IO->DNS.Query->DNS_CB = ParseAnswerAAAA;
+               IO->DNS.Query->QueryTYPE = QT[1];
                break;
 
        case ns_t_mx:
                IO->DNS.Query->DNS_CB = ParseAnswerMX;
+               IO->DNS.Query->QueryTYPE = QT[2];
                break;
 
        case ns_t_ns:
                IO->DNS.Query->DNS_CB = ParseAnswerNS;
+               IO->DNS.Query->QueryTYPE = QT[3];
                break;
 
        case ns_t_txt:
                IO->DNS.Query->DNS_CB = ParseAnswerTXT;
+               IO->DNS.Query->QueryTYPE = QT[4];
                break;
 
        case ns_t_srv:
                IO->DNS.Query->DNS_CB = ParseAnswerSRV;
+               IO->DNS.Query->QueryTYPE = QT[5];
                break;
 
        case ns_t_cname:
                IO->DNS.Query->DNS_CB = ParseAnswerCNAME;
+               IO->DNS.Query->QueryTYPE = QT[6];
                break;
 
        case ns_t_ptr:
-
-
+               IO->DNS.Query->QueryTYPE = QT[7];
                if (inet_pton(AF_INET, name, &address_b) == 1) {
                        length = sizeof(struct in_addr);
                        family = AF_INET;