Lines Matching refs:rctx

257 static void client_resfind(resctx_t *rctx, dns_fetchevent_t *event);
763 resctx_t *rctx = event->ev_arg; in fetch_done() local
767 REQUIRE(RCTX_VALID(rctx)); in fetch_done()
768 REQUIRE(rctx->task == task); in fetch_done()
771 client_resfind(rctx, fevent); in fetch_done()
775 start_fetch(resctx_t *rctx) { in start_fetch() argument
783 REQUIRE(rctx->fetch == NULL); in start_fetch()
785 if (!rctx->want_cdflag) in start_fetch()
787 if (!rctx->want_validation) in start_fetch()
790 result = dns_resolver_createfetch(rctx->view->resolver, in start_fetch()
791 dns_fixedname_name(&rctx->name), in start_fetch()
792 rctx->type, in start_fetch()
794 rctx->task, fetch_done, rctx, in start_fetch()
795 rctx->rdataset, in start_fetch()
796 rctx->sigrdataset, in start_fetch()
797 &rctx->fetch); in start_fetch()
803 view_find(resctx_t *rctx, dns_db_t **dbp, dns_dbnode_t **nodep, in view_find() argument
807 dns_name_t *name = dns_fixedname_name(&rctx->name); in view_find()
810 if (rctx->type == dns_rdatatype_rrsig) in view_find()
813 type = rctx->type; in view_find()
815 result = dns_view_find(rctx->view, name, type, 0, 0, ISC_FALSE, in view_find()
816 dbp, nodep, foundname, rctx->rdataset, in view_find()
817 rctx->sigrdataset); in view_find()
823 client_resfind(resctx_t *rctx, dns_fetchevent_t *event) { in client_resfind() argument
839 REQUIRE(RCTX_VALID(rctx)); in client_resfind()
841 LOCK(&rctx->lock); in client_resfind()
843 mctx = rctx->view->mctx; in client_resfind()
845 name = dns_fixedname_name(&rctx->name); in client_resfind()
853 rctx->restarts++; in client_resfind()
856 if (event == NULL && !rctx->canceled) { in client_resfind()
859 INSIST(!dns_rdataset_isassociated(rctx->rdataset)); in client_resfind()
860 INSIST(rctx->sigrdataset == NULL || in client_resfind()
861 !dns_rdataset_isassociated(rctx->sigrdataset)); in client_resfind()
862 result = view_find(rctx, &db, &node, fname); in client_resfind()
874 result = start_fetch(rctx); in client_resfind()
876 putrdataset(mctx, &rctx->rdataset); in client_resfind()
877 if (rctx->sigrdataset != NULL) in client_resfind()
879 &rctx->sigrdataset); in client_resfind()
886 INSIST(event->fetch == rctx->fetch); in client_resfind()
887 dns_resolver_destroyfetch(&rctx->fetch); in client_resfind()
893 INSIST(event->rdataset == rctx->rdataset); in client_resfind()
894 INSIST(event->sigrdataset == rctx->sigrdataset); in client_resfind()
900 if (rctx->canceled) in client_resfind()
913 aname = dns_fixedname_name(&rctx->name); in client_resfind()
935 trdataset = rctx->rdataset; in client_resfind()
936 ISC_LIST_APPEND(ansname->list, rctx->rdataset, link); in client_resfind()
937 rctx->rdataset = NULL; in client_resfind()
938 if (rctx->sigrdataset != NULL) { in client_resfind()
940 rctx->sigrdataset, link); in client_resfind()
941 rctx->sigrdataset = NULL; in client_resfind()
943 ISC_LIST_APPEND(rctx->namelist, ansname, link); in client_resfind()
969 trdataset = rctx->rdataset; in client_resfind()
970 ISC_LIST_APPEND(ansname->list, rctx->rdataset, link); in client_resfind()
971 rctx->rdataset = NULL; in client_resfind()
972 if (rctx->sigrdataset != NULL) { in client_resfind()
974 rctx->sigrdataset, link); in client_resfind()
975 rctx->sigrdataset = NULL; in client_resfind()
977 ISC_LIST_APPEND(rctx->namelist, ansname, link); in client_resfind()
1014 ISC_LIST_APPEND(ansname->list, rctx->rdataset, link); in client_resfind()
1015 ISC_LIST_APPEND(rctx->namelist, ansname, link); in client_resfind()
1017 rctx->rdataset = NULL; in client_resfind()
1019 if (rctx->sigrdataset != NULL) in client_resfind()
1020 putrdataset(mctx, &rctx->sigrdataset); in client_resfind()
1024 if (rctx->rdataset != NULL) in client_resfind()
1025 putrdataset(mctx, &rctx->rdataset); in client_resfind()
1026 if (rctx->sigrdataset != NULL) in client_resfind()
1027 putrdataset(mctx, &rctx->sigrdataset); in client_resfind()
1032 if (rctx->type == dns_rdatatype_any) { in client_resfind()
1046 rctx->rdataset); in client_resfind()
1047 if (rctx->rdataset->type != 0) { in client_resfind()
1049 rctx->rdataset, in client_resfind()
1052 rctx->rdataset = NULL; in client_resfind()
1059 rctx->rdataset); in client_resfind()
1064 rctx->rdataset == NULL) { in client_resfind()
1066 &rctx->rdataset); in client_resfind()
1083 ISC_LIST_APPEND(rctx->namelist, ansname, link); in client_resfind()
1097 ISC_LIST_APPEND(ansname->list, rctx->rdataset, link); in client_resfind()
1098 rctx->rdataset = NULL; in client_resfind()
1099 if (rctx->sigrdataset != NULL) { in client_resfind()
1101 rctx->sigrdataset, link); in client_resfind()
1102 rctx->sigrdataset = NULL; in client_resfind()
1104 ISC_LIST_APPEND(rctx->namelist, ansname, link); in client_resfind()
1134 if (want_restart && rctx->restarts == MAX_RESTARTS) { in client_resfind()
1144 INSIST(rctx->rdataset == NULL && in client_resfind()
1145 rctx->sigrdataset == NULL); in client_resfind()
1147 result = getrdataset(mctx, &rctx->rdataset); in client_resfind()
1148 if (result == ISC_R_SUCCESS && rctx->want_dnssec) { in client_resfind()
1149 result = getrdataset(mctx, &rctx->sigrdataset); in client_resfind()
1151 putrdataset(mctx, &rctx->rdataset); in client_resfind()
1165 while ((name = ISC_LIST_HEAD(rctx->namelist)) != NULL) { in client_resfind()
1166 ISC_LIST_UNLINK(rctx->namelist, name, link); in client_resfind()
1167 ISC_LIST_APPEND(rctx->event->answerlist, name, link); in client_resfind()
1170 rctx->event->result = result; in client_resfind()
1171 rctx->event->vresult = vresult; in client_resfind()
1172 task = rctx->event->ev_sender; in client_resfind()
1173 rctx->event->ev_sender = rctx; in client_resfind()
1174 isc_task_sendanddetach(&task, ISC_EVENT_PTR(&rctx->event)); in client_resfind()
1177 UNLOCK(&rctx->lock); in client_resfind()
1331 resctx_t *rctx = NULL; in dns_client_startresolve() local
1370 rctx = isc_mem_get(mctx, sizeof(*rctx)); in dns_client_startresolve()
1371 if (rctx == NULL) in dns_client_startresolve()
1374 result = isc_mutex_init(&rctx->lock); in dns_client_startresolve()
1376 isc_mem_put(mctx, rctx, sizeof(*rctx)); in dns_client_startresolve()
1377 rctx = NULL; in dns_client_startresolve()
1386 rctx->rdataset = rdataset; in dns_client_startresolve()
1393 rctx->sigrdataset = sigrdataset; in dns_client_startresolve()
1395 dns_fixedname_init(&rctx->name); in dns_client_startresolve()
1396 result = dns_name_copy(name, dns_fixedname_name(&rctx->name), NULL); in dns_client_startresolve()
1400 rctx->client = client; in dns_client_startresolve()
1401 ISC_LINK_INIT(rctx, link); in dns_client_startresolve()
1402 rctx->canceled = ISC_FALSE; in dns_client_startresolve()
1403 rctx->task = client->task; in dns_client_startresolve()
1404 rctx->type = type; in dns_client_startresolve()
1405 rctx->view = view; in dns_client_startresolve()
1406 rctx->restarts = 0; in dns_client_startresolve()
1407 rctx->fetch = NULL; in dns_client_startresolve()
1408 rctx->want_dnssec = want_dnssec; in dns_client_startresolve()
1409 rctx->want_validation = want_validation; in dns_client_startresolve()
1410 rctx->want_cdflag = want_cdflag; in dns_client_startresolve()
1411 ISC_LIST_INIT(rctx->namelist); in dns_client_startresolve()
1412 rctx->event = event; in dns_client_startresolve()
1414 rctx->magic = RCTX_MAGIC; in dns_client_startresolve()
1417 ISC_LIST_APPEND(client->resctxs, rctx, link); in dns_client_startresolve()
1420 *transp = (dns_clientrestrans_t *)rctx; in dns_client_startresolve()
1421 client_resfind(rctx, NULL); in dns_client_startresolve()
1430 if (rctx != NULL) { in dns_client_startresolve()
1431 DESTROYLOCK(&rctx->lock); in dns_client_startresolve()
1432 isc_mem_put(mctx, rctx, sizeof(*rctx)); in dns_client_startresolve()
1444 resctx_t *rctx; in dns_client_cancelresolve() local
1447 rctx = (resctx_t *)trans; in dns_client_cancelresolve()
1448 REQUIRE(RCTX_VALID(rctx)); in dns_client_cancelresolve()
1450 LOCK(&rctx->lock); in dns_client_cancelresolve()
1452 if (!rctx->canceled) { in dns_client_cancelresolve()
1453 rctx->canceled = ISC_TRUE; in dns_client_cancelresolve()
1454 if (rctx->fetch != NULL) in dns_client_cancelresolve()
1455 dns_resolver_cancelfetch(rctx->fetch); in dns_client_cancelresolve()
1458 UNLOCK(&rctx->lock); in dns_client_cancelresolve()
1482 resctx_t *rctx; in dns_client_destroyrestrans() local
1488 rctx = (resctx_t *)*transp; in dns_client_destroyrestrans()
1489 REQUIRE(RCTX_VALID(rctx)); in dns_client_destroyrestrans()
1490 REQUIRE(rctx->fetch == NULL); in dns_client_destroyrestrans()
1491 REQUIRE(rctx->event == NULL); in dns_client_destroyrestrans()
1492 client = rctx->client; in dns_client_destroyrestrans()
1496 dns_view_detach(&rctx->view); in dns_client_destroyrestrans()
1500 INSIST(ISC_LINK_LINKED(rctx, link)); in dns_client_destroyrestrans()
1501 ISC_LIST_UNLINK(client->resctxs, rctx, link); in dns_client_destroyrestrans()
1510 INSIST(ISC_LIST_EMPTY(rctx->namelist)); in dns_client_destroyrestrans()
1512 DESTROYLOCK(&rctx->lock); in dns_client_destroyrestrans()
1513 rctx->magic = 0; in dns_client_destroyrestrans()
1515 isc_mem_put(mctx, rctx, sizeof(*rctx)); in dns_client_destroyrestrans()