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) {
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) {
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);
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]);
void ixfr_cleanup(ixfr_type *ixfr)
pthread_mutex_t ixfr_lock
ixfr_type * ixfr_create()
void ixfr_add_rr(ixfr_type *ixfr, ldns_rr *rr)
void ixfr_del_rr(ixfr_type *ixfr, ldns_rr *rr)
part_type * part[IXFR_MAX_PARTS]
int ixfr_print(FILE *fd, ixfr_type *ixfr)
query_state ixfr(query_type *q, engine_type *engine)
void ixfr_purge(ixfr_type *ixfr, char const *zonename)