File tree Expand file tree Collapse file tree 2 files changed +28
-3
lines changed Expand file tree Collapse file tree 2 files changed +28
-3
lines changed Original file line number Diff line number Diff line change 77
88#include < netaddress.h>
99#include < serialize.h>
10+ #include < streams.h>
1011
1112#include < variant>
1213
@@ -72,8 +73,9 @@ class NetInfoEntry
7273 bool operator !=(const NetInfoEntry& rhs) const { return !(*this == rhs); }
7374
7475 template <typename Stream>
75- void Serialize (Stream& s ) const
76+ void Serialize (Stream& s_ ) const
7677 {
78+ OverrideStream<Stream> s (&s_, /* nType=*/ 0 , s_.GetVersion () | ADDRV2_FORMAT);
7779 if (const auto * data_ptr{std::get_if<CService>(&m_data)};
7880 m_type == NetInfoType::Service && data_ptr && data_ptr->IsValid ()) {
7981 s << m_type << *data_ptr;
@@ -83,8 +85,9 @@ class NetInfoEntry
8385 }
8486
8587 template <typename Stream>
86- void Unserialize (Stream& s )
88+ void Unserialize (Stream& s_ )
8789 {
90+ OverrideStream<Stream> s (&s_, /* nType=*/ 0 , s_.GetVersion () | ADDRV2_FORMAT);
8891 s >> m_type;
8992 if (m_type == NetInfoType::Service) {
9093 m_data = CService{};
Original file line number Diff line number Diff line change @@ -95,7 +95,7 @@ BOOST_AUTO_TEST_CASE(netinfo_ser)
9595
9696 {
9797 // A valid CService should be constructable, readable and pass validation
98- CDataStream ds (SER_DISK, CLIENT_VERSION);
98+ CDataStream ds (SER_DISK, CLIENT_VERSION | ADDRV2_FORMAT );
9999 CService service{LookupNumeric (" 1.1.1.1" , Params ().GetDefaultPort ())};
100100 BOOST_CHECK (service.IsValid ());
101101 NetInfoEntry entry{service}, entry2{};
@@ -105,6 +105,28 @@ BOOST_AUTO_TEST_CASE(netinfo_ser)
105105 BOOST_CHECK (!entry.IsEmpty () && entry.IsTriviallyValid ());
106106 BOOST_CHECK (entry.GetAddrPort ().value () == service);
107107 }
108+
109+ {
110+ // NetInfoEntry should be able to read and write ADDRV2 addresses
111+ CService service{};
112+ service.SetSpecial (" pg6mmjiyjmcrsslvykfwnntlaru7p5svn6y2ymmju6nubxndf4pscryd.onion" );
113+ BOOST_CHECK (service.IsValid () && service.IsTor ());
114+
115+ CDataStream ds (SER_DISK, CLIENT_VERSION | ADDRV2_FORMAT);
116+ ds << NetInfoEntry::NetInfoType::Service << service;
117+ ds.SetVersion (CLIENT_VERSION); // Drop the explicit format flag
118+
119+ NetInfoEntry entry{};
120+ ds >> entry;
121+ BOOST_CHECK (!entry.IsEmpty () && entry.IsTriviallyValid ());
122+ BOOST_CHECK (entry.GetAddrPort ().value () == service);
123+ ds.clear ();
124+
125+ NetInfoEntry entry2{};
126+ ds << entry;
127+ ds >> entry2;
128+ BOOST_CHECK (entry == entry2 && entry2.GetAddrPort ().value () == service);
129+ }
108130}
109131
110132BOOST_AUTO_TEST_CASE (netinfo_retvals)
You can’t perform that action at this time.
0 commit comments