From 036f1b2ba33d4095a4395b39391a5ae1327dae2a Mon Sep 17 00:00:00 2001 From: Nicolas Pope <nicolas.pope@utu.fi> Date: Wed, 8 Jun 2022 07:42:33 +0000 Subject: [PATCH] #26 Allow socket buffer size changes --- .vscode/settings.json | 3 ++- include/ftl/protocol/self.hpp | 32 ++++++++++++++++++++++++++++++ src/self.cpp | 16 +++++++++++++++ src/universe.cpp | 37 ++++++++++++++++++++++++++++++----- src/universe.hpp | 8 ++++++++ 5 files changed, 90 insertions(+), 6 deletions(-) diff --git a/.vscode/settings.json b/.vscode/settings.json index c7d969c..b5b85f2 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -66,5 +66,6 @@ "valarray": "cpp", "variant": "cpp", "any": "cpp" - } + }, + "cmake.cmakePath": "/snap/cmake/current/bin/cmake" } \ No newline at end of file diff --git a/include/ftl/protocol/self.hpp b/include/ftl/protocol/self.hpp index 51375d1..d73bbd1 100644 --- a/include/ftl/protocol/self.hpp +++ b/include/ftl/protocol/self.hpp @@ -282,6 +282,38 @@ class Self { */ void onListConfig(const std::function<std::vector<std::string>()> &cb); + /** + * @brief Get the Send Buffer Size in bytes. + * + * @param s protocol + * @return size_t + */ + size_t getSendBufferSize(ftl::URI::scheme_t s); + + /** + * @brief Get the Recv Buffer Size in bytes + * + * @param s protocol + * @return size_t + */ + size_t getRecvBufferSize(ftl::URI::scheme_t s); + + /** + * @brief Set the Send Buffer size in bytes + * + * @param s protocol + * @param size new size + */ + void setSendBufferSize(ftl::URI::scheme_t s, size_t size); + + /** + * @brief Set the Recv Buffer size in bytes + * + * @param s protocol + * @param size new size + */ + void setRecvBufferSize(ftl::URI::scheme_t s, size_t size); + protected: std::shared_ptr<ftl::net::Universe> universe_; }; diff --git a/src/self.cpp b/src/self.cpp index 184c784..bbf49bc 100644 --- a/src/self.cpp +++ b/src/self.cpp @@ -193,3 +193,19 @@ void Self::onSetConfig(const std::function<void(const std::string &, const nlohm void Self::onListConfig(const std::function<std::vector<std::string>()> &cb) { universe_->bind("list_configurables", cb); } + +size_t Self::getSendBufferSize(ftl::URI::scheme_t s) { + return universe_->getSendBufferSize(s); +} + +size_t Self::getRecvBufferSize(ftl::URI::scheme_t s) { + return universe_->getRecvBufferSize(s); +} + +void Self::setSendBufferSize(ftl::URI::scheme_t s, size_t size) { + universe_->setSendBufferSize(s, size); +} + +void Self::setRecvBufferSize(ftl::URI::scheme_t s, size_t size) { + universe_->setRecvBufferSize(s, size); +} diff --git a/src/universe.cpp b/src/universe.cpp index 40ac7eb..4be8d39 100644 --- a/src/universe.cpp +++ b/src/universe.cpp @@ -9,6 +9,7 @@ #include <algorithm> #include <memory> #include <unordered_map> +#include <optional> #include "universe.hpp" #include "socketImpl.hpp" @@ -87,6 +88,10 @@ Universe::Universe() : phase_(0), periodic_time_(1.0), reconnect_attempts_(5), + tcp_send_buffer_(TCP_SEND_BUFFER_SIZE), + tcp_recv_buffer_(TCP_RECEIVE_BUFFER_SIZE), + ws_send_buffer_(WS_SEND_BUFFER_SIZE), + ws_recv_buffer_(WS_RECEIVE_BUFFER_SIZE), thread_(Universe::__start, this) { _installBindings(); } @@ -102,14 +107,13 @@ void Universe::setMaxConnections(size_t m) { } size_t Universe::getSendBufferSize(ftl::URI::scheme_t s) { - // TODO(Nick): Allow these to be configured again. switch (s) { case ftl::URI::scheme_t::SCHEME_WS: case ftl::URI::scheme_t::SCHEME_WSS: - return WS_SEND_BUFFER_SIZE; + return ws_send_buffer_; default: - return TCP_SEND_BUFFER_SIZE; + return tcp_send_buffer_; } } @@ -117,9 +121,32 @@ size_t Universe::getRecvBufferSize(ftl::URI::scheme_t s) { switch (s) { case ftl::URI::scheme_t::SCHEME_WS: case ftl::URI::scheme_t::SCHEME_WSS: - return WS_RECEIVE_BUFFER_SIZE; + return ws_recv_buffer_; default: - return TCP_RECEIVE_BUFFER_SIZE; + return tcp_recv_buffer_; + } +} + +void Universe::setSendBufferSize(ftl::URI::scheme_t s, size_t size) { + switch (s) { + case ftl::URI::scheme_t::SCHEME_WS: + case ftl::URI::scheme_t::SCHEME_WSS: + ws_send_buffer_ = size; + break; + + default: + tcp_send_buffer_ = size; + } +} + +void Universe::setRecvBufferSize(ftl::URI::scheme_t s, size_t size) { + switch (s) { + case ftl::URI::scheme_t::SCHEME_WS: + case ftl::URI::scheme_t::SCHEME_WSS: + ws_recv_buffer_ = size; + break; + default: + tcp_recv_buffer_ = size; } } diff --git a/src/universe.hpp b/src/universe.hpp index 229dfdd..f5013fe 100644 --- a/src/universe.hpp +++ b/src/universe.hpp @@ -169,6 +169,8 @@ class Universe { size_t getSendBufferSize(ftl::URI::scheme_t s); size_t getRecvBufferSize(ftl::URI::scheme_t s); + void setSendBufferSize(ftl::URI::scheme_t s, size_t size); + void setRecvBufferSize(ftl::URI::scheme_t s, size_t size); static inline std::shared_ptr<Universe> getInstance() { return instance_; } @@ -226,6 +228,12 @@ class Universe { static std::shared_ptr<Universe> instance_; + // Socket buffer sizes + size_t tcp_send_buffer_; + size_t tcp_recv_buffer_; + size_t ws_send_buffer_; + size_t ws_recv_buffer_; + // NOTE: Must always be last member std::thread thread_; }; -- GitLab