Bitcoin
addrdb.h
Go to the documentation of this file.
1 // Copyright (c) 2009-2010 Satoshi Nakamoto
2 // Copyright (c) 2009-2018 The Bitcoin Core developers
3 // Distributed under the MIT software license, see the accompanying
4 // file COPYING or http://www.opensource.org/licenses/mit-license.php.
5 
6 #ifndef BITCOIN_ADDRDB_H
7 #define BITCOIN_ADDRDB_H
8 
9 #include <fs.h>
10 #include <serialize.h>
11 
12 #include <string>
13 #include <map>
14 
15 class CSubNet;
16 class CAddrMan;
17 class CDataStream;
18 
19 typedef enum BanReason
20 {
24 } BanReason;
25 
26 class CBanEntry
27 {
28 public:
29  static const int CURRENT_VERSION=1;
30  int nVersion;
34 
36  {
37  SetNull();
38  }
39 
40  explicit CBanEntry(int64_t nCreateTimeIn)
41  {
42  SetNull();
43  nCreateTime = nCreateTimeIn;
44  }
45 
46  explicit CBanEntry(int64_t n_create_time_in, BanReason ban_reason_in) : CBanEntry(n_create_time_in)
47  {
48  banReason = ban_reason_in;
49  }
50 
52 
53  template <typename Stream, typename Operation>
54  inline void SerializationOp(Stream& s, Operation ser_action) {
55  READWRITE(this->nVersion);
59  }
60 
61  void SetNull()
62  {
64  nCreateTime = 0;
65  nBanUntil = 0;
67  }
68 
69  std::string banReasonToString() const
70  {
71  switch (banReason) {
73  return "node misbehaving";
75  return "manually added";
76  default:
77  return "unknown";
78  }
79  }
80 };
81 
82 typedef std::map<CSubNet, CBanEntry> banmap_t;
83 
85 class CAddrDB
86 {
87 private:
88  fs::path pathAddr;
89 public:
90  CAddrDB();
91  bool Write(const CAddrMan& addr);
92  bool Read(CAddrMan& addr);
93  static bool Read(CAddrMan& addr, CDataStream& ssPeers);
94 };
95 
97 class CBanDB
98 {
99 private:
100  const fs::path m_ban_list_path;
101 public:
102  explicit CBanDB(fs::path ban_list_path);
103  bool Write(const banmap_t& banSet);
104  bool Read(banmap_t& banSet);
105 };
106 
107 #endif // BITCOIN_ADDRDB_H
void SetNull()
Definition: addrdb.h:61
Definition: addrdb.h:23
fs::path pathAddr
Definition: addrdb.h:88
BanReason
Definition: addrdb.h:19
int nVersion
Definition: addrdb.h:30
Definition: addrdb.h:21
CAddrDB()
Definition: addrdb.cpp:134
Definition: addrdb.h:85
CBanDB(fs::path ban_list_path)
Definition: addrdb.cpp:120
unsigned char uint8_t
Definition: stdint.h:19
bool Write(const banmap_t &banSet)
Definition: addrdb.cpp:124
ADD_SERIALIZE_METHODS
Definition: addrdb.h:51
Definition: addrdb.h:22
std::map< CSubNet, CBanEntry > banmap_t
Definition: addrdb.h:82
void SerializationOp(Stream &s, Operation ser_action)
Definition: addrdb.h:54
Definition: streams.h:203
bool Read(banmap_t &banSet)
Definition: addrdb.cpp:129
bool Read(CAddrMan &addr)
Definition: addrdb.cpp:144
Definition: netaddress.h:102
static const int CURRENT_VERSION
Definition: addrdb.h:29
Definition: addrdb.h:97
CBanEntry(int64_t nCreateTimeIn)
Definition: addrdb.h:40
std::string banReasonToString() const
Definition: addrdb.h:69
signed long long int64_t
Definition: stdint.h:18
int64_t nCreateTime
Definition: addrdb.h:31
Definition: addrman.h:175
bool Write(const CAddrMan &addr)
Definition: addrdb.cpp:139
Definition: addrdb.h:26
#define READWRITE(...)
Definition: serialize.h:184
CBanEntry(int64_t n_create_time_in, BanReason ban_reason_in)
Definition: addrdb.h:46
CBanEntry()
Definition: addrdb.h:35
const fs::path m_ban_list_path
Definition: addrdb.h:100
uint8_t banReason
Definition: addrdb.h:33
int64_t nBanUntil
Definition: addrdb.h:32