38 static 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);
97 pthread_mutex_init(&xfr->
ixfr_lock, NULL);
109 ldns_rr* rr_copy = ldns_rr_clone(rr);
113 ods_log_assert(
ixfr->part[0]);
114 ods_log_assert(
ixfr->part[0]->plus);
116 if (!ldns_rr_list_push_rr(
ixfr->part[0]->plus, rr_copy)) {
117 ldns_rr_free(rr_copy);
118 ods_fatal_exit(
"[%s] fatal unable to +RR: ldns_rr_list_push_rr() failed",
121 if (ldns_rr_get_type(rr_copy) == LDNS_RR_TYPE_SOA) {
122 ixfr->part[0]->soaplus = rr_copy;
134 ldns_rr* rr_copy = ldns_rr_clone(rr);
138 ods_log_assert(
ixfr->part[0]);
139 ods_log_assert(
ixfr->part[0]->min);
141 if (!ldns_rr_list_push_rr(
ixfr->part[0]->min, rr_copy)) {
142 ldns_rr_free(rr_copy);
143 ods_fatal_exit(
"[%s] fatal unable to -RR: ldns_rr_list_push_rr() failed",
146 if (ldns_rr_get_type(rr_copy) == LDNS_RR_TYPE_SOA) {
147 ixfr->part[0]->soamin = rr_copy;
157 part_rr_list_print_nonsoa(FILE* fd, ldns_rr_list* list)
164 for (i = 0; i < ldns_rr_list_rr_count(list); i++) {
165 if (ldns_rr_get_type(ldns_rr_list_rr(list, i)) != LDNS_RR_TYPE_SOA) {
166 if (util_rr_print(fd, ldns_rr_list_rr(list, i)) != ODS_STATUS_OK) {
185 ods_log_assert(
ixfr);
188 part =
ixfr->part[i];
193 ods_log_assert(part->
min);
194 ods_log_assert(part->
plus);
195 ods_log_assert(part->
soamin);
198 if (util_rr_print(fd, part->
soamin) != ODS_STATUS_OK) {
200 }
else if (part_rr_list_print_nonsoa(fd, part->
min)) {
202 }
else if (util_rr_print(fd, part->
soaplus) != ODS_STATUS_OK) {
204 }
else if (part_rr_list_print_nonsoa(fd, part->
plus)) {
218 int i = 0, error = 0;
221 ods_log_assert(
ixfr);
223 ods_log_debug(
"[%s] print ixfr", ixfr_str);
225 ods_log_deeebug(
"[%s] print ixfr part #%d", ixfr_str, i);
226 if (part_print(fd,
ixfr, i)) {
243 ods_log_assert(
ixfr);
244 ods_log_assert(zonename);
247 (!
ixfr->part[0]->soamin || !
ixfr->part[0]->soaplus))
256 ods_log_debug(
"[%s] purge ixfr for zone %s", ixfr_str, zonename);
259 part_free(
ixfr->part[i]);
260 ixfr->part[i] = NULL;
263 ixfr->part[i] = NULL;
266 ixfr->part[0] = part_create();
267 if (!
ixfr->part[0]) {
268 ods_fatal_exit(
"[%s] fatal unable to purge ixfr for zone %s: "
269 "part_create() failed", ixfr_str, zonename);
286 part_free(
ixfr->part[i]);
288 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)
ixfr_type * ixfr_create()
void ixfr_del_rr(ixfr_type *ixfr, ldns_rr *rr)
void ixfr_cleanup(ixfr_type *ixfr)
void ixfr_add_rr(ixfr_type *ixfr, ldns_rr *rr)
pthread_mutex_t ixfr_lock