diff options
Diffstat (limited to 'contrib/unbound/iterator/iter_delegpt.c')
-rw-r--r-- | contrib/unbound/iterator/iter_delegpt.c | 42 |
1 files changed, 42 insertions, 0 deletions
diff --git a/contrib/unbound/iterator/iter_delegpt.c b/contrib/unbound/iterator/iter_delegpt.c index 4bffa1b3a7d5..c8b9a3ffe29d 100644 --- a/contrib/unbound/iterator/iter_delegpt.c +++ b/contrib/unbound/iterator/iter_delegpt.c @@ -78,6 +78,7 @@ struct delegpt* delegpt_copy(struct delegpt* dp, struct regional* region) if(!delegpt_add_ns(copy, region, ns->name, ns->lame, ns->tls_auth_name, ns->port)) return NULL; + copy->nslist->cache_lookup_count = ns->cache_lookup_count; copy->nslist->resolved = ns->resolved; copy->nslist->got4 = ns->got4; copy->nslist->got6 = ns->got6; @@ -121,6 +122,7 @@ delegpt_add_ns(struct delegpt* dp, struct regional* region, uint8_t* name, ns->namelen = len; dp->nslist = ns; ns->name = regional_alloc_init(region, name, ns->namelen); + ns->cache_lookup_count = 0; ns->resolved = 0; ns->got4 = 0; ns->got6 = 0; @@ -319,6 +321,45 @@ void delegpt_log(enum verbosity_value v, struct delegpt* dp) } } +int +delegpt_addr_on_result_list(struct delegpt* dp, struct delegpt_addr* find) +{ + struct delegpt_addr* a = dp->result_list; + while(a) { + if(a == find) + return 1; + a = a->next_result; + } + return 0; +} + +void +delegpt_usable_list_remove_addr(struct delegpt* dp, struct delegpt_addr* del) +{ + struct delegpt_addr* usa = dp->usable_list, *prev = NULL; + while(usa) { + if(usa == del) { + /* snip off the usable list */ + if(prev) + prev->next_usable = usa->next_usable; + else dp->usable_list = usa->next_usable; + return; + } + prev = usa; + usa = usa->next_usable; + } +} + +void +delegpt_add_to_result_list(struct delegpt* dp, struct delegpt_addr* a) +{ + if(delegpt_addr_on_result_list(dp, a)) + return; + delegpt_usable_list_remove_addr(dp, a); + a->next_result = dp->result_list; + dp->result_list = a; +} + void delegpt_add_unused_targets(struct delegpt* dp) { @@ -620,6 +661,7 @@ int delegpt_add_ns_mlc(struct delegpt* dp, uint8_t* name, uint8_t lame, } ns->next = dp->nslist; dp->nslist = ns; + ns->cache_lookup_count = 0; ns->resolved = 0; ns->got4 = 0; ns->got6 = 0; |