Overwrite db services with version message results
This commit is contained in:
parent
529a667f30
commit
a1e9394284
5 changed files with 16 additions and 8 deletions
|
@ -275,9 +275,13 @@ public:
|
||||||
int GetStartingHeight() {
|
int GetStartingHeight() {
|
||||||
return nStartingHeight;
|
return nStartingHeight;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
uint64_t GetServices() {
|
||||||
|
return you.nServices;
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
bool TestNode(const CService &cip, int &ban, int &clientV, std::string &clientSV, int &blocks, vector<CAddress>* vAddr) {
|
bool TestNode(const CService &cip, int &ban, int &clientV, std::string &clientSV, int &blocks, vector<CAddress>* vAddr, uint64_t& services) {
|
||||||
try {
|
try {
|
||||||
CNode node(cip, vAddr);
|
CNode node(cip, vAddr);
|
||||||
bool ret = node.Run();
|
bool ret = node.Run();
|
||||||
|
@ -289,6 +293,7 @@ bool TestNode(const CService &cip, int &ban, int &clientV, std::string &clientSV
|
||||||
clientV = node.GetClientVersion();
|
clientV = node.GetClientVersion();
|
||||||
clientSV = node.GetClientSubVersion();
|
clientSV = node.GetClientSubVersion();
|
||||||
blocks = node.GetStartingHeight();
|
blocks = node.GetStartingHeight();
|
||||||
|
services = node.GetServices();
|
||||||
// printf("%s: %s!!!\n", cip.ToString().c_str(), ret ? "GOOD" : "BAD");
|
// printf("%s: %s!!!\n", cip.ToString().c_str(), ret ? "GOOD" : "BAD");
|
||||||
return ret;
|
return ret;
|
||||||
} catch(std::ios_base::failure& e) {
|
} catch(std::ios_base::failure& e) {
|
||||||
|
|
|
@ -3,6 +3,6 @@
|
||||||
|
|
||||||
#include "protocol.h"
|
#include "protocol.h"
|
||||||
|
|
||||||
bool TestNode(const CService &cip, int &ban, int &client, std::string &clientSV, int &blocks, std::vector<CAddress>* vAddr);
|
bool TestNode(const CService &cip, int &ban, int &client, std::string &clientSV, int &blocks, std::vector<CAddress>* vAddr, uint64_t& services);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
3
db.cpp
3
db.cpp
|
@ -69,7 +69,7 @@ int CAddrDb::Lookup_(const CService &ip) {
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
void CAddrDb::Good_(const CService &addr, int clientV, std::string clientSV, int blocks) {
|
void CAddrDb::Good_(const CService &addr, int clientV, std::string clientSV, int blocks, uint64_t services) {
|
||||||
int id = Lookup_(addr);
|
int id = Lookup_(addr);
|
||||||
if (id == -1) return;
|
if (id == -1) return;
|
||||||
unkId.erase(id);
|
unkId.erase(id);
|
||||||
|
@ -78,6 +78,7 @@ void CAddrDb::Good_(const CService &addr, int clientV, std::string clientSV, int
|
||||||
info.clientVersion = clientV;
|
info.clientVersion = clientV;
|
||||||
info.clientSubVersion = clientSV;
|
info.clientSubVersion = clientSV;
|
||||||
info.blocks = blocks;
|
info.blocks = blocks;
|
||||||
|
info.services = services;
|
||||||
info.Update(true);
|
info.Update(true);
|
||||||
if (info.IsGood() && goodId.count(id)==0) {
|
if (info.IsGood() && goodId.count(id)==0) {
|
||||||
goodId.insert(id);
|
goodId.insert(id);
|
||||||
|
|
9
db.h
9
db.h
|
@ -183,6 +183,7 @@ public:
|
||||||
|
|
||||||
struct CServiceResult {
|
struct CServiceResult {
|
||||||
CService service;
|
CService service;
|
||||||
|
uint64_t services;
|
||||||
bool fGood;
|
bool fGood;
|
||||||
int nBanTime;
|
int nBanTime;
|
||||||
int nHeight;
|
int nHeight;
|
||||||
|
@ -215,7 +216,7 @@ protected:
|
||||||
void Add_(const CAddress &addr, bool force); // add an address
|
void Add_(const CAddress &addr, bool force); // add an address
|
||||||
bool Get_(CServiceResult &ip, int& wait); // get an IP to test (must call Good_, Bad_, or Skipped_ on result afterwards)
|
bool Get_(CServiceResult &ip, int& wait); // get an IP to test (must call Good_, Bad_, or Skipped_ on result afterwards)
|
||||||
bool GetMany_(std::vector<CServiceResult> &ips, int max, int& wait);
|
bool GetMany_(std::vector<CServiceResult> &ips, int max, int& wait);
|
||||||
void Good_(const CService &ip, int clientV, std::string clientSV, int blocks); // mark an IP as good (must have been returned by Get_)
|
void Good_(const CService &ip, int clientV, std::string clientSV, int blocks, uint64_t services); // mark an IP as good (must have been returned by Get_)
|
||||||
void Bad_(const CService &ip, int ban); // mark an IP as bad (and optionally ban it) (must have been returned by Get_)
|
void Bad_(const CService &ip, int ban); // mark an IP as bad (and optionally ban it) (must have been returned by Get_)
|
||||||
void Skipped_(const CService &ip); // mark an IP as skipped (must have been returned by Get_)
|
void Skipped_(const CService &ip); // mark an IP as skipped (must have been returned by Get_)
|
||||||
int Lookup_(const CService &ip); // look up id of an IP
|
int Lookup_(const CService &ip); // look up id of an IP
|
||||||
|
@ -313,9 +314,9 @@ public:
|
||||||
for (int i=0; i<vAddr.size(); i++)
|
for (int i=0; i<vAddr.size(); i++)
|
||||||
Add_(vAddr[i], fForce);
|
Add_(vAddr[i], fForce);
|
||||||
}
|
}
|
||||||
void Good(const CService &addr, int clientVersion, std::string clientSubVersion, int blocks) {
|
void Good(const CService &addr, int clientVersion, std::string clientSubVersion, int blocks, uint64_t services) {
|
||||||
CRITICAL_BLOCK(cs)
|
CRITICAL_BLOCK(cs)
|
||||||
Good_(addr, clientVersion, clientSubVersion, blocks);
|
Good_(addr, clientVersion, clientSubVersion, blocks, services);
|
||||||
}
|
}
|
||||||
void Skipped(const CService &addr) {
|
void Skipped(const CService &addr) {
|
||||||
CRITICAL_BLOCK(cs)
|
CRITICAL_BLOCK(cs)
|
||||||
|
@ -344,7 +345,7 @@ public:
|
||||||
CRITICAL_BLOCK(cs) {
|
CRITICAL_BLOCK(cs) {
|
||||||
for (int i=0; i<ips.size(); i++) {
|
for (int i=0; i<ips.size(); i++) {
|
||||||
if (ips[i].fGood) {
|
if (ips[i].fGood) {
|
||||||
Good_(ips[i].service, ips[i].nClientV, ips[i].strClientV, ips[i].nHeight);
|
Good_(ips[i].service, ips[i].nClientV, ips[i].strClientV, ips[i].nHeight, ips[i].services);
|
||||||
} else {
|
} else {
|
||||||
Bad_(ips[i].service, ips[i].nBanTime);
|
Bad_(ips[i].service, ips[i].nBanTime);
|
||||||
}
|
}
|
||||||
|
|
3
main.cpp
3
main.cpp
|
@ -187,8 +187,9 @@ extern "C" void* ThreadCrawler(void* data) {
|
||||||
res.nClientV = 0;
|
res.nClientV = 0;
|
||||||
res.nHeight = 0;
|
res.nHeight = 0;
|
||||||
res.strClientV = "";
|
res.strClientV = "";
|
||||||
|
res.services = 0;
|
||||||
bool getaddr = res.ourLastSuccess + 86400 < now;
|
bool getaddr = res.ourLastSuccess + 86400 < now;
|
||||||
res.fGood = TestNode(res.service,res.nBanTime,res.nClientV,res.strClientV,res.nHeight,getaddr ? &addr : NULL);
|
res.fGood = TestNode(res.service,res.nBanTime,res.nClientV,res.strClientV,res.nHeight,getaddr ? &addr : NULL, res.services);
|
||||||
}
|
}
|
||||||
db.ResultMany(ips);
|
db.ResultMany(ips);
|
||||||
db.Add(addr);
|
db.Add(addr);
|
||||||
|
|
Loading…
Reference in a new issue