From 9b330afc0883e199b044408caeae431b0731145d Mon Sep 17 00:00:00 2001 From: Remi Gacogne Date: Fri, 22 Aug 2025 14:22:29 +0200 Subject: [PATCH] dnsdist: Fix clang-tidy warnings Signed-off-by: Remi Gacogne (cherry picked from commit baad31c2b9db48acd1874db743a1764beaa05931) --- pdns/dnsdistdist/dnsdist-nghttp2.cc | 30 +++++++++++++++++++---------- 1 file changed, 20 insertions(+), 10 deletions(-) diff --git a/pdns/dnsdistdist/dnsdist-nghttp2.cc b/pdns/dnsdistdist/dnsdist-nghttp2.cc index 30851f5db4..f2cf88fab0 100644 --- a/pdns/dnsdistdist/dnsdist-nghttp2.cc +++ b/pdns/dnsdistdist/dnsdist-nghttp2.cc @@ -48,6 +48,8 @@ std::unique_ptr g_dohClientThreads{nullptr}; class DoHConnectionToBackend : public ConnectionToBackend { public: + using StreamID = int32_t; + DoHConnectionToBackend(const std::shared_ptr& ds, std::unique_ptr& 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 s_constants; - std::unordered_map d_currentStreams; + std::unordered_map d_currentStreams; std::string d_proxyProtocolPayload; PacketBuffer d_out; PacketBuffer d_in; @@ -292,7 +294,15 @@ void DoHConnectionToBackend::queueQuery(std::shared_ptr& 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(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(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& 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(user_data); @@ -334,12 +344,12 @@ void DoHConnectionToBackend::queueQuery(std::shared_ptr& 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(user_data); -- 2.47.3