mirror of
https://github.com/dashpay/dash.git
synced 2024-12-26 20:42:59 +01:00
Merge pull request #3296
a946aa8
Store and use a sanitized subVer (Mike Hearn)ba6a4ea
Add some additional logging to give extra network insight. (Mike Hearn)
This commit is contained in:
commit
e1169d7eea
22
src/main.cpp
22
src/main.cpp
@ -797,9 +797,6 @@ bool AcceptToMemoryPool(CTxMemPool& pool, CValidationState &state, const CTransa
|
|||||||
g_signals.EraseTransaction(ptxOld->GetHash());
|
g_signals.EraseTransaction(ptxOld->GetHash());
|
||||||
g_signals.SyncTransaction(hash, tx, NULL);
|
g_signals.SyncTransaction(hash, tx, NULL);
|
||||||
|
|
||||||
LogPrint("mempool", "AcceptToMemoryPool: : accepted %s (poolsz %"PRIszu")\n",
|
|
||||||
hash.ToString().c_str(),
|
|
||||||
pool.mapTx.size());
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -3100,8 +3097,10 @@ bool static ProcessMessage(CNode* pfrom, string strCommand, CDataStream& vRecv)
|
|||||||
pfrom->nVersion = 300;
|
pfrom->nVersion = 300;
|
||||||
if (!vRecv.empty())
|
if (!vRecv.empty())
|
||||||
vRecv >> addrFrom >> nNonce;
|
vRecv >> addrFrom >> nNonce;
|
||||||
if (!vRecv.empty())
|
if (!vRecv.empty()) {
|
||||||
vRecv >> pfrom->strSubVer;
|
vRecv >> pfrom->strSubVer;
|
||||||
|
pfrom->cleanSubVer = SanitizeString(pfrom->strSubVer);
|
||||||
|
}
|
||||||
if (!vRecv.empty())
|
if (!vRecv.empty())
|
||||||
vRecv >> pfrom->nStartingHeight;
|
vRecv >> pfrom->nStartingHeight;
|
||||||
if (!vRecv.empty())
|
if (!vRecv.empty())
|
||||||
@ -3168,7 +3167,7 @@ bool static ProcessMessage(CNode* pfrom, string strCommand, CDataStream& vRecv)
|
|||||||
|
|
||||||
pfrom->fSuccessfullyConnected = true;
|
pfrom->fSuccessfullyConnected = true;
|
||||||
|
|
||||||
LogPrintf("receive version message: version %d, blocks=%d, us=%s, them=%s, peer=%s\n", pfrom->nVersion, pfrom->nStartingHeight, addrMe.ToString().c_str(), addrFrom.ToString().c_str(), pfrom->addr.ToString().c_str());
|
LogPrintf("receive version message: %s: version %d, blocks=%d, us=%s, them=%s, peer=%s\n", pfrom->cleanSubVer.c_str(), pfrom->nVersion, pfrom->nStartingHeight, addrMe.ToString().c_str(), addrFrom.ToString().c_str(), pfrom->addr.ToString().c_str());
|
||||||
|
|
||||||
AddTimeData(pfrom->addr, nTime);
|
AddTimeData(pfrom->addr, nTime);
|
||||||
|
|
||||||
@ -3427,6 +3426,12 @@ bool static ProcessMessage(CNode* pfrom, string strCommand, CDataStream& vRecv)
|
|||||||
vWorkQueue.push_back(inv.hash);
|
vWorkQueue.push_back(inv.hash);
|
||||||
vEraseQueue.push_back(inv.hash);
|
vEraseQueue.push_back(inv.hash);
|
||||||
|
|
||||||
|
|
||||||
|
LogPrint("mempool", "AcceptToMemoryPool: %s %s : accepted %s (poolsz %"PRIszu")\n",
|
||||||
|
pfrom->addr.ToString().c_str(), pfrom->cleanSubVer.c_str(),
|
||||||
|
tx.GetHash().ToString().c_str(),
|
||||||
|
mempool.mapTx.size());
|
||||||
|
|
||||||
// Recursively process any orphan transactions that depended on this one
|
// Recursively process any orphan transactions that depended on this one
|
||||||
for (unsigned int i = 0; i < vWorkQueue.size(); i++)
|
for (unsigned int i = 0; i < vWorkQueue.size(); i++)
|
||||||
{
|
{
|
||||||
@ -3475,7 +3480,10 @@ bool static ProcessMessage(CNode* pfrom, string strCommand, CDataStream& vRecv)
|
|||||||
}
|
}
|
||||||
int nDoS = 0;
|
int nDoS = 0;
|
||||||
if (state.IsInvalid(nDoS))
|
if (state.IsInvalid(nDoS))
|
||||||
{
|
{
|
||||||
|
LogPrint("mempool", "%s from %s %s was not accepted into the memory pool: %s\n", tx.GetHash().ToString().c_str(),
|
||||||
|
pfrom->addr.ToString().c_str(), pfrom->cleanSubVer.c_str(),
|
||||||
|
state.GetRejectReason().c_str());
|
||||||
pfrom->PushMessage("reject", strCommand, state.GetRejectCode(),
|
pfrom->PushMessage("reject", strCommand, state.GetRejectCode(),
|
||||||
state.GetRejectReason(), inv.hash);
|
state.GetRejectReason(), inv.hash);
|
||||||
if (nDoS > 0)
|
if (nDoS > 0)
|
||||||
@ -3612,7 +3620,7 @@ bool static ProcessMessage(CNode* pfrom, string strCommand, CDataStream& vRecv)
|
|||||||
if (!(sProblem.empty())) {
|
if (!(sProblem.empty())) {
|
||||||
LogPrint("net", "pong %s %s: %s, %"PRIx64" expected, %"PRIx64" received, %"PRIszu" bytes\n",
|
LogPrint("net", "pong %s %s: %s, %"PRIx64" expected, %"PRIx64" received, %"PRIszu" bytes\n",
|
||||||
pfrom->addr.ToString().c_str(),
|
pfrom->addr.ToString().c_str(),
|
||||||
pfrom->strSubVer.c_str(),
|
pfrom->cleanSubVer.c_str(),
|
||||||
sProblem.c_str(),
|
sProblem.c_str(),
|
||||||
pfrom->nPingNonceSent,
|
pfrom->nPingNonceSent,
|
||||||
nonce,
|
nonce,
|
||||||
|
@ -616,7 +616,7 @@ void CNode::copyStats(CNodeStats &stats)
|
|||||||
X(nTimeConnected);
|
X(nTimeConnected);
|
||||||
X(addrName);
|
X(addrName);
|
||||||
X(nVersion);
|
X(nVersion);
|
||||||
X(strSubVer);
|
X(cleanSubVer);
|
||||||
X(fInbound);
|
X(fInbound);
|
||||||
X(nStartingHeight);
|
X(nStartingHeight);
|
||||||
X(nMisbehavior);
|
X(nMisbehavior);
|
||||||
|
@ -121,7 +121,7 @@ public:
|
|||||||
int64_t nTimeConnected;
|
int64_t nTimeConnected;
|
||||||
std::string addrName;
|
std::string addrName;
|
||||||
int nVersion;
|
int nVersion;
|
||||||
std::string strSubVer;
|
std::string cleanSubVer;
|
||||||
bool fInbound;
|
bool fInbound;
|
||||||
int nStartingHeight;
|
int nStartingHeight;
|
||||||
int nMisbehavior;
|
int nMisbehavior;
|
||||||
@ -203,7 +203,11 @@ public:
|
|||||||
std::string addrName;
|
std::string addrName;
|
||||||
CService addrLocal;
|
CService addrLocal;
|
||||||
int nVersion;
|
int nVersion;
|
||||||
std::string strSubVer;
|
// strSubVer is whatever byte array we read from the wire. However, this field is intended
|
||||||
|
// to be printed out, displayed to humans in various forms and so on. So we sanitize it and
|
||||||
|
// store the sanitized version in cleanSubVer. The original should be used when dealing with
|
||||||
|
// the network or wire types and the cleaned string used when displayed or logged.
|
||||||
|
std::string strSubVer, cleanSubVer;
|
||||||
bool fOneShot;
|
bool fOneShot;
|
||||||
bool fClient;
|
bool fClient;
|
||||||
bool fInbound;
|
bool fInbound;
|
||||||
|
@ -126,7 +126,10 @@ Value getpeerinfo(const Array& params, bool fHelp)
|
|||||||
if (stats.dPingWait > 0.0)
|
if (stats.dPingWait > 0.0)
|
||||||
obj.push_back(Pair("pingwait", stats.dPingWait));
|
obj.push_back(Pair("pingwait", stats.dPingWait));
|
||||||
obj.push_back(Pair("version", stats.nVersion));
|
obj.push_back(Pair("version", stats.nVersion));
|
||||||
obj.push_back(Pair("subver", stats.strSubVer));
|
// Use the sanitized form of subver here, to avoid tricksy remote peers from
|
||||||
|
// corrupting or modifiying the JSON output by putting special characters in
|
||||||
|
// their ver message.
|
||||||
|
obj.push_back(Pair("subver", stats.cleanSubVer));
|
||||||
obj.push_back(Pair("inbound", stats.fInbound));
|
obj.push_back(Pair("inbound", stats.fInbound));
|
||||||
obj.push_back(Pair("startingheight", stats.nStartingHeight));
|
obj.push_back(Pair("startingheight", stats.nStartingHeight));
|
||||||
obj.push_back(Pair("banscore", stats.nMisbehavior));
|
obj.push_back(Pair("banscore", stats.nMisbehavior));
|
||||||
|
Loading…
Reference in New Issue
Block a user