|
Home --> Documentations --> PJLIB-UTIL Reference
dns.hGo to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020 #ifndef __PJLIB_UTIL_DNS_H__
00021 #define __PJLIB_UTIL_DNS_H__
00022
00023
00028 #include <pjlib-util/types.h>
00029 #include <pj/sock.h>
00030
00031 PJ_BEGIN_DECL
00032
00063 enum
00064 {
00065 PJ_DNS_CLASS_IN = 1
00066 };
00067
00072 typedef enum pj_dns_type
00073 {
00074 PJ_DNS_TYPE_A = 1,
00075 PJ_DNS_TYPE_NS = 2,
00076 PJ_DNS_TYPE_MD = 3,
00077 PJ_DNS_TYPE_MF = 4,
00078 PJ_DNS_TYPE_CNAME = 5,
00079 PJ_DNS_TYPE_SOA = 6,
00080 PJ_DNS_TYPE_MB = 7,
00081 PJ_DNS_TYPE_MG = 8,
00082 PJ_DNS_TYPE_MR = 9,
00083 PJ_DNS_TYPE_NULL = 10,
00084 PJ_DNS_TYPE_WKS = 11,
00085 PJ_DNS_TYPE_PTR = 12,
00086 PJ_DNS_TYPE_HINFO = 13,
00087 PJ_DNS_TYPE_MINFO = 14,
00088 PJ_DNS_TYPE_MX = 15,
00089 PJ_DNS_TYPE_TXT = 16,
00090 PJ_DNS_TYPE_RP = 17,
00091 PJ_DNS_TYPE_AFSB = 18,
00092 PJ_DNS_TYPE_X25 = 19,
00093 PJ_DNS_TYPE_ISDN = 20,
00094 PJ_DNS_TYPE_RT = 21,
00095 PJ_DNS_TYPE_NSAP = 22,
00096 PJ_DNS_TYPE_NSAP_PTR= 23,
00097 PJ_DNS_TYPE_SIG = 24,
00098 PJ_DNS_TYPE_KEY = 25,
00099 PJ_DNS_TYPE_PX = 26,
00100 PJ_DNS_TYPE_GPOS = 27,
00101 PJ_DNS_TYPE_AAAA = 28,
00102 PJ_DNS_TYPE_LOC = 29,
00103 PJ_DNS_TYPE_NXT = 30,
00104 PJ_DNS_TYPE_EID = 31,
00105 PJ_DNS_TYPE_NIMLOC = 32,
00106 PJ_DNS_TYPE_SRV = 33,
00107 PJ_DNS_TYPE_ATMA = 34,
00108 PJ_DNS_TYPE_NAPTR = 35,
00109 PJ_DNS_TYPE_KX = 36,
00110 PJ_DNS_TYPE_CERT = 37,
00111 PJ_DNS_TYPE_A6 = 38,
00112 PJ_DNS_TYPE_DNAME = 39,
00114 PJ_DNS_TYPE_OPT = 41,
00115 PJ_DNS_TYPE_APL = 42,
00116 PJ_DNS_TYPE_DS = 43,
00117 PJ_DNS_TYPE_SSHFP = 44,
00118 PJ_DNS_TYPE_IPSECKEY= 45,
00119 PJ_DNS_TYPE_RRSIG = 46,
00120 PJ_DNS_TYPE_NSEC = 47,
00121 PJ_DNS_TYPE_DNSKEY = 48
00122 } pj_dns_type;
00123
00124
00125
00134 typedef struct pj_dns_hdr
00135 {
00136 pj_uint16_t id;
00137 pj_uint16_t flags;
00138 pj_uint16_t qdcount;
00139 pj_uint16_t anscount;
00140 pj_uint16_t nscount;
00141 pj_uint16_t arcount;
00142 } pj_dns_hdr;
00143
00145 #define PJ_DNS_SET_RCODE(c) ((pj_uint16_t)((c) & 0x0F))
00146
00148 #define PJ_DNS_SET_RA(on) ((pj_uint16_t)((on) << 7))
00149
00151 #define PJ_DNS_SET_RD(on) ((pj_uint16_t)((on) << 8))
00152
00154 #define PJ_DNS_SET_TC(on) ((pj_uint16_t)((on) << 9))
00155
00157 #define PJ_DNS_SET_AA(on) ((pj_uint16_t)((on) << 10))
00158
00160 #define PJ_DNS_SET_OPCODE(o) ((pj_uint16_t)((o) << 11))
00161
00163 #define PJ_DNS_SET_QR(on) ((pj_uint16_t)((on) << 15))
00164
00165
00167 #define PJ_DNS_GET_RCODE(val) (((val) & PJ_DNS_SET_RCODE(0x0F)) >> 0)
00168
00170 #define PJ_DNS_GET_RA(val) (((val) & PJ_DNS_SET_RA(1)) >> 7)
00171
00173 #define PJ_DNS_GET_RD(val) (((val) & PJ_DNS_SET_RD(1)) >> 8)
00174
00176 #define PJ_DNS_GET_TC(val) (((val) & PJ_DNS_SET_TC(1)) >> 9)
00177
00179 #define PJ_DNS_GET_AA(val) (((val) & PJ_DNS_SET_AA(1)) >> 10)
00180
00182 #define PJ_DNS_GET_OPCODE(val) (((val) & PJ_DNS_SET_OPCODE(0x0F)) >> 11)
00183
00185 #define PJ_DNS_GET_QR(val) (((val) & PJ_DNS_SET_QR(1)) >> 15)
00186
00187
00193 typedef enum pj_dns_rcode
00194 {
00195 PJ_DNS_RCODE_FORMERR = 1,
00196 PJ_DNS_RCODE_SERVFAIL = 2,
00197 PJ_DNS_RCODE_NXDOMAIN = 3,
00198 PJ_DNS_RCODE_NOTIMPL = 4,
00199 PJ_DNS_RCODE_REFUSED = 5,
00200 PJ_DNS_RCODE_YXDOMAIN = 6,
00201 PJ_DNS_RCODE_YXRRSET = 7,
00202 PJ_DNS_RCODE_NXRRSET = 8,
00203 PJ_DNS_RCODE_NOTAUTH = 9,
00204 PJ_DNS_RCODE_NOTZONE = 10
00206 } pj_dns_rcode;
00207
00208
00212 typedef struct pj_dns_parsed_query
00213 {
00214 pj_str_t name;
00215 pj_uint16_t type;
00216 pj_uint16_t dnsclass;
00217 } pj_dns_parsed_query;
00218
00219
00224 typedef struct pj_dns_parsed_rr
00225 {
00226 pj_str_t name;
00227 pj_uint16_t type;
00228 pj_uint16_t dnsclass;
00229 pj_uint32_t ttl;
00230 pj_uint16_t rdlength;
00231 void *data;
00238 union rdata
00239 {
00241 struct srv {
00242 pj_uint16_t prio;
00243 pj_uint16_t weight;
00244 pj_uint16_t port;
00245 pj_str_t target;
00246 } srv;
00247
00249 struct cname {
00250 pj_str_t name;
00251 } cname;
00252
00254 struct ns {
00255 pj_str_t name;
00256 } ns;
00257
00259 struct ptr {
00260 pj_str_t name;
00261 } ptr;
00262
00264 struct a {
00265 pj_in_addr ip_addr;
00266 } a;
00267
00269 struct aaaa {
00270 pj_in6_addr ip_addr;
00271 } aaaa;
00272
00273 } rdata;
00274
00275 } pj_dns_parsed_rr;
00276
00277
00283 typedef struct pj_dns_parsed_packet
00284 {
00285 pj_dns_hdr hdr;
00286 pj_dns_parsed_query *q;
00287 pj_dns_parsed_rr *ans;
00288 pj_dns_parsed_rr *ns;
00289 pj_dns_parsed_rr *arr;
00290 } pj_dns_parsed_packet;
00291
00292
00297 enum pj_dns_dup_options
00298 {
00299 PJ_DNS_NO_QD = 1,
00300 PJ_DNS_NO_ANS = 2,
00301 PJ_DNS_NO_NS = 4,
00302 PJ_DNS_NO_AR = 8
00303 };
00304
00305
00327 PJ_DECL(pj_status_t) pj_dns_make_query(void *packet,
00328 unsigned *size,
00329 pj_uint16_t id,
00330 int qtype,
00331 const pj_str_t *name);
00332
00346 PJ_DECL(pj_status_t) pj_dns_parse_packet(pj_pool_t *pool,
00347 const void *packet,
00348 unsigned size,
00349 pj_dns_parsed_packet **p_res);
00350
00359 PJ_DECL(void) pj_dns_packet_dup(pj_pool_t *pool,
00360 const pj_dns_parsed_packet*p,
00361 unsigned options,
00362 pj_dns_parsed_packet **p_dst);
00363
00364
00372 PJ_DECL(const char *) pj_dns_get_type_name(int type);
00373
00374
00388 PJ_DECL(void) pj_dns_init_srv_rr(pj_dns_parsed_rr *rec,
00389 const pj_str_t *res_name,
00390 unsigned dnsclass,
00391 unsigned ttl,
00392 unsigned prio,
00393 unsigned weight,
00394 unsigned port,
00395 const pj_str_t *target);
00396
00407 PJ_DECL(void) pj_dns_init_cname_rr(pj_dns_parsed_rr *rec,
00408 const pj_str_t *res_name,
00409 unsigned dnsclass,
00410 unsigned ttl,
00411 const pj_str_t *name);
00412
00423 PJ_DECL(void) pj_dns_init_a_rr(pj_dns_parsed_rr *rec,
00424 const pj_str_t *res_name,
00425 unsigned dnsclass,
00426 unsigned ttl,
00427 const pj_in_addr *ip_addr);
00428
00434 PJ_DECL(void) pj_dns_dump_packet(const pj_dns_parsed_packet *res);
00435
00436
00441 PJ_END_DECL
00442
00443
00444 #endif
00445
PJLIB-UTIL Open Source, small footprint, and portable asynchronous/caching DNS resolver, text scanner, STUN client, and XML library
Copyright (C) 2006-2009 Teluu Inc.
|