rr.h

Go to the documentation of this file.
00001 /*
00002  * rr.h -  resource record definitions
00003  *
00004  * a Net::DNS like library for C
00005  *
00006  * (c) NLnet Labs, 2005-2006
00007  *
00008  * See the file LICENSE for the license
00009  */
00010 
00018 #ifndef LDNS_RR_H
00019 #define LDNS_RR_H
00020 
00021 #include <ldns/common.h>
00022 #include <ldns/rdata.h>
00023 #include <ldns/buffer.h>
00024 #include <ldns/error.h>
00025 
00027 #define LDNS_MAX_LABELLEN     63
00028 
00029 #define LDNS_MAX_DOMAINLEN    255
00030 
00031 #define LDNS_MAX_POINTERS       65535
00032 
00033 #define LDNS_RR_OVERHEAD        10
00034 
00035 
00039 enum ldns_enum_rr_class
00040 {
00042         LDNS_RR_CLASS_IN        = 1,
00044         LDNS_RR_CLASS_CH        = 3,
00046         LDNS_RR_CLASS_HS        = 4,
00048         LDNS_RR_CLASS_NONE      = 254,
00050         LDNS_RR_CLASS_ANY       = 255,
00051 
00052         LDNS_RR_CLASS_FIRST     = 0,
00053         LDNS_RR_CLASS_LAST      = 65535,
00054         LDNS_RR_CLASS_COUNT     = LDNS_RR_CLASS_LAST - LDNS_RR_CLASS_FIRST + 1
00055 };
00056 typedef enum ldns_enum_rr_class ldns_rr_class;
00057 
00061 enum ldns_enum_rr_compress
00062 {
00064         LDNS_RR_COMPRESS,
00065         LDNS_RR_NO_COMPRESS
00066 };
00067 typedef enum ldns_enum_rr_compress ldns_rr_compress;
00068 
00072 enum ldns_enum_rr_type
00073 {
00075         LDNS_RR_TYPE_A = 1, 
00077         LDNS_RR_TYPE_NS = 2, 
00079         LDNS_RR_TYPE_MD = 3, 
00081         LDNS_RR_TYPE_MF = 4, 
00083         LDNS_RR_TYPE_CNAME = 5, 
00085         LDNS_RR_TYPE_SOA = 6, 
00087         LDNS_RR_TYPE_MB = 7, 
00089         LDNS_RR_TYPE_MG = 8, 
00091         LDNS_RR_TYPE_MR = 9, 
00093         LDNS_RR_TYPE_NULL = 10,
00095         LDNS_RR_TYPE_WKS = 11,
00097         LDNS_RR_TYPE_PTR = 12,
00099         LDNS_RR_TYPE_HINFO = 13,
00101         LDNS_RR_TYPE_MINFO = 14,
00103         LDNS_RR_TYPE_MX = 15,
00105         LDNS_RR_TYPE_TXT = 16,
00107         LDNS_RR_TYPE_RP = 17,
00109         LDNS_RR_TYPE_AFSDB = 18,
00111         LDNS_RR_TYPE_X25 = 19,
00113         LDNS_RR_TYPE_ISDN = 20,
00115         LDNS_RR_TYPE_RT = 21,
00117         LDNS_RR_TYPE_NSAP = 22,
00119         LDNS_RR_TYPE_NSAP_PTR = 23,
00121         LDNS_RR_TYPE_SIG = 24,
00123         LDNS_RR_TYPE_KEY = 25,
00125         LDNS_RR_TYPE_PX = 26,
00127         LDNS_RR_TYPE_GPOS = 27,
00129         LDNS_RR_TYPE_AAAA = 28,
00131         LDNS_RR_TYPE_LOC = 29,
00133         LDNS_RR_TYPE_NXT = 30,
00135         LDNS_RR_TYPE_EID = 31,
00137         LDNS_RR_TYPE_NIMLOC = 32,
00139         LDNS_RR_TYPE_SRV = 33,
00141         LDNS_RR_TYPE_ATMA = 34,
00143         LDNS_RR_TYPE_NAPTR = 35,
00145         LDNS_RR_TYPE_KX = 36,
00147         LDNS_RR_TYPE_CERT = 37,
00149         LDNS_RR_TYPE_A6 = 38,
00151         LDNS_RR_TYPE_DNAME = 39,
00153         LDNS_RR_TYPE_SINK = 40,
00155         LDNS_RR_TYPE_OPT = 41,
00157         LDNS_RR_TYPE_APL = 42,
00159         LDNS_RR_TYPE_DS = 43,
00161         LDNS_RR_TYPE_SSHFP = 44,
00163         LDNS_RR_TYPE_IPSECKEY = 45,
00165         LDNS_RR_TYPE_RRSIG = 46,
00166         LDNS_RR_TYPE_NSEC = 47,      
00167         LDNS_RR_TYPE_DNSKEY = 48,
00168 
00169         LDNS_RR_TYPE_UINFO = 100,
00170         LDNS_RR_TYPE_UID = 101,
00171         LDNS_RR_TYPE_GID = 102,
00172         LDNS_RR_TYPE_UNSPEC = 103,
00173 
00174         LDNS_RR_TYPE_TSIG = 250,
00175         LDNS_RR_TYPE_IXFR = 251,
00176         LDNS_RR_TYPE_AXFR = 252,
00178         LDNS_RR_TYPE_MAILB = 253,
00180         LDNS_RR_TYPE_MAILA = 254,
00182         LDNS_RR_TYPE_ANY = 255,
00183 
00184         LDNS_RR_TYPE_FIRST = 0,
00185         LDNS_RR_TYPE_LAST  = 65535,
00186         LDNS_RR_TYPE_COUNT = LDNS_RR_TYPE_LAST - LDNS_RR_TYPE_FIRST + 1
00187 };
00188 typedef enum ldns_enum_rr_type ldns_rr_type;
00189 
00251 struct ldns_struct_rr
00252 {
00254         ldns_rdf        *_owner;        
00256         uint32_t        _ttl;   
00258         size_t          _rd_count;
00260         ldns_rr_type    _rr_type;       
00262         ldns_rr_class   _rr_class;
00263         /* everything in the rdata is in network order */
00265         ldns_rdf         **_rdata_fields;
00266 };
00267 typedef struct ldns_struct_rr ldns_rr;
00268 
00275 struct ldns_struct_rr_list
00276 {
00277         size_t _rr_count;
00278         size_t _rr_capacity;
00279         ldns_rr **_rrs;
00280 };
00281 typedef struct ldns_struct_rr_list ldns_rr_list;
00282 
00288 struct ldns_struct_rr_descriptor
00289 {
00291         ldns_rr_type    _type;
00293         const char *_name;
00295         uint8_t     _minimum;
00297         uint8_t     _maximum;
00299         const ldns_rdf_type *_wireformat;
00301         ldns_rdf_type _variable;
00303         ldns_rr_compress _compress;
00304 };
00305 typedef struct ldns_struct_rr_descriptor ldns_rr_descriptor;
00306 
00311 ldns_rr* ldns_rr_new(void);
00312 
00317 ldns_rr* ldns_rr_new_frm_type(ldns_rr_type t);
00318 
00324 void ldns_rr_free(ldns_rr *rr);
00325 
00339 ldns_status ldns_rr_new_frm_str(ldns_rr **n, const char *str, uint16_t default_ttl, ldns_rdf *origin, ldns_rdf **prev);
00340 
00355 ldns_status ldns_rr_new_frm_fp(ldns_rr **rr, FILE *fp, uint16_t *default_ttl, ldns_rdf **origin, ldns_rdf **prev);
00356 
00373 ldns_status ldns_rr_new_frm_fp_l(ldns_rr **rr, FILE *fp, uint16_t *default_ttl, ldns_rdf **origin, ldns_rdf **prev, int *line_nr);
00374 
00381 void ldns_rr_set_owner(ldns_rr *rr, ldns_rdf *owner);
00382 
00389 void ldns_rr_set_ttl(ldns_rr *rr, uint32_t ttl);
00390 
00397 void ldns_rr_set_rd_count(ldns_rr *rr, size_t count);
00398 
00405 void ldns_rr_set_type(ldns_rr *rr, ldns_rr_type rr_type);
00406 
00413 void ldns_rr_set_class(ldns_rr *rr, ldns_rr_class rr_class);
00414 
00423 ldns_rdf* ldns_rr_set_rdf(ldns_rr *rr, const ldns_rdf *f, size_t position);
00424 
00432 bool ldns_rr_push_rdf(ldns_rr *rr, const ldns_rdf *f);
00433 
00440 ldns_rdf* ldns_rr_pop_rdf(ldns_rr *rr);
00441 
00448 ldns_rdf* ldns_rr_rdf(const ldns_rr *rr, size_t nr);
00449 
00455 ldns_rdf* ldns_rr_owner(const ldns_rr *rr);
00456 
00462 uint32_t ldns_rr_ttl(const ldns_rr *rr);
00463 
00469 size_t ldns_rr_rd_count(const ldns_rr *rr);
00470 
00476 ldns_rr_type ldns_rr_get_type(const ldns_rr *rr);
00477 
00483 ldns_rr_class ldns_rr_get_class(const ldns_rr *rr);
00484 
00485 /* rr_lists */
00486 
00492 size_t ldns_rr_list_rr_count(const ldns_rr_list *rr_list);
00493 
00500 void ldns_rr_list_set_rr_count(ldns_rr_list *rr_list, size_t count);
00501 
00510 ldns_rr * ldns_rr_list_set_rr(ldns_rr_list *rr_list, const ldns_rr *r, size_t count);
00511 
00518 ldns_rr* ldns_rr_list_rr(const ldns_rr_list *rr_list, size_t nr);
00519 
00524 ldns_rr_list* ldns_rr_list_new();
00525 
00530 void ldns_rr_list_free(ldns_rr_list *rr_list);
00531 
00536 void ldns_rr_list_deep_free(ldns_rr_list *rr_list);
00537 
00545 bool ldns_rr_list_cat(ldns_rr_list *left, ldns_rr_list *right);
00546 
00554 ldns_rr_list* ldns_rr_list_cat_clone(ldns_rr_list *left, ldns_rr_list *right);
00555 
00562 bool ldns_rr_list_push_rr(ldns_rr_list *rr_list, const ldns_rr *rr);
00563 
00570 bool ldns_rr_list_push_rr_list(ldns_rr_list *rr_list, const ldns_rr_list *push_list);
00571 
00577 ldns_rr* ldns_rr_list_pop_rr(ldns_rr_list *rr_list);
00578 
00585 ldns_rr_list* ldns_rr_list_pop_rr_list(ldns_rr_list *rr_list, size_t size);
00586 
00594 bool ldns_rr_list_contains_rr(ldns_rr_list *rr_list, ldns_rr *rr); 
00595 
00601 bool ldns_is_rrset(ldns_rr_list *rr_list);
00602 
00609 bool ldns_rr_set_push_rr(ldns_rr_list *rr_list, ldns_rr *rr);
00610 
00618 ldns_rr* ldns_rr_set_pop_rr(ldns_rr_list *rr_list);
00619 
00625 ldns_rr_list *ldns_rr_list_pop_rrset(ldns_rr_list *rr_list);
00626 
00627 
00633 ldns_rr_type ldns_get_rr_type_by_name(const char *name);
00634 
00640 ldns_rr_class ldns_get_rr_class_by_name(const char *name);
00641 
00647 ldns_rr* ldns_rr_clone(const ldns_rr *rr);
00648 
00654 ldns_rr_list* ldns_rr_list_clone(ldns_rr_list *rrlist);
00655 
00661 void ldns_rr_list_sort(ldns_rr_list *unsorted);
00662 
00671 int ldns_rr_compare(const ldns_rr *rr1, const ldns_rr *rr2);
00672 
00681 int ldns_rr_compare_no_rdata(const ldns_rr *rr1, const ldns_rr *rr2);
00682 
00691 int ldns_rr_compare_wire(ldns_buffer *rr1_buf, ldns_buffer *rr2_buf);
00692 
00701 bool ldns_rr_compare_ds(const ldns_rr *rr1, const ldns_rr *rr2);
00702 
00711 int ldns_rr_list_compare(const ldns_rr_list *rrl1, const ldns_rr_list *rrl2);
00712 
00718 size_t ldns_rr_uncompressed_size(const ldns_rr *r);
00719 
00725 void ldns_rr2canonical(ldns_rr *rr);
00726 
00732 void ldns_rr_list2canonical(ldns_rr_list *rr_list);
00733 
00739 uint8_t ldns_rr_label_count(ldns_rr *rr);
00740 
00747 const ldns_rr_descriptor *ldns_rr_descript(uint16_t type);
00748 
00755 size_t ldns_rr_descriptor_minimum(const ldns_rr_descriptor *descriptor);
00756 
00763 size_t ldns_rr_descriptor_maximum(const ldns_rr_descriptor *descriptor);
00764 
00772 ldns_rdf_type ldns_rr_descriptor_field_type(const ldns_rr_descriptor *descriptor, size_t field);
00773 
00785 ldns_rr_list *ldns_rr_list_subtype_by_rdf(ldns_rr_list *l, ldns_rdf *r, size_t pos);
00786 
00795 ldns_rr_type    ldns_rdf2rr_type(const ldns_rdf *rd);
00796 
00797 #endif /* LDNS_RR_H */

Generated on Wed Feb 20 06:40:44 2008 for ldns by  doxygen 1.5.4