diff --git a/.vscode/settings.json b/.vscode/settings.json index c7d969ce20ae4cef7b5bd7eda8783a0b49dc9509..b5b85f28e1b01a6a6f20ad2c913e647d3d8095df 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 51375d121cf964112941b06bf51f52927ec60e61..d73bbd1f91ddd5be397a1e4da425f5c31c6ed694 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 184c784d99240b77cab2625e8968717e3428eaa4..bbf49bcc0fe74b9a381afeccda7591eb731aa76d 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 40ac7ebf31e308504e70a45ae7f4225e06fac990..4be8d39c97598135fc4d9a3e044f1ad558eb75be 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 229dfdd694214a37d1aed31499757138d5cb9160..f5013fedc38d099a842925523440b341361a94cb 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_; };