Bitcoin Core 28.0.0
P2P Digital Currency
Loading...
Searching...
No Matches
i2p.cpp
Go to the documentation of this file.
1// Copyright (c) The Bitcoin Core developers
2// Distributed under the MIT software license, see the accompanying
3// file COPYING or http://www.opensource.org/licenses/mit-license.php.
4
5#include <common/args.h>
6#include <i2p.h>
7#include <netaddress.h>
8#include <netbase.h>
10#include <test/fuzz/fuzz.h>
11#include <test/fuzz/util.h>
12#include <test/fuzz/util/net.h>
14#include <util/fs_helpers.h>
16
18{
19 static const auto testing_setup = MakeNoLogFileContext<>();
20}
21
23{
24 FuzzedDataProvider fuzzed_data_provider{buffer.data(), buffer.size()};
25
26 SetMockTime(ConsumeTime(fuzzed_data_provider));
27
28 // Mock CreateSock() to create FuzzedSock.
29 auto CreateSockOrig = CreateSock;
30 CreateSock = [&fuzzed_data_provider](int, int, int) {
31 return std::make_unique<FuzzedSock>(fuzzed_data_provider);
32 };
33
34 const fs::path private_key_path = gArgs.GetDataDirNet() / "fuzzed_i2p_private_key";
35 const CService addr{in6_addr(IN6ADDR_LOOPBACK_INIT), 7656};
36 const Proxy sam_proxy{addr, false};
37 CThreadInterrupt interrupt;
38
39 i2p::sam::Session session{private_key_path, sam_proxy, &interrupt};
40 i2p::Connection conn;
41
42 if (session.Listen(conn)) {
43 if (session.Accept(conn)) {
44 try {
45 (void)conn.sock->RecvUntilTerminator('\n', 10ms, interrupt, i2p::sam::MAX_MSG_SIZE);
46 } catch (const std::runtime_error&) {
47 }
48 }
49 }
50
51 bool proxy_error;
52
53 if (session.Connect(CService{}, conn, proxy_error)) {
54 try {
55 conn.sock->SendComplete("verack\n", 10ms, interrupt);
56 } catch (const std::runtime_error&) {
57 }
58 }
59
60 fs::remove_all(private_key_path);
61
62 CreateSock = CreateSockOrig;
63}
ArgsManager gArgs
Definition args.cpp:41
fs::path GetDataDirNet() const
Get data directory path with appended network identifier.
Definition args.h:232
A combination of a network address (CNetAddr) and a (TCP) port.
Definition netaddress.h:531
A helper class for interruptible sleeps.
Path class wrapper to block calls to the fs::path(std::string) implicit constructor and the fs::path:...
Definition fs.h:33
I2P SAM session.
Definition i2p.h:57
#define FUZZ_TARGET(...)
Definition fuzz.h:35
static constexpr size_t MAX_MSG_SIZE
The maximum size of an incoming message from the I2P SAM proxy (in bytes).
Definition i2p.h:51
Definition i2p.cpp:31
std::function< std::unique_ptr< Sock >(int, int, int)> CreateSock
Socket factory.
Definition netbase.cpp:557
std::unique_ptr< T > MakeNoLogFileContext(const ChainType chain_type=ChainType::REGTEST, TestOpts opts={})
Make a test setup that has disk access to the debug.log file disabled.
An established connection with another peer.
Definition i2p.h:32
std::unique_ptr< Sock > sock
Connected socket.
Definition i2p.h:34
void initialize_i2p()
Definition i2p.cpp:17
int64_t ConsumeTime(FuzzedDataProvider &fuzzed_data_provider, const std::optional< int64_t > &min, const std::optional< int64_t > &max) noexcept
Definition util.cpp:34
void SetMockTime(int64_t nMockTimeIn)
DEPRECATED Use SetMockTime with chrono type.
Definition time.cpp:32