return (ISC_R_NOTIMPLEMENTED);
}
+isc_result_t
+dns_dispentry_getlocaladdress(dns_dispentry_t *resp, isc_sockaddr_t *addrp) {
+ REQUIRE(VALID_RESPONSE(resp));
+ REQUIRE(addrp != NULL);
+
+ if (resp->disp->socktype == isc_sockettype_tcp) {
+ return (isc_socket_getsockname(resp->disp->socket, addrp));
+ }
+
+ if (resp->dispsocket != NULL) {
+ return (isc_socket_getsockname(resp->dispsocket->socket,
+ addrp));
+ }
+
+ return (ISC_R_NOTIMPLEMENTED);
+}
+
unsigned int
dns_dispatch_getattributes(dns_dispatch_t *disp) {
REQUIRE(VALID_DISPATCH(disp));
*
* Requires:
*\li disp is valid.
- *\li addrp to be non null.
+ *\li addrp to be non NULL.
+ *
+ * Returns:
+ *\li ISC_R_SUCCESS
+ *\li ISC_R_NOTIMPLEMENTED
+ */
+
+isc_result_t
+dns_dispentry_getlocaladdress(dns_dispentry_t *resp, isc_sockaddr_t *addrp);
+/*%<
+ * Return the local address for this dispatch entry.
+ *
+ * Requires:
+ *\li resp is valid.
+ *\li addrp to be non NULL.
*
* Returns:
*\li ISC_R_SUCCESS
isc_region_t r;
dns_resolver_t *res = NULL;
isc_task_t *task;
- isc_socket_t *sock;
+ isc_socket_t *sock = NULL;
isc_buffer_t tcpbuffer;
isc_sockaddr_t *address = NULL;
isc_buffer_t *buffer = NULL;
dtmsgtype = DNS_DTTYPE_RQ;
}
- result = isc_socket_getsockname(sock, &localaddr);
+ result = dns_dispentry_getlocaladdress(query->dispentry, &localaddr);
if (result == ISC_R_SUCCESS) {
la = &localaddr;
}
#ifdef HAVE_DNSTAP
isc_result_t result;
fetchctx_t *fctx = rctx->fctx;
- isc_socket_t *sock = NULL;
isc_sockaddr_t localaddr, *la = NULL;
unsigned char zone[DNS_NAME_MAXWIRE];
dns_dtmsgtype_t dtmsgtype;
dtmsgtype = DNS_DTTYPE_RR;
}
- sock = dns_dispatch_getentrysocket(rctx->query);
- if (sock != NULL) {
- result = isc_socket_getsockname(sock, &localaddr);
- if (result == ISC_R_SUCCESS) {
- la = &localaddr;
- }
+ result = dns_dispentry_getlocaladdress(rctx->query->dispentry,
+ &localaddr);
+ if (result == ISC_R_SUCCESS) {
+ la = &localaddr;
}
dns_dt_send(fctx->res->view, dtmsgtype, la,