Skip to content

Commit d441cda

Browse files
f619f8f merge bitcoin#20234: don't bind on 0.0.0.0 if binds are restricted to Tor (Kittywhiskers Van Gogh) 1698336 merge bitcoin#22974: Improve performance of Good (Kittywhiskers Van Gogh) 29f4482 merge bitcoin#22911: Minor cleanups to asmap (Kittywhiskers Van Gogh) 5706eda merge bitcoin#22915: Remove confusing CAddrDB (Kittywhiskers Van Gogh) 3f69606 merge bitcoin#22848: Expose BanMapToJson / BanMapFromJson (Kittywhiskers Van Gogh) 9065eed merge bitcoin#22791: Fix asmap/addrman initialization order bug (Kittywhiskers Van Gogh) 99b7812 merge bitcoin#22849: Remove unused SERIALIZE_METHODS for CBanEntry (Kittywhiskers Van Gogh) a30379c merge bitcoin#22740: Move serialization code to cpp (Kittywhiskers Van Gogh) d4e79aa merge bitcoin#22697: Remove CAddrMan::Clear() function (Kittywhiskers Van Gogh) 77d8f6c merge bitcoin#22725: Move addrman ser/deser tests to addrman_tests.cpp (Kittywhiskers Van Gogh) 4ba3f49 merge bitcoin#22627: De-duplicate Add() function (Kittywhiskers Van Gogh) 49af818 merge bitcoin#20233: Make consistency checks a runtime option (Kittywhiskers Van Gogh) Pull request description: ## Additional Information * Dependency for dashpay#6043 * [bitcoin#22915](bitcoin#22915) is backported before [bitcoin#21850](bitcoin#21850), which is the reason {`Dump`, `Read`}`PeerAddresses` takes in an `const ArgsManager&` but doesn't do anything with it. * This will need to be accounted for when backporting [bitcoin#21850](bitcoin#21850) ## Breaking Changes None expected. No changes to serialization format. ## Checklist: _Go over all the following points, and put an `x` in all the boxes that apply._ - [x] I have performed a self-review of my own code - [x] I have commented my code, particularly in hard-to-understand areas **(note: N/A)** - [x] I have added or updated relevant unit/integration/functional/e2e tests - [x] I have made corresponding changes to the documentation **(note: N/A)** - [x] I have assigned this pull request to a milestone _(for repository code-owners and collaborators only)_ ACKs for top commit: PastaPastaPasta: utACK f619f8f Tree-SHA512: 19599f0322f049b123790a45530ecb2ec74b1463b47e0102921b489bad1d5cb671a94900b3b35dbd7c1d80bc0680f1ed01e6fac675ac0be81621878388be0bcd
2 parents d23ecf8 + f619f8f commit d441cda

29 files changed

+1063
-1057
lines changed

src/Makefile.am

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -731,6 +731,7 @@ libbitcoin_common_a_SOURCES = \
731731
key.cpp \
732732
key_io.cpp \
733733
merkleblock.cpp \
734+
net_types.cpp \
734735
netaddress.cpp \
735736
netbase.cpp \
736737
net_permissions.cpp \

src/addrdb.cpp

Lines changed: 6 additions & 71 deletions
Original file line numberDiff line numberDiff line change
@@ -20,64 +20,7 @@
2020

2121
#include <cstdint>
2222

