From 201a4596d92d640d5eb7e76cc8d959228fa09dbb Mon Sep 17 00:00:00 2001 From: Vasil Dimov Date: Tue, 19 May 2020 17:39:05 +0200 Subject: net: CAddress & CAddrMan: (un)serialize as ADDRv2 Change the serialization of `CAddrMan` to serialize its addresses in ADDRv2/BIP155 format by default. Introduce a new `CAddrMan` format version (3). Add support for ADDRv2 format in `CAddress` (un)serialization. Co-authored-by: Carl Dong --- src/protocol.h | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) (limited to 'src/protocol.h') diff --git a/src/protocol.h b/src/protocol.h index 9a44a1626c..e2d3602792 100644 --- a/src/protocol.h +++ b/src/protocol.h @@ -351,7 +351,8 @@ class CAddress : public CService public: CAddress() : CService{} {}; - explicit CAddress(CService ipIn, ServiceFlags nServicesIn) : CService{ipIn}, nServices{nServicesIn} {}; + CAddress(CService ipIn, ServiceFlags nServicesIn) : CService{ipIn}, nServices{nServicesIn} {}; + CAddress(CService ipIn, ServiceFlags nServicesIn, uint32_t nTimeIn) : CService{ipIn}, nTime{nTimeIn}, nServices{nServicesIn} {}; SERIALIZE_METHODS(CAddress, obj) { @@ -370,7 +371,14 @@ public: // nTime. READWRITE(obj.nTime); } - READWRITE(Using>(obj.nServices)); + if (nVersion & ADDRV2_FORMAT) { + uint64_t services_tmp; + SER_WRITE(obj, services_tmp = obj.nServices); + READWRITE(Using>(services_tmp)); + SER_READ(obj, obj.nServices = static_cast(services_tmp)); + } else { + READWRITE(Using>(obj.nServices)); + } READWRITEAS(CService, obj); } -- cgit v1.2.3