|
HOME
SIP/media Features
High Performance SIP
Small Footprint SIP
Symbian Port
FAQ
Documentation
Licensing
Download
Development (Trac)
Projects using pjsip
Mailing List
Open Source Links
About: PJLIB, PJLIB-UTIL, PJSIP, and PJMEDIA are created by: Benny Prijono <bennylp pjsip.org>
|
|
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 #ifndef __PJLIB_UTIL_DNS_H__
00020 #define __PJLIB_UTIL_DNS_H__
00021
00022
00027 #include <pjlib-util/types.h>
00028 #include <pj/sock.h>
00029
00030 PJ_BEGIN_DECL
00031
00062 enum
00063 {
00064 PJ_DNS_CLASS_IN = 1
00065 };
00066
00071 typedef enum pj_dns_type
00072 {
00073 PJ_DNS_TYPE_A = 1,
00074 PJ_DNS_TYPE_NS = 2,
00075 PJ_DNS_TYPE_MD = 3,
00076 PJ_DNS_TYPE_MF = 4,
00077 PJ_DNS_TYPE_CNAME = 5,
00078 PJ_DNS_TYPE_SOA = 6,
00079 PJ_DNS_TYPE_MB = 7,
00080 PJ_DNS_TYPE_MG = 8,
00081 PJ_DNS_TYPE_MR = 9,
00082 PJ_DNS_TYPE_NULL = 10,
00083 PJ_DNS_TYPE_WKS = 11,
00084 PJ_DNS_TYPE_PTR = 12,
00085 PJ_DNS_TYPE_HINFO = 13,
00086 PJ_DNS_TYPE_MINFO = 14,
00087 PJ_DNS_TYPE_MX = 15,
00088 PJ_DNS_TYPE_TXT = 16,
00089 PJ_DNS_TYPE_RP = 17,
00090 PJ_DNS_TYPE_AFSB = 18,
00091 PJ_DNS_TYPE_X25 = 19,
00092 PJ_DNS_TYPE_ISDN = 20,
00093 PJ_DNS_TYPE_RT = 21,
00094 PJ_DNS_TYPE_NSAP = 22,
00095 PJ_DNS_TYPE_NSAP_PTR= 23,
00096 PJ_DNS_TYPE_SIG = 24,
00097 PJ_DNS_TYPE_KEY = 25,
00098 PJ_DNS_TYPE_PX = 26,
00099 PJ_DNS_TYPE_GPOS = 27,
00100 PJ_DNS_TYPE_AAAA = 28,
00101 PJ_DNS_TYPE_LOC = 29,
00102 PJ_DNS_TYPE_NXT = 30,
00103 PJ_DNS_TYPE_EID = 31,
00104 PJ_DNS_TYPE_NIMLOC = 32,
00105 PJ_DNS_TYPE_SRV = 33,
00106 PJ_DNS_TYPE_ATMA = 34,
00107 PJ_DNS_TYPE_NAPTR = 35,
00108 PJ_DNS_TYPE_KX = 36,
00109 PJ_DNS_TYPE_CERT = 37,
00110 PJ_DNS_TYPE_A6 = 38,
00111 PJ_DNS_TYPE_DNAME = 39,
00113 PJ_DNS_TYPE_OPT = 41,
00114 PJ_DNS_TYPE_APL = 42,
00115 PJ_DNS_TYPE_DS = 43,
00116 PJ_DNS_TYPE_SSHFP = 44,
00117 PJ_DNS_TYPE_IPSECKEY= 45,
00118 PJ_DNS_TYPE_RRSIG = 46,
00119 PJ_DNS_TYPE_NSEC = 47,
00120 PJ_DNS_TYPE_DNSKEY = 48
00121 } pj_dns_type;
00122
00123
00124
00133 typedef struct pj_dns_hdr
00134 {
00135 pj_uint16_t id;
00136 pj_uint16_t flags;
00137 pj_uint16_t qdcount;
00138 pj_uint16_t anscount;
00139 pj_uint16_t nscount;
00140 pj_uint16_t arcount;
00141 } pj_dns_hdr;
00142
00144 #define PJ_DNS_SET_RCODE(c) ((pj_uint16_t)((c) & 0x0F))
00145
00147 #define PJ_DNS_SET_RA(on) ((pj_uint16_t)((on) << 7))
00148
00150 #define PJ_DNS_SET_RD(on) ((pj_uint16_t)((on) << 8))
00151
00153 #define PJ_DNS_SET_TC(on) ((pj_uint16_t)((on) << 9))
00154
00156 #define PJ_DNS_SET_AA(on) ((pj_uint16_t)((on) << 10))
00157
00159 #define PJ_DNS_SET_OPCODE(o) ((pj_uint16_t)((o) << 11))
00160
00162 #define PJ_DNS_SET_QR(on) ((pj_uint16_t)((on) << 15))
00163
00164
00166 #define PJ_DNS_GET_RCODE(val) (((val) & PJ_DNS_SET_RCODE(0x0F)) >> 0)
00167
00169 #define PJ_DNS_GET_RA(val) (((val) & PJ_DNS_SET_RA(1)) >> 7)
00170
00172 #define PJ_DNS_GET_RD(val) (((val) & PJ_DNS_SET_RD(1)) >> 8)
00173
00175 #define PJ_DNS_GET_TC(val) (((val) & PJ_DNS_SET_TC(1)) >> 9)
00176
00178 #define PJ_DNS_GET_AA(val) (((val) & PJ_DNS_SET_AA(1)) >> 10)
00179
00181 #define PJ_DNS_GET_OPCODE(val) (((val) & PJ_DNS_SET_OPCODE(0x0F)) >> 11)
00182
00184 #define PJ_DNS_GET_QR(val) (((val) & PJ_DNS_SET_QR(1)) >> 15)
00185
00186
00192 typedef enum pj_dns_rcode
00193 {
00194 PJ_DNS_RCODE_FORMERR = 1,
00195 PJ_DNS_RCODE_SERVFAIL = 2,
00196 PJ_DNS_RCODE_NXDOMAIN = 3,
00197 PJ_DNS_RCODE_NOTIMPL = 4,
00198 PJ_DNS_RCODE_REFUSED = 5,
00199 PJ_DNS_RCODE_YXDOMAIN = 6,
00200 PJ_DNS_RCODE_YXRRSET = 7,
00201 PJ_DNS_RCODE_NXRRSET = 8,
00202 PJ_DNS_RCODE_NOTAUTH = 9,
00203 PJ_DNS_RCODE_NOTZONE = 10
00205 } pj_dns_rcode;
00206
00207
00211 typedef struct pj_dns_parsed_query
00212 {
00213 pj_str_t name;
00214 pj_uint16_t type;
00215 pj_uint16_t dnsclass;
00216 } pj_dns_parsed_query;
00217
00218
00223 typedef struct pj_dns_parsed_rr
00224 {
00225 pj_str_t name;
00226 pj_uint16_t type;
00227 pj_uint16_t dnsclass;
00228 pj_uint32_t ttl;
00229 pj_uint16_t rdlength;
00230 void *data;
00237 union rdata
00238 {
00240 struct srv {
00241 pj_uint16_t prio;
00242 pj_uint16_t weight;
00243 pj_uint16_t port;
00244 pj_str_t target;
00245 } srv;
00246
00248 struct cname {
00249 pj_str_t name;
00250 } cname;
00251
00253 struct ns {
00254 pj_str_t name;
00255 } ns;
00256
00258 struct ptr {
00259 pj_str_t name;
00260 } ptr;
00261
00263 struct a {
00264 pj_in_addr ip_addr;
00265 } a;
00266
00268 struct aaaa {
00269 pj_in6_addr ip_addr;
00270 } aaaa;
00271
00272 } rdata;
00273
00274 } pj_dns_parsed_rr;
00275
00276
00282 typedef struct pj_dns_parsed_packet
00283 {
00284 pj_dns_hdr hdr;
00285 pj_dns_parsed_query *q;
00286 pj_dns_parsed_rr *ans;
00287 pj_dns_parsed_rr *ns;
00288 pj_dns_parsed_rr *arr;
00289 } pj_dns_parsed_packet;
00290
00291
00296 enum pj_dns_dup_options
00297 {
00298 PJ_DNS_NO_QD = 1,
00299 PJ_DNS_NO_ANS = 2,
00300 PJ_DNS_NO_NS = 4,
00301 PJ_DNS_NO_AR = 8
00302 };
00303
00304
00326 PJ_DECL(pj_status_t) pj_dns_make_query(void *packet,
00327 unsigned *size,
00328 pj_uint16_t id,
00329 int qtype,
00330 const pj_str_t *name);
00331
00345 PJ_DECL(pj_status_t) pj_dns_parse_packet(pj_pool_t *pool,
00346 const void *packet,
00347 unsigned size,
00348 pj_dns_parsed_packet **p_res);
00349
00358 PJ_DECL(void) pj_dns_packet_dup(pj_pool_t *pool,
00359 const pj_dns_parsed_packet*p,
00360 unsigned options,
00361 pj_dns_parsed_packet **p_dst);
00362
00363
00371 PJ_DECL(const char *) pj_dns_get_type_name(int type);
00372
00373
00387 PJ_DECL(void) pj_dns_init_srv_rr(pj_dns_parsed_rr *rec,
00388 const pj_str_t *res_name,
00389 unsigned dnsclass,
00390 unsigned ttl,
00391 unsigned prio,
00392 unsigned weight,
00393 unsigned port,
00394 const pj_str_t *target);
00395
00406 PJ_DECL(void) pj_dns_init_cname_rr(pj_dns_parsed_rr *rec,
00407 const pj_str_t *res_name,
00408 unsigned dnsclass,
00409 unsigned ttl,
00410 const pj_str_t *name);
00411
00422 PJ_DECL(void) pj_dns_init_a_rr(pj_dns_parsed_rr *rec,
00423 const pj_str_t *res_name,
00424 unsigned dnsclass,
00425 unsigned ttl,
00426 const pj_in_addr *ip_addr);
00427
00433 PJ_DECL(void) pj_dns_dump_packet(const pj_dns_parsed_packet *res);
00434
00435
00440 PJ_END_DECL
00441
00442
00443 #endif
00444
PJLIB-UTIL Open Source, small footprint, and portable asynchronous/caching DNS resolver, text scanner, STUN client, and XML library
(C)2001-2008 Benny Prijono
|
|