Home | History | Annotate | Download | only in iterator

Lines Matching refs:fwd

70 	struct iter_forwards* fwd = (struct iter_forwards*)calloc(1,
72 if(!fwd)
74 lock_rw_init(&fwd->lock);
75 return fwd;
92 static void fwd_del_tree(struct iter_forwards* fwd)
94 if(fwd->tree)
95 traverse_postorder(fwd->tree, &delfwdnode, NULL);
96 free(fwd->tree);
100 forwards_delete(struct iter_forwards* fwd)
102 if(!fwd)
104 lock_rw_destroy(&fwd->lock);
105 fwd_del_tree(fwd);
106 free(fwd);
111 forwards_insert_data(struct iter_forwards* fwd, uint16_t c, uint8_t* nm,
131 if(!rbtree_insert(fwd->tree, &node->node)) {
143 fwd_zone_find(struct iter_forwards* fwd, uint16_t c, uint8_t* nm)
150 return (struct iter_forward_zone*)rbtree_search(fwd->tree, &key);
155 forwards_insert(struct iter_forwards* fwd, uint16_t c, struct delegpt* dp)
157 return forwards_insert_data(fwd, c, dp->name, dp->namelen,
163 fwd_init_parents(struct iter_forwards* fwd)
167 RBTREE_FOR(node, struct iter_forward_zone*, fwd->tree) {
215 /** set fwd host names */
246 /** set fwd server addresses */
277 read_forwards(struct iter_forwards* fwd, struct config_file* cfg)
302 if(!forwards_insert(fwd, LDNS_RR_CLASS_IN, dp))
310 fwd_add_stub_hole(struct iter_forwards* fwd, uint16_t c, uint8_t* nm)
317 return forwards_insert_data(fwd, key.dclass, key.name,
323 make_stub_holes(struct iter_forwards* fwd, struct config_file* cfg)
335 if(fwd_zone_find(fwd, LDNS_RR_CLASS_IN, dname) != NULL) {
340 if(!fwd_add_stub_hole(fwd, LDNS_RR_CLASS_IN, dname)) {
352 make_auth_holes(struct iter_forwards* fwd, struct config_file* cfg)
364 if(fwd_zone_find(fwd, LDNS_RR_CLASS_IN, dname) != NULL) {
369 if(!fwd_add_stub_hole(fwd, LDNS_RR_CLASS_IN, dname)) {
380 forwards_apply_cfg(struct iter_forwards* fwd, struct config_file* cfg)
382 if(fwd->tree) {
383 lock_unprotect(&fwd->lock, fwd->tree);
385 fwd_del_tree(fwd);
386 fwd->tree = rbtree_create(fwd_cmp);
387 if(!fwd->tree)
389 lock_protect(&fwd->lock, fwd->tree, sizeof(*fwd->tree));
391 lock_rw_wrlock(&fwd->lock);
393 if(!read_forwards(fwd, cfg)) {
394 lock_rw_unlock(&fwd->lock);
397 if(!make_stub_holes(fwd, cfg)) {
398 lock_rw_unlock(&fwd->lock);
407 if(!make_auth_holes(fwd, cfg)) {
408 lock_rw_unlock(&fwd->lock);
411 fwd_init_parents(fwd);
412 lock_rw_unlock(&fwd->lock);
417 forwards_find(struct iter_forwards* fwd, uint8_t* qname, uint16_t qclass,
428 if(!nolock) { lock_rw_rdlock(&fwd->lock); }
429 res = (struct iter_forward_zone*)rbtree_search(fwd->tree, &key);
431 if(!has_dp && !nolock) { lock_rw_unlock(&fwd->lock); }
436 forwards_lookup(struct iter_forwards* fwd, uint8_t* qname, uint16_t qclass,
449 if(!nolock) { lock_rw_rdlock(&fwd->lock); }
450 if(rbtree_find_less_equal(fwd->tree, &key, &res)) {
458 if(!nolock) { lock_rw_unlock(&fwd->lock); }
471 if(!has_dp && !nolock) { lock_rw_unlock(&fwd->lock); }
476 forwards_lookup_root(struct iter_forwards* fwd, uint16_t qclass, int nolock)
479 return forwards_lookup(fwd, &root, qclass, nolock);
485 next_root_locked(struct iter_forwards* fwd, uint16_t* dclass)
492 n = rbtree_first(fwd->tree);
502 return next_root_locked(fwd, dclass);
513 if(rbtree_find_less_equal(fwd->tree, &key, &n)) {
530 return next_root_locked(fwd, dclass);
535 forwards_next_root(struct iter_forwards* fwd, uint16_t* dclass, int nolock)
539 if(!nolock) { lock_rw_rdlock(&fwd->lock); }
540 ret = next_root_locked(fwd, dclass);
541 if(!nolock) { lock_rw_unlock(&fwd->lock); }
546 forwards_get_mem(struct iter_forwards* fwd)
550 if(!fwd)
552 lock_rw_rdlock(&fwd->lock);
553 s = sizeof(*fwd) + sizeof(*fwd->tree);
554 RBTREE_FOR(p, struct iter_forward_zone*, fwd->tree) {
557 lock_rw_unlock(&fwd->lock);
562 forwards_add_zone(struct iter_forwards* fwd, uint16_t c, struct delegpt* dp,
567 if(!nolock) { lock_rw_wrlock(&fwd->lock); }
568 if((z=fwd_zone_find(fwd, c, dp->name)) != NULL) {
569 (void)rbtree_delete(fwd->tree, &z->node);
572 if(!forwards_insert(fwd, c, dp)) {
573 if(!nolock) { lock_rw_unlock(&fwd->lock); }
576 fwd_init_parents(fwd);
577 if(!nolock) { lock_rw_unlock(&fwd->lock); }
582 forwards_delete_zone(struct iter_forwards* fwd, uint16_t c, uint8_t* nm,
587 if(!nolock) { lock_rw_wrlock(&fwd->lock); }
588 if(!(z=fwd_zone_find(fwd, c, nm))) {
589 if(!nolock) { lock_rw_unlock(&fwd->lock); }
592 (void)rbtree_delete(fwd->tree, &z->node);
594 fwd_init_parents(fwd);
595 if(!nolock) { lock_rw_unlock(&fwd->lock); }
599 forwards_add_stub_hole(struct iter_forwards* fwd, uint16_t c, uint8_t* nm,
603 if(!nolock) { lock_rw_wrlock(&fwd->lock); }
604 if(fwd_zone_find(fwd, c, nm) != NULL) {
605 if(!nolock) { lock_rw_unlock(&fwd->lock); }
608 if(!fwd_add_stub_hole(fwd, c, nm)) {
609 if(!nolock) { lock_rw_unlock(&fwd->lock); }
612 fwd_init_parents(fwd);
613 if(!nolock) { lock_rw_unlock(&fwd->lock); }
618 forwards_delete_stub_hole(struct iter_forwards* fwd, uint16_t c,
623 if(!nolock) { lock_rw_wrlock(&fwd->lock); }
624 if(!(z=fwd_zone_find(fwd, c, nm))) {
625 if(!nolock) { lock_rw_unlock(&fwd->lock); }
629 if(!nolock) { lock_rw_unlock(&fwd->lock); }
632 (void)rbtree_delete(fwd->tree, &z->node);
634 fwd_init_parents(fwd);
635 if(!nolock) { lock_rw_unlock(&fwd->lock); }
639 forwards_swap_tree(struct iter_forwards* fwd, struct iter_forwards* data)
641 rbtree_type* oldtree = fwd->tree;
643 lock_unprotect(&fwd->lock, oldtree);
648 fwd->tree = data->tree;
650 lock_protect(&fwd->lock, fwd->tree, sizeof(*fwd->tree));