From 067a1d26b3690385da05f48ca8ceb48ad4c4a311 Mon Sep 17 00:00:00 2001 From: "Scott E. Graves" Date: Sun, 21 Sep 2025 11:13:52 -0500 Subject: [PATCH] added handshake for dos protection --- .../include/comm/packet/packet_client.hpp | 1 + .../src/comm/packet/packet_client.cpp | 19 ++++++++++++++++--- 2 files changed, 17 insertions(+), 3 deletions(-) diff --git a/repertory/librepertory/include/comm/packet/packet_client.hpp b/repertory/librepertory/include/comm/packet/packet_client.hpp index 3389ea56..a48060fc 100644 --- a/repertory/librepertory/include/comm/packet/packet_client.hpp +++ b/repertory/librepertory/include/comm/packet/packet_client.hpp @@ -57,6 +57,7 @@ private: resolve_results_; std::mutex clients_mutex_; std::vector> clients_; + std::vector service_threads_; private: static void close(client &cli); diff --git a/repertory/librepertory/src/comm/packet/packet_client.cpp b/repertory/librepertory/src/comm/packet/packet_client.cpp index 412cc4e0..8ea562c0 100644 --- a/repertory/librepertory/src/comm/packet/packet_client.cpp +++ b/repertory/librepertory/src/comm/packet/packet_client.cpp @@ -33,12 +33,23 @@ using namespace repertory::comm; namespace repertory { packet_client::packet_client(remote::remote_config cfg) - : cfg_(std::move(cfg)), unique_id_(utils::create_uuid_string()) {} + : cfg_(std::move(cfg)), unique_id_(utils::create_uuid_string()) { + for (std::uint8_t idx = 0U; idx < cfg.max_connections; ++idx) { + service_threads_.emplace_back([this]() { io_context_.run(); }); + } +} packet_client::~packet_client() { allow_connections_ = false; close_all(); - io_context_.stop(); + + for (std::size_t idx = 0U; idx < service_threads_.size(); ++idx) { + io_context_.stop(); + } + + for (auto &thread : service_threads_) { + thread.join(); + } } void packet_client::close(client &cli) { @@ -58,7 +69,9 @@ void packet_client::close_all() { } clients_.clear(); - io_context_.restart(); + for (std::size_t idx = 0U; idx < service_threads_.size(); ++idx) { + io_context_.restart(); + } resolve_results_ = {}; unique_id_ = utils::create_uuid_string(); }