Lines Matching refs:client

59 cleanup_gabn(ns_lwdclient_t *client) {
60 ns_lwdclient_log(50, "cleaning up client %p", client);
62 if (client->v6find != NULL) {
63 if (client->v6find == client->v4find)
64 client->v6find = NULL;
66 dns_adb_destroyfind(&client->v6find);
68 if (client->v4find != NULL)
69 dns_adb_destroyfind(&client->v4find);
73 setup_addresses(ns_lwdclient_t *client, dns_adbfind_t *find, unsigned int at) {
86 while (ai != NULL && client->gabn.naddrs < LWRES_MAX_ADDRS) {
91 addr = &client->addrs[client->gabn.naddrs];
100 client->gabn.naddrs++;
102 LWRES_LIST_APPEND(client->gabn.addrs, addr, link);
122 sort_addresses(ns_lwdclient_t *client) {
128 ns_lwresd_t *lwresd = client->clientmgr->listener->manager;
132 naddrs = client->gabn.naddrs;
141 isc_netaddr_fromsockaddr(&remote, &client->address);
151 &client->addrs[i]);
157 result = lwaddr_lwresaddr_fromnetaddr(&client->addrs[i],
166 generate_reply(ns_lwdclient_t *client) {
173 cm = client->clientmgr;
176 ns_lwdclient_log(50, "generating gabn reply for client %p", client);
179 * We must make certain the client->find is not still active.
183 if (client->find == client->v4find || client->find == client->v6find)
184 client->find = NULL;
186 if (client->find != NULL)
187 dns_adb_destroyfind(&client->find);
192 if (NEED_V6(client) && client->v4find != NULL)
193 client->v6find = client->v4find;
199 LWRES_LIST_INIT(client->gabn.addrs);
200 if (client->v4find != NULL)
201 setup_addresses(client, client->v4find, DNS_ADBFIND_INET);
202 if (client->v6find != NULL)
203 setup_addresses(client, client->v6find, DNS_ADBFIND_INET6);
210 if (client->gabn.naddrs == 0) {
212 result = ns_lwsearchctx_next(&client->searchctx);
214 cleanup_gabn(client);
215 result = start_find(client);
225 client->pkt.recvlength = LWRES_RECVLENGTH;
226 client->pkt.authtype = 0; /* XXXMLG */
227 client->pkt.authlength = 0;
232 if (client->gabn.naddrs != 0)
233 client->pkt.result = LWRES_R_SUCCESS;
235 client->pkt.result = LWRES_R_NOTFOUND;
237 sort_addresses(client);
239 lwres = lwres_gabnresponse_render(cm->lwctx, &client->gabn,
240 &client->pkt, &lwb);
246 client->sendbuf = r.base;
247 client->sendlength = r.length;
248 result = ns_lwdclient_sendreply(client, &r);
252 NS_LWDCLIENT_SETSEND(client);
257 cleanup_gabn(client);
262 cleanup_gabn(client);
265 lwres_context_freemem(client->clientmgr->lwctx,
268 ns_lwdclient_errorpktsend(client, LWRES_R_FAILURE);
279 add_alias(ns_lwdclient_t *client) {
284 b = client->recv_buffer;
289 result = dns_name_totext(dns_fixedname_name(&client->target_name),
290 ISC_TRUE, &client->recv_buffer);
297 naliases = client->gabn.naliases;
299 client->gabn.aliases[naliases] = client->gabn.realname;
300 client->gabn.aliaslen[naliases] = client->gabn.realnamelen;
301 client->gabn.naliases++;
307 client->gabn.realname = (char *)(b.base) + b.used;
308 client->gabn.realnamelen = client->recv_buffer.used - b.used;
314 store_realname(ns_lwdclient_t *client) {
319 b = client->recv_buffer;
321 tname = dns_fixedname_name(&client->target_name);
322 result = ns_lwsearchctx_current(&client->searchctx, tname);
329 result = dns_name_totext(tname, ISC_TRUE, &client->recv_buffer);
336 client->gabn.realname = (char *) b.base + b.used;
337 client->gabn.realnamelen = client->recv_buffer.used - b.used;
344 ns_lwdclient_t *client = ev->ev_arg;
348 ns_lwdclient_log(50, "find done for task %p, client %p", task, client);
359 if (NEED_V4(client)) {
360 client->v4find = client->find;
363 if (NEED_V6(client)) {
364 client->v6find = client->find;
367 if (client->find != NULL) {
369 client->find = NULL;
371 dns_adb_destroyfind(&client->find);
374 generate_reply(client);
383 if ((client->find != client->v4find)
384 && (client->find != client->v6find)) {
385 dns_adb_destroyfind(&client->find);
387 client->find = NULL;
395 restart_find(client);
402 cleanup_gabn(client);
403 ns_lwdclient_errorpktsend(client, LWRES_R_FAILURE);
407 restart_find(ns_lwdclient_t *client) {
412 ns_lwdclient_log(50, "starting find for client %p", client);
428 if (NEED_V4(client))
430 if (NEED_V6(client))
434 INSIST(client->find == NULL);
435 result = dns_adb_createfind(client->clientmgr->view->adb,
436 client->clientmgr->task,
437 process_gabn_finddone, client,
438 dns_fixedname_name(&client->target_name),
440 dns_fixedname_name(&client->target_name),
441 client->clientmgr->view->dstport,
442 &client->find);
449 dns_adb_destroyfind(&client->find);
450 cleanup_gabn(client);
451 result = add_alias(client);
455 ns_lwdclient_errorpktsend(client, LWRES_R_FAILURE);
468 if (client->find != NULL)
469 dns_adb_destroyfind(&client->find);
470 cleanup_gabn(client);
471 ns_lwdclient_errorpktsend(client, LWRES_R_FAILURE);
480 if (NEED_V4(client)
481 && ((client->find->query_pending & DNS_ADBFIND_INET) == 0)) {
482 ns_lwdclient_log(50, "client %p ipv4 satisfied by find %p",
483 client, client->find);
485 client->v4find = client->find;
491 if (NEED_V6(client)
492 && ((client->find->query_pending & DNS_ADBFIND_INET6) == 0)) {
493 ns_lwdclient_log(50, "client %p ipv6 satisfied by find %p",
494 client, client->find);
496 client->v6find = client->find;
508 if ((client->find->options & DNS_ADBFIND_WANTEVENT) != 0) {
510 INSIST(client->v4find == NULL || client->v6find == NULL);
515 client->find = NULL;
517 dns_adb_destroyfind(&client->find);
524 generate_reply(client);
528 start_find(ns_lwdclient_t *client) {
535 init_gabn(client);
537 result = store_realname(client);
540 restart_find(client);
546 init_gabn(ns_lwdclient_t *client) {
554 client->aliases[i] = NULL;
555 client->aliaslen[i] = 0;
558 client->addrs[i].family = 0;
559 client->addrs[i].length = 0;
560 memset(client->addrs[i].address, 0, LWRES_ADDR_MAXLEN);
561 LWRES_LINK_INIT(&client->addrs[i], link);
564 client->gabn.naliases = 0;
565 client->gabn.naddrs = 0;
566 client->gabn.realname = NULL;
567 client->gabn.aliases = client->aliases;
568 client->gabn.realnamelen = 0;
569 client->gabn.aliaslen = client->aliaslen;
570 LWRES_LIST_INIT(client->gabn.addrs);
571 client->gabn.base = NULL;
572 client->gabn.baselen = 0;
577 isc_buffer_init(&client->recv_buffer, client->buffer, LWRES_RECVLENGTH);
583 * client->sockaddr contains the address we need to reply to,
585 * client->pkt contains the packet header data,
600 ns_lwdclient_processgabn(ns_lwdclient_t *client, lwres_buffer_t *b) {
606 REQUIRE(NS_LWDCLIENT_ISRECVDONE(client));
608 cm = client->clientmgr;
611 result = lwres_gabnrequest_parse(client->clientmgr->lwctx,
612 b, &client->pkt, &req);
621 dns_fixedname_init(&client->target_name);
622 dns_fixedname_init(&client->query_name);
623 result = dns_name_fromtext(dns_fixedname_name(&client->query_name),
627 ns_lwsearchctx_init(&client->searchctx,
629 dns_fixedname_name(&client->query_name),
631 ns_lwsearchctx_first(&client->searchctx);
633 client->find_wanted = req->addrtypes;
634 ns_lwdclient_log(50, "client %p looking for addrtypes %08x",
635 client, client->find_wanted);
640 lwres_gabnrequest_free(client->clientmgr->lwctx, &req);
645 result = start_find(client);
656 lwres_gabnrequest_free(client->clientmgr->lwctx, &req);
658 ns_lwdclient_errorpktsend(client, LWRES_R_FAILURE);