Lines Matching refs:query
75 static void skip_server(ares_channel channel, struct query *query,
77 static void next_server(ares_channel channel, struct query *query,
85 static void end_query(ares_channel channel, struct query *query, int status,
558 struct query *query; in process_timeouts() local
572 query = list_node->data; in process_timeouts()
574 if (query->timeout.tv_sec && ares__timedout(now, &query->timeout)) in process_timeouts()
576 query->error_status = ARES_ETIMEOUT; in process_timeouts()
577 ++query->timeouts; in process_timeouts()
578 next_server(channel, query, now); in process_timeouts()
592 struct query *query; in process_answer() local
612 query = NULL; in process_answer()
617 struct query *q = list_node->data; in process_answer()
620 query = q; in process_answer()
624 if (!query) in process_answer()
636 int qlen = (query->tcplen - 2) - EDNSFIXEDSZ; in process_answer()
638 query->tcplen -= EDNSFIXEDSZ; in process_answer()
639 query->qlen -= EDNSFIXEDSZ; in process_answer()
640 query->tcpbuf[0] = (unsigned char)((qlen >> 8) & 0xff); in process_answer()
641 query->tcpbuf[1] = (unsigned char)(qlen & 0xff); in process_answer()
642 DNS_HEADER_SET_ARCOUNT(query->tcpbuf + 2, 0); in process_answer()
643 query->tcpbuf = ares_realloc(query->tcpbuf, query->tcplen); in process_answer()
644 query->qbuf = query->tcpbuf + 2; in process_answer()
645 ares__send_query(channel, query, now); in process_answer()
656 if (!query->using_tcp) in process_answer()
658 query->using_tcp = 1; in process_answer()
659 ares__send_query(channel, query, now); in process_answer()
677 skip_server(channel, query, whichserver); in process_answer()
678 if (query->server == whichserver) in process_answer()
679 next_server(channel, query, now); in process_answer()
684 end_query(channel, query, ARES_SUCCESS, abuf, alen); in process_answer()
731 struct query *query; in handle_error() local
750 query = list_node->data; in handle_error()
752 assert(query->server == whichserver); in handle_error()
753 skip_server(channel, query, whichserver); in handle_error()
754 next_server(channel, query, now); in handle_error()
762 static void skip_server(ares_channel channel, struct query *query, in skip_server() argument
775 query->server_info[whichserver].skip_server = 1; in skip_server()
779 static void next_server(ares_channel channel, struct query *query, in next_server() argument
786 while (++(query->try_count) < (channel->nservers * channel->tries)) in next_server()
791 query->server = (query->server + 1) % channel->nservers; in next_server()
792 server = &channel->servers[query->server]; in next_server()
800 !query->server_info[query->server].skip_server && in next_server()
801 !(query->using_tcp && in next_server()
802 (query->server_info[query->server].tcp_connection_generation == in next_server()
805 ares__send_query(channel, query, now); in next_server()
818 end_query(channel, query, query->error_status, NULL, 0); in next_server()
821 void ares__send_query(ares_channel channel, struct query *query, in ares__send_query() argument
828 server = &channel->servers[query->server]; in ares__send_query()
829 if (query->using_tcp) in ares__send_query()
838 skip_server(channel, query, query->server); in ares__send_query()
839 next_server(channel, query, now); in ares__send_query()
846 end_query(channel, query, ARES_ENOMEM, NULL, 0); in ares__send_query()
857 sendreq->data = query->tcpbuf; in ares__send_query()
858 sendreq->len = query->tcplen; in ares__send_query()
859 sendreq->owner_query = query; in ares__send_query()
869 query->server_info[query->server].tcp_connection_generation = in ares__send_query()
878 skip_server(channel, query, query->server); in ares__send_query()
879 next_server(channel, query, now); in ares__send_query()
883 if (socket_write(channel, server->udp_socket, query->qbuf, query->qlen) == -1) in ares__send_query()
886 skip_server(channel, query, query->server); in ares__send_query()
887 next_server(channel, query, now); in ares__send_query()
899 const int shift = query->try_count / channel->nservers; in ares__send_query()
917 query->timeout = *now; in ares__send_query()
918 timeadd(&query->timeout, timeplus); in ares__send_query()
922 ares__remove_from_list(&(query->queries_by_timeout)); in ares__send_query()
924 &(query->queries_by_timeout), in ares__send_query()
925 &(channel->queries_by_timeout[query->timeout.tv_sec % in ares__send_query()
931 ares__remove_from_list(&(query->queries_to_server)); in ares__send_query()
932 ares__insert_in_list(&(query->queries_to_server), in ares__send_query()
1469 static void end_query (ares_channel channel, struct query *query, int status, in end_query() argument
1482 if (sendreq->owner_query == query) in end_query()
1525 query->callback(query->arg, status, query->timeouts, abuf, alen); in end_query()
1526 ares__free_query(query); in end_query()
1539 void ares__free_query(struct query *query) in ares__free_query() argument
1542 ares__remove_from_list(&(query->queries_by_qid)); in ares__free_query()
1543 ares__remove_from_list(&(query->queries_by_timeout)); in ares__free_query()
1544 ares__remove_from_list(&(query->queries_to_server)); in ares__free_query()
1545 ares__remove_from_list(&(query->all_queries)); in ares__free_query()
1547 query->callback = NULL; in ares__free_query()
1548 query->arg = NULL; in ares__free_query()
1550 ares_free(query->tcpbuf); in ares__free_query()
1551 ares_free(query->server_info); in ares__free_query()
1552 ares_free(query); in ares__free_query()