BIP 0031: pong message
Add a pong message that is sent in reply to a ping. It echoes back a nonce field that is now added to the ping message. Send a nonce of zero in ping messages. Original author: Mike Hearn @ Google Modified Mike's change to introduce a mild form of protocol documentation in version.h.
This commit is contained in:
parent
940e22fd81
commit
93e447b631
28
src/main.cpp
28
src/main.cpp
@ -2652,6 +2652,23 @@ bool static ProcessMessage(CNode* pfrom, string strCommand, CDataStream& vRecv)
|
|||||||
|
|
||||||
else if (strCommand == "ping")
|
else if (strCommand == "ping")
|
||||||
{
|
{
|
||||||
|
if (pfrom->nVersion > BIP0031_VERSION)
|
||||||
|
{
|
||||||
|
uint64 nonce = 0;
|
||||||
|
vRecv >> nonce;
|
||||||
|
// Echo the message back with the nonce. This allows for two useful features:
|
||||||
|
//
|
||||||
|
// 1) A remote node can quickly check if the connection is operational
|
||||||
|
// 2) Remote nodes can measure the latency of the network thread. If this node
|
||||||
|
// is overloaded it won't respond to pings quickly and the remote node can
|
||||||
|
// avoid sending us more work, like chain download requests.
|
||||||
|
//
|
||||||
|
// The nonce stops the remote getting confused between different pings: without
|
||||||
|
// it, if the remote node sends a ping once per second and this node takes 5
|
||||||
|
// seconds to respond to each, the 5th ping the remote sends would appear to
|
||||||
|
// return very quickly.
|
||||||
|
pfrom->PushMessage("pong", nonce);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -2814,9 +2831,14 @@ bool SendMessages(CNode* pto, bool fSendTrickle)
|
|||||||
if (pto->nVersion == 0)
|
if (pto->nVersion == 0)
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
// Keep-alive ping
|
// Keep-alive ping. We send a nonce of zero because we don't use it anywhere
|
||||||
if (pto->nLastSend && GetTime() - pto->nLastSend > 30 * 60 && pto->vSend.empty())
|
// right now.
|
||||||
pto->PushMessage("ping");
|
if (pto->nLastSend && GetTime() - pto->nLastSend > 30 * 60 && pto->vSend.empty()) {
|
||||||
|
if (pto->nVersion > BIP0031_VERSION)
|
||||||
|
pto->PushMessage("ping", 0);
|
||||||
|
else
|
||||||
|
pto->PushMessage("ping");
|
||||||
|
}
|
||||||
|
|
||||||
// Resend wallet transactions that haven't gotten in a block yet
|
// Resend wallet transactions that haven't gotten in a block yet
|
||||||
ResendWalletTransactions();
|
ResendWalletTransactions();
|
||||||
|
@ -11,4 +11,7 @@ extern const std::string CLIENT_BUILD;
|
|||||||
extern const std::string CLIENT_DATE;
|
extern const std::string CLIENT_DATE;
|
||||||
extern const int CLIENT_VERSION;
|
extern const int CLIENT_VERSION;
|
||||||
|
|
||||||
|
// BIP 0031, pong message, is enabled for all versions AFTER this one
|
||||||
|
const int BIP0031_VERSION = 60000;
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
Loading…
Reference in New Issue
Block a user