diff options
| author | Lee *!* Clagett <code@leeclagett.com> | 2025-01-21 09:56:52 -0500 |
|---|---|---|
| committer | Lee *!* Clagett <code@leeclagett.com> | 2025-02-14 00:21:05 -0500 |
| commit | 13ff355cf6081776fd7379080c17246e35c1236d (patch) | |
| tree | 7efc3ffd2c8288857d428e1eaf5d9615f77b0900 /src/wallet/wallet_rpc_server.cpp | |
| parent | 89fa3ed68ae1a21e71a35ad4c21afaa2baae1987 (diff) | |
| download | monzero-core-13ff355cf6081776fd7379080c17246e35c1236d.tar.gz monzero-core-13ff355cf6081776fd7379080c17246e35c1236d.tar.xz monzero-core-13ff355cf6081776fd7379080c17246e35c1236d.zip | |
Set response limits on http server connections
Diffstat (limited to 'src/wallet/wallet_rpc_server.cpp')
| -rw-r--r-- | src/wallet/wallet_rpc_server.cpp | 27 |
1 files changed, 26 insertions, 1 deletions
diff --git a/src/wallet/wallet_rpc_server.cpp b/src/wallet/wallet_rpc_server.cpp index 14c66c5f5..b84b7b284 100644 --- a/src/wallet/wallet_rpc_server.cpp +++ b/src/wallet/wallet_rpc_server.cpp @@ -129,6 +129,10 @@ namespace const command_line::arg_descriptor<std::string> arg_wallet_dir = {"wallet-dir", "Directory for newly created wallets"}; const command_line::arg_descriptor<bool> arg_prompt_for_password = {"prompt-for-password", "Prompts for password when not provided", false}; const command_line::arg_descriptor<bool> arg_no_initial_sync = {"no-initial-sync", "Skips the initial sync before listening for connections", false}; + const command_line::arg_descriptor<std::size_t> arg_rpc_max_connections_per_public_ip = {"rpc-max-connections-per-public-ip", "Max RPC connections per public IP permitted", DEFAULT_RPC_MAX_CONNECTIONS_PER_PUBLIC_IP}; + const command_line::arg_descriptor<std::size_t> arg_rpc_max_connections_per_private_ip = {"rpc-max-connections-per-private-ip", "Max RPC connections per private and localhost IP permitted", DEFAULT_RPC_MAX_CONNECTIONS_PER_PRIVATE_IP}; + const command_line::arg_descriptor<std::size_t> arg_rpc_max_connections = {"rpc-max-connections", "Max RPC connections permitted", DEFAULT_RPC_MAX_CONNECTIONS}; + const command_line::arg_descriptor<std::size_t> arg_rpc_response_soft_limit = {"rpc-response-soft-limit", "Max response bytes that can be queued, enforced at next response attempt", DEFAULT_RPC_SOFT_LIMIT_SIZE}; constexpr const char default_rpc_username[] = "monero"; @@ -325,13 +329,30 @@ namespace tools check_background_mining(); + const auto max_connections_public = command_line::get_arg(vm, arg_rpc_max_connections_per_public_ip); + const auto max_connections_private = command_line::get_arg(vm, arg_rpc_max_connections_per_private_ip); + const auto max_connections = command_line::get_arg(vm, arg_rpc_max_connections); + + if (max_connections < max_connections_public) + { + MFATAL(arg_rpc_max_connections_per_public_ip.name << " is bigger than " << arg_rpc_max_connections.name); + return false; + } + if (max_connections < max_connections_private) + { + MFATAL(arg_rpc_max_connections_per_private_ip.name << " is bigger than " << arg_rpc_max_connections.name); + return false; + } + m_net_server.set_threads_prefix("RPC"); auto rng = [](size_t len, uint8_t *ptr) { return crypto::rand(len, ptr); }; return epee::http_server_impl_base<wallet_rpc_server, connection_context>::init( rng, std::move(bind_port), std::move(rpc_config->bind_ip), std::move(rpc_config->bind_ipv6_address), std::move(rpc_config->use_ipv6), std::move(rpc_config->require_ipv4), std::move(rpc_config->access_control_origins), std::move(http_login), - std::move(rpc_config->ssl_options) + std::move(rpc_config->ssl_options), + max_connections_public, max_connections_private, max_connections, + command_line::get_arg(vm, arg_rpc_response_soft_limit) ); } //------------------------------------------------------------------------------------------------------------------------------ @@ -4940,6 +4961,10 @@ int main(int argc, char** argv) { command_line::add_arg(desc_params, arg_prompt_for_password); command_line::add_arg(desc_params, arg_rpc_client_secret_key); command_line::add_arg(desc_params, arg_no_initial_sync); + command_line::add_arg(desc_params, arg_rpc_max_connections_per_public_ip); + command_line::add_arg(desc_params, arg_rpc_max_connections_per_private_ip); + command_line::add_arg(desc_params, arg_rpc_max_connections); + command_line::add_arg(desc_params, arg_rpc_response_soft_limit); daemonizer::init_options(hidden_options, desc_params); desc_params.add(hidden_options); |
