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>
61 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",
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());
85 m_net_server.get_config_object().m_access_control_origins = std::move(access_control_origins);
87 m_net_server.get_config_object().m_user = std::move(user);
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;
the connection templated-class for one peer connection
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
bool send_stop_signal()
Definition http_server_impl_base.h:132
long get_connections_count() const
Definition http_server_impl_base.h:143
bool run(size_t threads_count, bool wait=true)
Definition http_server_impl_base.h:108
int get_binded_port()
Definition http_server_impl_base.h:138
http_server_impl_base(boost::asio::io_context &external_io_service)
Definition http_server_impl_base.h:57
bool timed_wait_server_stop(uint64_t ms)
Definition http_server_impl_base.h:127
virtual bool is_host_limit(const net_utils::network_address &na) override final
Definition http_server_impl_base.h:150
http_server_impl_base()
Definition http_server_impl_base.h:53
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 deinit()
Definition http_server_impl_base.h:122
Definition abstract_tcp_server2.h:347
Definition net_utils_base.h:225
#define DEFAULT_RPC_MAX_CONNECTIONS_PER_PRIVATE_IP
Definition cryptonote_config.h:131
#define DEFAULT_RPC_SOFT_LIMIT_SIZE
Definition cryptonote_config.h:133
#define DEFAULT_RPC_MAX_CONNECTIONS
Definition cryptonote_config.h:132
#define DEFAULT_RPC_MAX_CONNECTIONS_PER_PUBLIC_IP
Definition cryptonote_config.h:130
const char * res
Definition hmac_keccak.cpp:42
Definition cryptonote_config.h:221
Definition abstract_http_client.h:36
@ e_ssl_support_autodetect
Definition net_ssl.h:52
TODO: (mj-xmr) This will be reduced in an another PR.
Definition byte_slice.h:40
unsigned char uint8_t
Definition stdint.h:124
unsigned __int64 uint64_t
Definition stdint.h:136
Definition http_protocol_handler.h:157
Definition abstract_tcp_server2.h:83
#define CRITICAL_REGION_LOCAL(x)
Definition syncobj.h:153