mirror of
https://github.com/bitcoin/bitcoin.git
synced 2025-02-22 06:52:36 +01:00
Send and require SENDADDRV2 before VERACK
See the corresponding BIP change: https://github.com/bitcoin/bips/pull/1043
This commit is contained in:
parent
c5a8919660
commit
1583498fb6
2 changed files with 14 additions and 8 deletions
|
@ -2362,8 +2362,6 @@ void PeerManager::ProcessMessage(CNode& pfrom, const std::string& msg_type, CDat
|
||||||
m_connman.PushMessage(&pfrom, msg_maker.Make(NetMsgType::WTXIDRELAY));
|
m_connman.PushMessage(&pfrom, msg_maker.Make(NetMsgType::WTXIDRELAY));
|
||||||
}
|
}
|
||||||
|
|
||||||
m_connman.PushMessage(&pfrom, msg_maker.Make(NetMsgType::VERACK));
|
|
||||||
|
|
||||||
// Signal ADDRv2 support (BIP155).
|
// Signal ADDRv2 support (BIP155).
|
||||||
if (greatest_common_version >= 70016) {
|
if (greatest_common_version >= 70016) {
|
||||||
// BIP155 defines addrv2 and sendaddrv2 for all protocol versions, but some
|
// BIP155 defines addrv2 and sendaddrv2 for all protocol versions, but some
|
||||||
|
@ -2373,6 +2371,8 @@ void PeerManager::ProcessMessage(CNode& pfrom, const std::string& msg_type, CDat
|
||||||
m_connman.PushMessage(&pfrom, msg_maker.Make(NetMsgType::SENDADDRV2));
|
m_connman.PushMessage(&pfrom, msg_maker.Make(NetMsgType::SENDADDRV2));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
m_connman.PushMessage(&pfrom, msg_maker.Make(NetMsgType::VERACK));
|
||||||
|
|
||||||
pfrom.nServices = nServices;
|
pfrom.nServices = nServices;
|
||||||
pfrom.SetAddrLocal(addrMe);
|
pfrom.SetAddrLocal(addrMe);
|
||||||
{
|
{
|
||||||
|
@ -2541,6 +2541,17 @@ void PeerManager::ProcessMessage(CNode& pfrom, const std::string& msg_type, CDat
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (msg_type == NetMsgType::SENDADDRV2) {
|
||||||
|
if (pfrom.fSuccessfullyConnected) {
|
||||||
|
// Disconnect peers that send SENDADDRV2 message after VERACK; this
|
||||||
|
// must be negotiated between VERSION and VERACK.
|
||||||
|
pfrom.fDisconnect = true;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
pfrom.m_wants_addrv2 = true;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
if (!pfrom.fSuccessfullyConnected) {
|
if (!pfrom.fSuccessfullyConnected) {
|
||||||
LogPrint(BCLog::NET, "Unsupported message \"%s\" prior to verack from peer=%d\n", SanitizeString(msg_type), pfrom.GetId());
|
LogPrint(BCLog::NET, "Unsupported message \"%s\" prior to verack from peer=%d\n", SanitizeString(msg_type), pfrom.GetId());
|
||||||
return;
|
return;
|
||||||
|
@ -2608,11 +2619,6 @@ void PeerManager::ProcessMessage(CNode& pfrom, const std::string& msg_type, CDat
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (msg_type == NetMsgType::SENDADDRV2) {
|
|
||||||
pfrom.m_wants_addrv2 = true;
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (msg_type == NetMsgType::SENDHEADERS) {
|
if (msg_type == NetMsgType::SENDHEADERS) {
|
||||||
LOCK(cs_main);
|
LOCK(cs_main);
|
||||||
State(pfrom.GetId())->fPreferHeaders = true;
|
State(pfrom.GetId())->fPreferHeaders = true;
|
||||||
|
|
|
@ -396,9 +396,9 @@ class P2PInterface(P2PConnection):
|
||||||
assert message.nVersion >= MIN_VERSION_SUPPORTED, "Version {} received. Test framework only supports versions greater than {}".format(message.nVersion, MIN_VERSION_SUPPORTED)
|
assert message.nVersion >= MIN_VERSION_SUPPORTED, "Version {} received. Test framework only supports versions greater than {}".format(message.nVersion, MIN_VERSION_SUPPORTED)
|
||||||
if message.nVersion >= 70016:
|
if message.nVersion >= 70016:
|
||||||
self.send_message(msg_wtxidrelay())
|
self.send_message(msg_wtxidrelay())
|
||||||
self.send_message(msg_verack())
|
|
||||||
if self.support_addrv2:
|
if self.support_addrv2:
|
||||||
self.send_message(msg_sendaddrv2())
|
self.send_message(msg_sendaddrv2())
|
||||||
|
self.send_message(msg_verack())
|
||||||
self.nServices = message.nServices
|
self.nServices = message.nServices
|
||||||
|
|
||||||
# Connection helper methods
|
# Connection helper methods
|
||||||
|
|
Loading…
Add table
Reference in a new issue