38static const char* ixfr_str =
"journal";
53 part->
plus = ldns_rr_list_new();
55 ods_log_error(
"[%s] unable to create ixfr part: "
56 "ldns_rr_list_new() failed", ixfr_str);
60 part->
min = ldns_rr_list_new();
62 ods_log_error(
"[%s] unable to create ixfr part: "
63 "ldns_rr_list_new() failed", ixfr_str);
64 ldns_rr_list_free(part->
plus);
80 ldns_rr_list_deep_free(part->
min);
81 ldns_rr_list_deep_free(part->
plus);
96 pthread_mutex_init(&xfr->
ixfr_lock, NULL);
108 ldns_rr* rr_copy = ldns_rr_clone(rr);
112 ods_log_assert(
ixfr->part[0]);
113 ods_log_assert(
ixfr->part[0]->plus);
115 if (!ldns_rr_list_push_rr(
ixfr->part[0]->plus, rr_copy)) {
116 ldns_rr_free(rr_copy);
117 ods_fatal_exit(
"[%s] fatal unable to +RR: ldns_rr_list_push_rr() failed",
120 if (ldns_rr_get_type(rr_copy) == LDNS_RR_TYPE_SOA) {
121 ixfr->part[0]->soaplus = rr_copy;
133 ldns_rr* rr_copy = ldns_rr_clone(rr);
137 ods_log_assert(
ixfr->part[0]);
138 ods_log_assert(
ixfr->part[0]->min);
140 if (!ldns_rr_list_push_rr(
ixfr->part[0]->min, rr_copy)) {
141 ldns_rr_free(rr_copy);
142 ods_fatal_exit(
"[%s] fatal unable to -RR: ldns_rr_list_push_rr() failed",
145 if (ldns_rr_get_type(rr_copy) == LDNS_RR_TYPE_SOA) {
146 ixfr->part[0]->soamin = rr_copy;
156part_rr_list_print_nonsoa(FILE* fd, ldns_rr_list* list)
163 for (i = 0; i < ldns_rr_list_rr_count(list); i++) {
164 if (ldns_rr_get_type(ldns_rr_list_rr(list, i)) != LDNS_RR_TYPE_SOA) {
165 if (util_rr_print(fd, ldns_rr_list_rr(list, i)) != ODS_STATUS_OK) {
183 ods_log_assert(
ixfr);
186 part =
ixfr->part[i];
191 ods_log_assert(part->
min);
192 ods_log_assert(part->
plus);
193 ods_log_assert(part->
soamin);
196 if (util_rr_print(fd, part->
soamin) != ODS_STATUS_OK) {
198 }
else if (part_rr_list_print_nonsoa(fd, part->
min)) {
200 }
else if (util_rr_print(fd, part->
soaplus) != ODS_STATUS_OK) {
202 }
else if (part_rr_list_print_nonsoa(fd, part->
plus)) {
219 ods_log_assert(
ixfr);
221 ods_log_debug(
"[%s] print ixfr", ixfr_str);
223 ods_log_deeebug(
"[%s] print ixfr part #%d", ixfr_str, i);
224 if (part_print(fd,
ixfr, i)) {
241 ods_log_assert(
ixfr);
242 ods_log_assert(zonename);
245 (!
ixfr->part[0]->soamin || !
ixfr->part[0]->soaplus))
254 ods_log_debug(
"[%s] purge ixfr for zone %s", ixfr_str, zonename);
257 part_free(
ixfr->part[i]);
258 ixfr->part[i] = NULL;
261 ixfr->part[i] = NULL;
264 ixfr->part[0] = part_create();
265 if (!
ixfr->part[0]) {
266 ods_fatal_exit(
"[%s] fatal unable to purge ixfr for zone %s: "
267 "part_create() failed", ixfr_str, zonename);
284 part_free(
ixfr->part[i]);
286 pthread_mutex_destroy(&
ixfr->ixfr_lock);
query_state ixfr(query_type *q, engine_type *engine)
void ixfr_purge(ixfr_type *ixfr, char const *zonename)
int ixfr_print(FILE *fd, ixfr_type *ixfr)
void ixfr_del_rr(ixfr_type *ixfr, ldns_rr *rr)
void ixfr_cleanup(ixfr_type *ixfr)
ixfr_type * ixfr_create()
void ixfr_add_rr(ixfr_type *ixfr, ldns_rr *rr)
pthread_mutex_t ixfr_lock