Lines Matching full:as
9 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
76 struct asr_query *as;
85 if ((as = _asr_async_new(ac, ASR_GETHOSTBYNAME)) == NULL)
87 as->as_run = gethostnamadr_async_run;
89 as->as.hostnamadr.family = af;
91 as->as.hostnamadr.addrlen = INADDRSZ;
93 as->as.hostnamadr.addrlen = IN6ADDRSZ;
94 as->as.hostnamadr.name = strdup(name);
95 if (as->as.hostnamadr.name == NULL)
99 return (as);
102 if (as)
103 _asr_async_free(as);
113 struct asr_query *as;
116 as = _gethostbyaddr_async_ctx(addr, len, af, ac);
119 return (as);
127 struct asr_query *as;
129 if ((as = _asr_async_new(ac, ASR_GETHOSTBYADDR)) == NULL)
131 as->as_run = gethostnamadr_async_run;
133 as->as.hostnamadr.family = af;
134 as->as.hostnamadr.addrlen = len;
136 memmove(as->as.hostnamadr.addr, addr, (len > 16) ? 16 : len);
138 return (as);
141 if (as)
142 _asr_async_free(as);
147 gethostnamadr_async_run(struct asr_query *as, struct asr_result *ar)
155 switch (as->as_state) {
159 if (as->as.hostnamadr.family != AF_INET &&
160 as->as.hostnamadr.family != AF_INET6) {
163 async_set_state(as, ASR_STATE_HALT);
167 if ((as->as.hostnamadr.family == AF_INET &&
168 as->as.hostnamadr.addrlen != INADDRSZ) ||
169 (as->as.hostnamadr.family == AF_INET6 &&
170 as->as.hostnamadr.addrlen != IN6ADDRSZ)) {
173 async_set_state(as, ASR_STATE_HALT);
177 if (as->as_type == ASR_GETHOSTBYNAME) {
179 if (as->as.hostnamadr.name[0] == '\0') {
181 async_set_state(as, ASR_STATE_HALT);
186 for (c = as->as.hostnamadr.name; *c; c++)
191 inet_pton(as->as.hostnamadr.family,
192 as->as.hostnamadr.name, addr) == 1) {
193 h = hostent_from_addr(as->as.hostnamadr.family,
194 as->as.hostnamadr.name, addr);
203 async_set_state(as, ASR_STATE_HALT);
207 if (!hnok_lenient(as->as.hostnamadr.name)) {
210 async_set_state(as, ASR_STATE_HALT);
219 * recognize localhost names as special and SHOULD
227 if (_asr_is_localhost(as->as.hostnamadr.name)) {
228 inet_pton(as->as.hostnamadr.family,
229 as->as.hostnamadr.family == AF_INET ?
231 h = hostent_from_addr(as->as.hostnamadr.family,
232 as->as.hostnamadr.name, addr);
241 async_set_state(as, ASR_STATE_HALT);
245 async_set_state(as, ASR_STATE_NEXT_DB);
250 if (_asr_iter_db(as) == -1) {
251 async_set_state(as, ASR_STATE_NOT_FOUND);
255 switch (AS_DB(as)) {
261 if (as->as_type == ASR_GETHOSTBYNAME) {
262 type = (as->as.hostnamadr.family == AF_INET) ?
264 as->as_subq = _res_search_async_ctx(
265 as->as.hostnamadr.name,
266 C_IN, type, as->as_ctx);
268 _asr_addr_as_fqdn(as->as.hostnamadr.addr,
269 as->as.hostnamadr.family,
271 as->as_subq = _res_query_async_ctx(
272 name, C_IN, T_PTR, as->as_ctx);
275 if (as->as_subq == NULL) {
278 async_set_state(as, ASR_STATE_HALT);
282 async_set_state(as, ASR_STATE_SUBQUERY);
292 if (as->as_type == ASR_GETHOSTBYNAME)
293 data = as->as.hostnamadr.name;
295 data = as->as.hostnamadr.addr;
297 h = hostent_file_match(f, as->as_type,
298 as->as.hostnamadr.family, data,
299 as->as.hostnamadr.addrlen);
308 async_set_state(as, ASR_STATE_HALT);
315 async_set_state(as, ASR_STATE_HALT);
324 if ((r = asr_run(as->as_subq, ar)) == ASYNC_COND)
328 as->as_subq = NULL;
336 as->as.hostnamadr.subq_h_errno = ar->ar_h_errno;
337 async_set_state(as, ASR_STATE_NEXT_DB);
343 h = hostent_from_packet(as->as_type,
344 as->as.hostnamadr.family, ar->ar_data, ar->ar_datalen);
349 async_set_state(as, ASR_STATE_HALT);
353 if (as->as_type == ASR_GETHOSTBYADDR) {
354 if (hostent_add_addr(h, as->as.hostnamadr.addr,
355 as->as.hostnamadr.addrlen) == -1) {
359 async_set_state(as, ASR_STATE_HALT);
368 if ((as->as_type == ASR_GETHOSTBYNAME &&
372 async_set_state(as, ASR_STATE_NEXT_DB);
378 async_set_state(as, ASR_STATE_HALT);
383 if (as->as.hostnamadr.subq_h_errno)
384 ar->ar_h_errno = as->as.hostnamadr.subq_h_errno;
387 async_set_state(as, ASR_STATE_HALT);
392 as->as_flags & ASYNC_GETNET)
405 async_set_state(as, ASR_STATE_HALT);