5 #ifndef BITCOIN_TEST_FUZZ_UTIL_NET_H
6 #define BITCOIN_TEST_FUZZ_UTIL_NET_H
62 ssize_t Send(
const void* data,
size_t len,
int flags)
const override;
64 ssize_t Recv(
void* buf,
size_t len,
int flags)
const override;
66 int Connect(
const sockaddr*, socklen_t)
const override;
68 int Bind(
const sockaddr*, socklen_t)
const override;
70 int Listen(
int backlog)
const override;
72 std::unique_ptr<Sock> Accept(sockaddr* addr, socklen_t* addr_len)
const override;
74 int GetSockOpt(
int level,
int opt_name,
void* opt_val, socklen_t* opt_len)
const override;
76 int SetSockOpt(
int level,
int opt_name,
const void* opt_val, socklen_t opt_len)
const override;
78 int GetSockName(sockaddr*
name, socklen_t* name_len)
const override;
80 bool SetNonBlocking()
const override;
82 bool IsSelectable()
const override;
84 bool Wait(std::chrono::milliseconds timeout,
Event requested,
Event* occurred =
nullptr)
const override;
86 bool WaitMany(std::chrono::milliseconds timeout,
EventsPerSock& events_per_sock)
const override;
88 bool IsConnected(std::string& errmsg)
const override;
98 return {
ConsumeNetAddr(fuzzed_data_provider), fuzzed_data_provider.ConsumeIntegral<uint8_t>()};
103 return {
ConsumeNetAddr(fuzzed_data_provider), fuzzed_data_provider.ConsumeIntegral<uint16_t>()};
108 template <
bool ReturnUniquePtr = false>
111 const NodeId node_id = node_id_in.value_or(fuzzed_data_provider.ConsumeIntegralInRange<
NodeId>(0, std::numeric_limits<NodeId>::max()));
112 const auto sock = std::make_shared<FuzzedSock>(fuzzed_data_provider);
114 const uint64_t keyed_net_group = fuzzed_data_provider.ConsumeIntegral<uint64_t>();
115 const uint64_t local_host_nonce = fuzzed_data_provider.ConsumeIntegral<uint64_t>();
117 const std::string addr_name = fuzzed_data_provider.ConsumeRandomLengthString(64);
121 if constexpr (ReturnUniquePtr) {
122 return std::make_unique<CNode>(node_id,
133 return CNode{node_id,
A CService with information about it as peer.
Information about a peer.
A combination of a network address (CNetAddr) and a (TCP) port.
const bool m_selectable
Whether to pretend that the socket is select(2)-able.
std::optional< uint8_t > m_peek_data
Data to return when MSG_PEEK is used as a Recv() flag.
FuzzedDataProvider & m_fuzzed_data_provider
static Mutex g_msgproc_mutex
Mutex for anything that is only accessed via the msg processing thread.
RAII helper class that manages a socket and closes it automatically when it goes out of scope.
std::unordered_map< std::shared_ptr< const Sock >, Events, HashSharedPtrSock, EqualSharedPtrSock > EventsPerSock
On which socket to wait for what events in WaitMany().
ConnectionType
Different types of connections to a peer.
@ INBOUND
Inbound connections are those initiated by a peer.
NetPermissionFlags permission_flags
void FillNode(FuzzedDataProvider &fuzzed_data_provider, ConnmanTestMsg &connman, CNode &node) noexcept
CService ConsumeService(FuzzedDataProvider &fuzzed_data_provider) noexcept
CSubNet ConsumeSubNet(FuzzedDataProvider &fuzzed_data_provider) noexcept
CNetAddr ConsumeNetAddr(FuzzedDataProvider &fuzzed_data_provider, FastRandomContext *rand=nullptr) noexcept
Create a CNetAddr.
std::unique_ptr< CNode > ConsumeNodeAsUniquePtr(FuzzedDataProvider &fdp, const std::optional< NodeId > &node_id_in=std::nullopt)
auto ConsumeNode(FuzzedDataProvider &fuzzed_data_provider, const std::optional< NodeId > &node_id_in=std::nullopt) noexcept
CAddress ConsumeAddress(FuzzedDataProvider &fuzzed_data_provider) noexcept
FuzzedSock ConsumeSock(FuzzedDataProvider &fuzzed_data_provider)
WeakEnumType ConsumeWeakEnum(FuzzedDataProvider &fuzzed_data_provider, const WeakEnumType(&all_types)[size]) noexcept
constexpr ConnectionType ALL_CONNECTION_TYPES[]
constexpr NetPermissionFlags ALL_NET_PERMISSION_FLAGS[]
#define EXCLUSIVE_LOCKS_REQUIRED(...)