Lines Matching defs:xfr

836 	dns_rdatatype_t		qtype;		/* dns_rdatatype_{a,i}xfr */
872 sendstream(xfrout_ctx_t *xfr);
878 xfrout_fail(xfrout_ctx_t *xfr, isc_result_t result, const char *msg);
881 xfrout_maybe_destroy(xfrout_ctx_t *xfr);
895 xfrout_log(xfrout_ctx_t *xfr, int level, const char *fmt, ...)
920 xfrout_ctx_t *xfr = NULL;
1240 &xfr));
1252 &xfr));
1254 xfr->mnemonic = mnemonic;
1258 CHECK(xfr->stream->methods->first(xfr->stream));
1260 if (xfr->tsigkey != NULL)
1261 dns_name_format(&xfr->tsigkey->name, keyname, sizeof(keyname));
1267 (xfr->tsigkey != NULL) ? ": TSIG " : "", keyname);
1271 (xfr->tsigkey != NULL) ? ": TSIG " : "", keyname);
1274 * Hand the context over to sendstream(). Set xfr to NULL;
1278 sendstream(xfr);
1279 xfr = NULL;
1303 if (xfr != NULL) {
1304 xfrout_fail(xfr, result, "setting up zone transfer");
1323 xfrout_ctx_t *xfr;
1329 xfr = isc_mem_get(mctx, sizeof(*xfr));
1330 if (xfr == NULL)
1332 xfr->mctx = NULL;
1333 isc_mem_attach(mctx, &xfr->mctx);
1334 xfr->client = NULL;
1335 ns_client_attach(client, &xfr->client);
1336 xfr->id = id;
1337 xfr->qname = qname;
1338 xfr->qtype = qtype;
1339 xfr->qclass = qclass;
1340 xfr->zone = NULL;
1341 xfr->db = NULL;
1342 xfr->ver = NULL;
1344 dns_zone_attach(zone, &xfr->zone);
1345 dns_db_attach(db, &xfr->db);
1346 dns_db_attachversion(db, ver, &xfr->ver);
1347 xfr->end_of_stream = ISC_FALSE;
1348 xfr->tsigkey = tsigkey;
1349 xfr->lasttsig = lasttsig;
1350 xfr->txmem = NULL;
1351 xfr->txmemlen = 0;
1352 xfr->nmsg = 0;
1353 xfr->many_answers = many_answers,
1354 xfr->sends = 0;
1355 xfr->shuttingdown = ISC_FALSE;
1356 xfr->mnemonic = NULL;
1357 xfr->buf.base = NULL;
1358 xfr->buf.length = 0;
1359 xfr->txmem = NULL;
1360 xfr->txmemlen = 0;
1361 xfr->stream = NULL;
1362 xfr->quota = NULL;
1380 isc_buffer_init(&xfr->buf, mem, len);
1392 isc_buffer_init(&xfr->txlenbuf, mem, 2);
1393 isc_buffer_init(&xfr->txbuf, (char *) mem + 2, len - 2);
1394 xfr->txmem = mem;
1395 xfr->txmemlen = len;
1397 CHECK(dns_timer_setidle(xfr->client->timer,
1405 xfr->client->shutdown = xfrout_client_shutdown;
1406 xfr->client->shutdown_arg = xfr;
1411 xfr->quota = quota;
1412 xfr->stream = stream;
1414 *xfrp = xfr;
1418 xfrout_ctx_destroy(&xfr);
1432 sendstream(xfrout_ctx_t *xfr) {
1448 isc_buffer_clear(&xfr->buf);
1449 isc_buffer_clear(&xfr->txlenbuf);
1450 isc_buffer_clear(&xfr->txbuf);
1452 if ((xfr->client->attributes & NS_CLIENTATTR_TCP) == 0) {
1457 msg = xfr->client->message;
1463 * in xfr->buf. We know that if the uncompressed data fits
1464 * in xfr->buf, the compressed data will surely fit in a TCP
1468 CHECK(dns_message_create(xfr->mctx,
1472 msg->id = xfr->id;
1475 if ((xfr->client->attributes & NS_CLIENTATTR_RA) != 0)
1477 CHECK(dns_message_settsigkey(msg, xfr->tsigkey));
1478 CHECK(dns_message_setquerytsig(msg, xfr->lasttsig));
1479 if (xfr->lasttsig != NULL)
1480 isc_buffer_free(&xfr->lasttsig);
1485 if (xfr->tsigkey != NULL)
1487 isc_buffer_add(&xfr->buf, msg->reserved);
1494 if (xfr->nmsg == 0) {
1502 isc_buffer_add(&xfr->buf, 12 + 4);
1510 xfr->client->message->rdclass,
1511 xfr->qtype);
1517 isc_buffer_availableregion(&xfr->buf, &r);
1518 INSIST(r.length >= xfr->qname->length);
1519 r.length = xfr->qname->length;
1520 isc_buffer_putmem(&xfr->buf, xfr->qname->ndata,
1521 xfr->qname->length);
1531 isc_buffer_add(&xfr->buf, 12);
1553 xfr->stream->methods->current(xfr->stream,
1556 isc_buffer_availableregion(&xfr->buf, &r);
1571 xfrout_log(xfr, ISC_LOG_WARNING,
1588 isc_buffer_availableregion(&xfr->buf, &r);
1591 isc_buffer_putmem(&xfr->buf, name->ndata, name->length);
1595 isc_buffer_add(&xfr->buf, 10);
1600 isc_buffer_availableregion(&xfr->buf, &r);
1602 isc_buffer_putmem(&xfr->buf, rdata->data, rdata->length);
1634 result = xfr->stream->methods->next(xfr->stream);
1636 xfr->end_of_stream = ISC_TRUE;
1641 if (! xfr->many_answers)
1645 if ((xfr->client->attributes & NS_CLIENTATTR_TCP) != 0) {
1646 CHECK(dns_compress_init(&cctx, -1, xfr->mctx));
1649 CHECK(dns_message_renderbegin(msg, &cctx, &xfr->txbuf));
1656 isc_buffer_usedregion(&xfr->txbuf, &used);
1657 isc_buffer_putuint16(&xfr->txlenbuf,
1659 region.base = xfr->txlenbuf.base;
1661 xfrout_log(xfr, ISC_LOG_DEBUG(8),
1664 CHECK(isc_socket_send(xfr->client->tcpsocket, /* XXX */
1665 &region, xfr->client->task,
1667 xfr));
1668 xfr->sends++;
1670 xfrout_log(xfr, ISC_LOG_DEBUG(8), "sending IXFR UDP response");
1671 ns_client_send(xfr->client);
1672 xfr->stream->methods->pause(xfr->stream);
1673 xfrout_ctx_destroy(&xfr);
1678 CHECK(dns_message_getquerytsig(msg, xfr->mctx, &xfr->lasttsig));
1680 xfr->nmsg++;
1707 xfr->stream->methods->pause(xfr->stream);
1712 xfrout_fail(xfr, result, "sending zone data");
1717 xfrout_ctx_t *xfr = *xfrp;
1720 INSIST(xfr->sends == 0);
1722 xfr->client->shutdown = NULL;
1723 xfr->client->shutdown_arg = NULL;
1725 if (xfr->stream != NULL)
1726 xfr->stream->methods->destroy(&xfr->stream);
1727 if (xfr->buf.base != NULL)
1728 isc_mem_put(xfr->mctx, xfr->buf.base, xfr->buf.length);
1729 if (xfr->txmem != NULL)
1730 isc_mem_put(xfr->mctx, xfr->txmem, xfr->txmemlen);
1731 if (xfr->lasttsig != NULL)
1732 isc_buffer_free(&xfr->lasttsig);
1733 if (xfr->quota != NULL)
1734 isc_quota_detach(&xfr->quota);
1735 if (xfr->ver != NULL)
1736 dns_db_closeversion(xfr->db, &xfr->ver, ISC_FALSE);
1737 if (xfr->zone != NULL)
1738 dns_zone_detach(&xfr->zone);
1739 if (xfr->db != NULL)
1740 dns_db_detach(&xfr->db);
1746 ns_client_attach(xfr->client, &client);
1747 ns_client_detach(&xfr->client);
1748 isc_mem_putanddetach(&xfr->mctx, xfr, sizeof(*xfr));
1757 xfrout_ctx_t *xfr = (xfrout_ctx_t *)event->ev_arg;
1765 xfr->sends--;
1766 INSIST(xfr->sends == 0);
1768 (void)isc_timer_touch(xfr->client->timer);
1769 if (xfr->shuttingdown == ISC_TRUE) {
1770 xfrout_maybe_destroy(xfr);
1772 xfrout_fail(xfr, evresult, "send");
1773 } else if (xfr->end_of_stream == ISC_FALSE) {
1774 sendstream(xfr);
1777 inc_stats(xfr->zone, dns_nsstatscounter_xfrdone);
1778 xfrout_log(xfr, ISC_LOG_INFO, "%s ended", xfr->mnemonic);
1779 ns_client_next(xfr->client, ISC_R_SUCCESS);
1780 xfrout_ctx_destroy(&xfr);
1785 xfrout_fail(xfrout_ctx_t *xfr, isc_result_t result, const char *msg) {
1786 xfr->shuttingdown = ISC_TRUE;
1787 xfrout_log(xfr, ISC_LOG_ERROR, "%s: %s",
1789 xfrout_maybe_destroy(xfr);
1793 xfrout_maybe_destroy(xfrout_ctx_t *xfr) {
1794 INSIST(xfr->shuttingdown == ISC_TRUE);
1795 if (xfr->sends > 0) {
1800 isc_socket_cancel(xfr->client->tcpsocket, xfr->client->task,
1803 ns_client_next(xfr->client, ISC_R_CANCELED);
1804 xfrout_ctx_destroy(&xfr);
1810 xfrout_ctx_t *xfr = (xfrout_ctx_t *) arg;
1811 xfrout_fail(xfr, result, "aborted");
1856 xfrout_log(xfrout_ctx_t *xfr, int level, const char *fmt, ...) {
1859 xfrout_logv(xfr->client, xfr->qname, xfr->qclass, level, fmt, ap);