00001
00002
00003
00004
00005
00006
00007
00008 #ifndef LDNS_DNSSEC_ZONE_H
00009 #define LDNS_DNSSEC_ZONE_H
00010
00011 #include <ldns/rbtree.h>
00012 #include <ldns/host2str.h>
00013
00014 #ifdef __cplusplus
00015 extern "C" {
00016 #endif
00017
00021 typedef struct ldns_struct_dnssec_rrs ldns_dnssec_rrs;
00022 struct ldns_struct_dnssec_rrs
00023 {
00024 ldns_rr *rr;
00025 ldns_dnssec_rrs *next;
00026 };
00027
00031 typedef struct ldns_struct_dnssec_rrsets ldns_dnssec_rrsets;
00032 struct ldns_struct_dnssec_rrsets
00033 {
00034 ldns_dnssec_rrs *rrs;
00035 ldns_rr_type type;
00036 ldns_dnssec_rrs *signatures;
00037 ldns_dnssec_rrsets *next;
00038 };
00039
00044 typedef struct ldns_struct_dnssec_name ldns_dnssec_name;
00045 struct ldns_struct_dnssec_name
00046 {
00051 ldns_rdf *name;
00059 bool name_alloced;
00063 ldns_dnssec_rrsets *rrsets;
00067 ldns_rr *nsec;
00071 ldns_dnssec_rrs *nsec_signatures;
00081 bool is_glue;
00085 ldns_rdf *hashed_name;
00086 };
00087
00091 struct ldns_struct_dnssec_zone {
00093 ldns_dnssec_name *soa;
00095 ldns_rbtree_t *names;
00096 };
00097 typedef struct ldns_struct_dnssec_zone ldns_dnssec_zone;
00098
00103 ldns_dnssec_rrs *ldns_dnssec_rrs_new();
00104
00111 void ldns_dnssec_rrs_free(ldns_dnssec_rrs *rrs);
00112
00119 void ldns_dnssec_rrs_deep_free(ldns_dnssec_rrs *rrs);
00120
00128 ldns_status ldns_dnssec_rrs_add_rr(ldns_dnssec_rrs *rrs, ldns_rr *rr);
00129
00136 void ldns_dnssec_rrs_print(FILE *out, ldns_dnssec_rrs *rrs);
00137
00145 void ldns_dnssec_rrs_print_fmt(FILE *out,
00146 const ldns_output_format *fmt, ldns_dnssec_rrs *rrs);
00147
00152 ldns_dnssec_rrsets *ldns_dnssec_rrsets_new();
00153
00160 void ldns_dnssec_rrsets_free(ldns_dnssec_rrsets *rrsets);
00161
00168 void ldns_dnssec_rrsets_deep_free(ldns_dnssec_rrsets *rrsets);
00169
00176 ldns_rr_type ldns_dnssec_rrsets_type(ldns_dnssec_rrsets *rrsets);
00177
00185 ldns_status ldns_dnssec_rrsets_set_type(ldns_dnssec_rrsets *rrsets,
00186 ldns_rr_type type);
00187
00196 ldns_status ldns_dnssec_rrsets_add_rr(ldns_dnssec_rrsets *rrsets, ldns_rr *rr);
00197
00205 void ldns_dnssec_rrsets_print(FILE *out,
00206 ldns_dnssec_rrsets *rrsets,
00207 bool follow);
00208
00217 void ldns_dnssec_rrsets_print_fmt(FILE *out,
00218 const ldns_output_format *fmt,
00219 ldns_dnssec_rrsets *rrsets,
00220 bool follow);
00221
00222
00227 ldns_dnssec_name *ldns_dnssec_name_new();
00228
00234 ldns_dnssec_name *ldns_dnssec_name_new_frm_rr(ldns_rr *rr);
00235
00242 void ldns_dnssec_name_free(ldns_dnssec_name *name);
00243
00250 void ldns_dnssec_name_deep_free(ldns_dnssec_name *name);
00251
00258 ldns_rdf *ldns_dnssec_name_name(ldns_dnssec_name *name);
00259
00260
00267 void ldns_dnssec_name_set_name(ldns_dnssec_name *name,
00268 ldns_rdf *dname);
00280 bool ldns_dnssec_name_is_glue(ldns_dnssec_name *name);
00281
00288 void ldns_dnssec_name_set_nsec(ldns_dnssec_name *name, ldns_rr *nsec);
00289
00300 int ldns_dnssec_name_cmp(const void *a, const void *b);
00301
00310 ldns_status ldns_dnssec_name_add_rr(ldns_dnssec_name *name,
00311 ldns_rr *rr);
00312
00320 ldns_dnssec_rrsets *ldns_dnssec_name_find_rrset(ldns_dnssec_name *name,
00321 ldns_rr_type type);
00322
00331 ldns_dnssec_rrsets *ldns_dnssec_zone_find_rrset(ldns_dnssec_zone *zone,
00332 ldns_rdf *dname,
00333 ldns_rr_type type);
00334
00342 void ldns_dnssec_name_print(FILE *out, ldns_dnssec_name *name);
00343
00352 void ldns_dnssec_name_print_fmt(FILE *out,
00353 const ldns_output_format *fmt, ldns_dnssec_name *name);
00354
00359 ldns_dnssec_zone *ldns_dnssec_zone_new();
00360
00371 ldns_status ldns_dnssec_zone_new_frm_fp(ldns_dnssec_zone** z, FILE* fp,
00372 ldns_rdf* origin, uint32_t ttl, ldns_rr_class c);
00373
00385 ldns_status ldns_dnssec_zone_new_frm_fp_l(ldns_dnssec_zone** z, FILE* fp,
00386 ldns_rdf* origin, uint32_t ttl, ldns_rr_class c, int* line_nr);
00387
00393 void ldns_dnssec_zone_free(ldns_dnssec_zone *zone);
00394
00400 void ldns_dnssec_zone_deep_free(ldns_dnssec_zone *zone);
00401
00412 ldns_status ldns_dnssec_zone_add_rr(ldns_dnssec_zone *zone,
00413 ldns_rr *rr);
00414
00422 void ldns_dnssec_zone_names_print(FILE *out, ldns_rbtree_t *tree, bool print_soa);
00423
00432 void ldns_dnssec_zone_names_print_fmt(FILE *out, const ldns_output_format *fmt,
00433 ldns_rbtree_t *tree, bool print_soa);
00434
00441 void ldns_dnssec_zone_print(FILE *out, ldns_dnssec_zone *zone);
00442
00450 void ldns_dnssec_zone_print_fmt(FILE *out,
00451 const ldns_output_format *fmt, ldns_dnssec_zone *zone);
00452
00460 ldns_status ldns_dnssec_zone_add_empty_nonterminals(ldns_dnssec_zone *zone);
00461
00469 bool ldns_dnssec_zone_is_nsec3_optout(ldns_dnssec_zone* zone);
00470
00471 #ifdef __cplusplus
00472 }
00473 #endif
00474
00475 #endif