dnssec_zone.h

Go to the documentation of this file.
00001 /*
00002  * special zone file structures and functions for better dnssec handling
00003  *
00004  * A zone contains a SOA dnssec_zone_rrset, and an AVL tree of 'normal'
00005  * dnssec_zone_rrsets, indexed by name and type
00006  */
00007 
00008 #ifndef LDNS_DNSSEC_ZONE_H
00009 #define LDNS_DNSSEC_ZONE_H
00010  
00011 #include <ldns/ldns.h>
00012 #include <ldns/rbtree.h>
00013 #include <ldns/host2str.h>
00014 
00015 #ifdef __cplusplus
00016 extern "C" {
00017 #endif
00018 
00022 typedef struct ldns_struct_dnssec_rrs ldns_dnssec_rrs;
00023 struct ldns_struct_dnssec_rrs
00024 {
00025         ldns_rr *rr;
00026         ldns_dnssec_rrs *next;
00027 };
00028 
00032 typedef struct ldns_struct_dnssec_rrsets ldns_dnssec_rrsets;
00033 struct ldns_struct_dnssec_rrsets
00034 {
00035         ldns_dnssec_rrs *rrs;
00036         ldns_rr_type type;
00037         ldns_dnssec_rrs *signatures;
00038         ldns_dnssec_rrsets *next;
00039 };
00040 
00045 typedef struct ldns_struct_dnssec_name ldns_dnssec_name;
00046 struct ldns_struct_dnssec_name
00047 {
00052         ldns_rdf *name;
00060         bool name_alloced;
00064         ldns_dnssec_rrsets *rrsets;
00068         ldns_rr *nsec;
00072         ldns_dnssec_rrs *nsec_signatures;
00082         bool is_glue;
00086         ldns_rdf *hashed_name;
00087 };
00088 
00092 struct ldns_struct_dnssec_zone {
00094         ldns_dnssec_name *soa;
00096         ldns_rbtree_t *names;
00097 };
00098 typedef struct ldns_struct_dnssec_zone ldns_dnssec_zone;
00099 
00104 ldns_dnssec_rrs *ldns_dnssec_rrs_new();
00105 
00112 void ldns_dnssec_rrs_free(ldns_dnssec_rrs *rrs);
00113 
00120 void ldns_dnssec_rrs_deep_free(ldns_dnssec_rrs *rrs);
00121 
00129 ldns_status ldns_dnssec_rrs_add_rr(ldns_dnssec_rrs *rrs, ldns_rr *rr);
00130 
00137 void ldns_dnssec_rrs_print(FILE *out, ldns_dnssec_rrs *rrs);
00138 
00146 void ldns_dnssec_rrs_print_fmt(FILE *out, 
00147                 const ldns_output_format *fmt, ldns_dnssec_rrs *rrs);
00148 
00153 ldns_dnssec_rrsets *ldns_dnssec_rrsets_new();
00154 
00161 void ldns_dnssec_rrsets_free(ldns_dnssec_rrsets *rrsets);
00162 
00169 void ldns_dnssec_rrsets_deep_free(ldns_dnssec_rrsets *rrsets);
00170 
00177 ldns_rr_type ldns_dnssec_rrsets_type(ldns_dnssec_rrsets *rrsets);
00178 
00186 ldns_status ldns_dnssec_rrsets_set_type(ldns_dnssec_rrsets *rrsets,
00187                                            ldns_rr_type type);
00188 
00197 ldns_status ldns_dnssec_rrsets_add_rr(ldns_dnssec_rrsets *rrsets, ldns_rr *rr);
00198 
00206 void ldns_dnssec_rrsets_print(FILE *out,
00207                 ldns_dnssec_rrsets *rrsets,
00208                 bool follow);
00209 
00218 void ldns_dnssec_rrsets_print_fmt(FILE *out,
00219                 const ldns_output_format *fmt,
00220                 ldns_dnssec_rrsets *rrsets,
00221                 bool follow);
00222 
00223 
00228 ldns_dnssec_name *ldns_dnssec_name_new();
00229 
00235 ldns_dnssec_name *ldns_dnssec_name_new_frm_rr(ldns_rr *rr);
00236 
00243 void ldns_dnssec_name_free(ldns_dnssec_name *name);
00244 
00251 void ldns_dnssec_name_deep_free(ldns_dnssec_name *name);
00252 
00259 ldns_rdf *ldns_dnssec_name_name(ldns_dnssec_name *name);
00260 
00261 
00268 void ldns_dnssec_name_set_name(ldns_dnssec_name *name,
00269                                                  ldns_rdf *dname);
00281 bool ldns_dnssec_name_is_glue(ldns_dnssec_name *name);
00282 
00289 void ldns_dnssec_name_set_nsec(ldns_dnssec_name *name, ldns_rr *nsec);
00290 
00301 int ldns_dnssec_name_cmp(const void *a, const void *b);
00302 
00311 ldns_status ldns_dnssec_name_add_rr(ldns_dnssec_name *name,
00312                                                          ldns_rr *rr);
00313 
00321 ldns_dnssec_rrsets *ldns_dnssec_name_find_rrset(ldns_dnssec_name *name,
00322                                                                            ldns_rr_type type);
00323 
00332 ldns_dnssec_rrsets *ldns_dnssec_zone_find_rrset(ldns_dnssec_zone *zone,
00333                                                                            ldns_rdf *dname,
00334                                                                            ldns_rr_type type);
00335 
00343 void ldns_dnssec_name_print(FILE *out, ldns_dnssec_name *name);
00344 
00353 void ldns_dnssec_name_print_fmt(FILE *out, 
00354                 const ldns_output_format *fmt, ldns_dnssec_name *name);
00355 
00360 ldns_dnssec_zone *ldns_dnssec_zone_new();
00361 
00367 void ldns_dnssec_zone_free(ldns_dnssec_zone *zone);
00368 
00374 void ldns_dnssec_zone_deep_free(ldns_dnssec_zone *zone);
00375 
00386 ldns_status ldns_dnssec_zone_add_rr(ldns_dnssec_zone *zone,
00387                                                          ldns_rr *rr);
00388 
00396 void ldns_dnssec_zone_names_print(FILE *out, ldns_rbtree_t *tree, bool print_soa);
00397 
00406 void ldns_dnssec_zone_names_print_fmt(FILE *out, const ldns_output_format *fmt,
00407                 ldns_rbtree_t *tree, bool print_soa);
00408 
00415 void ldns_dnssec_zone_print(FILE *out, ldns_dnssec_zone *zone);
00416 
00424 void ldns_dnssec_zone_print_fmt(FILE *out, 
00425                 const ldns_output_format *fmt, ldns_dnssec_zone *zone);
00426 
00434 ldns_status ldns_dnssec_zone_add_empty_nonterminals(ldns_dnssec_zone *zone);
00435 
00436 #ifdef __cplusplus
00437 }
00438 #endif
00439 
00440 #endif

Generated on Thu Apr 5 23:03:55 2012 for ldns by  doxygen 1.4.7