]> git.ipfire.org Git - thirdparty/pdns.git/commitdiff
dnsdist: Handle cross-protocol I/O errors for DoQ queries
authorRemi Gacogne <remi.gacogne@powerdns.com>
Wed, 27 Sep 2023 23:31:27 +0000 (01:31 +0200)
committerRemi Gacogne <remi.gacogne@powerdns.com>
Mon, 9 Oct 2023 11:38:09 +0000 (13:38 +0200)
pdns/dnsdistdist/doq.cc

index a90d90e5e1df83e57b302df035a96ac5a868f693..894a99deda85a0727634c72a596f3a53a9f353d4 100644 (file)
@@ -193,8 +193,21 @@ public:
     return handleResponse(now, std::move(response));
   }
 
-  void notifyIOError(const struct timeval& now, TCPResponse&& response) override
+  void notifyIOError([[maybe_unused]] const struct timeval& now, TCPResponse&& response) override
   {
+    if (!response.d_idstate.doqu) {
+      return;
+    }
+
+    auto unit = std::move(response.d_idstate.doqu);
+    if (unit->dsc == nullptr) {
+      return;
+    }
+
+    /* this will signal an error */
+    unit->response.clear();
+    unit->ids = std::move(response.d_idstate);
+    sendBackDOQUnit(std::move(unit), "Cross-protocol error");
   }
 };