Monero
Loading...
Searching...
No Matches
abstract_tcp_server2.h
Go to the documentation of this file.
1
7// Copyright (c) 2006-2013, Andrey N. Sabelnikov, www.sabelnikov.net
8// All rights reserved.
9//
10// Redistribution and use in source and binary forms, with or without
11// modification, are permitted provided that the following conditions are met:
12// * Redistributions of source code must retain the above copyright
13// notice, this list of conditions and the following disclaimer.
14// * Redistributions in binary form must reproduce the above copyright
15// notice, this list of conditions and the following disclaimer in the
16// documentation and/or other materials provided with the distribution.
17// * Neither the name of the Andrey N. Sabelnikov nor the
18// names of its contributors may be used to endorse or promote products
19// derived from this software without specific prior written permission.
20//
21// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
22// ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
23// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
24// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER BE LIABLE FOR ANY
25// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
26// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
27// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
28// ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
29// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
30// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
31//
32
33
34
35#ifndef _ABSTRACT_TCP_SERVER2_H_
36#define _ABSTRACT_TCP_SERVER2_H_
37
38
39#include <string>
40#include <vector>
41#include <boost/noncopyable.hpp>
42#include <boost/shared_ptr.hpp>
43#include <atomic>
44#include <cassert>
45#include <map>
46#include <memory>
47#include <condition_variable>
48
49#include <boost/asio.hpp>
50#include <boost/asio/post.hpp>
51#include <boost/asio/ssl.hpp>
52#include <boost/asio/strand.hpp>
53#include <boost/asio/steady_timer.hpp>
54#include <boost/array.hpp>
55#include <boost/enable_shared_from_this.hpp>
56#include <boost/thread/thread.hpp>
57#include <boost/optional.hpp>
58#include "byte_slice.h"
59#include "net_utils_base.h"
60#include "syncobj.h"
61#include "connection_basic.hpp"
63
64#undef MONERO_DEFAULT_LOG_CATEGORY
65#define MONERO_DEFAULT_LOG_CATEGORY "net"
66
67#define ABSTRACT_SERVER_SEND_QUE_MAX_COUNT 1000
68#define ABSTRACT_SERVER_SEND_QUE_MAX_BYTES_DEFAULT 100 * 1024 * 1024
69
70namespace epee
71{
72namespace net_utils
73{
74
76 {
77 virtual bool is_remote_host_allowed(const epee::net_utils::network_address &address, time_t *t = NULL)=0;
78 protected:
80 };
81
83 {
84 virtual bool is_host_limit(const epee::net_utils::network_address &address)=0;
85 protected:
87 };
88
89
90 /************************************************************************/
91 /* */
92 /************************************************************************/
94 template<class t_protocol_handler>
96 : public boost::enable_shared_from_this<connection<t_protocol_handler> >,
97 private boost::noncopyable,
98 public i_service_endpoint,
99 public connection_basic
100 {
101 public:
102 typedef typename t_protocol_handler::connection_context t_connection_context;
103
111 private:
113 using connection_ptr = boost::shared_ptr<connection_t>;
115 using timer_t = boost::asio::steady_timer;
116 using duration_t = timer_t::duration;
117 using ec_t = boost::system::error_code;
118 using handshake_t = boost::asio::ssl::stream_base::handshake_type;
119
120 using io_context_t = boost::asio::io_context;
121 using strand_t = io_context_t::strand;
122 using socket_t = boost::asio::ip::tcp::socket;
123
126
127 unsigned int host_count(int delta = 0);
130
132
133 void start_timer(duration_t duration, bool add = {});
136
139 void handle_read(size_t bytes_transferred);
143
145
146 void interrupt();
148
149 void terminate();
152
153 bool send(epee::byte_slice message);
155 bool is_income,
156 bool is_multithreaded,
157 boost::optional<network_address> real_remote
158 );
159
160 struct state_t {
161 struct stat_t {
162 struct {
163 network_throttle_t throttle{"speed_in", "throttle_speed_in"};
164 } in;
165 struct {
166 network_throttle_t throttle{"speed_out", "throttle_speed_out"};
167 } out;
168 };
169
170 struct data_t {
171 struct {
172 std::array<uint8_t, 0x2000> buffer;
173 } read;
174 struct {
175 std::deque<epee::byte_slice> queue;
176 std::size_t total_bytes;
177 bool wait_consume;
178 } write;
179 };
180
181 struct ssl_t {
183 bool forced;
186 };
187
206
212
222
232
233 std::mutex lock;
234 std::condition_variable_any condition;
242 };
243
244 struct timers_t {
245 timers_t(io_context_t &io_context):
246 general(io_context),
247 throttle(io_context)
248 {}
249 struct throttle_t {
251 in(io_context),
252 out(io_context)
253 {}
256 };
257
260 };
261
266 timers_t m_timers;
268 bool m_local{};
269 std::string m_host{};
270 state_t m_state{};
271 t_protocol_handler m_handler;
272 public:
273 struct shared_state : connection_basic_shared_state, t_protocol_handler::config_type
274 {
277 t_protocol_handler::config_type(),
278 pfilter(nullptr),
279 plimit(nullptr),
282 {}
283
288 };
289
291 explicit connection( io_context_t& io_context,
292 std::shared_ptr<shared_state> state,
293 t_connection_type connection_type,
296
297 explicit connection( io_context_t& io_context,
298 boost::asio::ip::tcp::socket&& sock,
299 std::shared_ptr<shared_state> state,
300 t_connection_type connection_type,
303
304
305
306 virtual ~connection() noexcept(false);
307
309 bool start(bool is_income, bool is_multithreaded);
310
311 // `real_remote` is the actual endpoint (if connection is to proxy, etc.)
312 bool start(bool is_income, bool is_multithreaded, network_address real_remote);
313
315
317
319
320
322
323 bool cancel(bool wait_for_shutdown = false);
324
325 status_t get_status() const noexcept { return m_state.status; }
326
327 private:
328 //----------------- i_service_endpoint ---------------------
329 virtual bool do_send(byte_slice message);
330 virtual bool send_done();
331 virtual bool close(const bool wait_for_shutdown);
333 virtual bool request_callback();
335 virtual bool add_ref();
336 virtual bool release();
337 //------------------------------------------------------
338 public:
340 };
341
342
343 /************************************************************************/
344 /* */
345 /************************************************************************/
346 template<class t_protocol_handler>
348 : private boost::noncopyable
349 {
356
357 public:
358 typedef boost::shared_ptr<connection<t_protocol_handler> > connection_ptr;
359 typedef typename t_protocol_handler::connection_context t_connection_context;
362
364 explicit boosted_tcp_server(boost::asio::io_context& external_io_context, t_connection_type connection_type);
366
367 std::map<std::string, t_connection_type> server_type_map;
369
370 bool init_server(uint32_t port, const std::string& address = "0.0.0.0",
371 uint32_t port_ipv6 = 0, const std::string& address_ipv6 = "::", bool use_ipv6 = false, bool require_ipv4 = true,
373 bool init_server(const std::string port, const std::string& address = "0.0.0.0",
374 const std::string port_ipv6 = "", const std::string address_ipv6 = "::", bool use_ipv6 = false, bool require_ipv4 = true,
376
378 bool run_server(size_t threads_count, bool wait = true, const boost::thread::attributes& attrs = boost::thread::attributes());
379
381 bool timed_wait_server_stop(uint64_t wait_mseconds);
382
385
388
391
398
399 bool is_stop_signal_sent() const noexcept { return m_stop_signal_sent; };
400
401 const std::atomic<bool>& get_stop_signal() const noexcept { return m_stop_signal_sent; }
402
403 void set_threads_prefix(const std::string& prefix_name);
404
405 bool deinit_server(){return true;}
406
408
411 void set_response_soft_limit(std::size_t limit);
412
414 {
415 default_remote = std::move(remote);
416 }
417
419 try_connect_result_t try_connect(connection_ptr new_connection_l, const std::string& adr, const std::string& port, boost::asio::ip::tcp::socket &sock_, const boost::asio::ip::tcp::endpoint &remote_endpoint, const std::string &bind_ip, uint32_t conn_timeout, epee::net_utils::ssl_support_t ssl_support);
420 bool connect(const std::string& adr, const std::string& port, uint32_t conn_timeot, t_connection_context& cn, const std::string& bind_ip = "0.0.0.0", epee::net_utils::ssl_support_t ssl_support = epee::net_utils::ssl_support_t::e_ssl_support_autodetect);
421 template<class t_callback>
422 bool connect_async(const std::string& adr, const std::string& port, uint32_t conn_timeot, const t_callback &cb, const std::string& bind_ip = "0.0.0.0", epee::net_utils::ssl_support_t ssl_support = epee::net_utils::ssl_support_t::e_ssl_support_autodetect, t_connection_context&& initial = t_connection_context{});
423
424 boost::asio::ssl::context& get_ssl_context() noexcept
425 {
426 assert(m_state != nullptr);
427 return m_state->ssl_context;
428 }
429
430 typename t_protocol_handler::config_type& get_config_object()
431 {
432 assert(m_state != nullptr); // always set in constructor
433 return *m_state;
434 }
435
436 std::shared_ptr<typename t_protocol_handler::config_type> get_config_shared()
437 {
438 assert(m_state != nullptr); // always set in constructor
439 return {m_state};
440 }
441
442 int get_binded_port(){return m_port;}
444
446 {
447 assert(m_state != nullptr); // always set in constructor
448 auto connections_count = m_state->sock_count > 0 ? (m_state->sock_count - 1) : 0; // Socket count minus listening socket
449 return connections_count;
450 }
451
452 boost::asio::io_context& get_io_context(){return io_context_;}
453
455 {
457
458 virtual bool call_handler(){return true;}
459
460 idle_callback_conext_base(boost::asio::io_context& io_serice):
461 m_timer(io_serice)
462 {}
463 boost::asio::deadline_timer m_timer;
464 };
465
466 template <class t_handler>
468 {
469 idle_callback_conext(boost::asio::io_context& io_serice, t_handler& h, uint64_t period):
470 idle_callback_conext_base(io_serice),
471 m_handler(h)
472 {this->m_period = period;}
473
474 t_handler m_handler;
475 virtual bool call_handler()
476 {
477 return m_handler();
478 }
480 };
481
482 template<class t_handler>
483 bool add_idle_handler(t_handler t_callback, uint64_t timeout_ms)
484 {
485 boost::shared_ptr<idle_callback_conext<t_handler>> ptr(new idle_callback_conext<t_handler>(io_context_, t_callback, timeout_ms));
486 //needed call handler here ?...
487 ptr->m_timer.expires_from_now(boost::posix_time::milliseconds(ptr->m_period));
488 ptr->m_timer.async_wait(boost::bind(&boosted_tcp_server<t_protocol_handler>::global_timer_handler<t_handler>, this, ptr));
489 return true;
490 }
491
492 template<class t_handler>
493 bool global_timer_handler(/*const boost::system::error_code& err, */boost::shared_ptr<idle_callback_conext<t_handler>> ptr)
494 {
495 //if handler return false - he don't want to be called anymore
496 if(!ptr->call_handler())
497 return true;
498 ptr->m_timer.expires_from_now(boost::posix_time::milliseconds(ptr->m_period));
499 ptr->m_timer.async_wait(boost::bind(&boosted_tcp_server<t_protocol_handler>::global_timer_handler<t_handler>, this, ptr));
500 return true;
501 }
502
503 template<class t_handler>
504 bool async_call(t_handler&& t_callback)
505 {
506 boost::asio::post(io_context_, std::forward<t_handler>(t_callback));
507 return true;
508 }
509
510 private:
514 void handle_accept_ipv4(const boost::system::error_code& e);
515 void handle_accept_ipv6(const boost::system::error_code& e);
516 void handle_accept(const boost::system::error_code& e, bool ipv6 = false);
517
519
520 const std::shared_ptr<typename connection<t_protocol_handler>::shared_state> m_state;
521
523 struct worker
524 {
526 : io_context(), work(io_context.get_executor())
527 {}
528
529 boost::asio::io_context io_context;
530 boost::asio::executor_work_guard<boost::asio::io_context::executor_type> work;
531 };
532 std::unique_ptr<worker> m_io_context_local_instance;
533 boost::asio::io_context& io_context_;
534
536 boost::asio::ip::tcp::acceptor acceptor_;
537 boost::asio::ip::tcp::acceptor acceptor_ipv6;
539
540 std::atomic<bool> m_stop_signal_sent;
543 std::string m_address;
544 std::string m_address_ipv6;
547 std::string m_thread_name_prefix; //TODO: change to enum server_type, now used
549 std::vector<boost::shared_ptr<boost::thread> > m_threads;
550 boost::thread::id m_main_thread_id;
552 std::atomic<uint32_t> m_thread_index;
553
555
559
560
561 boost::mutex connections_mutex;
562 std::set<connection_ptr> connections_;
563 }; // class <>boosted_tcp_server
564
565
566} // namespace
567} // namespace
568
570
571#endif
#define ABSTRACT_SERVER_SEND_QUE_MAX_BYTES_DEFAULT
Definition abstract_tcp_server2.h:68
the connection templated-class for one peer connection
Definition byte_slice.h:69
Definition syncobj.h:82
boost::asio::ip::tcp::acceptor acceptor_ipv6
Definition abstract_tcp_server2.h:537
boost::shared_ptr< connection< t_protocol_handler > > connection_ptr
Definition abstract_tcp_server2.h:358
bool async_call(t_handler &&t_callback)
Definition abstract_tcp_server2.h:504
void set_connection_limit(i_connection_limit *plimit)
Definition abstract_tcp_server2.inl:1494
void handle_accept_ipv6(const boost::system::error_code &e)
Definition abstract_tcp_server2.inl:1655
bool add_idle_handler(t_handler t_callback, uint64_t timeout_ms)
Definition abstract_tcp_server2.h:483
std::map< std::string, t_connection_type > server_type_map
Definition abstract_tcp_server2.h:367
void set_default_remote(epee::net_utils::network_address remote)
Definition abstract_tcp_server2.h:413
std::vector< boost::shared_ptr< boost::thread > > m_threads
Definition abstract_tcp_server2.h:549
boost::asio::ip::tcp::acceptor acceptor_
Definition abstract_tcp_server2.h:536
try_connect_result_t
Definition abstract_tcp_server2.h:351
~boosted_tcp_server()
Definition abstract_tcp_server2.inl:1303
bool connect(const std::string &adr, const std::string &port, uint32_t conn_timeot, t_connection_context &cn, const std::string &bind_ip="0.0.0.0", epee::net_utils::ssl_support_t ssl_support=epee::net_utils::ssl_support_t::e_ssl_support_autodetect)
Definition abstract_tcp_server2.inl:1855
bool timed_wait_server_stop(uint64_t wait_mseconds)
wait for service workers stop
Definition abstract_tcp_server2.inl:1579
bool is_stop_signal_sent() const noexcept
Definition abstract_tcp_server2.h:399
size_t get_threads_count()
Definition abstract_tcp_server2.h:407
boost::asio::io_context & get_io_context()
Definition abstract_tcp_server2.h:452
t_protocol_handler::connection_context t_connection_context
Definition abstract_tcp_server2.h:359
boosted_tcp_server(t_connection_type connection_type)
Definition abstract_tcp_server2.inl:1266
try_connect_result_t try_connect(connection_ptr new_connection_l, const std::string &adr, const std::string &port, boost::asio::ip::tcp::socket &sock_, const boost::asio::ip::tcp::endpoint &remote_endpoint, const std::string &bind_ip, uint32_t conn_timeout, epee::net_utils::ssl_support_t ssl_support)
Definition abstract_tcp_server2.inl:1757
void handle_accept_ipv4(const boost::system::error_code &e)
Handle completion of an asynchronous accept operation.
Definition abstract_tcp_server2.inl:1649
bool global_timer_handler(boost::shared_ptr< idle_callback_conext< t_handler > > ptr)
Definition abstract_tcp_server2.h:493
const std::atomic< bool > & get_stop_signal() const noexcept
Definition abstract_tcp_server2.h:401
bool worker_thread()
Run the server's io_context loop.
Definition abstract_tcp_server2.inl:1447
void create_server_type_map()
Definition abstract_tcp_server2.inl:1310
int get_binded_port_ipv6()
Definition abstract_tcp_server2.h:443
bool add_connection(t_connection_context &out, boost::asio::ip::tcp::socket &&sock, network_address real_remote, epee::net_utils::ssl_support_t ssl_support=epee::net_utils::ssl_support_t::e_ssl_support_autodetect)
Definition abstract_tcp_server2.inl:1737
t_protocol_handler::config_type & get_config_object()
Definition abstract_tcp_server2.h:430
void send_stop_signal()
Definition abstract_tcp_server2.inl:1638
bool mark_stop_signal_sent()
Mark the server as stopping without closing connections or stopping the io_context.
Definition abstract_tcp_server2.inl:1596
bool deinit_server()
Definition abstract_tcp_server2.h:405
void set_connection_filter(i_connection_filter *pfilter)
Definition abstract_tcp_server2.inl:1487
epee::net_utils::network_address default_remote
Definition abstract_tcp_server2.h:538
bool run_server(size_t threads_count, bool wait=true, const boost::thread::attributes &attrs=boost::thread::attributes())
Run the server's io_context loop.
Definition abstract_tcp_server2.inl:1508
void handle_accept(const boost::system::error_code &e, bool ipv6=false)
Definition abstract_tcp_server2.inl:1661
bool connect_async(const std::string &adr, const std::string &port, uint32_t conn_timeot, const t_callback &cb, const std::string &bind_ip="0.0.0.0", epee::net_utils::ssl_support_t ssl_support=epee::net_utils::ssl_support_t::e_ssl_support_autodetect, t_connection_context &&initial=t_connection_context{})
boost::asio::ssl::context & get_ssl_context() noexcept
Definition abstract_tcp_server2.h:424
void set_threads_prefix(const std::string &prefix_name)
Definition abstract_tcp_server2.inl:1477
std::shared_ptr< typename t_protocol_handler::config_type > get_config_shared()
Definition abstract_tcp_server2.h:436
bool init_server(uint32_t port, const std::string &address="0.0.0.0", uint32_t port_ipv6=0, const std::string &address_ipv6="::", bool use_ipv6=false, bool require_ipv4=true, ssl_options_t ssl_options=ssl_support_t::e_ssl_support_autodetect)
Definition abstract_tcp_server2.inl:1318
int get_binded_port()
Definition abstract_tcp_server2.h:442
long get_connections_count() const
Definition abstract_tcp_server2.h:445
void stop_io_context()
Stop the server io_context.
Definition abstract_tcp_server2.inl:1624
std::unique_ptr< worker > m_io_context_local_instance
Definition abstract_tcp_server2.h:532
boosted_tcp_server(boost::asio::io_context &external_io_context, t_connection_type connection_type)
Definition abstract_tcp_server2.inl:1285
void set_response_soft_limit(std::size_t limit)
Definition abstract_tcp_server2.inl:1501
bool init_server(const std::string port, const std::string &address="0.0.0.0", const std::string port_ipv6="", const std::string address_ipv6="::", bool use_ipv6=false, bool require_ipv4=true, ssl_options_t ssl_options=ssl_support_t::e_ssl_support_autodetect)
Definition abstract_tcp_server2.inl:1427
std::set< connection_ptr > connections_
Definition abstract_tcp_server2.h:562
bool is_thread_worker()
Definition abstract_tcp_server2.inl:1563
const std::shared_ptr< typename connection< epee::levin::async_protocol_handler< p2p_connection_context > >::shared_state > m_state
Definition abstract_tcp_server2.h:520
void close_server_connections()
Close boosted_tcp_server-owned connections, including ones not yet registered with the protocol handl...
Definition abstract_tcp_server2.inl:1609
connection_basic_shared_state()
Definition connection_basic.hpp:70
connection_basic(boost::asio::io_context &context, boost::asio::ip::tcp::socket &&sock, std::shared_ptr< connection_basic_shared_state > state, ssl_support_t ssl_support)
Definition connection_basic.cpp:124
void setRpcStation()
Definition abstract_tcp_server2.inl:1259
virtual bool call_run_once_service_io()
Definition abstract_tcp_server2.inl:1195
boost::asio::ip::tcp::socket socket_t
Definition abstract_tcp_server2.h:122
io_context_t & m_io_context
Definition abstract_tcp_server2.h:262
void terminate()
Definition abstract_tcp_server2.inl:748
io_context_t::strand strand_t
Definition abstract_tcp_server2.h:121
virtual bool send_done()
Definition abstract_tcp_server2.inl:1151
void start_timer(duration_t duration, bool add={})
Definition abstract_tcp_server2.inl:145
t_protocol_handler::connection_context t_connection_context
Definition abstract_tcp_server2.h:102
status_t get_status() const noexcept
Definition abstract_tcp_server2.h:325
void cancel_handler()
Definition abstract_tcp_server2.inl:672
boost::asio::io_context io_context_t
Definition abstract_tcp_server2.h:120
void async_wait_timer()
Definition abstract_tcp_server2.inl:169
bool m_local
Definition abstract_tcp_server2.h:268
void start_write()
Definition abstract_tcp_server2.inl:473
test_levin_protocol_handler m_handler
Definition abstract_tcp_server2.h:271
void start_read()
Definition abstract_tcp_server2.inl:306
void interrupt()
Definition abstract_tcp_server2.inl:689
connection(io_context_t &io_context, std::shared_ptr< shared_state > state, t_connection_type connection_type, epee::net_utils::ssl_support_t ssl_support, t_connection_context &&initial=t_connection_context{})
Construct a connection with the given io_context.
Definition abstract_tcp_server2.inl:1038
void on_terminating()
Definition abstract_tcp_server2.inl:763
epee::net_utils::network_throttle_manager network_throttle_manager_t
Definition abstract_tcp_server2.h:125
connection< t_protocol_handler > connection_t
Definition abstract_tcp_server2.h:112
virtual bool do_send(byte_slice message)
(see do_send from i_service_endpoint)
Definition abstract_tcp_server2.inl:1145
bool send(epee::byte_slice message)
Definition abstract_tcp_server2.inl:818
virtual bool release()
Definition abstract_tcp_server2.inl:1249
virtual bool request_callback()
Definition abstract_tcp_server2.inl:1209
bool speed_limit_is_enabled() const
tells us should we be sleeping here (e.g. do not sleep on RPC connections)
Definition abstract_tcp_server2.inl:1133
boost::shared_ptr< connection_t > connection_ptr
Definition abstract_tcp_server2.h:113
void on_interrupted()
Definition abstract_tcp_server2.inl:702
std::string m_host
Definition abstract_tcp_server2.h:269
void start_handshake()
Definition abstract_tcp_server2.inl:210
virtual io_context_t & get_io_context()
Definition abstract_tcp_server2.inl:1231
timers_t m_timers
Definition abstract_tcp_server2.h:266
epee::net_utils::network_throttle network_throttle_t
Definition abstract_tcp_server2.h:124
boost::asio::steady_timer timer_t
Definition abstract_tcp_server2.h:115
bool start_internal(bool is_income, bool is_multithreaded, boost::optional< network_address > real_remote)
Definition abstract_tcp_server2.inl:933
void get_context(t_connection_context &context_)
Definition abstract_tcp_server2.h:314
status_t
Definition abstract_tcp_server2.h:104
@ RUNNING
Definition abstract_tcp_server2.h:106
@ INTERRUPTED
Definition abstract_tcp_server2.h:107
@ TERMINATING
Definition abstract_tcp_server2.h:108
@ WASTED
Definition abstract_tcp_server2.h:109
@ TERMINATED
Definition abstract_tcp_server2.h:105
void terminate_async()
Definition abstract_tcp_server2.inl:807
boost::asio::ssl::stream_base::handshake_type handshake_t
Definition abstract_tcp_server2.h:118
duration_t get_timeout_from_bytes_read(size_t bytes) const
Definition abstract_tcp_server2.inl:116
virtual ~connection() noexcept(false)
Definition abstract_tcp_server2.inl:1076
connection(io_context_t &io_context, boost::asio::ip::tcp::socket &&sock, std::shared_ptr< shared_state > state, t_connection_type connection_type, epee::net_utils::ssl_support_t ssl_support, t_connection_context &&initial=t_connection_context{})
Definition abstract_tcp_server2.inl:1057
void cancel_timer()
Definition abstract_tcp_server2.inl:200
void handle_read(size_t bytes_transferred)
Definition abstract_tcp_server2.inl:414
bool cancel(bool wait_for_shutdown=false)
Definition abstract_tcp_server2.inl:1139
void state_status_check()
Definition abstract_tcp_server2.inl:126
state_t m_state
Definition abstract_tcp_server2.h:270
strand_t m_strand
Definition abstract_tcp_server2.h:265
void start_shutdown()
Definition abstract_tcp_server2.inl:604
epee::net_utils::ssl_support_t ssl_support_t
Definition abstract_tcp_server2.h:114
void cancel_socket()
Definition abstract_tcp_server2.inl:646
t_connection_context m_conn_context
Definition abstract_tcp_server2.h:264
virtual bool close(const bool wait_for_shutdown)
Definition abstract_tcp_server2.inl:1157
void save_dbg_log()
Definition abstract_tcp_server2.inl:1108
virtual bool add_ref()
Definition abstract_tcp_server2.inl:1237
unsigned int host_count(int delta=0)
Definition abstract_tcp_server2.inl:82
bool start(bool is_income, bool is_multithreaded)
timer_t::duration duration_t
Definition abstract_tcp_server2.h:116
t_connection_type m_connection_type
Definition abstract_tcp_server2.h:263
connection_ptr self
Definition abstract_tcp_server2.h:267
duration_t get_default_timeout()
Definition abstract_tcp_server2.inl:99
boost::system::error_code ec_t
Definition abstract_tcp_server2.h:117
Definition net_utils_base.h:229
Definition network_throttle.hpp:98
Definition network_throttle-detail.hpp:48
Definition net_ssl.h:78
base for connection, contains e.g. the ratelimit hooks
#define false
t_connection_type
Definition connection_basic.hpp:93
ssl_support_t
Definition net_ssl.h:50
@ e_ssl_support_autodetect
Definition net_ssl.h:53
TODO: (mj-xmr) This will be reduced in an another PR.
Definition byte_slice.h:40
implementaion for throttling of connection (count and rate-limit speed etc)
unsigned int uint32_t
Definition stdint.h:126
unsigned __int64 uint64_t
Definition stdint.h:136
idle_callback_conext_base(boost::asio::io_context &io_serice)
Definition abstract_tcp_server2.h:460
virtual ~idle_callback_conext_base()
Definition abstract_tcp_server2.h:456
boost::asio::deadline_timer m_timer
Definition abstract_tcp_server2.h:463
virtual bool call_handler()
Definition abstract_tcp_server2.h:458
t_handler m_handler
Definition abstract_tcp_server2.h:474
idle_callback_conext(boost::asio::io_context &io_serice, t_handler &h, uint64_t period)
Definition abstract_tcp_server2.h:469
uint64_t m_period
Definition abstract_tcp_server2.h:479
virtual bool call_handler()
Definition abstract_tcp_server2.h:475
worker()
Definition abstract_tcp_server2.h:525
boost::asio::io_context io_context
Definition abstract_tcp_server2.h:529
boost::asio::executor_work_guard< boost::asio::io_context::executor_type > work
Definition abstract_tcp_server2.h:530
i_connection_filter * pfilter
Definition abstract_tcp_server2.h:284
bool stop_signal_sent
Definition abstract_tcp_server2.h:287
i_connection_limit * plimit
Definition abstract_tcp_server2.h:285
shared_state()
Definition abstract_tcp_server2.h:275
std::size_t response_soft_limit
Definition abstract_tcp_server2.h:286
Definition abstract_tcp_server2.h:170
Definition abstract_tcp_server2.h:223
size_t wait_callback
Definition abstract_tcp_server2.h:230
bool released
Definition abstract_tcp_server2.h:225
bool wait_release
Definition abstract_tcp_server2.h:228
bool initialized
Definition abstract_tcp_server2.h:226
size_t reference_counter
Definition abstract_tcp_server2.h:224
bool wait_init
Definition abstract_tcp_server2.h:229
Definition abstract_tcp_server2.h:188
bool cancel_read
Definition abstract_tcp_server2.h:196
bool handle_read
Definition abstract_tcp_server2.h:195
bool cancel_handshake
Definition abstract_tcp_server2.h:192
bool shutdown_read
Definition abstract_tcp_server2.h:197
bool cancel_write
Definition abstract_tcp_server2.h:201
bool connected
Definition abstract_tcp_server2.h:189
bool wait_read
Definition abstract_tcp_server2.h:194
bool wait_write
Definition abstract_tcp_server2.h:199
bool wait_handshake
Definition abstract_tcp_server2.h:191
bool wait_shutdown
Definition abstract_tcp_server2.h:203
bool cancel_shutdown
Definition abstract_tcp_server2.h:204
bool handle_write
Definition abstract_tcp_server2.h:200
Definition abstract_tcp_server2.h:181
bool forced
Definition abstract_tcp_server2.h:183
bool enabled
Definition abstract_tcp_server2.h:182
bool detected
Definition abstract_tcp_server2.h:184
bool handshaked
Definition abstract_tcp_server2.h:185
Definition abstract_tcp_server2.h:161
Definition abstract_tcp_server2.h:207
bool reset_expire
Definition abstract_tcp_server2.h:210
bool cancel_expire
Definition abstract_tcp_server2.h:209
bool wait_expire
Definition abstract_tcp_server2.h:208
timer_status_t in
Definition abstract_tcp_server2.h:215
timer_status_t out
Definition abstract_tcp_server2.h:216
Definition abstract_tcp_server2.h:213
throttle_t throttle
Definition abstract_tcp_server2.h:220
timer_status_t general
Definition abstract_tcp_server2.h:219
Definition abstract_tcp_server2.h:160
socket_status_t socket
Definition abstract_tcp_server2.h:236
std::condition_variable_any condition
Definition abstract_tcp_server2.h:234
std::mutex lock
Definition abstract_tcp_server2.h:233
data_t data
Definition abstract_tcp_server2.h:241
status_t status
Definition abstract_tcp_server2.h:235
timers_status_t timers
Definition abstract_tcp_server2.h:238
protocol_t protocol
Definition abstract_tcp_server2.h:239
ssl_t ssl
Definition abstract_tcp_server2.h:237
stat_t stat
Definition abstract_tcp_server2.h:240
Definition abstract_tcp_server2.h:249
throttle_t(io_context_t &io_context)
Definition abstract_tcp_server2.h:250
timer_t in
Definition abstract_tcp_server2.h:254
timer_t out
Definition abstract_tcp_server2.h:255
timer_t general
Definition abstract_tcp_server2.h:258
timers_t(io_context_t &io_context)
Definition abstract_tcp_server2.h:245
throttle_t throttle
Definition abstract_tcp_server2.h:259
Definition abstract_tcp_server2.h:76
virtual ~i_connection_filter()
Definition abstract_tcp_server2.h:79
virtual bool is_remote_host_allowed(const epee::net_utils::network_address &address, time_t *t=NULL)=0
Definition abstract_tcp_server2.h:83
virtual ~i_connection_limit()
Definition abstract_tcp_server2.h:86
virtual bool is_host_limit(const epee::net_utils::network_address &address)=0
Definition net_utils_base.h:446
Definition blake256.h:36