Lines Matching defs:resp

187 dispentry_cancel(dns_dispentry_t *resp, isc_result_t result);
192 udp_startrecv(isc_nmhandle_t *handle, dns_dispentry_t *resp);
194 udp_dispatch_connect(dns_dispatch_t *disp, dns_dispentry_t *resp);
196 tcp_startrecv(dns_dispatch_t *disp, dns_dispentry_t *resp);
198 tcp_dispatch_getnext(dns_dispatch_t *disp, dns_dispentry_t *resp,
201 udp_dispatch_getnext(dns_dispentry_t *resp, int32_t timeout);
204 socktype2str(dns_dispentry_t *resp) {
206 dns_dispatch_t *disp = resp->disp;
209 if (resp->transport != NULL) {
211 dns_transport_get_type(resp->transport);
313 dispentry_log(dns_dispentry_t *resp, int level, const char *fmt, ...)
317 dispentry_log(dns_dispentry_t *resp, int level, const char *fmt, ...) {
336 dispatch_log(resp->disp, level, "%s response %p: %s",
337 socktype2str(resp), resp, msgbuf);
344 setup_socket(dns_dispatch_t *disp, dns_dispentry_t *resp,
351 if (resp->retries++ > 5) {
366 resp->local = disp->local;
367 resp->peer = *dest;
371 isc_sockaddr_setport(&resp->local, port);
374 resp->port = port;
404 dns_dispentry_t *resp = caa_container_of(rcu_head, dns_dispentry_t,
406 isc_mem_putanddetach(&resp->mctx, resp, sizeof(*resp));
410 dispentry_destroy(dns_dispentry_t *resp) {
411 dns_dispatch_t *disp = resp->disp;
417 dispentry_cancel(resp, ISC_R_CANCELED);
422 resp->magic = 0;
424 INSIST(!ISC_LINK_LINKED(resp, plink));
425 INSIST(!ISC_LINK_LINKED(resp, alink));
426 INSIST(!ISC_LINK_LINKED(resp, rlink));
428 dispentry_log(resp, ISC_LOG_DEBUG(90), "destroying");
430 if (resp->handle != NULL) {
431 dispentry_log(resp, ISC_LOG_DEBUG(90),
432 "detaching handle %p from %p", resp->handle,
433 &resp->handle);
434 isc_nmhandle_detach(&resp->handle);
437 if (resp->tlsctx_cache != NULL) {
438 isc_tlsctx_cache_detach(&resp->tlsctx_cache);
441 if (resp->transport != NULL) {
442 dns_transport_detach(&resp->transport);
447 call_rcu(&resp->rcu_head, dispentry_destroy_rcu);
461 dispentry_runtime(dns_dispentry_t *resp, const isc_time_t *now) {
462 if (isc_time_isepoch(&resp->start)) {
466 return isc_time_microdiff(now, &resp->start) / 1000;
486 dns_dispentry_t *resp = (dns_dispentry_t *)arg;
498 REQUIRE(VALID_RESPONSE(resp));
499 REQUIRE(VALID_DISPATCH(resp->disp));
501 disp = resp->disp;
504 INSIST(resp->reading);
505 resp->reading = false;
507 if (resp->state == DNS_DISPATCHSTATE_CANCELED) {
517 dispentry_log(resp, ISC_LOG_DEBUG(90),
546 dispentry_log(resp, ISC_LOG_DEBUG(10),
555 id = resp->id;
562 dispentry_log(resp, ISC_LOG_DEBUG(10),
567 dispentry_log(resp, ISC_LOG_DEBUG(92),
581 if (resp->id != id || !isc_sockaddr_equal(&peer, &resp->peer)) {
582 dispentry_log(resp, ISC_LOG_DEBUG(90),
589 * We have the right resp, so call the caller back.
598 now = isc_loop_now(resp->loop);
599 if (resp->timeout > 0) {
600 timeout = resp->timeout - dispentry_runtime(resp, &now);
618 udp_dispatch_getnext(resp, timeout);
622 dispentry_log(resp, ISC_LOG_DEBUG(90),
625 resp->response(eresult, region, resp->arg);
628 dns_dispentry_detach(&resp); /* DISPENTRY003 */
633 dns_dispentry_t *resp = NULL;
634 resp = ISC_LIST_HEAD(disp->active);
635 if (resp != NULL) {
638 *respp = resp;
698 dns_dispentry_t *resp = cds_lfht_entry(cds_lfht_iter_get_node(&iter),
702 if (resp != NULL && resp->disp == disp) {
703 if (!resp->reading) {
710 *respp = resp;
723 tcp_recv_add(dns_displist_t *resps, dns_dispentry_t *resp,
725 dns_dispentry_ref(resp); /* DISPENTRY009 */
726 ISC_LIST_UNLINK(resp->disp->active, resp, alink);
727 ISC_LIST_APPEND(*resps, resp, rlink);
728 INSIST(resp->reading);
729 resp->reading = false;
730 resp->result = result;
736 dns_dispentry_t *resp = NULL, *next = NULL;
741 for (resp = ISC_LIST_HEAD(disp->active); resp != NULL; resp = next) {
742 next = ISC_LIST_NEXT(resp, alink);
743 tcp_recv_add(resps, resp, result);
750 dns_dispentry_t *resp = NULL, *next = NULL;
752 for (resp = ISC_LIST_HEAD(*resps); resp != NULL; resp = next) {
753 next = ISC_LIST_NEXT(resp, rlink);
754 ISC_LIST_UNLINK(*resps, resp, rlink);
756 dispentry_log(resp, ISC_LOG_DEBUG(90), "read callback: %s",
757 isc_result_totext(resp->result));
758 resp->response(resp->result, region, resp->arg);
759 dns_dispentry_detach(&resp); /* DISPENTRY009 */
780 dns_dispentry_t *resp = NULL;
808 result = tcp_recv_oldest(disp, &resp);
812 result = tcp_recv_success(disp, region, &peer, &resp);
819 if (resp != NULL) {
820 tcp_recv_add(&resps, resp, result);
841 resp = ISC_LIST_HEAD(disp->active);
842 if (resp != NULL) {
843 now = isc_loop_now(resp->loop);
845 while (resp != NULL) {
846 dns_dispentry_t *next = ISC_LIST_NEXT(resp, alink);
848 if (resp->timeout > 0) {
849 timeout = resp->timeout - dispentry_runtime(resp, &now);
851 tcp_recv_add(&resps, resp, ISC_R_TIMEDOUT);
855 resp = next;
890 resp = ISC_LIST_HEAD(disp->active);
891 if (resp != NULL) {
892 if (resp->timeout > 0) {
893 timeout = resp->timeout - dispentry_runtime(resp, &now);
896 tcp_startrecv(disp, resp);
1453 dns_dispentry_t *resp = isc_mem_get(disp->mctx, sizeof(*resp));
1454 *resp = (dns_dispentry_t){
1471 __func__, __FILE__, __LINE__, resp);
1473 isc_refcount_init(&resp->references, 1); /* DISPENTRY000 */
1476 isc_result_t result = setup_socket(disp, resp, dest,
1479 isc_mem_put(disp->mctx, resp, sizeof(*resp));
1494 resp->id = ((options & DNS_DISPATCHOPT_FIXEDID) != 0)
1499 cds_lfht_add_unique(disp->mgr->qids, qid_hash(resp),
1500 qid_match, resp, &resp->ht_node);
1502 if (node != &resp->ht_node) {
1517 isc_mem_put(disp->mctx, resp, sizeof(*resp));
1522 isc_mem_attach(disp->mctx, &resp->mctx);
1525 dns_transport_attach(transport, &resp->transport);
1529 isc_tlsctx_cache_attach(tlsctx_cache, &resp->tlsctx_cache);
1532 dns_dispatch_attach(disp, &resp->disp); /* DISPATCH001 */
1542 *idp = resp->id;
1543 *respp = resp;
1549 dns_dispatch_getnext(dns_dispentry_t *resp) {
1550 REQUIRE(VALID_RESPONSE(resp));
1551 REQUIRE(VALID_DISPATCH(resp->disp));
1553 dns_dispatch_t *disp = resp->disp;
1557 dispentry_log(resp, ISC_LOG_DEBUG(90), "getnext for QID %d", resp->id);
1559 if (resp->timeout > 0) {
1560 isc_time_t now = isc_loop_now(resp->loop);
1561 timeout = resp->timeout - dispentry_runtime(resp, &now);
1570 udp_dispatch_getnext(resp, timeout);
1573 tcp_dispatch_getnext(disp, resp, timeout);
1586 udp_dispentry_cancel(dns_dispentry_t *resp, isc_result_t result) {
1587 REQUIRE(VALID_RESPONSE(resp));
1588 REQUIRE(VALID_DISPATCH(resp->disp));
1589 REQUIRE(VALID_DISPATCHMGR(resp->disp->mgr));
1591 dns_dispatch_t *disp = resp->disp;
1595 dispentry_log(resp, ISC_LOG_DEBUG(90),
1598 isc_result_totext(result), state2str(resp->state),
1599 resp->reading ? "reading" : "not reading",
1604 if (ISC_LINK_LINKED(resp, alink)) {
1605 ISC_LIST_UNLINK(disp->active, resp, alink);
1608 switch (resp->state) {
1616 if (resp->reading) {
1618 dispentry_log(resp, ISC_LOG_DEBUG(90),
1619 "canceling read on %p", resp->handle);
1620 isc_nm_cancelread(resp->handle);
1633 (void)cds_lfht_del(disp->mgr->qids, &resp->ht_node);
1635 resp->state = DNS_DISPATCHSTATE_CANCELED;
1639 dispentry_log(resp, ISC_LOG_DEBUG(90), "read callback: %s",
1641 resp->response(result, NULL, resp->arg);
1649 tcp_dispentry_cancel(dns_dispentry_t *resp, isc_result_t result) {
1650 REQUIRE(VALID_RESPONSE(resp));
1651 REQUIRE(VALID_DISPATCH(resp->disp));
1652 REQUIRE(VALID_DISPATCHMGR(resp->disp->mgr));
1654 dns_dispatch_t *disp = resp->disp;
1658 dispentry_log(resp, ISC_LOG_DEBUG(90),
1661 isc_result_totext(result), state2str(resp->state),
1662 resp->reading ? "reading" : "not reading",
1667 switch (resp->state) {
1675 if (resp->reading) {
1676 tcp_recv_add(&resps, resp, ISC_R_CANCELED);
1679 INSIST(!ISC_LINK_LINKED(resp, alink));
1705 dispentry_log(resp, ISC_LOG_DEBUG(90),
1712 dispentry_log(resp, ISC_LOG_DEBUG(90),
1730 (void)cds_lfht_del(disp->mgr->qids, &resp->ht_node);
1732 resp->state = DNS_DISPATCHSTATE_CANCELED;
1748 dispentry_cancel(dns_dispentry_t *resp, isc_result_t result) {
1749 REQUIRE(VALID_RESPONSE(resp));
1750 REQUIRE(VALID_DISPATCH(resp->disp));
1752 dns_dispatch_t *disp = resp->disp;
1757 udp_dispentry_cancel(resp, result);
1760 tcp_dispentry_cancel(resp, result);
1772 dns_dispentry_t *resp = *respp;
1775 dispentry_cancel(resp, ISC_R_CANCELED);
1776 dns_dispentry_detach(&resp); /* DISPENTRY000 */
1780 udp_startrecv(isc_nmhandle_t *handle, dns_dispentry_t *resp) {
1781 REQUIRE(VALID_RESPONSE(resp));
1783 dispentry_log(resp, ISC_LOG_DEBUG(90), "attaching handle %p to %p",
1784 handle, &resp->handle);
1785 isc_nmhandle_attach(handle, &resp->handle);
1786 dns_dispentry_ref(resp); /* DISPENTRY003 */
1787 dispentry_log(resp, ISC_LOG_DEBUG(90), "reading");
1788 isc_nm_read(resp->handle, udp_recv, resp);
1789 resp->reading = true;
1793 tcp_startrecv(dns_dispatch_t *disp, dns_dispentry_t *resp) {
1798 if (resp != NULL) {
1799 dispentry_log(resp, ISC_LOG_DEBUG(90), "reading from %p",
1801 INSIST(!isc_time_isepoch(&resp->start));
1813 dns_dispentry_t *resp = arg;
1814 dispentry_log(resp, ISC_LOG_DEBUG(90), "connect callback: %s",
1815 isc_result_totext(resp->result));
1817 resp->connected(resp->result, NULL, resp->arg);
1818 dns_dispentry_detach(&resp); /* DISPENTRY005 */
1824 dns_dispentry_t *resp = NULL;
1858 for (resp = ISC_LIST_HEAD(disp->pending); resp != NULL; resp = next) {
1859 next = ISC_LIST_NEXT(resp, plink);
1860 ISC_LIST_UNLINK(disp->pending, resp, plink);
1861 ISC_LIST_APPEND(resps, resp, rlink);
1862 resp->result = eresult;
1864 if (resp->state == DNS_DISPATCHSTATE_CANCELED) {
1865 resp->result = ISC_R_CANCELED;
1867 resp->state = DNS_DISPATCHSTATE_CONNECTED;
1868 ISC_LIST_APPEND(disp->active, resp, alink);
1869 resp->reading = true;
1870 dispentry_log(resp, ISC_LOG_DEBUG(90), "start reading");
1872 resp->state = DNS_DISPATCHSTATE_NONE;
1882 tcp_startrecv(disp, resp);
1887 for (resp = ISC_LIST_HEAD(resps); resp != NULL; resp = next) {
1888 next = ISC_LIST_NEXT(resp, rlink);
1889 ISC_LIST_UNLINK(resps, resp, rlink);
1891 resp_connected(resp);
1899 dns_dispentry_t *resp = (dns_dispentry_t *)arg;
1900 dns_dispatch_t *disp = resp->disp;
1902 dispentry_log(resp, ISC_LOG_DEBUG(90), "connected: %s",
1906 switch (resp->state) {
1909 ISC_LIST_UNLINK(disp->pending, resp, plink);
1912 ISC_LIST_UNLINK(disp->pending, resp, plink);
1922 resp->state = DNS_DISPATCHSTATE_CONNECTED;
1923 udp_startrecv(handle, resp);
1931 result = setup_socket(disp, resp, &resp->peer, &localport);
1933 udp_dispatch_connect(disp, resp);
1936 resp->state = DNS_DISPATCHSTATE_NONE;
1940 resp->state = DNS_DISPATCHSTATE_NONE;
1945 dispentry_log(resp, ISC_LOG_DEBUG(90), "connect callback: %s",
1947 resp->connected(eresult, NULL, resp->arg);
1950 dns_dispentry_detach(&resp); /* DISPENTRY004 */
1954 udp_dispatch_connect(dns_dispatch_t *disp, dns_dispentry_t *resp) {
1956 resp->state = DNS_DISPATCHSTATE_CONNECTING;
1957 resp->start = isc_loop_now(resp->loop);
1958 dns_dispentry_ref(resp); /* DISPENTRY004 */
1959 ISC_LIST_APPEND(disp->pending, resp, plink);
1961 isc_nm_udpconnect(disp->mgr->nm, &resp->local, &resp->peer,
1962 udp_connected, resp, resp->timeout);
1966 tcp_dispatch_connect(dns_dispatch_t *disp, dns_dispentry_t *resp) {
1971 if (resp->transport != NULL) {
1972 transport_type = dns_transport_get_type(resp->transport);
1979 resp->transport, &resp->peer, resp->tlsctx_cache,
1980 resp->mctx, &tlsctx, &sess_cache);
1994 resp->state = DNS_DISPATCHSTATE_CONNECTING;
1995 resp->start = isc_loop_now(resp->loop);
1996 dns_dispentry_ref(resp); /* DISPENTRY005 */
1997 ISC_LIST_APPEND(disp->pending, resp, plink);
2008 dispentry_log(resp, ISC_LOG_DEBUG(90),
2010 peerbuf, resp->timeout);
2014 resp->timeout, tlsctx, sess_cache,
2019 /* Connection pending; add resp to the list */
2020 resp->state = DNS_DISPATCHSTATE_CONNECTING;
2021 resp->start = isc_loop_now(resp->loop);
2022 dns_dispentry_ref(resp); /* DISPENTRY005 */
2023 ISC_LIST_APPEND(disp->pending, resp, plink);
2027 resp->state = DNS_DISPATCHSTATE_CONNECTED;
2028 resp->start = isc_loop_now(resp->loop);
2030 /* Add the resp to the reading list */
2031 ISC_LIST_APPEND(disp->active, resp, alink);
2032 dispentry_log(resp, ISC_LOG_DEBUG(90),
2034 resp->reading = true;
2038 tcp_startrecv(disp, resp);
2042 dns_dispentry_ref(resp); /* DISPENTRY005 */
2043 isc_async_run(resp->loop, resp_connected, resp);
2054 dns_dispatch_connect(dns_dispentry_t *resp) {
2055 REQUIRE(VALID_RESPONSE(resp));
2056 REQUIRE(VALID_DISPATCH(resp->disp));
2058 dns_dispatch_t *disp = resp->disp;
2062 return tcp_dispatch_connect(disp, resp);
2065 udp_dispatch_connect(disp, resp);
2075 dns_dispentry_t *resp = (dns_dispentry_t *)cbarg;
2077 REQUIRE(VALID_RESPONSE(resp));
2079 dns_dispatch_t *disp = resp->disp;
2083 dispentry_log(resp, ISC_LOG_DEBUG(90), "sent: %s",
2086 resp->sent(result, NULL, resp->arg);
2089 dispentry_cancel(resp, result);
2092 dns_dispentry_detach(&resp); /* DISPENTRY007 */
2097 tcp_dispatch_getnext(dns_dispatch_t *disp, dns_dispentry_t *resp,
2101 dispentry_log(resp, ISC_LOG_DEBUG(90), "continue reading");
2103 if (!resp->reading) {
2104 ISC_LIST_APPEND(disp->active, resp, alink);
2105 resp->reading = true;
2122 udp_dispatch_getnext(dns_dispentry_t *resp, int32_t timeout) {
2125 if (resp->reading) {
2130 isc_nmhandle_settimeout(resp->handle, timeout);
2133 dispentry_log(resp, ISC_LOG_DEBUG(90), "continue reading");
2135 dns_dispentry_ref(resp); /* DISPENTRY003 */
2136 isc_nm_read(resp->handle, udp_recv, resp);
2137 resp->reading = true;
2141 dns_dispatch_resume(dns_dispentry_t *resp, uint16_t timeout) {
2142 REQUIRE(VALID_RESPONSE(resp));
2143 REQUIRE(VALID_DISPATCH(resp->disp));
2145 dns_dispatch_t *disp = resp->disp;
2147 dispentry_log(resp, ISC_LOG_DEBUG(90), "resume");
2152 udp_dispatch_getnext(resp, timeout);
2158 tcp_dispatch_getnext(disp, resp, timeout);
2166 dns_dispatch_send(dns_dispentry_t *resp, isc_region_t *r) {
2167 REQUIRE(VALID_RESPONSE(resp));
2168 REQUIRE(VALID_DISPATCH(resp->disp));
2170 dns_dispatch_t *disp = resp->disp;
2173 dispentry_log(resp, ISC_LOG_DEBUG(90), "sending");
2176 isc_nmhandle_attach(resp->handle, &sendhandle);
2184 dns_dispentry_ref(resp); /* DISPENTRY007 */
2185 isc_nm_send(sendhandle, r, send_done, resp);
2201 dns_dispentry_getlocaladdress(dns_dispentry_t *resp, isc_sockaddr_t *addrp) {
2202 REQUIRE(VALID_RESPONSE(resp));
2203 REQUIRE(VALID_DISPATCH(resp->disp));
2206 dns_dispatch_t *disp = resp->disp;
2213 *addrp = isc_nmhandle_localaddr(resp->handle);