From: Remi Gacogne Date: Fri, 22 Aug 2025 12:22:29 +0000 (+0200) Subject: dnsdist: Fix clang-tidy warnings X-Git-Tag: dnsdist-1.9.11~1^2~3 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=0c6f49c4200a20e80f53965dc8a51669859ebf5a;p=thirdparty%2Fpdns.git dnsdist: Fix clang-tidy warnings Signed-off-by: Remi Gacogne (cherry picked from commit baad31c2b9db48acd1874db743a1764beaa05931) --- diff --git a/pdns/dnsdistdist/dnsdist-nghttp2.cc b/pdns/dnsdistdist/dnsdist-nghttp2.cc index 8b28ea533..5672d28fb 100644 --- a/pdns/dnsdistdist/dnsdist-nghttp2.cc +++ b/pdns/dnsdistdist/dnsdist-nghttp2.cc @@ -49,6 +49,8 @@ std::optional g_outgoingDoHWorkerThreads{std::nullopt}; 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; @@ -287,7 +289,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! */ @@ -301,7 +311,9 @@ 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); auto& request = conn->d_currentStreams.at(stream_id); size_t toCopy = 0; @@ -327,12 +339,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)); } } @@ -630,7 +642,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) { DoHConnectionToBackend* conn = reinterpret_cast(user_data); // cerr<<"Got data of size "<(user_data);