* Others
*/
-dns_transport_type_t
-dns_zone_getrequesttransporttype(dns_zone_t *zone);
-/*%<
- * Get the transport type used for the SOA query to the current primary server
- * before an ongoing incoming zone transfer is lanunched. When the transfer is
- * already running, this information should be retrieved from the xfrin object
- * instead, using the dns_xfrin_gettransporttype() function.
- *
- * Requires:
- * \li 'zone' to be a valid zone.
- */
-
isc_result_t
dns_zone_forwardupdate(dns_zone_t *zone, dns_message_t *msg,
dns_updatecallback_t callback, void *callback_arg);
* Set the zone's serial to 'serial'.
*/
-isc_stats_t *
-dns_zone_getgluecachestats(dns_zone_t *zone);
-/*%<
- * Get the glue cache statistics for zone.
- *
- * Requires:
- * \li 'zone' to be a valid zone.
- *
- * Returns:
- * \li if present, a pointer to the statistics set installed in zone;
- * otherwise NULL.
- */
-
bool
dns_zone_isloaded(dns_zone_t *zone);
/*%<
* \li 'keystores' to be a valid.
*/
-dns_keystorelist_t *
-dns_zone_getkeystores(dns_zone_t *zone);
-/**<
- * Get the keystores pointer, it should never be NULL once the server is
- * initialized.
- */
-
void
dns_zone_setplugins(dns_zone_t *zone, void *plugins,
void (*plugins_free)(isc_mem_t *, void **));
* Requires:
* \li 'zone' to be a valid zone.
*/
+
+dns_transport_type_t
+dns_zone_getrequesttransporttype(dns_zone_t *zone);
+/*%<
+ * Get the transport type used for the SOA query to the current primary server
+ * before an ongoing incoming zone transfer is lanunched. When the transfer is
+ * already running, this information should be retrieved from the xfrin object
+ * instead, using the dns_xfrin_gettransporttype() function.
+ *
+ * Requires:
+ * \li 'zone' to be a valid zone.
+ */
+
+isc_stats_t *
+dns_zone_getgluecachestats(dns_zone_t *zone);
+/*%<
+ * Get the glue cache statistics for zone.
+ *
+ * Requires:
+ * \li 'zone' to be a valid zone.
+ *
+ * Returns:
+ * \li if present, a pointer to the statistics set installed in zone;
+ * otherwise NULL.
+ */
+
+dns_keystorelist_t *
+dns_zone_getkeystores(dns_zone_t *zone);
+/**<
+ * Get the keystores pointer, it should never be NULL once the server is
+ * initialized.
+ */
}
}
-/*
- * Get the transport type used for the SOA query to the current primary server
- * before an ongoing incoming zone transfer.
- *
- * Requires:
- * The zone is locked by the caller.
- */
-static dns_transport_type_t
-get_request_transport_type(dns_zone_t *zone) {
- dns_transport_type_t transport_type = DNS_TRANSPORT_NONE;
-
- if (zone->transport != NULL) {
- transport_type = dns_transport_get_type(zone->transport);
- } else {
- transport_type = (DNS_ZONE_FLAG(zone, DNS_ZONEFLG_USEVC))
- ? DNS_TRANSPORT_TCP
- : DNS_TRANSPORT_UDP;
-
- /* Check if the peer is forced to always use TCP. */
- if (transport_type != DNS_TRANSPORT_TCP &&
- !dns_remote_done(&zone->primaries))
- {
- isc_result_t result;
- isc_sockaddr_t primaryaddr;
- isc_netaddr_t primaryip;
- dns_peer_t *peer = NULL;
-
- primaryaddr = dns_remote_curraddr(&zone->primaries);
- isc_netaddr_fromsockaddr(&primaryip, &primaryaddr);
- result = dns_peerlist_peerbyaddr(zone->view->peers,
- &primaryip, &peer);
- if (result == ISC_R_SUCCESS && peer != NULL) {
- bool usetcp;
- result = dns_peer_getforcetcp(peer, &usetcp);
- if (result == ISC_R_SUCCESS && usetcp) {
- transport_type = DNS_TRANSPORT_TCP;
- }
- }
- }
- }
-
- return transport_type;
-}
-
-dns_transport_type_t
-dns_zone_getrequesttransporttype(dns_zone_t *zone) {
- dns_transport_type_t transport_type;
-
- REQUIRE(DNS_ZONE_VALID(zone));
-
- LOCK_ZONE(zone);
- transport_type = get_request_transport_type(zone);
- UNLOCK_ZONE(zone);
-
- return transport_type;
-}
-
/*
* Update forwarding support.
*/
isc_mem_put(zone->mctx, buf, buflen);
}
-dns_keystorelist_t *
-dns_zone_getkeystores(dns_zone_t *zone) {
- return zone->zmgr->keystores;
-}
-
void
dns_zone_stopxfr(dns_zone_t *zone) {
dns_xfrin_t *xfr = NULL;
return result;
}
-isc_stats_t *
-dns_zone_getgluecachestats(dns_zone_t *zone) {
- REQUIRE(DNS_ZONE_VALID(zone));
-
- return zone->gluecachestats;
-}
-
bool
dns_zone_isloaded(dns_zone_t *zone) {
REQUIRE(DNS_ZONE_VALID(zone));
#include <isc/random.h> /* WMM: remove include */
#include <dns/kasp.h>
+#include <dns/peer.h>
#include <dns/request.h>
#include <dns/ssu.h>
#include <dns/stats.h>
return zone->cfg;
}
+
+/*
+ * Get the transport type used for the SOA query to the current primary server
+ * before an ongoing incoming zone transfer.
+ *
+ * Requires:
+ * The zone is locked by the caller.
+ */
+static dns_transport_type_t
+get_request_transport_type(dns_zone_t *zone) {
+ dns_transport_type_t transport_type = DNS_TRANSPORT_NONE;
+
+ if (zone->transport != NULL) {
+ transport_type = dns_transport_get_type(zone->transport);
+ } else {
+ transport_type = (DNS_ZONE_FLAG(zone, DNS_ZONEFLG_USEVC))
+ ? DNS_TRANSPORT_TCP
+ : DNS_TRANSPORT_UDP;
+
+ /* Check if the peer is forced to always use TCP. */
+ if (transport_type != DNS_TRANSPORT_TCP &&
+ !dns_remote_done(&zone->primaries))
+ {
+ isc_result_t result;
+ isc_sockaddr_t primaryaddr;
+ isc_netaddr_t primaryip;
+ dns_peer_t *peer = NULL;
+
+ primaryaddr = dns_remote_curraddr(&zone->primaries);
+ isc_netaddr_fromsockaddr(&primaryip, &primaryaddr);
+ result = dns_peerlist_peerbyaddr(zone->view->peers,
+ &primaryip, &peer);
+ if (result == ISC_R_SUCCESS && peer != NULL) {
+ bool usetcp;
+ result = dns_peer_getforcetcp(peer, &usetcp);
+ if (result == ISC_R_SUCCESS && usetcp) {
+ transport_type = DNS_TRANSPORT_TCP;
+ }
+ }
+ }
+ }
+
+ return transport_type;
+}
+
+dns_transport_type_t
+dns_zone_getrequesttransporttype(dns_zone_t *zone) {
+ dns_transport_type_t transport_type;
+
+ REQUIRE(DNS_ZONE_VALID(zone));
+
+ LOCK_ZONE(zone);
+ transport_type = get_request_transport_type(zone);
+ UNLOCK_ZONE(zone);
+
+ return transport_type;
+}
+
+dns_keystorelist_t *
+dns_zone_getkeystores(dns_zone_t *zone) {
+ return zone->zmgr->keystores;
+}
+
+isc_stats_t *
+dns_zone_getgluecachestats(dns_zone_t *zone) {
+ REQUIRE(DNS_ZONE_VALID(zone));
+
+ return zone->gluecachestats;
+}