29#ifndef _NET_UTILS_BASE_H_
30#define _NET_UTILS_BASE_H_
32#include <boost/uuid/uuid.hpp>
33#include <boost/asio/io_context.hpp>
34#include <boost/asio/ip/address_v6.hpp>
44#undef MONERO_DEFAULT_LOG_CATEGORY
45#define MONERO_DEFAULT_LOG_CATEGORY "net"
48#define MAKE_IP( a1, a2, a3, a4 ) (a1|(a2<<8)|(a3<<16)|(((uint32_t)a4)<<24))
53#if BOOST_VERSION >= 107000
54 #define MONERO_GET_EXECUTOR(type) type . get_executor()
56 #define MONERO_GET_EXECUTOR(type) type . get_io_context()
85 {
return ip() == other.ip(); }
89 std::string
str()
const;
113 {
return lhs.equal(rhs); }
115 {
return !lhs.equal(rhs); }
117 {
return lhs.less(rhs); }
119 {
return !rhs.less(lhs); }
121 {
return rhs.less(lhs); }
123 {
return !lhs.less(rhs); }
141 {
return subnet() == other.subnet(); }
145 std::string
str()
const;
160 {
return lhs.equal(rhs); }
162 {
return !lhs.equal(rhs); }
164 {
return lhs.less(rhs); }
166 {
return !rhs.less(lhs); }
168 {
return rhs.less(lhs); }
170 {
return !lhs.less(rhs); }
193 boost::asio::ip::address_v6
ip() const noexcept {
return m_address; }
195 std::string str()
const;
196 std::string host_str()
const;
197 bool is_loopback()
const;
198 bool is_local()
const;
216 {
return lhs.equal(rhs); }
218 {
return !lhs.equal(rhs); }
220 {
return lhs.less(rhs); }
222 {
return !rhs.less(lhs); }
224 {
return rhs.less(lhs); }
226 {
return !lhs.less(rhs); }
238 virtual std::string
str()
const = 0;
245 virtual std::uint16_t
port()
const = 0;
267 {
return value.is_same_host(
cast(other)); }
269 virtual std::string
str()
const override {
return value.str(); }
276 virtual std::uint16_t
port()
const override {
return value.port(); }
279 std::shared_ptr<interface>
self;
281 template<
typename Type>
285 using Type_ =
typename std::remove_const<Type>::type;
288 throw std::bad_cast{};
292 template<
typename T,
typename t_storage>
293 bool serialize_addr(std::false_type, t_storage& stg,
typename t_storage::hsection hparent)
298 *
this = std::move(addr);
302 template<
typename T,
typename t_storage>
303 bool serialize_addr(std::true_type, t_storage& stg,
typename t_storage::hsection hparent)
const
349 MERROR(
"Unsupported network address type: " << (
unsigned)
type);
355 {
return lhs.
equal(rhs); }
357 {
return !lhs.
equal(rhs); }
359 {
return lhs.
less(rhs); }
361 {
return !rhs.
less(lhs); }
363 {
return rhs.
less(lhs); }
365 {
return !lhs.
less(rhs); }
388 time_t last_recv = 0, time_t last_send = 0,
422 set_details(
a.m_connection_id,
a.m_remote_address,
a.m_is_income,
a.m_ssl);
427 set_details(
a.m_connection_id,
a.m_remote_address,
a.m_is_income,
a.m_ssl);
432 template<
class t_protocol_handler>
448 virtual bool close(
const bool wait_for_shutdown)=0;
464 std::string print_connection_context(
const connection_context_base& ctx);
465 std::string print_connection_context_short(
const connection_context_base& ctx);
473#define LOG_ERROR_CC(ct, message) MERROR(ct << message)
474#define LOG_WARNING_CC(ct, message) MWARNING(ct << message)
475#define LOG_INFO_CC(ct, message) MINFO(ct << message)
476#define LOG_DEBUG_CC(ct, message) MDEBUG(ct << message)
477#define LOG_TRACE_CC(ct, message) MTRACE(ct << message)
478#define LOG_CC(level, ct, message) MLOG(level, ct << message)
480#define LOG_PRINT_CC_L0(ct, message) LOG_PRINT_L0(ct << message)
481#define LOG_PRINT_CC_L1(ct, message) LOG_PRINT_L1(ct << message)
482#define LOG_PRINT_CC_L2(ct, message) LOG_PRINT_L2(ct << message)
483#define LOG_PRINT_CC_L3(ct, message) LOG_PRINT_L3(ct << message)
484#define LOG_PRINT_CC_L4(ct, message) LOG_PRINT_L4(ct << message)
486#define LOG_PRINT_CCONTEXT_L0(message) LOG_PRINT_CC_L0(context, message)
487#define LOG_PRINT_CCONTEXT_L1(message) LOG_PRINT_CC_L1(context, message)
488#define LOG_PRINT_CCONTEXT_L2(message) LOG_PRINT_CC_L2(context, message)
489#define LOG_PRINT_CCONTEXT_L3(message) LOG_PRINT_CC_L3(context, message)
490#define LOG_ERROR_CCONTEXT(message) LOG_ERROR_CC(context, message)
492#define CHECK_AND_ASSERT_MES_CC(condition, return_val, err_message) CHECK_AND_ASSERT_MES(condition, return_val, "[" << epee::net_utils::print_connection_context_short(context) << "]" << err_message)
Definition byte_slice.h:69
Definition net_utils_base.h:70
static constexpr zone get_zone() noexcept
Definition net_utils_base.h:94
bool is_loopback() const
Definition net_utils_base.cpp:34
constexpr bool is_same_host(const ipv4_network_address &other) const noexcept
Definition net_utils_base.h:84
bool less(const ipv4_network_address &other) const noexcept
Definition net_utils_base.cpp:27
static constexpr address_type get_type_id() noexcept
Definition net_utils_base.h:93
uint32_t m_ip
Definition net_utils_base.h:71
static constexpr bool is_blockable() noexcept
Definition net_utils_base.h:95
bool is_local() const
Definition net_utils_base.cpp:35
constexpr uint16_t port() const noexcept
Definition net_utils_base.h:88
uint16_t m_port
Definition net_utils_base.h:72
constexpr uint32_t ip() const noexcept
Definition net_utils_base.h:87
bool equal(const ipv4_network_address &other) const noexcept
Definition net_utils_base.cpp:24
if(is_store)
Definition net_utils_base.h:98
std::string host_str() const
Definition net_utils_base.cpp:33
constexpr ipv4_network_address(uint32_t ip, uint16_t port) noexcept
Definition net_utils_base.h:79
std::string str() const
Definition net_utils_base.cpp:30
constexpr ipv4_network_address() noexcept
Definition net_utils_base.h:75
Definition net_utils_base.h:126
bool is_loopback() const
Definition net_utils_base.cpp:89
constexpr ipv4_network_subnet() noexcept
Definition net_utils_base.h:131
bool equal(const ipv4_network_subnet &other) const noexcept
Definition net_utils_base.cpp:79
std::string str() const
Definition net_utils_base.cpp:85
constexpr ipv4_network_subnet(uint32_t ip, uint8_t mask) noexcept
Definition net_utils_base.h:135
static constexpr address_type get_type_id() noexcept
Definition net_utils_base.h:149
constexpr uint32_t subnet() const noexcept
Definition net_utils_base.h:144
static constexpr zone get_zone() noexcept
Definition net_utils_base.h:150
static constexpr bool is_blockable() noexcept
Definition net_utils_base.h:151
bool matches(const ipv4_network_address &address) const
Definition net_utils_base.cpp:91
bool is_local() const
Definition net_utils_base.cpp:90
uint8_t m_mask
Definition net_utils_base.h:128
uint32_t m_ip
Definition net_utils_base.h:127
std::string host_str() const
Definition net_utils_base.cpp:88
bool less(const ipv4_network_subnet &other) const noexcept
Definition net_utils_base.cpp:82
constexpr bool is_same_host(const ipv4_network_subnet &other) const noexcept
Definition net_utils_base.h:140
Definition net_utils_base.h:173
const_cast(this_ref.m_address)
static constexpr zone get_zone() noexcept
Definition net_utils_base.h:200
static constexpr address_type get_type_id() noexcept
Definition net_utils_base.h:199
ipv6_network_address(const boost::asio::ip::address_v6 &ip, uint16_t port)
Definition net_utils_base.h:183
boost::asio::ip::address_v6 m_address
Definition net_utils_base.h:175
uint16_t m_port
Definition net_utils_base.h:176
boost::asio::ip::address_v6::bytes_type bytes
Definition net_utils_base.h:205
ipv6_network_address()
Definition net_utils_base.h:179
bool is_same_host(const ipv6_network_address &other) const noexcept
Definition net_utils_base.h:190
uint16_t port() const noexcept
Definition net_utils_base.h:194
static constexpr bool is_blockable() noexcept
Definition net_utils_base.h:201
epee::serialization::selector(bytes, stg, hparent_section, "addr")
static const uint8_t ID
Definition net_utils_base.h:203
boost::asio::ip::address_v6 ip() const noexcept
Definition net_utils_base.h:193
Definition net_utils_base.h:229
bool is_loopback() const
Definition net_utils_base.h:318
bool equal(const network_address &other) const
Definition net_utils_base.cpp:97
std::shared_ptr< interface > self
Definition net_utils_base.h:279
std::uint8_t type
Definition net_utils_base.h:330
std::string str() const
Definition net_utils_base.h:316
MERROR("Unsupported network address type: "<<(unsigned) type)
network_address(const T &src)
Definition net_utils_base.h:311
address_type get_type_id() const
Definition net_utils_base.h:320
bool less(const network_address &other) const
Definition net_utils_base.cpp:108
bool serialize_addr(std::true_type, t_storage &stg, typename t_storage::hsection hparent) const
Definition net_utils_base.h:303
network_address()
Definition net_utils_base.h:309
bool serialize_addr(std::false_type, t_storage &stg, typename t_storage::hsection hparent)
Definition net_utils_base.h:293
Type & as_mutable() const
Definition net_utils_base.h:282
static constexpr std::integral_constant< bool, is_store > is_store_
Definition net_utils_base.h:328
std::uint16_t port() const
Definition net_utils_base.h:323
bool is_local() const
Definition net_utils_base.h:319
std::string host_str() const
Definition net_utils_base.h:317
zone get_zone() const
Definition net_utils_base.h:321
bool is_blockable() const
Definition net_utils_base.h:322
const Type & as() const
Definition net_utils_base.h:324
b32 i2p address; internal format not condensed/decoded.
Definition i2p_address.h:52
Tor onion address; internal format not condensed/decoded.
Definition tor_address.h:53
#define inline
Definition inline_c.h:34
#define SWAP32LE
Definition int-util.h:277
#define KV_SERIALIZE(varialble)
Definition keyvalue_serialization.h:120
#define END_KV_SERIALIZE_MAP()
Definition keyvalue_serialization.h:118
#define BEGIN_KV_SERIALIZE_MAP()
Definition keyvalue_serialization.h:43
Definition portable_binary_archive.hpp:29
bool should_group_ipv6_by_prefix(const boost::asio::ip::address_v6 &ip)
Definition net_utils_base.cpp:56
bool operator<=(const ipv4_network_address &lhs, const ipv4_network_address &rhs) noexcept
Definition net_utils_base.h:118
bool operator==(const ipv4_network_address &lhs, const ipv4_network_address &rhs) noexcept
Definition net_utils_base.h:112
address_type
Definition enums.h:40
@ ipv4
Definition enums.h:43
@ i2p
Definition enums.h:45
@ tor
Definition enums.h:46
@ ipv6
Definition enums.h:44
@ invalid
Definition enums.h:42
zone
Definition enums.h:50
@ public_
Definition enums.h:52
@ invalid
Definition enums.h:51
std::string print_connection_context_short(const connection_context_base &ctx)
Definition net_utils_base.cpp:158
boost::asio::ip::address_v6 get_ipv6_subnet_address(const boost::asio::ip::address_v6 &ip, const std::size_t prefix_bits)
Definition net_utils_base.cpp:63
bool operator!=(const ipv4_network_address &lhs, const ipv4_network_address &rhs) noexcept
Definition net_utils_base.h:114
bool operator>=(const ipv4_network_address &lhs, const ipv4_network_address &rhs) noexcept
Definition net_utils_base.h:122
MAKE_LOGGABLE(connection_context_base, ct, os)
Definition net_utils_base.h:467
bool operator>(const ipv4_network_address &lhs, const ipv4_network_address &rhs) noexcept
Definition net_utils_base.h:120
bool operator<(const ipv4_network_address &lhs, const ipv4_network_address &rhs) noexcept
Definition net_utils_base.h:116
TODO: (mj-xmr) This will be reduced in an another PR.
Definition byte_slice.h:40
Definition net_utils_base.h:60
Definition binary_utils.h:36
const GenericPointer< typename T::ValueType > T2 value
Definition pointer.h:1225
const GenericPointer< typename T::ValueType > T2 T::AllocatorType & a
Definition pointer.h:1124
Type
Type of JSON value.
Definition rapidjson.h:623
unsigned short uint16_t
Definition stdint.h:125
unsigned int uint32_t
Definition stdint.h:126
unsigned char uint8_t
Definition stdint.h:124
unsigned __int64 uint64_t
Definition stdint.h:136
Definition net_utils_base.h:371
void set_details(boost::uuids::uuid connection_id, const network_address &remote_address, bool is_income, bool ssl)
Definition net_utils_base.h:434
time_t m_last_send
Definition net_utils_base.h:378
connection_context_base(boost::uuids::uuid connection_id, const network_address &remote_address, bool is_income, bool ssl, time_t last_recv=0, time_t last_send=0, uint64_t recv_cnt=0, uint64_t send_cnt=0)
Definition net_utils_base.h:386
time_t m_last_recv
Definition net_utils_base.h:377
connection_context_base()
Definition net_utils_base.h:405
double m_max_speed_down
Definition net_utils_base.h:383
uint64_t m_send_cnt
Definition net_utils_base.h:380
connection_context_base(const connection_context_base &a)
Definition net_utils_base.h:420
const bool m_is_income
Definition net_utils_base.h:374
const bool m_ssl
Definition net_utils_base.h:376
friend class connection
Definition net_utils_base.h:433
double m_max_speed_up
Definition net_utils_base.h:384
connection_context_base & operator=(const connection_context_base &a)
Definition net_utils_base.h:425
const boost::uuids::uuid m_connection_id
Definition net_utils_base.h:372
const time_t m_started
Definition net_utils_base.h:375
const network_address m_remote_address
Definition net_utils_base.h:373
double m_current_speed_down
Definition net_utils_base.h:381
double m_current_speed_up
Definition net_utils_base.h:382
uint64_t m_recv_cnt
Definition net_utils_base.h:379
Definition net_utils_base.h:446
virtual bool send_done()=0
virtual bool request_callback()=0
virtual ~i_service_endpoint() noexcept(false)
Definition net_utils_base.h:457
virtual bool call_run_once_service_io()=0
virtual bool close(const bool wait_for_shutdown)=0
virtual boost::asio::io_context & get_io_context()=0
virtual bool do_send(byte_slice message)=0
Definition net_utils_base.h:250
virtual std::uint16_t port() const override
Definition net_utils_base.h:276
virtual bool less(const interface &other) const override
Definition net_utils_base.h:263
virtual bool is_same_host(const interface &other) const override
Definition net_utils_base.h:266
T value
Definition net_utils_base.h:251
virtual std::string host_str() const override
Definition net_utils_base.h:270
virtual address_type get_type_id() const override
Definition net_utils_base.h:273
virtual std::string str() const override
Definition net_utils_base.h:269
virtual bool is_blockable() const override
Definition net_utils_base.h:275
virtual bool equal(const interface &other) const override
Definition net_utils_base.h:260
virtual bool is_local() const override
Definition net_utils_base.h:272
virtual bool is_loopback() const override
Definition net_utils_base.h:271
virtual zone get_zone() const override
Definition net_utils_base.h:274
~implementation()=default
static const T & cast(const interface &src) noexcept
Definition net_utils_base.h:257
implementation(const T &src)
Definition net_utils_base.h:253
Definition net_utils_base.h:231
virtual bool is_loopback() const =0
virtual std::string host_str() const =0
virtual std::string str() const =0
virtual address_type get_type_id() const =0
virtual bool less(const interface &) const =0
virtual bool equal(const interface &) const =0
virtual bool is_blockable() const =0
virtual zone get_zone() const =0
virtual bool is_local() const =0
virtual bool is_same_host(const interface &) const =0
virtual ~interface()
Definition net_utils_base.h:232
virtual std::uint16_t port() const =0
Definition keyvalue_serialization_overloads.h:324