Lines Matching defs:query

177 (*dighost_printmessage)(dig_query_t *query, dns_message_t *msg,
181 (*dighost_received)(unsigned int bytes, struct sockaddr_storage *from, dig_query_t *query);
198 send_udp(dig_query_t *query);
204 launch_next_query(dig_query_t *query, int include_question);
407 * This is little more than a linked list of servers to query in hopes
634 * linked lists: the server list (servers to query) and the query list
755 * the query list, since it will be regenerated by the setup_lookup()
1398 * Clear out a query when we're done with it. WARNING: This routine
1399 * WILL invalidate the query pointer.
1402 clear_query(dig_query_t *query) {
1405 REQUIRE(query != NULL);
1407 debug("clear_query(%p)", query);
1409 if (query->timer != NULL)
1410 isc_timer_detach(&query->timer);
1411 lookup = query->lookup;
1413 if (lookup->current_query == query)
1416 if (ISC_LINK_LINKED(query, link))
1417 ISC_LIST_UNLINK(lookup->q, query, link);
1418 if (ISC_LINK_LINKED(query, clink))
1419 ISC_LIST_UNLINK(lookup->connecting, query, clink);
1420 if (ISC_LINK_LINKED(&query->recvbuf, link))
1421 ISC_LIST_DEQUEUE(query->recvlist, &query->recvbuf,
1423 if (ISC_LINK_LINKED(&query->lengthbuf, link))
1424 ISC_LIST_DEQUEUE(query->lengthlist, &query->lengthbuf,
1426 INSIST(query->recvspace != NULL);
1428 if (query->sock != NULL) {
1429 isc_socket_detach(&query->sock);
1433 free(query->recvspace);
1434 isc_buffer_invalidate(&query->recvbuf);
1435 isc_buffer_invalidate(&query->lengthbuf);
1436 if (query->waiting_senddone)
1437 query->pending_free = 1;
1439 free(query);
1461 debug("query to %s still pending", q->servname);
1467 debug("query to %s still connecting",
1586 followup_lookup(dns_message_t *msg, dig_query_t *query, dns_section_t section)
1604 debug("following up %s", query->lookup->textname);
1629 if (query->lookup->trace && !query->lookup->trace_root) {
1634 domain = dns_fixedname_name(&query->lookup->fdomain);
1655 if (query->lookup->trace_root &&
1656 query->lookup->nsfound >= MXSERV)
1661 query->lookup->nsfound++;
1672 lookup = requeue_lookup(query->lookup,
1674 cancel_lookup(query->lookup);
1680 lookup->trace = query->lookup->trace;
1682 query->lookup->ns_search_only;
1711 (query->lookup->trace || query->lookup->ns_search_only))
1712 return (followup_lookup(msg, query, DNS_SECTION_AUTHORITY));
1896 * well as the query structures and buffer space for the replies. If the
1905 dig_query_t *query;
2058 debug("recursive query");
2064 debug("AA query");
2069 debug("AD query");
2074 debug("CD query");
2172 * transport over which the query is sent."
2295 query = malloc(sizeof(dig_query_t));
2296 if (query == NULL)
2299 debug("create query %p linked to lookup %p",
2300 query, lookup);
2301 query->lookup = lookup;
2302 query->timer = NULL;
2303 query->waiting_connect = 0;
2304 query->waiting_senddone = 0;
2305 query->pending_free = 0;
2306 query->recv_made = 0;
2307 query->first_pass = 1;
2308 query->first_soa_rcvd = 0;
2309 query->second_rr_rcvd = 0;
2310 query->first_repeat_rcvd = 0;
2311 query->warn_id = 1;
2312 query->timedout = 0;
2313 query->first_rr_serial = 0;
2314 query->second_rr_serial = 0;
2315 query->servname = serv->servername;
2316 query->userarg = serv->userarg;
2317 query->rr_count = 0;
2318 query->msg_count = 0;
2319 query->byte_count = 0;
2320 query->ixfr_axfr = 0;
2321 ISC_LIST_INIT(query->recvlist);
2322 ISC_LIST_INIT(query->lengthlist);
2323 query->sock = NULL;
2324 query->recvspace = malloc(COMMSIZE);
2325 if (query->recvspace == NULL)
2328 isc_buffer_init(&query->recvbuf, query->recvspace, COMMSIZE);
2329 isc_buffer_init(&query->lengthbuf, query->lengthspace, 2);
2330 isc_buffer_init(&query->slbuf, query->slspace, 2);
2331 query->sendbuf = lookup->renderbuf;
2333 ISC_LINK_INIT(query, clink);
2334 ISC_LINK_INIT(query, link);
2335 ISC_LIST_ENQUEUE(lookup->q, query, link);
2349 * the query if the send was canceled.
2355 dig_query_t *query, *next;
2374 query = event->ev_arg;
2375 query->waiting_senddone = 0;
2376 l = query->lookup;
2380 next = ISC_LIST_NEXT(query, link);
2387 if (query->pending_free)
2388 free(query);
2396 * query and lookup structures
2400 dig_query_t *query, *next;
2403 query = ISC_LIST_HEAD(lookup->q);
2404 while (query != NULL) {
2405 next = ISC_LIST_NEXT(query, link);
2406 if (query->sock != NULL) {
2407 isc_socket_cancel(query->sock, global_task,
2411 clear_query(query);
2413 query = next;
2420 bringup_timer(dig_query_t *query, unsigned int default_timeout) {
2431 l = query->lookup;
2432 if (ISC_LINK_LINKED(query, link) && ISC_LIST_NEXT(query, link) != NULL)
2443 if (query->timer != NULL)
2444 isc_timer_detach(&query->timer);
2447 query, &query->timer);
2452 force_timeout(dig_query_t *query) {
2456 event = isc_event_allocate(query, ISC_TIMEREVENT_IDLE,
2457 connect_timeout, query,
2471 if (query->timer != NULL)
2472 isc_timer_detach(&query->timer);
2480 * query. When we retry TCP, we requeue the whole lookup, which should
2484 send_tcp_connect(dig_query_t *query) {
2489 debug("send_tcp_connect(%p)", query);
2491 l = query->lookup;
2492 query->waiting_connect = 1;
2493 query->lookup->current_query = query;
2494 result = get_address(query->servname, port, &query->sockaddr);
2501 force_timeout(query);
2506 (isc_sockaddr_pf(&query->sockaddr) !=
2509 "address family\n", query->servname);
2510 query->waiting_connect = 0;
2511 if (ISC_LINK_LINKED(query, link))
2512 next = ISC_LIST_NEXT(query, link);
2515 l = query->lookup;
2516 clear_query(query);
2526 INSIST(query->sock == NULL);
2528 if (keep != NULL && isc_sockaddr_equal(&keepaddr, &query->sockaddr)) {
2530 isc_socket_attach(keep, &query->sock);
2531 query->waiting_connect = 0;
2532 launch_next_query(query, 1);
2537 isc_sockaddr_pf(&query->sockaddr),
2538 isc_sockettype_tcp, &query->sock);
2543 result = isc_socket_bind(query->sock, &bind_address,
2546 if ((isc_sockaddr_pf(&query->sockaddr) == AF_INET) &&
2551 result = isc_socket_bind(query->sock, &bind_any, 0);
2554 bringup_timer(query, TCP_TIMEOUT);
2555 result = isc_socket_connect(query->sock, &query->sockaddr,
2556 global_task, connect_done, query);
2565 if (ISC_LINK_LINKED(query, link)) {
2566 next = ISC_LIST_NEXT(query, link);
2567 ISC_LIST_DEQUEUE(l->q, query, link);
2570 ISC_LIST_ENQUEUE(l->connecting, query, clink);
2593 send_udp(dig_query_t *query) {
2598 debug("send_udp(%p)", query);
2600 l = query->lookup;
2601 bringup_timer(query, UDP_TIMEOUT);
2602 l->current_query = query;
2603 debug("working on lookup %p, query %p", query->lookup, query);
2604 if (!query->recv_made) {
2606 query->waiting_connect = 0;
2607 result = get_address(query->servname, port, &query->sockaddr);
2610 force_timeout(query);
2615 isc_sockaddr_pf(&query->sockaddr),
2616 isc_sockettype_udp, &query->sock);
2621 result = isc_socket_bind(query->sock, &bind_address,
2625 isc_sockaddr_pf(&query->sockaddr));
2626 result = isc_socket_bind(query->sock, &bind_any, 0);
2630 query->recv_made = 1;
2631 ISC_LINK_INIT(&query->recvbuf, link);
2632 ISC_LIST_ENQUEUE(query->recvlist, &query->recvbuf,
2634 debug("recving with lookup=%p, query=%p, sock=%p",
2635 query->lookup, query, query->sock);
2636 result = isc_socket_recvv(query->sock, &query->recvlist, 1,
2637 global_task, recv_done, query);
2642 ISC_LIST_INIT(query->sendlist);
2643 sendbuf = clone_buffer(&query->sendbuf);
2644 ISC_LIST_ENQUEUE(query->sendlist, sendbuf, link);
2646 clock_gettime(CLOCK_MONOTONIC, &query->time_sent);
2647 INSIST(query->sock != NULL);
2648 query->waiting_senddone = 1;
2649 result = isc_socket_sendtov2(query->sock, &query->sendlist,
2650 global_task, send_done, query,
2651 &query->sockaddr, NULL,
2665 dig_query_t *query = NULL, *cq;
2672 query = event->ev_arg;
2673 l = query->lookup;
2678 if ((query != NULL) && (query->lookup->current_query != NULL) &&
2679 ISC_LINK_LINKED(query->lookup->current_query, link) &&
2680 (ISC_LIST_NEXT(query->lookup->current_query, link) != NULL)) {
2682 cq = query->lookup->current_query;
2686 if (query->sock != NULL)
2687 isc_socket_cancel(query->sock, NULL,
2694 if (l->tcp_mode && query->sock != NULL) {
2695 query->timedout = 1;
2696 isc_socket_cancel(query->sock, NULL, ISC_SOCKCANCEL_ALL);
2734 dig_query_t *query = NULL;
2746 query = event->ev_arg;
2752 INSIST(b == &query->lengthbuf);
2757 l = query->lookup;
2758 clear_query(query);
2764 isc_sockaddr_format(&query->sockaddr, sockstr,
2770 l = query->lookup;
2771 isc_socket_detach(&query->sock);
2780 clear_query(query);
2788 launch_next_query(query, 0);
2796 isc_buffer_invalidate(&query->recvbuf);
2797 isc_buffer_init(&query->recvbuf, query->recvspace, length);
2798 ENSURE(ISC_LIST_EMPTY(query->recvlist));
2799 ISC_LINK_INIT(&query->recvbuf, link);
2800 ISC_LIST_ENQUEUE(query->recvlist, &query->recvbuf, link);
2801 debug("recving with lookup=%p, query=%p", query->lookup, query);
2802 result = isc_socket_recvv(query->sock, &query->recvlist, length, task,
2803 recv_done, query);
2816 launch_next_query(dig_query_t *query, int include_question) {
2825 if (!query->lookup->pending) {
2827 isc_socket_detach(&query->sock);
2831 query->waiting_connect = 0;
2832 l = query->lookup;
2833 clear_query(query);
2838 isc_buffer_clear(&query->slbuf);
2839 isc_buffer_clear(&query->lengthbuf);
2840 isc_buffer_putuint16(&query->slbuf, (uint16_t) query->sendbuf.used);
2841 ISC_LIST_INIT(query->sendlist);
2842 ISC_LINK_INIT(&query->slbuf, link);
2843 if (!query->first_soa_rcvd) {
2844 buffer = clone_buffer(&query->slbuf);
2845 ISC_LIST_ENQUEUE(query->sendlist, buffer, link);
2847 buffer = clone_buffer(&query->sendbuf);
2848 ISC_LIST_ENQUEUE(query->sendlist, buffer, link);
2852 ISC_LINK_INIT(&query->lengthbuf, link);
2853 ISC_LIST_ENQUEUE(query->lengthlist, &query->lengthbuf, link);
2855 result = isc_socket_recvv(query->sock, &query->lengthlist, 0,
2856 global_task, tcp_length_done, query);
2860 if (!query->first_soa_rcvd) {
2862 clock_gettime(CLOCK_MONOTONIC, &query->time_sent);
2863 query->waiting_senddone = 1;
2864 result = isc_socket_sendv(query->sock, &query->sendlist,
2865 global_task, send_done, query);
2870 query->waiting_connect = 0;
2883 dig_query_t *query = NULL, *next;
2894 query = sevent->ev_arg;
2896 INSIST(query->waiting_connect);
2898 query->waiting_connect = 0;
2902 isc_sockaddr_format(&query->sockaddr, sockstr, sizeof(sockstr));
2903 if (query->timedout)
2905 sockstr, query->servname,
2906 query->lookup->textname,
2908 isc_socket_detach(&query->sock);
2912 query->waiting_connect = 0;
2914 l = query->lookup;
2915 clear_query(query);
2923 isc_sockaddr_format(&query->sockaddr, sockstr, sizeof(sockstr));
2927 query->servname, query->lookup->textname,
2929 isc_socket_detach(&query->sock);
2936 query->waiting_connect = 0;
2938 l = query->lookup;
2944 clear_query(query);
2955 isc_socket_attach(query->sock, &keep);
2956 keepaddr = query->sockaddr;
2958 launch_next_query(query, 1);
2969 check_for_more_data(dig_query_t *query, dns_message_t *msg,
2975 uint32_t ixfr_serial = query->lookup->ixfr_serial, serial;
2977 int ixfr = query->lookup->rdtype == dns_rdatatype_ixfr;
2978 int axfr = query->lookup->rdtype == dns_rdatatype_axfr;
2981 axfr = query->ixfr_axfr;
2994 query->msg_count++;
2995 query->byte_count += sevent->n;
3013 query->rr_count++;
3020 if ((!query->first_soa_rcvd) &&
3026 if ((!query->second_rr_rcvd) &&
3028 query->second_rr_rcvd = 1;
3029 query->second_rr_serial = 0;
3031 axfr = query->ixfr_axfr = 1;
3048 if (!query->first_soa_rcvd) {
3049 query->first_soa_rcvd = 1;
3050 query->first_rr_serial = serial;
3065 if (!query->second_rr_rcvd) {
3066 if (query->first_rr_serial == serial) {
3073 query->second_rr_rcvd = 1;
3074 query->second_rr_serial = serial;
3082 if (query->first_rr_serial == serial) {
3084 if (!query->first_repeat_rcvd) {
3085 query->first_repeat_rcvd =
3099 launch_next_query(query, 0);
3102 dighost_received(sevent->n, &sevent->address, query);
3210 dig_query_t *query = NULL;
3231 query = event->ev_arg;
3232 clock_gettime(CLOCK_MONOTONIC, &query->time_recv);
3233 debug("lookup=%p, query=%p", query->lookup, query);
3235 l = query->lookup;
3241 INSIST(b == &query->recvbuf);
3242 ISC_LIST_DEQUEUE(sevent->bufferlist, &query->recvbuf, link);
3244 if ((l->tcp_mode) && (query->timer != NULL))
3245 isc_timer_touch(query->timer);
3249 query->waiting_connect = 0;
3252 clear_query(query);
3260 query->waiting_connect = 0;
3266 isc_socket_detach(&query->sock);
3276 clear_query(query);
3283 !isc_sockaddr_compare(&sevent->address, &query->sockaddr,
3292 if (isc_sockaddr_pf(&query->sockaddr) == AF_INET)
3302 if ((!isc_sockaddr_eqaddr(&query->sockaddr, &any) &&
3303 !isc_sockaddr_ismulticast(&query->sockaddr)) ||
3304 isc_sockaddr_getport(&query->sockaddr) !=
3308 isc_sockaddr_format(&query->sockaddr, buf2,
3322 if (!query->first_soa_rcvd ||
3323 query->warn_id)
3326 query->first_soa_rcvd ?
3329 if (query->first_soa_rcvd)
3331 query->warn_id = 0;
3337 clear_query(query);
3352 printf(";; Warning: query response not set\n");
3393 query->waiting_connect = 0;
3396 clear_query(query);
3439 clear_query(query);
3461 clear_query(query);
3478 clear_query(query);
3486 dig_query_t *next = ISC_LIST_NEXT(query, link);
3487 if (l->current_query == query)
3490 debug("sending query %p\n", next);
3497 * If our query is at the head of the list and there
3501 if ((ISC_LIST_HEAD(l->q) != query) ||
3502 (ISC_LIST_NEXT(query, link) != NULL)) {
3509 query->servname);
3510 clear_query(query);
3519 result = dns_tsig_verify(&query->recvbuf, msg);
3539 l->xfr_q = query;
3545 if (timeout != INT_MAX && query->timer != NULL) {
3562 result = isc_timer_reset(query->timer,
3577 if (!l->doing_xfr || l->xfr_q == query) {
3580 if (!next_origin(query->lookup) || showsearch) {
3581 dighost_printmessage(query, msg, 1);
3582 dighost_received(b->used, &sevent->address, query);
3585 dighost_printmessage(query, msg, 1);
3592 dighost_printmessage(query, msg, 1);
3598 nl = followup_lookup(msg, query,
3602 nl = followup_lookup(msg, query,
3611 * This is the initial NS query.
3616 nl = followup_lookup(msg, query,
3623 dighost_printmessage(query, msg, 1);
3630 if (query != l->xfr_q) {
3633 query->waiting_connect = 0;
3637 docancel = check_for_more_data(query, msg, sevent);
3640 clear_query(query);
3647 dighost_received(b->used, &sevent->address, query);
3650 if (!query->lookup->ns_search_only)
3651 query->lookup->pending = 0;
3652 if (!query->lookup->ns_search_only ||
3653 query->lookup->trace_root || docancel) {
3658 clear_query(query);
3668 isc_buffer_invalidate(&query->recvbuf);
3669 isc_buffer_init(&query->recvbuf, query->recvspace, COMMSIZE);
3670 ISC_LIST_ENQUEUE(query->recvlist, &query->recvbuf, link);
3671 result = isc_socket_recvv(query->sock, &query->recvlist, 1,
3672 global_task, recv_done, query);
3737 dig_query_t *query;
3743 query = ISC_LIST_HEAD(lookup->q);
3744 if (query != NULL) {
3746 send_tcp_connect(query);
3748 send_udp(query);
3784 debug("canceling pending query %p, belonging to %p",
3797 debug("canceling connecting query %p, belonging to %p",