00001
00002
00003
00004
00005
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
00017 typedef struct ldns_struct_dnssec_rrs ldns_dnssec_rrs;
00018 struct ldns_struct_dnssec_rrs
00019 {
00020 ldns_rr *rr;
00021 ldns_dnssec_rrs *next;
00022 };
00023
00027 typedef struct ldns_struct_dnssec_rrsets ldns_dnssec_rrsets;
00028 struct ldns_struct_dnssec_rrsets
00029 {
00030 ldns_dnssec_rrs *rrs;
00031 ldns_rr_type type;
00032 ldns_dnssec_rrs *signatures;
00033 ldns_dnssec_rrsets *next;
00034 };
00035
00040 typedef struct ldns_struct_dnssec_name ldns_dnssec_name;
00041 struct ldns_struct_dnssec_name
00042 {
00047 ldns_rdf *name;
00055 bool name_alloced;
00059 ldns_dnssec_rrsets *rrsets;
00063 ldns_rr *nsec;
00067 ldns_dnssec_rrs *nsec_signatures;
00068 };
00069
00073 struct ldns_struct_dnssec_zone {
00075 ldns_dnssec_name *soa;
00077 ldns_rbtree_t *names;
00078 };
00079 typedef struct ldns_struct_dnssec_zone ldns_dnssec_zone;
00080
00085 ldns_dnssec_rrs *
00086 ldns_dnssec_rrs_new();
00087
00093 void
00094 ldns_dnssec_rrs_free(ldns_dnssec_rrs *rrs);
00095
00103 ldns_status
00104 ldns_dnssec_rrs_add_rr(ldns_dnssec_rrs *rrs, ldns_rr *rr);
00105
00112 void
00113 ldns_dnssec_rrs_print(FILE *out, ldns_dnssec_rrs *rrs);
00114
00119 ldns_dnssec_rrsets *
00120 ldns_dnssec_rrsets_new();
00121
00127 void
00128 ldns_dnssec_rrsets_free(ldns_dnssec_rrsets *rrsets);
00129
00136 ldns_rr_type
00137 ldns_dnssec_rrsets_type(ldns_dnssec_rrsets *rrsets);
00138
00146 ldns_status
00147 ldns_dnssec_rrsets_set_type(ldns_dnssec_rrsets *rrsets,
00148 ldns_rr_type type);
00149
00158 ldns_status
00159 ldns_dnssec_rrsets_add_rr(ldns_dnssec_rrsets *rrsets, ldns_rr *rr);
00160
00168 void
00169 ldns_dnssec_rrsets_print(FILE *out, ldns_dnssec_rrsets *rrsets, bool follow);
00170
00175 ldns_dnssec_name *
00176 ldns_dnssec_name_new();
00177
00183 ldns_dnssec_name *
00184 ldns_dnssec_name_new_frm_rr(ldns_rr *rr);
00185
00192 void
00193 ldns_dnssec_name_free(ldns_dnssec_name *name);
00194
00201 ldns_rdf *
00202 ldns_dnssec_name_name(ldns_dnssec_name *name);
00203
00204
00211 void
00212 ldns_dnssec_name_set_name(ldns_dnssec_name *name,
00213 ldns_rdf *dname);
00214
00221 void
00222 ldns_dnssec_name_set_nsec(ldns_dnssec_name *name, ldns_rr *nsec);
00223
00234 int
00235 ldns_dnssec_name_cmp(const void *a, const void *b);
00236
00245 ldns_status
00246 ldns_dnssec_name_add_rr(ldns_dnssec_name *name,
00247 ldns_rr *rr);
00248
00256 ldns_dnssec_rrsets *
00257 ldns_dnssec_name_find_rrset(ldns_dnssec_name *name,
00258 ldns_rr_type type);
00259
00268 ldns_dnssec_rrsets *
00269 ldns_dnssec_zone_find_rrset(ldns_dnssec_zone *zone,
00270 ldns_rdf *dname,
00271 ldns_rr_type type);
00272
00280 void
00281 ldns_dnssec_name_print(FILE *out, ldns_dnssec_name *name);
00282
00287 ldns_dnssec_zone *
00288 ldns_dnssec_zone_new();
00289
00296 void
00297 ldns_dnssec_zone_free(ldns_dnssec_zone *zone);
00298
00309 ldns_status
00310 ldns_dnssec_zone_add_rr(ldns_dnssec_zone *zone, ldns_rr *rr);
00311
00319 void
00320 ldns_dnssec_zone_names_print(FILE *out, ldns_rbtree_t *tree, bool print_soa);
00321
00328 void
00329 ldns_dnssec_zone_print(FILE *out, ldns_dnssec_zone *zone);
00330
00338 ldns_status
00339 ldns_dnssec_zone_add_empty_nonterminals(ldns_dnssec_zone *zone);
00340
00341 #endif