Lines Matching defs:query

285 dns_name_t chase_name; /* the query name */
361 (*dighost_printmessage)(dig_query_t *query, dns_message_t *msg,
365 (*dighost_received)(int bytes, isc_sockaddr_t *from, dig_query_t *query);
382 send_udp(dig_query_t *query);
388 launch_next_query(dig_query_t *query, isc_boolean_t include_question);
593 * This is little more than a linked list of servers to query in hopes
759 * linked lists: the server list (servers to query) and the query list
902 * the query list, since it will be regenerated by the setup_lookup()
1767 * Clear out a query when we're done with it. WARNING: This routine
1768 * WILL invalidate the query pointer.
1771 clear_query(dig_query_t *query) {
1774 REQUIRE(query != NULL);
1776 debug("clear_query(%p)", query);
1778 if (query->timer != NULL)
1779 isc_timer_detach(&query->timer);
1780 lookup = query->lookup;
1782 if (lookup->current_query == query)
1785 if (ISC_LINK_LINKED(query, link))
1786 ISC_LIST_UNLINK(lookup->q, query, link);
1787 if (ISC_LINK_LINKED(query, clink))
1788 ISC_LIST_UNLINK(lookup->connecting, query, clink);
1789 if (ISC_LINK_LINKED(&query->recvbuf, link))
1790 ISC_LIST_DEQUEUE(query->recvlist, &query->recvbuf,
1792 if (ISC_LINK_LINKED(&query->lengthbuf, link))
1793 ISC_LIST_DEQUEUE(query->lengthlist, &query->lengthbuf,
1795 INSIST(query->recvspace != NULL);
1797 if (query->sock != NULL) {
1798 isc_socket_detach(&query->sock);
1802 isc_mempool_put(commctx, query->recvspace);
1803 isc_buffer_invalidate(&query->recvbuf);
1804 isc_buffer_invalidate(&query->lengthbuf);
1805 if (query->waiting_senddone)
1806 query->pending_free = ISC_TRUE;
1808 isc_mem_free(mctx, query);
1830 debug("query to %s still pending", q->servname);
1836 debug("query to %s still connecting",
2037 followup_lookup(dns_message_t *msg, dig_query_t *query, dns_section_t section)
2055 debug("following up %s", query->lookup->textname);
2080 if (query->lookup->trace && !query->lookup->trace_root) {
2085 domain = dns_fixedname_name(&query->lookup->fdomain);
2106 if (query->lookup->trace_root &&
2107 query->lookup->nsfound >= MXSERV)
2112 query->lookup->nsfound++;
2123 lookup = requeue_lookup(query->lookup,
2125 cancel_lookup(query->lookup);
2131 lookup->trace = query->lookup->trace;
2133 query->lookup->ns_search_only;
2162 (query->lookup->trace || query->lookup->ns_search_only))
2163 return (followup_lookup(msg, query, DNS_SECTION_AUTHORITY));
2328 * well as the query structures and buffer space for the replies. If the
2337 dig_query_t *query;
2540 debug("recursive query");
2546 debug("AA query");
2551 debug("AD query");
2556 debug("CD query");
2561 debug("Z query");
2660 * transport over which the query is sent."
2784 query = isc_mem_allocate(mctx, sizeof(dig_query_t));
2785 if (query == NULL)
2788 debug("create query %p linked to lookup %p",
2789 query, lookup);
2790 query->lookup = lookup;
2791 query->timer = NULL;
2792 query->waiting_connect = ISC_FALSE;
2793 query->waiting_senddone = ISC_FALSE;
2794 query->pending_free = ISC_FALSE;
2795 query->recv_made = ISC_FALSE;
2796 query->first_pass = ISC_TRUE;
2797 query->first_soa_rcvd = ISC_FALSE;
2798 query->second_rr_rcvd = ISC_FALSE;
2799 query->first_repeat_rcvd = ISC_FALSE;
2800 query->warn_id = ISC_TRUE;
2801 query->timedout = ISC_FALSE;
2802 query->first_rr_serial = 0;
2803 query->second_rr_serial = 0;
2804 query->servname = serv->servername;
2805 query->userarg = serv->userarg;
2806 query->rr_count = 0;
2807 query->msg_count = 0;
2808 query->byte_count = 0;
2809 query->ixfr_axfr = ISC_FALSE;
2810 ISC_LIST_INIT(query->recvlist);
2811 ISC_LIST_INIT(query->lengthlist);
2812 query->sock = NULL;
2813 query->recvspace = isc_mempool_get(commctx);
2814 if (query->recvspace == NULL)
2817 isc_buffer_init(&query->recvbuf, query->recvspace, COMMSIZE);
2818 isc_buffer_init(&query->lengthbuf, query->lengthspace, 2);
2819 isc_buffer_init(&query->slbuf, query->slspace, 2);
2820 query->sendbuf = lookup->renderbuf;
2822 ISC_LINK_INIT(query, clink);
2823 ISC_LINK_INIT(query, link);
2824 ISC_LIST_ENQUEUE(lookup->q, query, link);
2841 * the query if the send was canceled.
2847 dig_query_t *query, *next;
2868 query = event->ev_arg;
2869 query->waiting_senddone = ISC_FALSE;
2870 l = query->lookup;
2874 next = ISC_LIST_NEXT(query, link);
2881 if (query->pending_free)
2882 isc_mem_free(mctx, query);
2891 * query and lookup structures
2895 dig_query_t *query, *next;
2898 query = ISC_LIST_HEAD(lookup->q);
2899 while (query != NULL) {
2900 next = ISC_LIST_NEXT(query, link);
2901 if (query->sock != NULL) {
2902 isc_socket_cancel(query->sock, global_task,
2906 clear_query(query);
2908 query = next;
2915 bringup_timer(dig_query_t *query, unsigned int default_timeout) {
2926 l = query->lookup;
2927 if (ISC_LINK_LINKED(query, link) && ISC_LIST_NEXT(query, link) != NULL)
2937 if (query->timer != NULL)
2938 isc_timer_detach(&query->timer);
2941 query, &query->timer);
2946 force_timeout(dig_query_t *query) {
2950 event = isc_event_allocate(mctx, query, ISC_TIMEREVENT_IDLE,
2951 connect_timeout, query,
2965 if (query->timer != NULL)
2966 isc_timer_detach(&query->timer);
2975 * query. When we retry TCP, we requeue the whole lookup, which should
2979 send_tcp_connect(dig_query_t *query) {
2984 debug("send_tcp_connect(%p)", query);
2986 l = query->lookup;
2987 query->waiting_connect = ISC_TRUE;
2988 query->lookup->current_query = query;
2989 result = get_address(query->servname, port, &query->sockaddr);
2996 force_timeout(query);
3000 if (!l->mapped && isc_sockaddr_pf(&query->sockaddr) == AF_INET6 &&
3001 IN6_IS_ADDR_V4MAPPED(&query->sockaddr.type.sin6.sin6_addr)) {
3005 isc_netaddr_fromsockaddr(&netaddr, &query->sockaddr);
3009 query->waiting_connect = ISC_FALSE;
3010 if (ISC_LINK_LINKED(query, link))
3011 next = ISC_LIST_NEXT(query, link);
3014 l = query->lookup;
3015 clear_query(query);
3026 (isc_sockaddr_pf(&query->sockaddr) !=
3029 "address family\n", query->servname);
3030 query->waiting_connect = ISC_FALSE;
3031 if (ISC_LINK_LINKED(query, link))
3032 next = ISC_LIST_NEXT(query, link);
3035 l = query->lookup;
3036 clear_query(query);
3046 INSIST(query->sock == NULL);
3048 if (keep != NULL && isc_sockaddr_equal(&keepaddr, &query->sockaddr)) {
3050 isc_socket_attach(keep, &query->sock);
3051 query->waiting_connect = ISC_FALSE;
3052 launch_next_query(query, ISC_TRUE);
3057 isc_sockaddr_pf(&query->sockaddr),
3058 isc_sockettype_tcp, &query->sock);
3062 if (query->lookup->dscp != -1)
3063 isc_socket_dscp(query->sock, query->lookup->dscp);
3064 isc_socket_ipv6only(query->sock, ISC_TF(!query->lookup->mapped));
3066 result = isc_socket_bind(query->sock, &bind_address,
3069 if ((isc_sockaddr_pf(&query->sockaddr) == AF_INET) &&
3074 result = isc_socket_bind(query->sock, &bind_any, 0);
3077 bringup_timer(query, TCP_TIMEOUT);
3078 result = isc_socket_connect(query->sock, &query->sockaddr,
3079 global_task, connect_done, query);
3088 if (ISC_LINK_LINKED(query, link)) {
3089 next = ISC_LIST_NEXT(query, link);
3090 ISC_LIST_DEQUEUE(l->q, query, link);
3093 ISC_LIST_ENQUEUE(l->connecting, query, clink);
3116 send_udp(dig_query_t *query) {
3122 debug("send_udp(%p)", query);
3124 l = query->lookup;
3125 bringup_timer(query, UDP_TIMEOUT);
3126 l->current_query = query;
3127 debug("working on lookup %p, query %p", query->lookup, query);
3128 if (!query->recv_made) {
3130 query->waiting_connect = ISC_FALSE;
3131 result = get_address(query->servname, port, &query->sockaddr);
3134 force_timeout(query);
3139 isc_sockaddr_pf(&query->sockaddr) == AF_INET6 &&
3140 IN6_IS_ADDR_V4MAPPED(&query->sockaddr.type.sin6.sin6_addr)) {
3144 isc_netaddr_fromsockaddr(&netaddr, &query->sockaddr);
3148 next = ISC_LIST_NEXT(query, link);
3149 l = query->lookup;
3150 clear_query(query);
3161 isc_sockaddr_pf(&query->sockaddr),
3162 isc_sockettype_udp, &query->sock);
3166 if (query->lookup->dscp != -1)
3167 isc_socket_dscp(query->sock, query->lookup->dscp);
3168 isc_socket_ipv6only(query->sock,
3169 ISC_TF(!query->lookup->mapped));
3171 result = isc_socket_bind(query->sock, &bind_address,
3175 isc_sockaddr_pf(&query->sockaddr));
3176 result = isc_socket_bind(query->sock, &bind_any, 0);
3180 query->recv_made = ISC_TRUE;
3181 ISC_LINK_INIT(&query->recvbuf, link);
3182 ISC_LIST_ENQUEUE(query->recvlist, &query->recvbuf,
3184 debug("recving with lookup=%p, query=%p, sock=%p",
3185 query->lookup, query, query->sock);
3186 result = isc_socket_recvv(query->sock, &query->recvlist, 1,
3187 global_task, recv_done, query);
3192 ISC_LIST_INIT(query->sendlist);
3193 sendbuf = clone_buffer(&query->sendbuf);
3194 ISC_LIST_ENQUEUE(query->sendlist, sendbuf, link);
3196 TIME_NOW(&query->time_sent);
3197 INSIST(query->sock != NULL);
3198 query->waiting_senddone = ISC_TRUE;
3199 result = isc_socket_sendtov2(query->sock, &query->sendlist,
3200 global_task, send_done, query,
3201 &query->sockaddr, NULL,
3215 dig_query_t *query = NULL, *cq;
3223 query = event->ev_arg;
3224 l = query->lookup;
3229 if ((query != NULL) && (query->lookup->current_query != NULL) &&
3230 ISC_LINK_LINKED(query->lookup->current_query, link) &&
3231 (ISC_LIST_NEXT(query->lookup->current_query, link) != NULL)) {
3233 cq = query->lookup->current_query;
3237 if (query->sock != NULL)
3238 isc_socket_cancel(query->sock, NULL,
3246 if (l->tcp_mode && query->sock != NULL) {
3247 query->timedout = ISC_TRUE;
3248 isc_socket_cancel(query->sock, NULL, ISC_SOCKCANCEL_ALL);
3287 dig_query_t *query = NULL;
3300 query = event->ev_arg;
3306 INSIST(b == &query->lengthbuf);
3311 l = query->lookup;
3312 clear_query(query);
3319 isc_sockaddr_format(&query->sockaddr, sockstr,
3325 l = query->lookup;
3326 isc_socket_detach(&query->sock);
3335 clear_query(query);
3344 launch_next_query(query, ISC_FALSE);
3353 isc_buffer_invalidate(&query->recvbuf);
3354 isc_buffer_init(&query->recvbuf, query->recvspace, length);
3355 ENSURE(ISC_LIST_EMPTY(query->recvlist));
3356 ISC_LINK_INIT(&query->recvbuf, link);
3357 ISC_LIST_ENQUEUE(query->recvlist, &query->recvbuf, link);
3358 debug("recving with lookup=%p, query=%p", query->lookup, query);
3359 result = isc_socket_recvv(query->sock, &query->recvlist, length, task,
3360 recv_done, query);
3374 launch_next_query(dig_query_t *query, isc_boolean_t include_question) {
3383 if (!query->lookup->pending) {
3385 isc_socket_detach(&query->sock);
3389 query->waiting_connect = ISC_FALSE;
3390 l = query->lookup;
3391 clear_query(query);
3396 isc_buffer_clear(&query->slbuf);
3397 isc_buffer_clear(&query->lengthbuf);
3398 isc_buffer_putuint16(&query->slbuf, (isc_uint16_t) query->sendbuf.used);
3399 ISC_LIST_INIT(query->sendlist);
3400 ISC_LINK_INIT(&query->slbuf, link);
3401 if (!query->first_soa_rcvd) {
3402 buffer = clone_buffer(&query->slbuf);
3403 ISC_LIST_ENQUEUE(query->sendlist, buffer, link);
3405 buffer = clone_buffer(&query->sendbuf);
3406 ISC_LIST_ENQUEUE(query->sendlist, buffer, link);
3410 ISC_LINK_INIT(&query->lengthbuf, link);
3411 ISC_LIST_ENQUEUE(query->lengthlist, &query->lengthbuf, link);
3413 result = isc_socket_recvv(query->sock, &query->lengthlist, 0,
3414 global_task, tcp_length_done, query);
3418 if (!query->first_soa_rcvd) {
3420 TIME_NOW(&query->time_sent);
3421 query->waiting_senddone = ISC_TRUE;
3422 result = isc_socket_sendv(query->sock, &query->sendlist,
3423 global_task, send_done, query);
3428 query->waiting_connect = ISC_FALSE;
3430 check_next_lookup(query->lookup);
3444 dig_query_t *query = NULL, *next;
3456 query = sevent->ev_arg;
3458 INSIST(query->waiting_connect);
3460 query->waiting_connect = ISC_FALSE;
3464 isc_sockaddr_format(&query->sockaddr, sockstr, sizeof(sockstr));
3465 if (query->timedout)
3467 sockstr, query->servname,
3468 query->lookup->textname,
3470 isc_socket_detach(&query->sock);
3474 query->waiting_connect = ISC_FALSE;
3476 l = query->lookup;
3477 clear_query(query);
3486 isc_sockaddr_format(&query->sockaddr, sockstr, sizeof(sockstr));
3490 query->servname, query->lookup->textname,
3492 isc_socket_detach(&query->sock);
3499 query->waiting_connect = ISC_FALSE;
3501 l = query->lookup;
3507 clear_query(query);
3519 isc_socket_attach(query->sock, &keep);
3520 keepaddr = query->sockaddr;
3522 launch_next_query(query, ISC_TRUE);
3534 check_for_more_data(dig_query_t *query, dns_message_t *msg,
3540 isc_uint32_t ixfr_serial = query->lookup->ixfr_serial, serial;
3542 isc_boolean_t ixfr = query->lookup->rdtype == dns_rdatatype_ixfr;
3543 isc_boolean_t axfr = query->lookup->rdtype == dns_rdatatype_axfr;
3546 axfr = query->ixfr_axfr;
3559 query->msg_count++;
3560 query->byte_count += sevent->n;
3578 query->rr_count++;
3585 if ((!query->first_soa_rcvd) &&
3591 if ((!query->second_rr_rcvd) &&
3593 query->second_rr_rcvd = ISC_TRUE;
3594 query->second_rr_serial = 0;
3596 axfr = query->ixfr_axfr = ISC_TRUE;
3613 if (!query->first_soa_rcvd) {
3614 query->first_soa_rcvd = ISC_TRUE;
3615 query->first_rr_serial = serial;
3630 if (!query->second_rr_rcvd) {
3631 if (query->first_rr_serial == serial) {
3638 query->second_rr_rcvd = ISC_TRUE;
3639 query->second_rr_serial = serial;
3647 if (query->first_rr_serial == serial) {
3649 if (!query->first_repeat_rcvd) {
3650 query->first_repeat_rcvd =
3664 launch_next_query(query, ISC_FALSE);
3667 dighost_received(sevent->n, &sevent->address, query);
3773 dig_query_t *query = NULL;
3806 query = event->ev_arg;
3807 TIME_NOW(&query->time_recv);
3808 debug("lookup=%p, query=%p", query->lookup, query);
3810 l = query->lookup;
3816 INSIST(b == &query->recvbuf);
3817 ISC_LIST_DEQUEUE(sevent->bufferlist, &query->recvbuf, link);
3819 if ((l->tcp_mode) && (query->timer != NULL))
3820 isc_timer_touch(query->timer);
3824 query->waiting_connect = ISC_FALSE;
3827 clear_query(query);
3836 query->waiting_connect = ISC_FALSE;
3842 isc_socket_detach(&query->sock);
3852 clear_query(query);
3860 !isc_sockaddr_compare(&sevent->address, &query->sockaddr,
3869 if (isc_sockaddr_pf(&query->sockaddr) == AF_INET)
3879 if ((!isc_sockaddr_eqaddr(&query->sockaddr, &any) &&
3880 !isc_sockaddr_ismulticast(&query->sockaddr)) ||
3881 isc_sockaddr_getport(&query->sockaddr) !=
3885 isc_sockaddr_format(&query->sockaddr, buf2,
3899 if (!query->first_soa_rcvd ||
3900 query->warn_id)
3903 query->first_soa_rcvd ?
3906 if (query->first_soa_rcvd)
3908 query->warn_id = ISC_FALSE;
3914 clear_query(query);
3930 printf(";; Warning: query response not set\n");
3979 query->waiting_connect = ISC_FALSE;
3982 clear_query(query);
4026 clear_query(query);
4049 clear_query(query);
4067 clear_query(query);
4088 clear_query(query);
4098 dig_query_t *next = ISC_LIST_NEXT(query, link);
4099 if (l->current_query == query)
4102 debug("sending query %p\n", next);
4109 * If our query is at the head of the list and there
4113 if ((ISC_LIST_HEAD(l->q) != query) ||
4114 (ISC_LIST_NEXT(query, link) != NULL)) {
4121 query->servname);
4122 clear_query(query);
4132 result = dns_tsig_verify(&query->recvbuf, msg, NULL, NULL);
4152 l->xfr_q = query;
4158 if (timeout != INT_MAX && query->timer != NULL) {
4174 result = isc_timer_reset(query->timer,
4190 if (!l->doing_xfr || l->xfr_q == query) {
4193 if (!next_origin(query->lookup) || showsearch) {
4194 dighost_printmessage(query, msg, ISC_TRUE);
4195 dighost_received(b->used, &sevent->address, query);
4201 dighost_printmessage(query, msg, ISC_TRUE);
4208 dighost_printmessage(query, msg, ISC_TRUE);
4214 nl = followup_lookup(msg, query,
4218 nl = followup_lookup(msg, query,
4227 * This is the initial NS query.
4232 nl = followup_lookup(msg, query,
4242 dighost_printmessage(query, msg, ISC_TRUE);
4294 if (query != l->xfr_q) {
4297 query->waiting_connect = ISC_FALSE;
4302 docancel = check_for_more_data(query, msg, sevent);
4305 clear_query(query);
4316 dighost_received(b->used, &sevent->address, query);
4319 if (!query->lookup->ns_search_only)
4320 query->lookup->pending = ISC_FALSE;
4321 if (!query->lookup->ns_search_only ||
4322 query->lookup->trace_root || docancel) {
4330 clear_query(query);
4346 isc_buffer_invalidate(&query->recvbuf);
4347 isc_buffer_init(&query->recvbuf, query->recvspace, COMMSIZE);
4348 ISC_LIST_ENQUEUE(query->recvlist, &query->recvbuf, link);
4349 result = isc_socket_recvv(query->sock, &query->recvlist, 1,
4350 global_task, recv_done, query);
4418 dig_query_t *query;
4424 query = ISC_LIST_HEAD(lookup->q);
4425 if (query != NULL) {
4427 send_tcp_connect(query);
4429 send_udp(query);
4469 debug("canceling pending query %p, belonging to %p",
4482 debug("canceling connecting query %p, belonging to %p",
4944 printf("\n\nLaunch a query to find a RRset of type ");
5214 printf("\nLaunch a query to find a RRset of type ");
5610 * the lookedup is to known if you have already done the query on the net.
5613 * and we do a query on the net
5947 printf("\n;; OK the query doesn't have response but"