commit
865a0c1674
6 changed files with 73 additions and 26 deletions
37
src/main.cpp
37
src/main.cpp
|
@ -2183,7 +2183,7 @@ bool static ProcessMessage(CNode* pfrom, string strCommand, CDataStream& vRecv)
|
||||||
CAddress addrFrom;
|
CAddress addrFrom;
|
||||||
uint64 nNonce = 1;
|
uint64 nNonce = 1;
|
||||||
vRecv >> pfrom->nVersion >> pfrom->nServices >> nTime >> addrMe;
|
vRecv >> pfrom->nVersion >> pfrom->nServices >> nTime >> addrMe;
|
||||||
if (pfrom->nVersion < 209)
|
if (pfrom->nVersion < MIN_PROTO_VERSION)
|
||||||
{
|
{
|
||||||
// Since February 20, 2012, the protocol is initiated at version 209,
|
// Since February 20, 2012, the protocol is initiated at version 209,
|
||||||
// and earlier versions are no longer supported
|
// and earlier versions are no longer supported
|
||||||
|
@ -2233,7 +2233,7 @@ bool static ProcessMessage(CNode* pfrom, string strCommand, CDataStream& vRecv)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Get recent addresses
|
// Get recent addresses
|
||||||
if (pfrom->nVersion >= 31402 || addrman.size() < 1000)
|
if (pfrom->nVersion >= CADDR_TIME_VERSION || addrman.size() < 1000)
|
||||||
{
|
{
|
||||||
pfrom->PushMessage("getaddr");
|
pfrom->PushMessage("getaddr");
|
||||||
pfrom->fGetAddr = true;
|
pfrom->fGetAddr = true;
|
||||||
|
@ -2250,7 +2250,8 @@ bool static ProcessMessage(CNode* pfrom, string strCommand, CDataStream& vRecv)
|
||||||
// Ask the first connected node for block updates
|
// Ask the first connected node for block updates
|
||||||
static int nAskedForBlocks = 0;
|
static int nAskedForBlocks = 0;
|
||||||
if (!pfrom->fClient &&
|
if (!pfrom->fClient &&
|
||||||
(pfrom->nVersion < 32000 || pfrom->nVersion >= 32400) &&
|
(pfrom->nVersion < NOBLKS_VERSION_START ||
|
||||||
|
pfrom->nVersion >= NOBLKS_VERSION_END) &&
|
||||||
(nAskedForBlocks < 1 || vNodes.size() <= 1))
|
(nAskedForBlocks < 1 || vNodes.size() <= 1))
|
||||||
{
|
{
|
||||||
nAskedForBlocks++;
|
nAskedForBlocks++;
|
||||||
|
@ -2292,7 +2293,7 @@ bool static ProcessMessage(CNode* pfrom, string strCommand, CDataStream& vRecv)
|
||||||
vRecv >> vAddr;
|
vRecv >> vAddr;
|
||||||
|
|
||||||
// Don't want addr from older versions unless seeding
|
// Don't want addr from older versions unless seeding
|
||||||
if (pfrom->nVersion < 31402 && addrman.size() > 1000)
|
if (pfrom->nVersion < CADDR_TIME_VERSION && addrman.size() > 1000)
|
||||||
return true;
|
return true;
|
||||||
if (vAddr.size() > 1000)
|
if (vAddr.size() > 1000)
|
||||||
{
|
{
|
||||||
|
@ -2329,7 +2330,7 @@ bool static ProcessMessage(CNode* pfrom, string strCommand, CDataStream& vRecv)
|
||||||
multimap<uint256, CNode*> mapMix;
|
multimap<uint256, CNode*> mapMix;
|
||||||
BOOST_FOREACH(CNode* pnode, vNodes)
|
BOOST_FOREACH(CNode* pnode, vNodes)
|
||||||
{
|
{
|
||||||
if (pnode->nVersion < 31402)
|
if (pnode->nVersion < CADDR_TIME_VERSION)
|
||||||
continue;
|
continue;
|
||||||
unsigned int nPointer;
|
unsigned int nPointer;
|
||||||
memcpy(&nPointer, &pnode, sizeof(nPointer));
|
memcpy(&nPointer, &pnode, sizeof(nPointer));
|
||||||
|
@ -2651,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);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -2813,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.
|
||||||
|
if (pto->nLastSend && GetTime() - pto->nLastSend > 30 * 60 && pto->vSend.empty()) {
|
||||||
|
if (pto->nVersion > BIP0031_VERSION)
|
||||||
|
pto->PushMessage("ping", 0);
|
||||||
|
else
|
||||||
pto->PushMessage("ping");
|
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();
|
||||||
|
|
|
@ -163,8 +163,8 @@ public:
|
||||||
hSocket = hSocketIn;
|
hSocket = hSocketIn;
|
||||||
vSend.SetType(SER_NETWORK);
|
vSend.SetType(SER_NETWORK);
|
||||||
vRecv.SetType(SER_NETWORK);
|
vRecv.SetType(SER_NETWORK);
|
||||||
vSend.SetVersion(209);
|
vSend.SetVersion(MIN_PROTO_VERSION);
|
||||||
vRecv.SetVersion(209);
|
vRecv.SetVersion(MIN_PROTO_VERSION);
|
||||||
nLastSend = 0;
|
nLastSend = 0;
|
||||||
nLastRecv = 0;
|
nLastRecv = 0;
|
||||||
nLastSendEmpty = GetTime();
|
nLastSendEmpty = GetTime();
|
||||||
|
|
|
@ -80,7 +80,8 @@ class CAddress : public CService
|
||||||
pthis->Init();
|
pthis->Init();
|
||||||
if (nType & SER_DISK)
|
if (nType & SER_DISK)
|
||||||
READWRITE(nVersion);
|
READWRITE(nVersion);
|
||||||
if ((nType & SER_DISK) || (nVersion >= 31402 && !(nType & SER_GETHASH)))
|
if ((nType & SER_DISK) ||
|
||||||
|
(nVersion >= CADDR_TIME_VERSION && !(nType & SER_GETHASH)))
|
||||||
READWRITE(nTime);
|
READWRITE(nTime);
|
||||||
READWRITE(nServices);
|
READWRITE(nServices);
|
||||||
READWRITE(*pip);
|
READWRITE(*pip);
|
||||||
|
|
|
@ -20,6 +20,7 @@
|
||||||
#include <boost/tuple/tuple_io.hpp>
|
#include <boost/tuple/tuple_io.hpp>
|
||||||
|
|
||||||
#include "allocators.h"
|
#include "allocators.h"
|
||||||
|
#include "version.h"
|
||||||
|
|
||||||
typedef long long int64;
|
typedef long long int64;
|
||||||
typedef unsigned long long uint64;
|
typedef unsigned long long uint64;
|
||||||
|
@ -29,8 +30,6 @@ class CDataStream;
|
||||||
class CAutoFile;
|
class CAutoFile;
|
||||||
static const unsigned int MAX_SIZE = 0x02000000;
|
static const unsigned int MAX_SIZE = 0x02000000;
|
||||||
|
|
||||||
static const int PROTOCOL_VERSION = 60000;
|
|
||||||
|
|
||||||
// Used to bypass the rule against non-const reference to temporary
|
// Used to bypass the rule against non-const reference to temporary
|
||||||
// where it makes sense with wrappers such as CFlatData or CTxDB
|
// where it makes sense with wrappers such as CFlatData or CTxDB
|
||||||
template<typename T>
|
template<typename T>
|
||||||
|
|
|
@ -11,18 +11,8 @@
|
||||||
const std::string CLIENT_NAME("Satoshi");
|
const std::string CLIENT_NAME("Satoshi");
|
||||||
|
|
||||||
// Client version number
|
// Client version number
|
||||||
#define CLIENT_VERSION_MAJOR 0
|
|
||||||
#define CLIENT_VERSION_MINOR 6
|
|
||||||
#define CLIENT_VERSION_REVISION 0
|
|
||||||
#define CLIENT_VERSION_BUILD 99
|
|
||||||
#define CLIENT_VERSION_SUFFIX "-beta"
|
#define CLIENT_VERSION_SUFFIX "-beta"
|
||||||
|
|
||||||
const int CLIENT_VERSION = 1000000 * CLIENT_VERSION_MAJOR
|
|
||||||
+ 10000 * CLIENT_VERSION_MINOR
|
|
||||||
+ 100 * CLIENT_VERSION_REVISION
|
|
||||||
+ 1 * CLIENT_VERSION_BUILD;
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// The following part of the code determines the CLIENT_BUILD variable.
|
// The following part of the code determines the CLIENT_BUILD variable.
|
||||||
// Several mechanisms are used for this:
|
// Several mechanisms are used for this:
|
||||||
|
|
|
@ -6,9 +6,43 @@
|
||||||
|
|
||||||
#include <string>
|
#include <string>
|
||||||
|
|
||||||
|
//
|
||||||
|
// client versioning
|
||||||
|
//
|
||||||
|
|
||||||
|
static const int CLIENT_VERSION_MAJOR = 0;
|
||||||
|
static const int CLIENT_VERSION_MINOR = 6;
|
||||||
|
static const int CLIENT_VERSION_REVISION = 0;
|
||||||
|
static const int CLIENT_VERSION_BUILD = 99;
|
||||||
|
|
||||||
|
static const int CLIENT_VERSION =
|
||||||
|
1000000 * CLIENT_VERSION_MAJOR
|
||||||
|
+ 10000 * CLIENT_VERSION_MINOR
|
||||||
|
+ 100 * CLIENT_VERSION_REVISION
|
||||||
|
+ 1 * CLIENT_VERSION_BUILD;
|
||||||
|
|
||||||
extern const std::string CLIENT_NAME;
|
extern const std::string CLIENT_NAME;
|
||||||
extern const std::string CLIENT_BUILD;
|
extern const std::string CLIENT_BUILD;
|
||||||
extern const std::string CLIENT_DATE;
|
extern const std::string CLIENT_DATE;
|
||||||
extern const int CLIENT_VERSION;
|
|
||||||
|
//
|
||||||
|
// network protocol versioning
|
||||||
|
//
|
||||||
|
|
||||||
|
static const int PROTOCOL_VERSION = 60000;
|
||||||
|
|
||||||
|
// earlier versions not supported as of Feb 2012, and are disconnected
|
||||||
|
static const int MIN_PROTO_VERSION = 209;
|
||||||
|
|
||||||
|
// nTime field added to CAddress, starting with this version;
|
||||||
|
// if possible, avoid requesting addresses nodes older than this
|
||||||
|
static const int CADDR_TIME_VERSION = 31402;
|
||||||
|
|
||||||
|
// only request blocks from nodes outside this range of versions
|
||||||
|
static const int NOBLKS_VERSION_START = 32000;
|
||||||
|
static const int NOBLKS_VERSION_END = 32400;
|
||||||
|
|
||||||
|
// BIP 0031, pong message, is enabled for all versions AFTER this one
|
||||||
|
static const int BIP0031_VERSION = 60000;
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
Loading…
Reference in a new issue