Changeset 753 for pjproject/trunk/pjlib-util/src/pjlib-util/dns_dump.c
- Timestamp:
- Oct 8, 2006 12:39:34 PM (17 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
pjproject/trunk/pjlib-util/src/pjlib-util/dns_dump.c
r745 r753 20 20 #include <pj/assert.h> 21 21 #include <pj/log.h> 22 #include <pj/string.h> 22 23 23 24 #define THIS_FILE "dns_dump.c" 24 25 #define LEVEL 3 25 26 26 static const char * get_rr_name(int type)27 static const char *spell_ttl(char *buf, int size, unsigned ttl) 27 28 { 28 switch (type) { 29 case PJ_DNS_TYPE_A: return "A"; 30 case PJ_DNS_TYPE_NS: return "NS"; 31 case PJ_DNS_TYPE_CNAME: return "CNAME"; 32 case PJ_DNS_TYPE_PTR: return "PTR"; 33 case PJ_DNS_TYPE_MX: return "MX"; 34 case PJ_DNS_TYPE_TXT: return "TXT"; 35 case PJ_DNS_TYPE_SRV: return "SRV"; 36 case PJ_DNS_TYPE_NAPTR: return "NAPTR"; 29 #define DAY (3600*24) 30 #define HOUR (3600) 31 #define MINUTE (60) 32 33 char *p = buf; 34 int len; 35 36 if (ttl > DAY) { 37 len = pj_ansi_snprintf(p, size, "%dd ", ttl/DAY); 38 if (len < 1) 39 return "-err-"; 40 size -= len; 41 p += len; 42 ttl %= DAY; 37 43 } 38 return "(Unknown)"; 44 45 if (ttl > HOUR) { 46 len = pj_ansi_snprintf(p, size, "%dh ", ttl/HOUR); 47 if (len < 1) 48 return "-err-"; 49 size -= len; 50 p += len; 51 ttl %= HOUR; 52 } 53 54 if (ttl > MINUTE) { 55 len = pj_ansi_snprintf(p, size, "%dm ", ttl/MINUTE); 56 if (len < 1) 57 return "-err-"; 58 size -= len; 59 p += len; 60 ttl %= MINUTE; 61 } 62 63 if (ttl > 0) { 64 len = pj_ansi_snprintf(p, size, "%ds ", ttl); 65 if (len < 1) 66 return "-err-"; 67 size -= len; 68 p += len; 69 ttl = 0; 70 } 71 72 *p = '\0'; 73 return buf; 74 } 75 76 77 static void dump_query(unsigned index, const pj_dns_parsed_query *q) 78 { 79 PJ_LOG(3,(THIS_FILE, " %d. Name: %.*s", 80 index, (int)q->name.slen, q->name.ptr)); 81 PJ_LOG(3,(THIS_FILE, " Type: %s (%d)", 82 pj_dns_get_type_name(q->type), q->type)); 83 PJ_LOG(3,(THIS_FILE, " Class: %s (%d)", 84 (q->dnsclass==1 ? "IN" : "<Unknown>"), q->dnsclass)); 39 85 } 40 86 … … 43 89 const pj_str_t root_name = { "<Root>", 6 }; 44 90 const pj_str_t *name = &rr->name; 91 char ttl_words[32]; 45 92 46 93 if (name->slen == 0) 47 94 name = &root_name; 48 95 49 PJ_LOG(3,(THIS_FILE, " %d. %s record (type=%d)", index, get_rr_name(rr->type), 96 PJ_LOG(3,(THIS_FILE, " %d. %s record (type=%d)", 97 index, pj_dns_get_type_name(rr->type), 50 98 rr->type)); 51 99 PJ_LOG(3,(THIS_FILE, " Name: %.*s", (int)name->slen, name->ptr)); 52 PJ_LOG(3,(THIS_FILE, " TTL: %u", rr->ttl)); 100 PJ_LOG(3,(THIS_FILE, " TTL: %u (%s)", rr->ttl, 101 spell_ttl(ttl_words, sizeof(ttl_words), rr->ttl))); 53 102 PJ_LOG(3,(THIS_FILE, " Data length: %u", rr->rdlength)); 54 103 … … 56 105 PJ_LOG(3,(THIS_FILE, " SRV: prio=%d, weight=%d %.*s:%d", 57 106 rr->rdata.srv.prio, rr->rdata.srv.weight, 58 (int)rr->rdata.srv.target.slen, rr->rdata.srv.target.ptr, 107 (int)rr->rdata.srv.target.slen, 108 rr->rdata.srv.target.ptr, 59 109 rr->rdata.srv.port)); 60 110 } else if (rr->type == PJ_DNS_TYPE_CNAME || … … 73 123 74 124 75 PJ_DEF(void) pj_dns_dump_ response(const pj_dns_parsed_response*res)125 PJ_DEF(void) pj_dns_dump_packet(const pj_dns_parsed_packet *res) 76 126 { 77 127 unsigned i; … … 83 133 (PJ_DNS_GET_QR(res->hdr.flags) ? "response" : "query"))); 84 134 PJ_LOG(3,(THIS_FILE, " Transaction ID: %d", res->hdr.id)); 85 PJ_LOG(3,(THIS_FILE, " Flags: type=%s, opcode=%d, authoritative=%d, truncated=%d, rcode=%d",86 (PJ_DNS_GET_QR(res->hdr.flags) ? "response" : "query"),135 PJ_LOG(3,(THIS_FILE, 136 " Flags: opcode=%d, authoritative=%d, truncated=%d, rcode=%d", 87 137 PJ_DNS_GET_OPCODE(res->hdr.flags), 88 138 PJ_DNS_GET_AA(res->hdr.flags), 89 139 PJ_DNS_GET_TC(res->hdr.flags), 90 140 PJ_DNS_GET_RCODE(res->hdr.flags))); 91 PJ_LOG(3,(THIS_FILE, " Nb of que stion RR: %d", res->hdr.qdcount));141 PJ_LOG(3,(THIS_FILE, " Nb of queries: %d", res->hdr.qdcount)); 92 142 PJ_LOG(3,(THIS_FILE, " Nb of answer RR: %d", res->hdr.anscount)); 93 143 PJ_LOG(3,(THIS_FILE, " Nb of authority RR: %d", res->hdr.nscount)); 94 144 PJ_LOG(3,(THIS_FILE, " Nb of additional RR: %d", res->hdr.arcount)); 95 145 PJ_LOG(3,(THIS_FILE, "")); 146 147 /* Dump queries */ 148 if (res->hdr.qdcount) { 149 PJ_LOG(3,(THIS_FILE, " Queries:")); 150 151 for (i=0; i<res->hdr.qdcount; ++i) { 152 dump_query(i, &res->q[i]); 153 } 154 PJ_LOG(3,(THIS_FILE, "")); 155 } 96 156 97 157 /* Dump answers */
Note: See TracChangeset
for help on using the changeset viewer.