5 #ifndef BITCOIN_SEEDER_DB_H
6 #define BITCOIN_SEEDER_DB_H
24 #define MIN_RETRY 1000
26 #define REQUIRE_VERSION 70001
34 while (str.size() < 22) {
50 double f = exp(-age /
tau);
57 READWRITE(obj.weight, obj.count, obj.reliability);
133 if (total <= 3 && success * 2 >=
total) {
207 READWRITE(version, obj.ip, obj.services, obj.lastTry);
208 uint8_t tried = obj.ourLastTry != 0;
214 READWRITE(obj.ourLastTry, obj.ignoreTill, obj.stat2H, obj.stat8H,
215 obj.stat1D, obj.stat1W);
221 READWRITE(obj.total, obj.success, obj.clientVersion);
288 void Good_(
const CService &ip,
int clientV, std::string clientSV,
289 int blocks, uint64_t services);
296 void GetIPs_(std::set<CNetAddr> &ips, uint64_t requestedFlags, uint32_t max,
310 if (
ourId.size() > 0) {
318 for (std::map<int, SeederAddrInfo>::iterator it =
idToInfo.begin();
320 (*it).second.ignoreTill = 0;
325 std::vector<CAddrReport> ret;
327 for (std::deque<int>::const_iterator it =
ourId.begin();
328 it !=
ourId.end(); it++) {
346 template <
typename Stream>
void Serialize(Stream &s)
const {
355 for (std::deque<int>::const_iterator it =
ourId.begin();
356 it !=
ourId.end(); it++) {
357 std::map<int, SeederAddrInfo>::iterator ci =
db->
idToInfo.find(*it);
360 for (std::set<int>::const_iterator it =
unkId.begin();
361 it !=
unkId.end(); it++) {
362 std::map<int, SeederAddrInfo>::iterator ci =
db->
idToInfo.find(*it);
378 for (
int i = 0; i < n; i++) {
405 void Add(
const std::vector<CAddress> &vAddr,
bool fForce =
false) {
407 for (
size_t i = 0; i < vAddr.size(); i++) {
408 Add_(vAddr[i], fForce);
412 void GetMany(std::vector<CServiceResult> &ips,
int max,
int &wait) {
416 if (!
Get_(ip, wait)) {
426 for (
size_t i = 0; i < ips.size(); i++) {
428 Good_(ips[i].service, ips[i].nClientV, ips[i].strClientV,
429 ips[i].
nHeight, ips[i].services);
431 Bad_(ips[i].service, ips[i].nBanTime);
436 void GetIPs(std::set<CNetAddr> &ips, uint64_t requestedFlags, uint32_t max,
439 GetIPs_(ips, requestedFlags, max, nets);
const CChainParams & Params()
Return the currently selected parameters.
void Add(const CAddress &addr, bool fForce=false)
void Bad_(const CService &ip, int ban)
void ResultMany(const std::vector< CServiceResult > &ips)
void Good_(const CService &ip, int clientV, std::string clientSV, int blocks, uint64_t services)
void GetStats(CAddrDbStats &stats) const
void GetIPs_(std::set< CNetAddr > &ips, uint64_t requestedFlags, uint32_t max, const bool *nets)
void GetIPs(std::set< CNetAddr > &ips, uint64_t requestedFlags, uint32_t max, const bool *nets)
void Unserialize(Stream &s)
std::map< CService, int > ipToId
std::map< CService, int64_t > banned
std::vector< CAddrReport > GetAll()
std::map< int, SeederAddrInfo > idToInfo
void Add(const std::vector< CAddress > &vAddr, bool fForce=false)
void Serialize(Stream &s) const
void GetMany(std::vector< CServiceResult > &ips, int max, int &wait)
void Add_(const CAddress &addr, bool force)
bool Get_(CServiceResult &ip, int &wait)
int Lookup_(const CService &ip)
std::string clientSubVersion
SERIALIZE_METHODS(CAddrStat, obj)
void Update(bool good, int64_t age, double tau)
A CService with information about it as peer.
const CCheckpointData & Checkpoints() const
A combination of a network address (CNetAddr) and a (TCP) port.
std::string ToString() const
SERIALIZE_METHODS(SeederAddrInfo, obj)
int64_t GetIgnoreTime() const
CAddrReport GetReport() const
int64_t GetBanTime() const
std::string clientSubVersion
static const uint8_t tau[]
static uint16_t GetDefaultPort()
static int GetRequireHeight()
static std::string ToString(const CService &ip)
#define SER_WRITE(obj, code)
MapCheckpoints mapCheckpoints