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, 2004, 2005
00007  *
00008  * See the file LICENSE for the license
00009  */
00010 
00011 #ifndef _LDNS_RR_H
00012 #define _LDNS_RR_H
00013 
00014 #include <ldns/common.h>
00015 #include <ldns/rdata.h>
00016 #include <ldns/rr.h>
00017 #include <ldns/error.h>
00018 
00020 #define LDNS_MAX_LABELLEN     63
00021 
00022 #define LDNS_MAX_DOMAINLEN    255
00023 
00024 #define LDNS_MAX_POINTERS       65535
00025 
00026 #define LDNS_MAX_RR             65535
00027 
00028 #define LDNS_RR_OVERHEAD        10
00029 
00030 
00034 enum ldns_enum_rr_class
00035 {
00037         LDNS_RR_CLASS_IN        = 1,
00039         LDNS_RR_CLASS_CH        = 3,
00041         LDNS_RR_CLASS_HS        = 4,
00043         LDNS_RR_CLASS_ANY       = 255,
00044 
00045         LDNS_RR_CLASS_FIRST     = 0,
00046         LDNS_RR_CLASS_LAST      = 65535,
00047         LDNS_RR_CLASS_COUNT     = LDNS_RR_CLASS_LAST - LDNS_RR_CLASS_FIRST + 1
00048 };
00049 typedef enum ldns_enum_rr_class ldns_rr_class;
00050 
00054 enum ldns_enum_rr_compress
00055 {
00057         LDNS_RR_COMPRESS,
00058         LDNS_RR_NO_COMPRESS
00059 };
00060 typedef enum ldns_enum_rr_compress ldns_rr_compress;
00061 
00065 enum ldns_enum_rr_type
00066 {
00068         LDNS_RR_TYPE_A = 1, 
00070         LDNS_RR_TYPE_NS = 2, 
00072         LDNS_RR_TYPE_MD = 3, 
00074         LDNS_RR_TYPE_MF = 4, 
00076         LDNS_RR_TYPE_CNAME = 5, 
00078         LDNS_RR_TYPE_SOA = 6, 
00080         LDNS_RR_TYPE_MB = 7, 
00082         LDNS_RR_TYPE_MG = 8, 
00084         LDNS_RR_TYPE_MR = 9, 
00086         LDNS_RR_TYPE_NULL = 10,
00088         LDNS_RR_TYPE_WKS = 11,
00090         LDNS_RR_TYPE_PTR = 12,
00092         LDNS_RR_TYPE_HINFO = 13,
00094         LDNS_RR_TYPE_MINFO = 14,
00096         LDNS_RR_TYPE_MX = 15,
00098         LDNS_RR_TYPE_TXT = 16,
00100         LDNS_RR_TYPE_RP = 17,
00102         LDNS_RR_TYPE_AFSDB = 18,
00104         LDNS_RR_TYPE_X25 = 19,
00106         LDNS_RR_TYPE_ISDN = 20,
00108         LDNS_RR_TYPE_RT = 21,
00110         LDNS_RR_TYPE_NSAP = 22,
00112         LDNS_RR_TYPE_NSAP_PTR = 23,
00114         LDNS_RR_TYPE_SIG = 24,
00116         LDNS_RR_TYPE_KEY = 25,
00118         LDNS_RR_TYPE_PX = 26,
00120         LDNS_RR_TYPE_GPOS = 27,
00122         LDNS_RR_TYPE_AAAA = 28,
00124         LDNS_RR_TYPE_LOC = 29,
00126         LDNS_RR_TYPE_NXT = 30,
00128         LDNS_RR_TYPE_EID = 31,
00130         LDNS_RR_TYPE_NIMLOC = 32,
00132         LDNS_RR_TYPE_SRV = 33,
00134         LDNS_RR_TYPE_ATMA = 34,
00136         LDNS_RR_TYPE_NAPTR = 35,
00138         LDNS_RR_TYPE_KX = 36,
00140         LDNS_RR_TYPE_CERT = 37,
00142         LDNS_RR_TYPE_A6 = 38,
00144         LDNS_RR_TYPE_DNAME = 39,
00146         LDNS_RR_TYPE_SINK = 40,
00148         LDNS_RR_TYPE_OPT = 41,
00150         LDNS_RR_TYPE_APL = 42,
00152         LDNS_RR_TYPE_DS = 43,
00154         LDNS_RR_TYPE_SSHFP = 44,
00156         LDNS_RR_TYPE_IPSECKEY = 45,
00158         LDNS_RR_TYPE_RRSIG = 46,
00159         LDNS_RR_TYPE_NSEC = 47,      
00160         LDNS_RR_TYPE_DNSKEY = 48,
00161 
00162         LDNS_RR_TYPE_UINFO = 100,
00163         LDNS_RR_TYPE_UID = 101,
00164         LDNS_RR_TYPE_GID = 102,
00165         LDNS_RR_TYPE_UNSPEC = 103,
00166 
00167         LDNS_RR_TYPE_TSIG = 250,
00168         LDNS_RR_TYPE_IXFR = 251,
00169         LDNS_RR_TYPE_AXFR = 252,
00171         LDNS_RR_TYPE_MAILB = 253,
00173         LDNS_RR_TYPE_MAILA = 254,
00175         LDNS_RR_TYPE_ANY = 255,
00176 
00177         LDNS_RR_TYPE_FIRST = 0,
00178         LDNS_RR_TYPE_LAST  = 65535,
00179         LDNS_RR_TYPE_COUNT = LDNS_RR_TYPE_LAST - LDNS_RR_TYPE_FIRST + 1
00180 };
00181 typedef enum ldns_enum_rr_type ldns_rr_type;
00182 
00188 struct ldns_struct_rr
00189 {
00191         ldns_rdf        *_owner;        
00193         uint32_t        _ttl;   
00195         size_t          _rd_count;
00197         ldns_rr_type    _rr_type;       
00199         ldns_rr_class   _rr_class;
00200         /* everything in the rdata is in network order */
00202         ldns_rdf         **_rdata_fields;
00203 };
00204 typedef struct ldns_struct_rr ldns_rr;
00205 
00212 struct ldns_struct_rr_list
00213 {
00214         size_t _rr_count;
00215         ldns_rr **_rrs;
00216 };
00217 typedef struct ldns_struct_rr_list ldns_rr_list;
00218 
00225 struct ldns_struct_rr_descriptor
00226 {
00228         uint16_t    _type;
00230         const char *_name;
00232         uint8_t     _minimum;
00234         uint8_t     _maximum;
00236         const ldns_rdf_type *_wireformat;
00238         ldns_rdf_type _variable;
00240         ldns_rr_compress _compress;
00241 };
00242 typedef struct ldns_struct_rr_descriptor ldns_rr_descriptor;
00243 
00248 ldns_rr* ldns_rr_new(void);
00249 
00254 ldns_rr* ldns_rr_new_frm_type(ldns_rr_type t);
00255 
00261 void ldns_rr_free(ldns_rr *rr);
00262 
00272 ldns_rr* ldns_rr_new_frm_str(const char *str, uint16_t default_ttl, ldns_rdf *origin);
00273 
00283 ldns_rr* ldns_rr_new_frm_fp(FILE *fp, uint16_t *default_ttl, ldns_rdf **origin);
00284 
00295 ldns_rr* ldns_rr_new_frm_fp_l(FILE *fp, uint16_t *default_ttl, ldns_rdf **origin, int *line_nr);
00296 
00303 void ldns_rr_set_owner(ldns_rr *rr, ldns_rdf *owner);
00304 
00311 void ldns_rr_set_ttl(ldns_rr *rr, uint32_t ttl);
00312 
00319 void ldns_rr_set_rd_count(ldns_rr *rr, size_t count);
00320 
00327 void ldns_rr_set_type(ldns_rr *rr, ldns_rr_type rr_type);
00328 
00335 void ldns_rr_set_class(ldns_rr *rr, ldns_rr_class rr_class);
00336 
00345 ldns_rdf* ldns_rr_set_rdf(ldns_rr *rr, ldns_rdf *f, size_t position);
00346 
00354 bool ldns_rr_push_rdf(ldns_rr *rr, ldns_rdf *f);
00355 
00362 ldns_rdf* ldns_rr_pop_rdf(ldns_rr *rr);
00363 
00370 ldns_rdf* ldns_rr_rdf(const ldns_rr *rr, size_t nr);
00371 
00377 ldns_rdf* ldns_rr_owner(const ldns_rr *rr);
00378 
00384 uint32_t ldns_rr_ttl(const ldns_rr *rr);
00385 
00391 size_t ldns_rr_rd_count(const ldns_rr *rr);
00392 
00398 ldns_rr_type ldns_rr_get_type(const ldns_rr *rr);
00399 
00405 ldns_rr_class ldns_rr_get_class(const ldns_rr *rr);
00406 
00407 /* rr_lists */
00408 
00414 size_t ldns_rr_list_rr_count(ldns_rr_list *rr_list);
00415 
00422 void ldns_rr_list_set_rr_count(ldns_rr_list *rr_list, size_t count);
00423 
00424 /* set a specific rr */
00425 ldns_rr * ldns_rr_list_set_rr(ldns_rr_list *rr_list, ldns_rr *r, size_t count);
00426 
00433 ldns_rr* ldns_rr_list_rr(ldns_rr_list *rr_list, size_t nr);
00434 
00439 ldns_rr_list* ldns_rr_list_new();
00440 
00446 void ldns_rr_list_free(ldns_rr_list *rr_list);
00447 
00453 void ldns_rr_list_deep_free(ldns_rr_list *rr_list);
00454 
00462 bool ldns_rr_list_cat(ldns_rr_list *left, ldns_rr_list *right);
00463 
00471 ldns_rr_list* ldns_rr_list_cat_clone(ldns_rr_list *left, ldns_rr_list *right);
00472 
00479 bool ldns_rr_list_push_rr(ldns_rr_list *rr_list, ldns_rr *rr);
00480 
00486 ldns_rr* ldns_rr_list_pop_rr(ldns_rr_list *rr_list);
00487 
00495 bool ldns_rr_list_contains_rr(ldns_rr_list *rr_list, ldns_rr *rr); 
00496 
00502 bool ldns_is_rrset(ldns_rr_list *rr_list);
00503 
00510 bool ldns_rr_set_push_rr(ldns_rr_list *rr_list, ldns_rr *rr);
00511 
00519 ldns_rr* ldns_rr_set_pop_rr(ldns_rr_list *rr_list);
00520 
00526 ldns_rr_list *ldns_rr_list_pop_rrset(ldns_rr_list *rr_list);
00527 
00528 
00534 ldns_rr_type ldns_get_rr_type_by_name(const char *name);
00535 
00541 ldns_rr_class ldns_get_rr_class_by_name(const char *name);
00542 
00548 ldns_rr* ldns_rr_clone(const ldns_rr *rr);
00549 
00555 ldns_rr_list* ldns_rr_list_clone(ldns_rr_list *rrlist);
00556 
00562 void ldns_rr_list_sort(ldns_rr_list *unsorted);
00563 
00569 void ldns_rr_list_sort_oct(ldns_rr_list *unsorted);
00570 
00579 int ldns_rr_compare(const ldns_rr *rr1, const ldns_rr *rr2);
00580 
00589 int ldns_rr_compare_oct(const ldns_rr *rr1, const ldns_rr *rr2);
00590 
00599 bool ldns_rr_compare_ds(const ldns_rr *rr1, const ldns_rr *rr2);
00600 
00606 size_t ldns_rr_uncompressed_size(const ldns_rr *r);
00607 
00613 void ldns_rr2canonical(ldns_rr *rr);
00614 
00620 void ldns_rr_list2canonical(ldns_rr_list *rr_list);
00621 
00627 uint8_t ldns_rr_label_count(ldns_rr *rr);
00628 
00629 /* todo */
00630 
00637 const ldns_rr_descriptor *ldns_rr_descript(uint16_t type);
00638 
00645 size_t ldns_rr_descriptor_minimum(const ldns_rr_descriptor *descriptor);
00646 
00653 size_t ldns_rr_descriptor_maximum(const ldns_rr_descriptor *descriptor);
00654 
00662 ldns_rdf_type ldns_rr_descriptor_field_type(const ldns_rr_descriptor *descriptor, size_t field);
00663 
00675 ldns_rr_list *ldns_rr_list_subtype_by_rdf(ldns_rr_list *l, ldns_rdf *r, size_t pos);
00676 
00677 /* added while doing lua */
00678 bool ldns_rr_list_insert_rr(ldns_rr_list *rr_list, ldns_rr *r, size_t count);
00679 
00680 #endif /* _LDNS_RR_H */

Generated on Mon Sep 11 20:08:52 2006 for ldns by  doxygen 1.4.7