Lines Matching refs:dp

56 	struct delegpt* dp=(struct delegpt*)regional_alloc(
57 region, sizeof(*dp));
58 if(!dp)
60 memset(dp, 0, sizeof(*dp));
61 return dp;
64 struct delegpt* delegpt_copy(struct delegpt* dp, struct regional* region)
71 if(!delegpt_set_name(copy, region, dp->name))
73 copy->bogus = dp->bogus;
74 copy->has_parent_side_NS = dp->has_parent_side_NS;
75 copy->ssl_upstream = dp->ssl_upstream;
76 copy->tcp_upstream = dp->tcp_upstream;
77 for(ns = dp->nslist; ns; ns = ns->next) {
88 for(a = dp->target_list; a; a = a->next_target) {
97 delegpt_set_name(struct delegpt* dp, struct regional* region, uint8_t* name)
99 log_assert(!dp->dp_type_mlc);
100 dp->namelabs = dname_count_size_labels(name, &dp->namelen);
101 dp->name = regional_alloc_init(region, name, dp->namelen);
102 return dp->name != 0;
106 delegpt_add_ns(struct delegpt* dp, struct regional* region, uint8_t* name,
112 log_assert(!dp->dp_type_mlc);
115 if(delegpt_find_ns(dp, name, len))
121 ns->next = dp->nslist;
123 dp->nslist = ns;
144 delegpt_find_ns(struct delegpt* dp, uint8_t* name, size_t namelen)
146 struct delegpt_ns* p = dp->nslist;
158 delegpt_find_addr(struct delegpt* dp, struct sockaddr_storage* addr,
161 struct delegpt_addr* p = dp->target_list;
174 delegpt_add_target(struct delegpt* dp, struct regional* region,
178 struct delegpt_ns* ns = delegpt_find_ns(dp, name, namelen);
179 log_assert(!dp->dp_type_mlc);
196 return delegpt_add_addr(dp, region, addr, addrlen, bogus, lame,
201 delegpt_add_addr(struct delegpt* dp, struct regional* region,
206 log_assert(!dp->dp_type_mlc);
212 if((a = delegpt_find_addr(dp, addr, addrlen))) {
226 a->next_target = dp->target_list;
227 dp->target_list = a;
229 a->next_usable = dp->usable_list;
230 dp->usable_list = a;
248 delegpt_count_ns(struct delegpt* dp, size_t* numns, size_t* missing)
253 for(ns = dp->nslist; ns; ns = ns->next) {
261 delegpt_count_addr(struct delegpt* dp, size_t* numaddr, size_t* numres,
268 for(a = dp->target_list; a; a = a->next_target) {
271 for(a = dp->result_list; a; a = a->next_result) {
274 for(a = dp->usable_list; a; a = a->next_usable) {
279 void delegpt_log(enum verbosity_value v, struct delegpt* dp)
287 dname_str(dp->name, buf);
288 if(dp->nslist == NULL && dp->target_list == NULL) {
292 delegpt_count_ns(dp, &numns, &missing);
293 delegpt_count_addr(dp, &numaddr, &numres, &numavail);
298 (dp->has_parent_side_NS?" parentNS":" cacheNS"));
300 for(ns = dp->nslist; ns; ns = ns->next) {
305 (dp->bogus?" BOGUS":""), (ns->lame?" PARENTSIDE":""),
309 for(a = dp->target_list; a; a = a->next_target) {
325 delegpt_addr_on_result_list(struct delegpt* dp, struct delegpt_addr* find)
327 struct delegpt_addr* a = dp->result_list;
337 delegpt_usable_list_remove_addr(struct delegpt* dp, struct delegpt_addr* del)
339 struct delegpt_addr* usa = dp->usable_list, *prev = NULL;
345 else dp->usable_list = usa->next_usable;
354 delegpt_add_to_result_list(struct delegpt* dp, struct delegpt_addr* a)
356 if(delegpt_addr_on_result_list(dp, a))
358 delegpt_usable_list_remove_addr(dp, a);
359 a->next_result = dp->result_list;
360 dp->result_list = a;
364 delegpt_add_unused_targets(struct delegpt* dp)
366 struct delegpt_addr* usa = dp->usable_list;
367 dp->usable_list = NULL;
369 usa->next_result = dp->result_list;
370 dp->result_list = usa;
376 delegpt_count_targets(struct delegpt* dp)
380 for(a = dp->target_list; a; a = a->next_target)
386 delegpt_count_missing_targets(struct delegpt* dp, int* alllame)
390 for(ns = dp->nslist; ns; ns = ns->next) {
415 struct delegpt* dp;
433 dp = delegpt_create(region);
434 if(!dp)
436 dp->has_parent_side_NS = 1; /* created from message */
437 if(!delegpt_set_name(dp, region, ns_rrset->rk.dname))
439 if(!delegpt_rrset_add_ns(dp, region, ns_rrset, 0))
451 if(!delegpt_add_rrset_A(dp, region, s, 0, NULL))
454 if(!delegpt_add_rrset_AAAA(dp, region, s, 0, NULL))
458 return dp;
462 delegpt_rrset_add_ns(struct delegpt* dp, struct regional* region,
468 log_assert(!dp->dp_type_mlc);
470 dp->bogus = 1;
477 if(!delegpt_add_ns(dp, region, nsdata->rr_data[i]+2, lame,
485 delegpt_add_rrset_A(struct delegpt* dp, struct regional* region,
492 log_assert(!dp->dp_type_mlc);
499 if(!delegpt_add_target(dp, region, ak->rk.dname,
508 delegpt_add_rrset_AAAA(struct delegpt* dp, struct regional* region,
515 log_assert(!dp->dp_type_mlc);
522 if(!delegpt_add_target(dp, region, ak->rk.dname,
531 delegpt_add_rrset(struct delegpt* dp, struct regional* region,
537 return delegpt_rrset_add_ns(dp, region, rrset, lame);
539 return delegpt_add_rrset_A(dp, region, rrset, lame, additions);
541 return delegpt_add_rrset_AAAA(dp, region, rrset, lame,
559 void delegpt_add_neg_msg(struct delegpt* dp, struct msgreply_entry* msg)
566 struct delegpt_ns* ns = delegpt_find_ns(dp, msg->key.qname,
572 void delegpt_no_ipv6(struct delegpt* dp)
575 for(ns = dp->nslist; ns; ns = ns->next) {
582 void delegpt_no_ipv4(struct delegpt* dp)
585 for(ns = dp->nslist; ns; ns = ns->next) {
594 struct delegpt* dp=(struct delegpt*)calloc(1, sizeof(*dp));
595 if(!dp)
597 dp->dp_type_mlc = 1;
599 dp->namelabs = dname_count_size_labels(name, &dp->namelen);
600 dp->name = memdup(name, dp->namelen);
601 if(!dp->name) {
602 free(dp);
606 return dp;
609 void delegpt_free_mlc(struct delegpt* dp)
613 if(!dp) return;
614 log_assert(dp->dp_type_mlc);
615 n = dp->nslist;
623 a = dp->target_list;
630 free(dp->name);
631 free(dp);
634 int delegpt_set_name_mlc(struct delegpt* dp, uint8_t* name)
636 log_assert(dp->dp_type_mlc);
637 dp->namelabs = dname_count_size_labels(name, &dp->namelen);
638 dp->name = memdup(name, dp->namelen);
639 return (dp->name != NULL);
642 int delegpt_add_ns_mlc(struct delegpt* dp, uint8_t* name, uint8_t lame,
648 log_assert(dp->dp_type_mlc);
651 if(delegpt_find_ns(dp, name, len))
662 ns->next = dp->nslist;
663 dp->nslist = ns;
685 int delegpt_add_addr_mlc(struct delegpt* dp, struct sockaddr_storage* addr,
690 log_assert(dp->dp_type_mlc);
696 if((a = delegpt_find_addr(dp, addr, addrlen))) {
707 a->next_target = dp->target_list;
708 dp->target_list = a;
710 a->next_usable = dp->usable_list;
711 dp->usable_list = a;
730 int delegpt_add_target_mlc(struct delegpt* dp, uint8_t* name, size_t namelen,
734 struct delegpt_ns* ns = delegpt_find_ns(dp, name, namelen);
735 log_assert(dp->dp_type_mlc);
752 return delegpt_add_addr_mlc(dp, addr, addrlen, bogus, lame,
756 size_t delegpt_get_mem(struct delegpt* dp)
760 if(!dp) return 0;
761 s = sizeof(*dp) + dp->namelen +
762 delegpt_count_targets(dp)*sizeof(struct delegpt_addr);
763 for(ns=dp->nslist; ns; ns=ns->next)