23-
CBanEntry::CBanEntry(const UniValue& json)
24-
: nVersion(json["version"].get_int()), nCreateTime(json["ban_created"].get_int64()),
25-
nBanUntil(json["banned_until"].get_int64())
26-
{
27-
}
28-
29-
UniValue CBanEntry::ToJson() const
30-
{
31-
UniValue json(UniValue::VOBJ);
32-
json.pushKV("version", nVersion);
33-
json.pushKV("ban_created", nCreateTime);
34-
json.pushKV("banned_until", nBanUntil);
35-
return json;
36-
}
37-
3823
namespace {
39-
40-
static const char* BANMAN_JSON_ADDR_KEY = "address";
41-
42-
/**
43-
* Convert a `banmap_t` object to a JSON array.
44-
* @param[in] bans Bans list to convert.
45-
* @return a JSON array, similar to the one returned by the `listbanned` RPC. Suitable for
46-
* passing to `BanMapFromJson()`.
47-
*/
48-
UniValue BanMapToJson(const banmap_t& bans)
49-
{
50-
UniValue bans_json(UniValue::VARR);
51-
for (const auto& it : bans) {
52-
const auto& address = it.first;
53-
const auto& ban_entry = it.second;
54-
UniValue j = ban_entry.ToJson();
55-
j.pushKV(BANMAN_JSON_ADDR_KEY, address.ToString());
56-
bans_json.push_back(j);
57-
}
58-
return bans_json;
59-
}
60-
61-
/**
62-
* Convert a JSON array to a `banmap_t` object.
63-
* @param[in] bans_json JSON to convert, must be as returned by `BanMapToJson()`.
64-
* @param[out] bans Bans list to create from the JSON.
65-
* @throws std::runtime_error if the JSON does not have the expected fields or they contain
66-
* unparsable values.
67-
*/
68-
void BanMapFromJson(const UniValue& bans_json, banmap_t& bans)
69-
{
70-
for (const auto& ban_entry_json : bans_json.getValues()) {
71-
CSubNet subnet;
72-
const auto& subnet_str = ban_entry_json[BANMAN_JSON_ADDR_KEY].get_str();
73-
if (!LookupSubNet(subnet_str, subnet)) {
74-
throw std::runtime_error(
75-
strprintf("Cannot parse banned address or subnet: %s", subnet_str));
76-
}
77-
bans.insert_or_assign(subnet, CBanEntry{ban_entry_json});
78-
}
79-
}
80-
8124
template <typename Stream, typename Data>
8225
bool SerializeDB(Stream& stream, const Data& data)
8326
{
@@ -228,29 +171,21 @@ bool CBanDB::Read(banmap_t& banSet)
228171
return true;
229172
}
230173

231-
CAddrDB::CAddrDB()
232-
{
233-
pathAddr = GetDataDir() / "peers.dat";
234-
}
235-
236-
bool CAddrDB::Write(const CAddrMan& addr)
174+
bool DumpPeerAddresses(const ArgsManager& args, const CAddrMan& addr)
237175
{
176+
const auto pathAddr = GetDataDir() / "peers.dat";
238177
return SerializeFileDB("peers", pathAddr, addr, CLIENT_VERSION);
239178
}
240179

241-
bool CAddrDB::Read(CAddrMan& addr)
180+
bool ReadPeerAddresses(const ArgsManager& args, CAddrMan& addr)
242181
{
182+
const auto pathAddr = GetDataDir() / "peers.dat";
243183
return DeserializeFileDB(pathAddr, addr, CLIENT_VERSION);
244184
}
245185

246-
bool CAddrDB::Read(CAddrMan& addr, CDataStream& ssPeers)
186+
bool ReadFromStream(CAddrMan& addr, CDataStream& ssPeers)
247187
{
248-
bool ret = DeserializeDB(ssPeers, addr, false);
249-
if (!ret) {
250-
// Ensure addrman is left in a clean state
251-
addr.Clear();
252-
}
253-
return ret;
188+
return DeserializeDB(ssPeers, addr, false);
254189
}
255190

256191
void DumpAnchors(const fs::path& anchors_db_path, const std::vector<CAddress>& anchors)

src/addrdb.h

Lines changed: 6 additions & 60 deletions
Original file line numberDiff line numberDiff line change
@@ -8,73 +8,19 @@
88

99
#include <fs.h>
1010
#include <net_types.h> // For banmap_t
11-
#include <serialize.h>
1211
#include <univalue.h>
1312

14-
#include <string>
1513
#include <vector>
1614

17-
class CAddress;
15+
class ArgsManager;
1816
class CAddrMan;
17+
class CAddress;
1918
class CDataStream;
2019

21-
class CBanEntry
22-
{
23-
public:
24-
static const int CURRENT_VERSION=1;
25-
int nVersion;
26-
int64_t nCreateTime;
27-
int64_t nBanUntil;
28-
29-
CBanEntry()
30-
{
31-
SetNull();
32-
}
33-
34-
explicit CBanEntry(int64_t nCreateTimeIn)
35-
{
36-
SetNull();
37-
nCreateTime = nCreateTimeIn;
38-
}
39-
40-
/**
41-
* Create a ban entry from JSON.
42-
* @param[in] json A JSON representation of a ban entry, as created by `ToJson()`.
43-
* @throw std::runtime_error if the JSON does not have the expected fields.
44-
*/
45-
explicit CBanEntry(const UniValue& json);
46-
47-
SERIALIZE_METHODS(CBanEntry, obj)
48-
{
49-
uint8_t ban_reason = 2; //! For backward compatibility
50-
READWRITE(obj.nVersion, obj.nCreateTime, obj.nBanUntil, ban_reason);
51-
}
52-
53-
void SetNull()
54-
{
55-
nVersion = CBanEntry::CURRENT_VERSION;
56-
nCreateTime = 0;
57-
nBanUntil = 0;
58-
}
59-
60-
/**
61-
* Generate a JSON representation of this ban entry.
62-
* @return JSON suitable for passing to the `CBanEntry(const UniValue&)` constructor.
63-
*/
64-
UniValue ToJson() const;
65-
};
66-
67-
/** Access to the (IP) address database (peers.dat) */
68-
class CAddrDB
69-
{
70-
private:
71-
fs::path pathAddr;
72-
public:
73-
CAddrDB();
74-
bool Write(const CAddrMan& addr);
75-
bool Read(CAddrMan& addr);
76-
static bool Read(CAddrMan& addr, CDataStream& ssPeers);
77-
};
20+
bool DumpPeerAddresses(const ArgsManager& args, const CAddrMan& addr);
21+
bool ReadPeerAddresses(const ArgsManager& args, CAddrMan& addr);
22+
/** Only used by tests. */
23+
bool ReadFromStream(CAddrMan& addr, CDataStream& ssPeers);
7824

7925
/** Access to the banlist database (banlist.json) */
8026
class CBanDB

0 commit comments

Comments
 (0)