]> git.ipfire.org Git - thirdparty/freeswitch.git/commitdiff
Thu Feb 12 14:20:26 CST 2009 Pekka Pessi <first.last@nokia.com>
authorMichael Jerris <mike@jerris.com>
Thu, 12 Feb 2009 21:15:20 +0000 (21:15 +0000)
committerMichael Jerris <mike@jerris.com>
Thu, 12 Feb 2009 21:15:20 +0000 (21:15 +0000)
  * sres.c: improve logging upon errors

git-svn-id: http://svn.freeswitch.org/svn/freeswitch/trunk@11950 d0543943-73ff-0310-b7d9-9358b9ac24b2

libs/sofia-sip/.update
libs/sofia-sip/libsofia-sip-ua/sresolv/sofia-resolv/sres_record.h
libs/sofia-sip/libsofia-sip-ua/sresolv/sres.c

index 28c5db7694f662a35086bf8fa7d334f9d4ed1246..3bade995f17481b6456fbb813e1d5ac295fa9275 100644 (file)
@@ -1 +1 @@
-Thu Feb 12 15:14:36 CST 2009
+Thu Feb 12 15:15:10 CST 2009
index 0edba479adb9085d238336b9f474e6b70fb33718..80a61bbc4a0802fcb77f96b0dc6d6bd7d486f16c 100644 (file)
@@ -71,7 +71,10 @@ enum sres_status {
 
   /* Errors generated by sresolv */
   SRES_TIMEOUT_ERR = 32,       /**< Timeout occurred */
-  SRES_RECORD_ERR = 33         /**< Name has no given record type */
+  SRES_RECORD_ERR = 33,                /**< Name has no given record type */
+  SRES_INTERNAL_ERR = 34,      /**< Internal error */
+
+  _SRES_LAST_ERR
 };
 
 /** Start of a zone of authority record (@RFC1035). */
@@ -248,6 +251,9 @@ enum sres_qtypes {
 /** Convert type to its name. */
 SRESPUBFUN char const *sres_record_type(int type, char buffer[8]);
 
+/** Convert status to its name. */
+SRESPUBFUN char const *sres_record_status(int status, char buffer[8]);
+
 /** Compare two records. */
 SRESPUBFUN int sres_record_compare(sres_record_t const *,
                                   sres_record_t const *);
index 67837c844ac72cdd9f0e44ea26f66a04967ebb56..8493b3e80340f2e4105732399bb15b3dc42ef21e 100644 (file)
@@ -1538,6 +1538,30 @@ char const *sres_record_type(int type, char buffer[8])
   }
 }
 
+/** Convert record status to its name */
+char const *sres_record_status(int status, char buffer[8])
+{
+  switch (status) {
+  case SRES_OK: return "OK";
+  case SRES_FORMAT_ERR: return "FORMAT_ERR";
+  case SRES_SERVER_ERR: return "SERVER_ERR";
+  case SRES_NAME_ERR: return "NAME_ERR";
+  case SRES_UNIMPL_ERR: return "UNIMPL_ERR";
+  case SRES_AUTH_ERR: return "AUTH_ERR";
+
+  /* Errors generated by sresolv */
+  case SRES_TIMEOUT_ERR: return "TIMEOUT_ERR";
+  case SRES_RECORD_ERR: return "RECORD_ERR";
+  case SRES_INTERNAL_ERR: return "INTERNAL_ERR";
+
+  default:
+    if (buffer)
+      sprintf(buffer, "%u?", status & 255);
+    return buffer;
+  }
+}
+
+
 /** Convert class to its name. */
 static char const *
 sres_record_class(int rclass, char buffer[8])
@@ -2899,6 +2923,9 @@ sres_query_report_error(sres_query_t *q,
   int i;
 
   if (q->q_callback) {
+    char sbuf[8], tbuf[8];
+    int status = 0;
+
     for (i = 0; i <= SRES_MAX_SEARCH; i++) {
       if (q->q_subqueries[i])  /* a pending query... */
        return;
@@ -2910,8 +2937,16 @@ sres_query_report_error(sres_query_t *q,
       }
     }
 
-    SU_DEBUG_5(("sres(q=%p): reporting errors for %u %s\n",
-               (void *)q, q->q_type, q->q_name));
+    for (i = 0; answers[i]; i++) {
+      status = answers[i]->sr_record->r_status;
+      if (status)
+       break;
+    }
+
+    SU_DEBUG_5(("sres(q=%p): reporting error %s for %s %s\n",
+               (void *)q,
+               sres_record_status(status, sbuf),
+               sres_record_type(q->q_type, tbuf), q->q_name));
 
     sres_remove_query(q->q_res, q, 1);
     (q->q_callback)(q->q_context, q, answers);
@@ -3567,7 +3602,9 @@ sres_decode_msg(sres_resolver_t *res,
   }
 
   if (i < total) {
-    SU_DEBUG_5(("sres_decode_msg: %s\n", "less records than promised"));
+    SU_DEBUG_5(("sres_decode_msg: got %u but expected "
+               "errors=%u an=%u ar=%u ns=%u\n", i, errorcount,
+               m->m_ancount, m->m_arcount, m->m_nscount));
     for (i = 0; i < total; i++)
       sres_cache_free_record(res->res_cache, answers[i]);
     su_free(chome, answers);