}
}
-void
-isc__nmsocket_shutdown(isc_nmsocket_t *sock);
-
static void
nmhandle_detach_cb(isc_nmhandle_t **handlep FLARG) {
isc_nmsocket_t *sock = NULL;
int r = uv_timer_stop(&sock->write_timer);
UV_RUNTIME_CHECK(uv_timer_stop, r);
- /* The shutdown will be handled in the respective close functions */
- r = uv_tcp_close_reset(&sock->uv_handle.tcp, NULL);
- UV_RUNTIME_CHECK(uv_tcp_close_reset, r);
-
- isc__nmsocket_shutdown(sock);
+ isc__nmsocket_reset(sock);
}
void
nmhandle_detach_cb(&ievent->handle FLARG_PASS);
}
+void
+isc__nmsocket_reset(isc_nmsocket_t *sock) {
+ REQUIRE(VALID_NMSOCK(sock));
+
+ switch (sock->type) {
+ case isc_nm_tcpdnssocket:
+ case isc_nm_tlsdnssocket:
+ REQUIRE(sock->parent == NULL);
+ break;
+ default:
+ INSIST(0);
+ ISC_UNREACHABLE();
+ break;
+ }
+
+ if (!uv_is_closing(&sock->uv_handle.handle)) {
+ /*
+ * The real shutdown will be handled in the respective
+ * close functions.
+ */
+ int r = uv_tcp_close_reset(&sock->uv_handle.tcp, NULL);
+ UV_RUNTIME_CHECK(uv_tcp_close_reset, r);
+ }
+ isc__nmsocket_shutdown(sock);
+}
+
void
isc__nmsocket_shutdown(isc_nmsocket_t *sock) {
REQUIRE(VALID_NMSOCK(sock));
void
isc_nm_bad_request(isc_nmhandle_t *handle) {
- isc_nmsocket_t *sock;
+ isc_nmsocket_t *sock = NULL;
REQUIRE(VALID_NMHANDLE(handle));
REQUIRE(VALID_NMSOCK(handle->sock));
sock = handle->sock;
- switch (sock->type) {
-#if HAVE_LIBNGHTTP2
- case isc_nm_httpsocket:
- isc__nm_http_bad_request(handle);
- break;
-#endif /* HAVE_LIBNGHTTP2 */
+ switch (sock->type) {
case isc_nm_udpsocket:
+ return;
case isc_nm_tcpdnssocket:
case isc_nm_tlsdnssocket:
+ REQUIRE(sock->parent == NULL);
+ isc__nmsocket_reset(sock);
return;
- break;
-
+#if HAVE_LIBNGHTTP2
+ case isc_nm_httpsocket:
+ isc__nm_http_bad_request(handle);
+ return;
+#endif /* HAVE_LIBNGHTTP2 */
case isc_nm_tcpsocket:
#if HAVE_LIBNGHTTP2
case isc_nm_tlssocket:
* There isn't enough header to determine whether
* this was a request or a response. Drop it.
*/
+ ns_client_log(client, DNS_LOGCATEGORY_SECURITY,
+ NS_LOGMODULE_CLIENT, ISC_LOG_DEBUG(10),
+ "dropped request: invalid message header");
isc_nm_bad_request(handle);
return;
}
* If it's a TCP response, discard it here.
*/
if ((flags & DNS_MESSAGEFLAG_QR) != 0) {
- CTRACE("unexpected response");
+ ns_client_log(client, DNS_LOGCATEGORY_SECURITY,
+ NS_LOGMODULE_CLIENT, ISC_LOG_DEBUG(10),
+ "dropped request: unexpected response");
isc_nm_bad_request(handle);
return;
}