33 #include <boost/thread.hpp> 34 #include <boost/bind/bind.hpp> 41 #undef MONERO_DEFAULT_LOG_CATEGORY 42 #define MONERO_DEFAULT_LOG_CATEGORY "net.http" 47 template<
class t_child_
class,
class t_connection_context = epee::net_utils::connection_context_base>
62 const std::string& bind_ipv6_address =
"::",
bool use_ipv6 =
false,
bool require_ipv4 =
true,
63 std::vector<std::string> access_control_origins = std::vector<std::string>(),
64 boost::optional<net_utils::http::login> user = boost::none,
71 if (max_connections < max_public_ip_connections)
72 throw std::invalid_argument{
"Max public IP connections cannot be more than max connections"};
73 if (max_connections < max_private_ip_connections)
74 throw std::invalid_argument{
"Max private IP connections cannot be more than max connections"};
77 m_net_server.get_config_object().m_phandler =
static_cast<t_child_class*
>(
this);
84 std::sort(access_control_origins.begin(), access_control_origins.end());
88 m_net_server.get_config_object().m_max_public_ip_connections = max_public_ip_connections;
89 m_net_server.get_config_object().m_max_private_ip_connections = max_private_ip_connections;
90 m_net_server.get_config_object().m_max_connections = max_connections;
91 m_net_server.set_response_soft_limit(response_soft_limit);
94 MGINFO(
"Binding on " << bind_ip <<
" (IPv4):" << bind_port);
97 MGINFO(
"Binding on " << bind_ipv6_address <<
" (IPv6):" << bind_port);
99 bool res =
m_net_server.init_server(bind_port, bind_ip, bind_port, bind_ipv6_address, use_ipv6, require_ipv4,
std::move(ssl_options));
102 LOG_ERROR(
"Failed to bind server");
108 bool run(
size_t threads_count,
bool wait =
true)
111 MINFO(
"Run net_service loop( " << threads_count <<
" threads)...");
114 LOG_ERROR(
"Failed to run net tcp server!");
118 MINFO(
"net_service loop stopped.");
154 if (
config.m_max_connections <=
config.m_connection_count)
157 const bool is_private = na.is_loopback() || na.is_local();
158 const auto elem =
config.m_connections.find(na.host_str());
159 if (elem !=
config.m_connections.end())
162 return config.m_max_private_ip_connections <= elem->second;
164 return config.m_max_public_ip_connections <= elem->second;
#define DEFAULT_RPC_MAX_CONNECTIONS_PER_PUBLIC_IP
Definition: cryptonote_config.h:130
const char * res
Definition: hmac_keccak.cpp:42
net_utils::boosted_tcp_server< net_utils::http::http_custom_handler< t_connection_context > > m_net_server
Definition: http_server_impl_base.h:169
bool init(std::function< void(size_t, uint8_t *)> rng, const std::string &bind_port="0", const std::string &bind_ip="0.0.0.0", const std::string &bind_ipv6_address="::", bool use_ipv6=false, bool require_ipv4=true, std::vector< std::string > access_control_origins=std::vector< std::string >(), boost::optional< net_utils::http::login > user=boost::none, net_utils::ssl_options_t ssl_options=net_utils::ssl_support_t::e_ssl_support_autodetect, const std::size_t max_public_ip_connections=DEFAULT_RPC_MAX_CONNECTIONS_PER_PUBLIC_IP, const std::size_t max_private_ip_connections=DEFAULT_RPC_MAX_CONNECTIONS_PER_PRIVATE_IP, const std::size_t max_connections=DEFAULT_RPC_MAX_CONNECTIONS, const std::size_t response_soft_limit=DEFAULT_RPC_SOFT_LIMIT_SIZE)
Definition: http_server_impl_base.h:61
Definition: abstract_tcp_server2.h:342
#define DEFAULT_RPC_SOFT_LIMIT_SIZE
Definition: cryptonote_config.h:133
bool deinit()
Definition: http_server_impl_base.h:122
::std::string string
Definition: gtest-port.h:1097
Definition: net_utils_base.h:224
Definition: cryptonote_config.h:220
unsigned char uint8_t
Definition: stdint.h:124
virtual bool is_host_limit(const net_utils::network_address &na) override final
Definition: http_server_impl_base.h:150
#define DEFAULT_RPC_MAX_CONNECTIONS
Definition: cryptonote_config.h:132
Definition: http_server_impl_base.h:48
int get_binded_port()
Definition: http_server_impl_base.h:138
Definition: http_protocol_handler.h:156
the connection templated-class for one peer connection
http_server_impl_base(boost::asio::io_context &external_io_service)
Definition: http_server_impl_base.h:57
unsigned __int64 uint64_t
Definition: stdint.h:136
Definition: abstract_tcp_server2.h:82
#define CRITICAL_REGION_LOCAL(x)
Definition: syncobj.h:153
bool run(size_t threads_count, bool wait=true)
Definition: http_server_impl_base.h:108
TODO: (mj-xmr) This will be reduced in an another PR.
Definition: byte_slice.h:39
const T & move(const T &t)
Definition: gtest-port.h:1317
Definition: connection_basic.hpp:95
http_server_impl_base()
Definition: http_server_impl_base.h:53
long get_connections_count() const
Definition: http_server_impl_base.h:143
bool timed_wait_server_stop(uint64_t ms)
Definition: http_server_impl_base.h:127
#define DEFAULT_RPC_MAX_CONNECTIONS_PER_PRIVATE_IP
Definition: cryptonote_config.h:131
bool send_stop_signal()
Definition: http_server_impl_base.h:132