Electroneum
Loading...
Searching...
No Matches
i2p_address.h
Go to the documentation of this file.
1// Copyright (c) 2019, The Monero Project
2//
3// All rights reserved.
4//
5// Redistribution and use in source and binary forms, with or without modification, are
6// permitted provided that the following conditions are met:
7//
8// 1. Redistributions of source code must retain the above copyright notice, this list of
9// conditions and the following disclaimer.
10//
11// 2. Redistributions in binary form must reproduce the above copyright notice, this list
12// of conditions and the following disclaimer in the documentation and/or other
13// materials provided with the distribution.
14//
15// 3. Neither the name of the copyright holder nor the names of its contributors may be
16// used to endorse or promote products derived from this software without specific
17// prior written permission.
18//
19// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY
20// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
21// MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL
22// THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
23// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
24// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
25// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
26// STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF
27// THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
28
29#pragma once
30
31#include <boost/utility/string_ref.hpp>
32#include <cstdint>
33#include <string>
34
35#include "common/expect.h"
36#include "net/enums.h"
37#include "net/error.h"
38
39namespace epee
40{
41namespace serialization
42{
43 class portable_storage;
44 struct section;
45}
46}
47
48namespace net
49{
51 class i2p_address
52 {
53 std::uint16_t port_;
54 char host_[61]; // null-terminated
55
57 i2p_address(boost::string_ref host, std::uint16_t port) noexcept;
58
59 public:
61 static constexpr std::size_t buffer_size() noexcept { return sizeof(host_); }
62
64 static const char* unknown_str() noexcept;
65
67 i2p_address() noexcept;
68
70 static i2p_address unknown() noexcept { return i2p_address{}; }
71
77 static expect<i2p_address> make(boost::string_ref address, std::uint16_t default_port = 0);
78
81
84
85 // Moves and copies are currently identical
86
87 i2p_address(const i2p_address& rhs) noexcept;
88 ~i2p_address() = default;
89 i2p_address& operator=(const i2p_address& rhs) noexcept;
90
92 bool is_unknown() const noexcept;
93
94 bool equal(const i2p_address& rhs) const noexcept;
95 bool less(const i2p_address& rhs) const noexcept;
96
98 bool is_same_host(const i2p_address& rhs) const noexcept;
99
101 std::string str() const;
102
104 const char* host_str() const noexcept { return host_; }
105
107 std::uint16_t port() const noexcept { return port_; }
108
109 static constexpr bool is_loopback() noexcept { return false; }
110 static constexpr bool is_local() noexcept { return false; }
111
112 static constexpr epee::net_utils::address_type get_type_id() noexcept
113 {
115 }
116
117 static constexpr epee::net_utils::zone get_zone() noexcept
118 {
120 }
121
123 bool is_blockable() const noexcept { return !is_unknown(); }
124 };
125
126 inline bool operator==(const i2p_address& lhs, const i2p_address& rhs) noexcept
127 {
128 return lhs.equal(rhs);
129 }
130
131 inline bool operator!=(const i2p_address& lhs, const i2p_address& rhs) noexcept
132 {
133 return !lhs.equal(rhs);
134 }
135
136 inline bool operator<(const i2p_address& lhs, const i2p_address& rhs) noexcept
137 {
138 return lhs.less(rhs);
139 }
140} // net
b32 i2p address; internal format not condensed/decoded.
Definition i2p_address.h:52
std::uint16_t port() const noexcept
static i2p_address unknown() noexcept
Definition i2p_address.h:70
i2p_address & operator=(const i2p_address &rhs) noexcept
bool store(epee::serialization::portable_storage &dest, epee::serialization::section *hparent) const
Store in epee p2p format.
static constexpr epee::net_utils::address_type get_type_id() noexcept
bool equal(const i2p_address &rhs) const noexcept
bool is_blockable() const noexcept
bool is_same_host(const i2p_address &rhs) const noexcept
bool is_unknown() const noexcept
static constexpr std::size_t buffer_size() noexcept
Definition i2p_address.h:61
bool less(const i2p_address &rhs) const noexcept
static constexpr epee::net_utils::zone get_zone() noexcept
static expect< i2p_address > make(boost::string_ref address, std::uint16_t default_port=0)
const char * host_str() const noexcept
std::string str() const
static constexpr bool is_loopback() noexcept
bool _load(epee::serialization::portable_storage &src, epee::serialization::section *hparent)
Load from epee p2p format, and.
static constexpr bool is_local() noexcept
i2p_address() noexcept
An object with port() == 0 and host_str() == unknown_str().
~i2p_address()=default
static const char * unknown_str() noexcept
bool operator<(const i2p_address &lhs, const i2p_address &rhs) noexcept
bool operator!=(const i2p_address &lhs, const i2p_address &rhs) noexcept
bool operator==(const i2p_address &lhs, const i2p_address &rhs) noexcept
STL namespace.
CXA_THROW_INFO_T void(* dest)(void *))
const char * address
Definition multisig.cpp:37