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/ssl.hpp>
51#include <boost/asio/strand.hpp>
52#include <boost/asio/steady_timer.hpp>
53#include <boost/array.hpp>
54#include <boost/enable_shared_from_this.hpp>
55#include <boost/thread/thread.hpp>
56#include <boost/optional.hpp>
57#include "byte_slice.h"
58#include "net_utils_base.h"
59#include "syncobj.h"
60#include "connection_basic.hpp"
62
63#undef MONERO_DEFAULT_LOG_CATEGORY
64#define MONERO_DEFAULT_LOG_CATEGORY "net"
65
66#define ABSTRACT_SERVER_SEND_QUE_MAX_COUNT 1000
67
68namespace epee
69{
70namespace net_utils
71{
72
74 {
75 virtual bool is_remote_host_allowed(const epee::net_utils::network_address &address, time_t *t = NULL)=0;
76 protected:
78 };
79
80
81 /************************************************************************/
82 /* */
83 /************************************************************************/
85 template<class t_protocol_handler>
87 : public boost::enable_shared_from_this<connection<t_protocol_handler> >,
88 private boost::noncopyable,
89 public i_service_endpoint,
90 public connection_basic
91 {
92 public:
93 typedef typename t_protocol_handler::connection_context t_connection_context;
94 private:
96 using connection_ptr = boost::shared_ptr<connection_t>;
98 using timer_t = boost::asio::steady_timer;
99 using duration_t = timer_t::duration;
100 using ec_t = boost::system::error_code;
101 using handshake_t = boost::asio::ssl::stream_base::handshake_type;
102
103 using io_context_t = boost::asio::io_service;
104 using strand_t = boost::asio::io_service::strand;
105 using socket_t = boost::asio::ip::tcp::socket;
106
109
110 unsigned int host_count(int delta = 0);
112 duration_t get_timeout_from_bytes_read(size_t bytes) const;
113
114 void state_status_check();
115
116 void start_timer(duration_t duration, bool add = {});
117 void async_wait_timer();
118 void cancel_timer();
119
120 void start_handshake();
121 void start_read();
122 void start_write();
123 void start_shutdown();
124 void cancel_socket();
125
126 void cancel_handler();
127
128 void interrupt();
129 void on_interrupted();
130
131 void terminate();
132 void on_terminating();
133
134 bool send(epee::byte_slice message);
135 bool start_internal(
136 bool is_income,
137 bool is_multithreaded,
138 boost::optional<network_address> real_remote
139 );
140
141 enum status_t {
147 };
148
149 struct state_t {
150 struct stat_t {
151 struct {
152 network_throttle_t throttle{"speed_in", "throttle_speed_in"};
153 } in;
154 struct {
155 network_throttle_t throttle{"speed_out", "throttle_speed_out"};
156 } out;
157 };
158
159 struct data_t {
160 struct {
161 std::array<uint8_t, 0x2000> buffer;
162 } read;
163 struct {
164 std::deque<epee::byte_slice> queue;
166 } write;
167 };
168
169 struct ssl_t {
171 bool forced;
174 };
175
178
181
185
189
192 };
193
198 };
199
201 struct throttle_t {
204 };
205
208 };
209
210 struct protocol_t {
214
218 };
219
220 std::mutex lock;
221 std::condition_variable_any condition;
229 };
230
231 struct timers_t {
232 timers_t(io_context_t &io_context):
233 general(io_context),
234 throttle(io_context)
235 {}
236 struct throttle_t {
238 in(io_context),
239 out(io_context)
240 {}
243 };
244
247 };
248
255 bool m_local{};
256 std::string m_host{};
258 t_protocol_handler m_handler;
259 public:
260 struct shared_state : connection_basic_shared_state, t_protocol_handler::config_type
261 {
263 : connection_basic_shared_state(), t_protocol_handler::config_type(), pfilter(nullptr), stop_signal_sent(false)
264 {}
265
268 };
269
271 explicit connection( boost::asio::io_service& io_service,
272 std::shared_ptr<shared_state> state,
273 t_connection_type connection_type,
275
276 explicit connection( boost::asio::ip::tcp::socket&& sock,
277 std::shared_ptr<shared_state> state,
278 t_connection_type connection_type,
280
281
282
283 virtual ~connection() noexcept(false);
284
286 bool start(bool is_income, bool is_multithreaded);
287
288 // `real_remote` is the actual endpoint (if connection is to proxy, etc.)
289 bool start(bool is_income, bool is_multithreaded, network_address real_remote);
290
292
294
295 void save_dbg_log();
296
297
298 bool speed_limit_is_enabled() const;
299
300 bool cancel();
301
302 private:
303 //----------------- i_service_endpoint ---------------------
304 virtual bool do_send(byte_slice message);
305 virtual bool send_done();
306 virtual bool close();
307 virtual bool call_run_once_service_io();
308 virtual bool request_callback();
309 virtual boost::asio::io_service& get_io_service();
310 virtual bool add_ref();
311 virtual bool release();
312 //------------------------------------------------------
313 public:
314 void setRpcStation();
315 };
316
317
318 /************************************************************************/
319 /* */
320 /************************************************************************/
321 template<class t_protocol_handler>
323 : private boost::noncopyable
324 {
326 {
330 };
331
332 public:
333 typedef boost::shared_ptr<connection<t_protocol_handler> > connection_ptr;
334 typedef typename t_protocol_handler::connection_context t_connection_context;
337
338 boosted_tcp_server(t_connection_type connection_type);
339 explicit boosted_tcp_server(boost::asio::io_service& external_io_service, t_connection_type connection_type);
341
342 std::map<std::string, t_connection_type> server_type_map;
344
345 bool init_server(uint32_t port, const std::string& address = "0.0.0.0",
346 uint32_t port_ipv6 = 0, const std::string& address_ipv6 = "::", bool use_ipv6 = false, bool require_ipv4 = true,
348 bool init_server(const std::string port, const std::string& address = "0.0.0.0",
349 const std::string port_ipv6 = "", const std::string address_ipv6 = "::", bool use_ipv6 = false, bool require_ipv4 = true,
351
353 bool run_server(size_t threads_count, bool wait = true, const boost::thread::attributes& attrs = boost::thread::attributes());
354
356 bool timed_wait_server_stop(uint64_t wait_mseconds);
357
359 void send_stop_signal();
360
361 bool is_stop_signal_sent() const noexcept { return m_stop_signal_sent; };
362
363 const std::atomic<bool>& get_stop_signal() const noexcept { return m_stop_signal_sent; }
364
365 void set_threads_prefix(const std::string& prefix_name);
366
367 bool deinit_server(){return true;}
368
370
372
374 {
375 default_remote = std::move(remote);
376 }
377
379 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);
380 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);
381 template<class t_callback>
382 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);
383
384 boost::asio::ssl::context& get_ssl_context() noexcept
385 {
386 assert(m_state != nullptr);
387 return m_state->ssl_context;
388 }
389
390 typename t_protocol_handler::config_type& get_config_object()
391 {
392 assert(m_state != nullptr); // always set in constructor
393 return *m_state;
394 }
395
396 std::shared_ptr<typename t_protocol_handler::config_type> get_config_shared()
397 {
398 assert(m_state != nullptr); // always set in constructor
399 return {m_state};
400 }
401
402 int get_binded_port(){return m_port;}
404
406 {
407 assert(m_state != nullptr); // always set in constructor
408 auto connections_count = m_state->sock_count > 0 ? (m_state->sock_count - 1) : 0; // Socket count minus listening socket
409 return connections_count;
410 }
411
412 boost::asio::io_service& get_io_service(){return io_service_;}
413
415 {
417
418 virtual bool call_handler(){return true;}
419
420 idle_callback_conext_base(boost::asio::io_service& io_serice):
421 m_timer(io_serice)
422 {}
423 boost::asio::deadline_timer m_timer;
424 };
425
426 template <class t_handler>
428 {
429 idle_callback_conext(boost::asio::io_service& io_serice, t_handler& h, uint64_t period):
430 idle_callback_conext_base(io_serice),
431 m_handler(h)
432 {this->m_period = period;}
433
434 t_handler m_handler;
435 virtual bool call_handler()
436 {
437 return m_handler();
438 }
440 };
441
442 template<class t_handler>
443 bool add_idle_handler(t_handler t_callback, uint64_t timeout_ms)
444 {
445 boost::shared_ptr<idle_callback_conext<t_handler>> ptr(new idle_callback_conext<t_handler>(io_service_, t_callback, timeout_ms));
446 //needed call handler here ?...
447 ptr->m_timer.expires_from_now(boost::posix_time::milliseconds(ptr->m_period));
448 ptr->m_timer.async_wait(boost::bind(&boosted_tcp_server<t_protocol_handler>::global_timer_handler<t_handler>, this, ptr));
449 return true;
450 }
451
452 template<class t_handler>
453 bool global_timer_handler(/*const boost::system::error_code& err, */boost::shared_ptr<idle_callback_conext<t_handler>> ptr)
454 {
455 //if handler return false - he don't want to be called anymore
456 if(!ptr->call_handler())
457 return true;
458 ptr->m_timer.expires_from_now(boost::posix_time::milliseconds(ptr->m_period));
459 ptr->m_timer.async_wait(boost::bind(&boosted_tcp_server<t_protocol_handler>::global_timer_handler<t_handler>, this, ptr));
460 return true;
461 }
462
463 template<class t_handler>
464 bool async_call(t_handler t_callback)
465 {
466 io_service_.post(t_callback);
467 return true;
468 }
469
470 private:
472 bool worker_thread();
474 void handle_accept_ipv4(const boost::system::error_code& e);
475 void handle_accept_ipv6(const boost::system::error_code& e);
476 void handle_accept(const boost::system::error_code& e, bool ipv6 = false);
477
478 bool is_thread_worker();
479
480 const std::shared_ptr<typename connection<t_protocol_handler>::shared_state> m_state;
481
483 struct worker
484 {
487 {}
488
489 boost::asio::io_service io_service;
490 boost::asio::io_service::work work;
491 };
492 std::unique_ptr<worker> m_io_service_local_instance;
493 boost::asio::io_service& io_service_;
494
496 boost::asio::ip::tcp::acceptor acceptor_;
497 boost::asio::ip::tcp::acceptor acceptor_ipv6;
499
500 std::atomic<bool> m_stop_signal_sent;
503 std::string m_address;
504 std::string m_address_ipv6;
507 std::string m_thread_name_prefix; //TODO: change to enum server_type, now used
509 std::vector<boost::shared_ptr<boost::thread> > m_threads;
510 boost::thread::id m_main_thread_id;
512 std::atomic<uint32_t> m_thread_index;
513
515
519
520
521 boost::mutex connections_mutex;
522 std::set<connection_ptr> connections_;
523 }; // class <>boosted_tcp_server
524
525
526} // namespace
527} // namespace
528
530
531#endif
the connection templated-class for one peer connection
static uint64_t h
Definition: blockchain_stats.cpp:55
Definition: byte_slice.h:69
Definition: syncobj.h:82
Definition: abstract_tcp_server2.h:324
boost::asio::ip::tcp::acceptor acceptor_ipv6
Definition: abstract_tcp_server2.h:497
boost::shared_ptr< connection< t_protocol_handler > > connection_ptr
Definition: abstract_tcp_server2.h:333
uint32_t m_port
Definition: abstract_tcp_server2.h:501
size_t m_threads_count
Definition: abstract_tcp_server2.h:508
void handle_accept_ipv6(const boost::system::error_code &e)
Definition: abstract_tcp_server2.inl:1467
bool add_idle_handler(t_handler t_callback, uint64_t timeout_ms)
Definition: abstract_tcp_server2.h:443
bool m_require_ipv4
Definition: abstract_tcp_server2.h:506
std::map< std::string, t_connection_type > server_type_map
Definition: abstract_tcp_server2.h:342
void set_default_remote(epee::net_utils::network_address remote)
Definition: abstract_tcp_server2.h:373
std::vector< boost::shared_ptr< boost::thread > > m_threads
Definition: abstract_tcp_server2.h:509
boost::asio::ip::tcp::acceptor acceptor_
Acceptor used to listen for incoming connections.
Definition: abstract_tcp_server2.h:496
try_connect_result_t
Definition: abstract_tcp_server2.h:326
@ CONNECT_FAILURE
Definition: abstract_tcp_server2.h:328
@ CONNECT_NO_SSL
Definition: abstract_tcp_server2.h:329
@ CONNECT_SUCCESS
Definition: abstract_tcp_server2.h:327
std::atomic< bool > m_stop_signal_sent
Definition: abstract_tcp_server2.h:500
~boosted_tcp_server()
Definition: abstract_tcp_server2.inl:1169
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:1663
boost::asio::io_service & get_io_service()
Definition: abstract_tcp_server2.h:412
bool timed_wait_server_stop(uint64_t wait_mseconds)
wait for service workers stop
Definition: abstract_tcp_server2.inl:1426
bool is_stop_signal_sent() const noexcept
Definition: abstract_tcp_server2.h:361
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)
size_t get_threads_count()
Definition: abstract_tcp_server2.h:369
connection_ptr new_connection_
The next connection to be accepted.
Definition: abstract_tcp_server2.h:517
t_protocol_handler::connection_context t_connection_context
Definition: abstract_tcp_server2.h:334
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:1565
boost::mutex connections_mutex
Definition: abstract_tcp_server2.h:521
std::unique_ptr< worker > m_io_service_local_instance
Definition: abstract_tcp_server2.h:492
void handle_accept_ipv4(const boost::system::error_code &e)
Handle completion of an asynchronous accept operation.
Definition: abstract_tcp_server2.inl:1461
bool global_timer_handler(boost::shared_ptr< idle_callback_conext< t_handler > > ptr)
Definition: abstract_tcp_server2.h:453
connection_ptr new_connection_ipv6
Definition: abstract_tcp_server2.h:518
const std::atomic< bool > & get_stop_signal() const noexcept
Definition: abstract_tcp_server2.h:363
bool worker_thread()
Run the server's io_service loop.
Definition: abstract_tcp_server2.inl:1308
void create_server_type_map()
Definition: abstract_tcp_server2.inl:1176
int get_binded_port_ipv6()
Definition: abstract_tcp_server2.h:403
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:1545
std::string m_address_ipv6
Definition: abstract_tcp_server2.h:504
t_protocol_handler::config_type & get_config_object()
Definition: abstract_tcp_server2.h:390
void send_stop_signal()
Stop the server.
Definition: abstract_tcp_server2.inl:1443
critical_section m_threads_lock
Definition: abstract_tcp_server2.h:511
bool deinit_server()
Definition: abstract_tcp_server2.h:367
void set_connection_filter(i_connection_filter *pfilter)
Definition: abstract_tcp_server2.inl:1348
t_connection_type m_connection_type
Definition: abstract_tcp_server2.h:514
std::string m_address
Definition: abstract_tcp_server2.h:503
std::string m_thread_name_prefix
Definition: abstract_tcp_server2.h:507
bool async_call(t_handler t_callback)
Definition: abstract_tcp_server2.h:464
epee::net_utils::network_address default_remote
Definition: abstract_tcp_server2.h:498
bool run_server(size_t threads_count, bool wait=true, const boost::thread::attributes &attrs=boost::thread::attributes())
Run the server's io_service loop.
Definition: abstract_tcp_server2.inl:1355
void handle_accept(const boost::system::error_code &e, bool ipv6=false)
Definition: abstract_tcp_server2.inl:1473
boost::asio::ssl::context & get_ssl_context() noexcept
Definition: abstract_tcp_server2.h:384
void set_threads_prefix(const std::string &prefix_name)
Definition: abstract_tcp_server2.inl:1338
std::shared_ptr< typename t_protocol_handler::config_type > get_config_shared()
Definition: abstract_tcp_server2.h:396
boost::asio::io_service & io_service_
Definition: abstract_tcp_server2.h:493
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:1184
int get_binded_port()
Definition: abstract_tcp_server2.h:402
long get_connections_count() const
Definition: abstract_tcp_server2.h:405
uint32_t m_port_ipv6
Definition: abstract_tcp_server2.h:502
bool m_use_ipv6
Definition: abstract_tcp_server2.h:505
boost::thread::id m_main_thread_id
Definition: abstract_tcp_server2.h:510
std::set< connection_ptr > connections_
Definition: abstract_tcp_server2.h:522
bool is_thread_worker()
Definition: abstract_tcp_server2.inl:1410
const std::shared_ptr< typename connection< t_protocol_handler >::shared_state > m_state
Definition: abstract_tcp_server2.h:480
std::atomic< uint32_t > m_thread_index
Definition: abstract_tcp_server2.h:512
Definition: connection_basic.hpp:63
Definition: connection_basic.hpp:101
Represents a single connection from a client.
Definition: abstract_tcp_server2.h:91
void setRpcStation()
Definition: abstract_tcp_server2.inl:1125
virtual bool call_run_once_service_io()
Definition: abstract_tcp_server2.inl:1060
boost::asio::ip::tcp::socket socket_t
Definition: abstract_tcp_server2.h:105
io_context_t & m_io_context
Definition: abstract_tcp_server2.h:249
void terminate()
Definition: abstract_tcp_server2.inl:706
virtual bool send_done()
Definition: abstract_tcp_server2.inl:1044
void start_timer(duration_t duration, bool add={})
Definition: abstract_tcp_server2.inl:143
t_protocol_handler::connection_context t_connection_context
Definition: abstract_tcp_server2.h:93
void cancel_handler()
Definition: abstract_tcp_server2.inl:632
void async_wait_timer()
Definition: abstract_tcp_server2.inl:171
bool m_local
Definition: abstract_tcp_server2.h:255
void start_write()
Definition: abstract_tcp_server2.inl:448
t_protocol_handler m_handler
Definition: abstract_tcp_server2.h:258
void start_read()
Definition: abstract_tcp_server2.inl:323
void interrupt()
Definition: abstract_tcp_server2.inl:649
void on_terminating()
Definition: abstract_tcp_server2.inl:721
virtual boost::asio::io_service & get_io_service()
Definition: abstract_tcp_server2.inl:1094
virtual bool do_send(byte_slice message)
(see do_send from i_service_endpoint)
Definition: abstract_tcp_server2.inl:1038
bool send(epee::byte_slice message)
Definition: abstract_tcp_server2.inl:759
virtual bool release()
Definition: abstract_tcp_server2.inl:1115
virtual bool request_callback()
Definition: abstract_tcp_server2.inl:1074
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:1026
boost::shared_ptr< connection_t > connection_ptr
Definition: abstract_tcp_server2.h:96
void on_interrupted()
Definition: abstract_tcp_server2.inl:662
std::string m_host
Definition: abstract_tcp_server2.h:256
void start_handshake()
Definition: abstract_tcp_server2.inl:210
timers_t m_timers
Definition: abstract_tcp_server2.h:253
boost::asio::io_service::strand strand_t
Definition: abstract_tcp_server2.h:104
boost::asio::steady_timer timer_t
Definition: abstract_tcp_server2.h:98
bool start_internal(bool is_income, bool is_multithreaded, boost::optional< network_address > real_remote)
Definition: abstract_tcp_server2.inl:841
void get_context(t_connection_context &context_)
Definition: abstract_tcp_server2.h:291
status_t
Definition: abstract_tcp_server2.h:141
@ RUNNING
Definition: abstract_tcp_server2.h:143
@ INTERRUPTED
Definition: abstract_tcp_server2.h:144
@ TERMINATING
Definition: abstract_tcp_server2.h:145
@ WASTED
Definition: abstract_tcp_server2.h:146
@ TERMINATED
Definition: abstract_tcp_server2.h:142
boost::asio::ssl::stream_base::handshake_type handshake_t
Definition: abstract_tcp_server2.h:101
duration_t get_timeout_from_bytes_read(size_t bytes) const
Definition: abstract_tcp_server2.inl:114
virtual ~connection() noexcept(false)
Definition: abstract_tcp_server2.inl:969
boost::asio::io_service io_context_t
Definition: abstract_tcp_server2.h:103
void cancel_timer()
Definition: abstract_tcp_server2.inl:199
void state_status_check()
Definition: abstract_tcp_server2.inl:124
state_t m_state
Definition: abstract_tcp_server2.h:257
strand_t m_strand
Definition: abstract_tcp_server2.h:252
void start_shutdown()
Definition: abstract_tcp_server2.inl:560
void cancel_socket()
Definition: abstract_tcp_server2.inl:604
t_connection_context m_conn_context
Definition: abstract_tcp_server2.h:251
void save_dbg_log()
Definition: abstract_tcp_server2.inl:1001
virtual bool add_ref()
Definition: abstract_tcp_server2.inl:1100
unsigned int host_count(int delta=0)
Definition: abstract_tcp_server2.inl:80
timer_t::duration duration_t
Definition: abstract_tcp_server2.h:99
bool cancel()
Definition: abstract_tcp_server2.inl:1032
t_connection_type m_connection_type
Definition: abstract_tcp_server2.h:250
connection_ptr self
Definition: abstract_tcp_server2.h:254
virtual bool close()
Definition: abstract_tcp_server2.inl:1050
duration_t get_default_timeout()
Definition: abstract_tcp_server2.inl:97
boost::system::error_code ec_t
Definition: abstract_tcp_server2.h:100
Definition: net_utils_base.h:223
Definition: network_throttle.hpp:98
Definition: network_throttle-detail.hpp:48
Definition: net_ssl.h:76
base for connection, contains e.g. the ratelimit hooks
conn start()
boost::asio::io_service io_service
Definition: levin.cpp:303
#define const
Definition: ipfrdr.c:80
uint32_t address
Definition: getifaddr.c:269
t_connection_type
Definition: connection_basic.hpp:93
ssl_support_t
Definition: net_ssl.h:48
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)
boost::endian::big_uint16_t port
Definition: socks.cpp:59
#define false
Definition: stdbool.h:37
unsigned int uint32_t
Definition: stdint.h:126
unsigned __int64 uint64_t
Definition: stdint.h:136
virtual ~idle_callback_conext_base()
Definition: abstract_tcp_server2.h:416
boost::asio::deadline_timer m_timer
Definition: abstract_tcp_server2.h:423
idle_callback_conext_base(boost::asio::io_service &io_serice)
Definition: abstract_tcp_server2.h:420
virtual bool call_handler()
Definition: abstract_tcp_server2.h:418
Definition: abstract_tcp_server2.h:428
t_handler m_handler
Definition: abstract_tcp_server2.h:434
idle_callback_conext(boost::asio::io_service &io_serice, t_handler &h, uint64_t period)
Definition: abstract_tcp_server2.h:429
uint64_t m_period
Definition: abstract_tcp_server2.h:439
virtual bool call_handler()
Definition: abstract_tcp_server2.h:435
The io_service used to perform asynchronous operations.
Definition: abstract_tcp_server2.h:484
boost::asio::io_service::work work
Definition: abstract_tcp_server2.h:490
worker()
Definition: abstract_tcp_server2.h:485
boost::asio::io_service io_service
Definition: abstract_tcp_server2.h:489
Definition: abstract_tcp_server2.h:261
i_connection_filter * pfilter
Definition: abstract_tcp_server2.h:266
bool stop_signal_sent
Definition: abstract_tcp_server2.h:267
shared_state()
Definition: abstract_tcp_server2.h:262
Definition: abstract_tcp_server2.h:159
bool wait_consume
Definition: abstract_tcp_server2.h:165
std::array< uint8_t, 0x2000 > buffer
Definition: abstract_tcp_server2.h:161
std::deque< epee::byte_slice > queue
Definition: abstract_tcp_server2.h:164
Definition: abstract_tcp_server2.h:210
size_t wait_callback
Definition: abstract_tcp_server2.h:217
bool released
Definition: abstract_tcp_server2.h:212
bool wait_release
Definition: abstract_tcp_server2.h:215
bool initialized
Definition: abstract_tcp_server2.h:213
size_t reference_counter
Definition: abstract_tcp_server2.h:211
bool wait_init
Definition: abstract_tcp_server2.h:216
Definition: abstract_tcp_server2.h:176
bool cancel_read
Definition: abstract_tcp_server2.h:184
bool handle_read
Definition: abstract_tcp_server2.h:183
bool cancel_handshake
Definition: abstract_tcp_server2.h:180
bool cancel_write
Definition: abstract_tcp_server2.h:188
bool connected
Definition: abstract_tcp_server2.h:177
bool wait_read
Definition: abstract_tcp_server2.h:182
bool wait_write
Definition: abstract_tcp_server2.h:186
bool wait_handshake
Definition: abstract_tcp_server2.h:179
bool wait_shutdown
Definition: abstract_tcp_server2.h:190
bool cancel_shutdown
Definition: abstract_tcp_server2.h:191
bool handle_write
Definition: abstract_tcp_server2.h:187
Definition: abstract_tcp_server2.h:169
bool forced
Definition: abstract_tcp_server2.h:171
bool enabled
Definition: abstract_tcp_server2.h:170
bool detected
Definition: abstract_tcp_server2.h:172
bool handshaked
Definition: abstract_tcp_server2.h:173
Definition: abstract_tcp_server2.h:150
network_throttle_t throttle
Definition: abstract_tcp_server2.h:152
Definition: abstract_tcp_server2.h:194
bool reset_expire
Definition: abstract_tcp_server2.h:197
bool cancel_expire
Definition: abstract_tcp_server2.h:196
bool wait_expire
Definition: abstract_tcp_server2.h:195
timer_status_t in
Definition: abstract_tcp_server2.h:202
timer_status_t out
Definition: abstract_tcp_server2.h:203
Definition: abstract_tcp_server2.h:200
throttle_t throttle
Definition: abstract_tcp_server2.h:207
timer_status_t general
Definition: abstract_tcp_server2.h:206
Definition: abstract_tcp_server2.h:149
socket_status_t socket
Definition: abstract_tcp_server2.h:223
std::condition_variable_any condition
Definition: abstract_tcp_server2.h:221
std::mutex lock
Definition: abstract_tcp_server2.h:220
data_t data
Definition: abstract_tcp_server2.h:228
status_t status
Definition: abstract_tcp_server2.h:222
timers_status_t timers
Definition: abstract_tcp_server2.h:225
protocol_t protocol
Definition: abstract_tcp_server2.h:226
ssl_t ssl
Definition: abstract_tcp_server2.h:224
stat_t stat
Definition: abstract_tcp_server2.h:227
Definition: abstract_tcp_server2.h:236
throttle_t(io_context_t &io_context)
Definition: abstract_tcp_server2.h:237
timer_t in
Definition: abstract_tcp_server2.h:241
timer_t out
Definition: abstract_tcp_server2.h:242
Definition: abstract_tcp_server2.h:231
timer_t general
Definition: abstract_tcp_server2.h:245
timers_t(io_context_t &io_context)
Definition: abstract_tcp_server2.h:232
throttle_t throttle
Definition: abstract_tcp_server2.h:246
Definition: abstract_tcp_server2.h:74
virtual ~i_connection_filter()
Definition: abstract_tcp_server2.h:77
virtual bool is_remote_host_allowed(const epee::net_utils::network_address &address, time_t *t=NULL)=0
Definition: net_utils_base.h:440
Definition: blake256.h:36