]> git.ipfire.org Git - thirdparty/pdns.git/commitdiff
dnsdist: Fix clang-tidy warnings
authorRemi Gacogne <remi.gacogne@powerdns.com>
Fri, 22 Aug 2025 12:22:29 +0000 (14:22 +0200)
committerRemi Gacogne <remi.gacogne@powerdns.com>
Thu, 4 Sep 2025 15:12:11 +0000 (17:12 +0200)
Signed-off-by: Remi Gacogne <remi.gacogne@powerdns.com>
(cherry picked from commit baad31c2b9db48acd1874db743a1764beaa05931)

pdns/dnsdistdist/dnsdist-nghttp2.cc

index 30851f5db415070c6e22baae12792e6de32cf874..f2cf88fab0116a0fed29237e829084e010edb2be 100644 (file)
@@ -48,6 +48,8 @@ std::unique_ptr<DoHClientCollection> g_dohClientThreads{nullptr};
 class DoHConnectionToBackend : public ConnectionToBackend
 {
 public:
+  using StreamID = int32_t;
+
   DoHConnectionToBackend(const std::shared_ptr<DownstreamState>& ds, std::unique_ptr<FDMultiplexer>& mplexer, const struct timeval& now, std::string&& proxyProtocolPayload);
 
   void handleTimeout(const struct timeval& now, bool write) override;
@@ -77,8 +79,8 @@ public:
 private:
   static ssize_t send_callback(nghttp2_session* session, const uint8_t* data, size_t length, int flags, void* user_data);
   static int on_frame_recv_callback(nghttp2_session* session, const nghttp2_frame* frame, void* user_data);
-  static int on_data_chunk_recv_callback(nghttp2_session* session, uint8_t flags, int32_t stream_id, const uint8_t* data, size_t len, void* user_data);
-  static int on_stream_close_callback(nghttp2_session* session, int32_t stream_id, uint32_t error_code, void* user_data);
+  static int on_data_chunk_recv_callback(nghttp2_session* session, uint8_t flags, StreamID stream_id, const uint8_t* data, size_t len, void* user_data);
+  static int on_stream_close_callback(nghttp2_session* session, StreamID stream_id, uint32_t error_code, void* user_data);
   static int on_header_callback(nghttp2_session* session, const nghttp2_frame* frame, const uint8_t* name, size_t namelen, const uint8_t* value, size_t valuelen, uint8_t flags, void* user_data);
   static int on_error_callback(nghttp2_session* session, int lib_error_code, const char* msg, size_t len, void* user_data);
   static void handleReadableIOCallback(int fd, FDMultiplexer::funcparam_t& param);
@@ -109,7 +111,7 @@ private:
 
   static const std::unordered_map<std::string, std::string> s_constants;
 
-  std::unordered_map<int32_t, PendingRequest> d_currentStreams;
+  std::unordered_map<StreamID, PendingRequest> d_currentStreams;
   std::string d_proxyProtocolPayload;
   PacketBuffer d_out;
   PacketBuffer d_in;
@@ -292,7 +294,15 @@ void DoHConnectionToBackend::queueQuery(std::shared_ptr<TCPQuerySender>& sender,
   pending.d_query = std::move(query);
   pending.d_sender = std::move(sender);
 
-  uint32_t streamId = nghttp2_session_get_next_stream_id(d_session.get());
+  uint32_t tentativeStreamId = nghttp2_session_get_next_stream_id(d_session.get());
+  if (tentativeStreamId == static_cast<uint32_t>(1 << 31)) {
+    /* running out of stream IDs */
+    d_connectionDied = true;
+    nghttp2_session_terminate_session(d_session.get(), NGHTTP2_NO_ERROR);
+    throw std::runtime_error("No more stream IDs");
+  }
+
+  auto streamId = static_cast<StreamID>(tentativeStreamId);
   auto insertPair = d_currentStreams.insert({streamId, std::move(pending)});
   if (!insertPair.second) {
     /* there is a stream ID collision, something is very wrong! */
@@ -306,7 +316,7 @@ void DoHConnectionToBackend::queueQuery(std::shared_ptr<TCPQuerySender>& sender,
   nghttp2_data_provider data_provider;
 
   data_provider.source.ptr = this;
-  data_provider.read_callback = [](nghttp2_session* session, int32_t stream_id, uint8_t* buf, size_t length, uint32_t* data_flags, nghttp2_data_source* source, void* user_data) -> ssize_t {
+  data_provider.read_callback = [](nghttp2_session* session, StreamID stream_id, uint8_t* buf, size_t length, uint32_t* data_flags, nghttp2_data_source* source, void* user_data) -> ssize_t {
     (void)session;
     (void)source;
     auto* conn = static_cast<DoHConnectionToBackend*>(user_data);
@@ -334,12 +344,12 @@ void DoHConnectionToBackend::queueQuery(std::shared_ptr<TCPQuerySender>& sender,
   }
 
   if (!d_inIOCallback) {
-    auto rv = nghttp2_session_send(d_session.get());
-    if (rv != 0) {
+    auto rtv = nghttp2_session_send(d_session.get());
+    if (rtv != 0) {
       d_connectionDied = true;
       ++d_ds->tcpDiedSendingQuery;
       d_currentStreams.erase(streamId);
-      throw std::runtime_error("Error in nghttp2_session_send:" + std::to_string(rv));
+      throw std::runtime_error("Error in nghttp2_session_send:" + std::to_string(rtv));
     }
   }
 
@@ -634,7 +644,7 @@ int DoHConnectionToBackend::on_frame_recv_callback(nghttp2_session* session, con
   return 0;
 }
 
-int DoHConnectionToBackend::on_data_chunk_recv_callback(nghttp2_session* session, uint8_t flags, int32_t stream_id, const uint8_t* data, size_t len, void* user_data)
+int DoHConnectionToBackend::on_data_chunk_recv_callback(nghttp2_session* session, uint8_t flags, StreamID stream_id, const uint8_t* data, size_t len, void* user_data)
 {
   (void)session;
   (void)flags;
@@ -682,7 +692,7 @@ int DoHConnectionToBackend::on_data_chunk_recv_callback(nghttp2_session* session
   return 0;
 }
 
-int DoHConnectionToBackend::on_stream_close_callback(nghttp2_session* session, int32_t stream_id, uint32_t error_code, void* user_data)
+int DoHConnectionToBackend::on_stream_close_callback(nghttp2_session* session, StreamID stream_id, uint32_t error_code, void* user_data)
 {
   (void)session;
   DoHConnectionToBackend* conn = reinterpret_cast<DoHConnectionToBackend*>(user_data);