Lines Matching full:as
9 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
44 struct asr_query *as; in res_search_async() local
49 as = _res_search_async_ctx(name, class, type, ac); in res_search_async()
52 return (as); in res_search_async()
59 struct asr_query *as; in _res_search_async_ctx() local
64 if ((as = _asr_async_new(ac, ASR_SEARCH)) == NULL) in _res_search_async_ctx()
66 as->as_run = res_search_async_run; in _res_search_async_ctx()
67 if ((as->as.search.name = strdup(name)) == NULL) in _res_search_async_ctx()
70 as->as.search.class = class; in _res_search_async_ctx()
71 as->as.search.type = type; in _res_search_async_ctx()
73 return (as); in _res_search_async_ctx()
75 if (as) in _res_search_async_ctx()
76 _asr_async_free(as); in _res_search_async_ctx()
83 res_search_async_run(struct asr_query *as, struct asr_result *ar) in res_search_async_run() argument
89 switch (as->as_state) { in res_search_async_run()
93 if (as->as.search.name[0] == '\0') { in res_search_async_run()
95 async_set_state(as, ASR_STATE_HALT); in res_search_async_run()
99 as->as.search.saved_h_errno = HERRNO_UNSET; in res_search_async_run()
100 async_set_state(as, ASR_STATE_NEXT_DOMAIN); in res_search_async_run()
108 as->as_dom_flags = 0; in res_search_async_run()
110 r = _asr_iter_domain(as, as->as.search.name, fqdn, sizeof(fqdn)); in res_search_async_run()
112 async_set_state(as, ASR_STATE_NOT_FOUND); in res_search_async_run()
120 async_set_state(as, ASR_STATE_HALT); in res_search_async_run()
123 as->as_subq = _res_query_async_ctx(fqdn, in res_search_async_run()
124 as->as.search.class, as->as.search.type, as->as_ctx); in res_search_async_run()
125 if (as->as_subq == NULL) { in res_search_async_run()
133 async_set_state(as, ASR_STATE_HALT); in res_search_async_run()
136 async_set_state(as, ASR_STATE_SUBQUERY); in res_search_async_run()
141 if ((r = asr_run(as->as_subq, ar)) == ASYNC_COND) in res_search_async_run()
143 as->as_subq = NULL; in res_search_async_run()
146 async_set_state(as, ASR_STATE_HALT); in res_search_async_run()
158 async_set_state(as, ASR_STATE_HALT); in res_search_async_run()
167 if (as->as_dom_flags & ASYNC_DOM_NDOTS) in res_search_async_run()
168 as->as.search.saved_h_errno = ar->ar_h_errno; in res_search_async_run()
170 if (as->as_dom_flags & ASYNC_DOM_DOMAIN) { in res_search_async_run()
172 as->as_flags |= ASYNC_NODATA; in res_search_async_run()
174 as->as_flags |= ASYNC_AGAIN; in res_search_async_run()
177 async_set_state(as, ASR_STATE_NEXT_DOMAIN); in res_search_async_run()
182 if (as->as.search.saved_h_errno != HERRNO_UNSET) in res_search_async_run()
183 ar->ar_h_errno = as->as.search.saved_h_errno; in res_search_async_run()
184 else if (as->as_flags & ASYNC_NODATA) in res_search_async_run()
186 else if (as->as_flags & ASYNC_AGAIN) in res_search_async_run()
194 async_set_state(as, ASR_STATE_HALT); in res_search_async_run()
204 async_set_state(as, ASR_STATE_HALT); in res_search_async_run()
236 * This function works as a generator that constructs complete domains in
246 _asr_iter_domain(struct asr_query *as, const char *name, char * buf, size_t len) in _asr_iter_domain() argument
251 switch (as->as_dom_step) { in _asr_iter_domain()
262 as->as_dom_flags |= ASYNC_DOM_FQDN; in _asr_iter_domain()
263 as->as_dom_step = DOM_DONE; in _asr_iter_domain()
270 as->as_dom_step = DOM_DOMAIN; in _asr_iter_domain()
271 as->as_dom_idx = 0; in _asr_iter_domain()
274 * If "name" as enough dots, use it as-is first, as indicated in _asr_iter_domain()
280 if (dots >= as->as_ctx->ac_ndots) { in _asr_iter_domain()
282 as->as_dom_flags |= ASYNC_DOM_NDOTS; in _asr_iter_domain()
291 if (as->as_dom_idx < as->as_ctx->ac_domcount && in _asr_iter_domain()
292 (as->as_ctx->ac_options & RES_DNSRCH || ( in _asr_iter_domain()
293 as->as_ctx->ac_options & RES_DEFNAMES && in _asr_iter_domain()
294 as->as_dom_idx == 0 && in _asr_iter_domain()
297 name, as->as_ctx->ac_dom[as->as_dom_idx]); in _asr_iter_domain()
298 as->as_dom_flags |= ASYNC_DOM_DOMAIN; in _asr_iter_domain()
300 as->as_ctx->ac_dom[as->as_dom_idx++], buf, len)); in _asr_iter_domain()
305 as->as_dom_step = DOM_DONE; in _asr_iter_domain()
308 * If the name was not tried as an absolute name before, in _asr_iter_domain()
311 if (!(as->as_dom_flags & ASYNC_DOM_NDOTS)) { in _asr_iter_domain()
312 DPRINT("asr: iter_domain(\"%s\") as is\n", name); in _asr_iter_domain()
313 as->as_dom_flags |= ASYNC_DOM_ASIS; in _asr_iter_domain()