528472111b
Remove the nType and nVersion as parameters to all serialization methods and functions. There is only one place where it's read and has an impact (in CAddress), and even there it does not impact any of the recursively invoked serializers. Instead, the few places that need nType or nVersion are changed to read it directly from the stream object, through GetType() and GetVersion() methods which are added to all stream classes.
102 lines
2.1 KiB
C++
102 lines
2.1 KiB
C++
// Copyright (c) 2009-2010 Satoshi Nakamoto
|
|
// Copyright (c) 2009-2015 The Bitcoin Core developers
|
|
// Distributed under the MIT software license, see the accompanying
|
|
// file COPYING or http://www.opensource.org/licenses/mit-license.php.
|
|
|
|
#ifndef BITCOIN_ADDRDB_H
|
|
#define BITCOIN_ADDRDB_H
|
|
|
|
#include "serialize.h"
|
|
|
|
#include <string>
|
|
#include <map>
|
|
#include <boost/filesystem/path.hpp>
|
|
|
|
class CSubNet;
|
|
class CAddrMan;
|
|
class CDataStream;
|
|
|
|
typedef enum BanReason
|
|
{
|
|
BanReasonUnknown = 0,
|
|
BanReasonNodeMisbehaving = 1,
|
|
BanReasonManuallyAdded = 2
|
|
} BanReason;
|
|
|
|
class CBanEntry
|
|
{
|
|
public:
|
|
static const int CURRENT_VERSION=1;
|
|
int nVersion;
|
|
int64_t nCreateTime;
|
|
int64_t nBanUntil;
|
|
uint8_t banReason;
|
|
|
|
CBanEntry()
|
|
{
|
|
SetNull();
|
|
}
|
|
|
|
CBanEntry(int64_t nCreateTimeIn)
|
|
{
|
|
SetNull();
|
|
nCreateTime = nCreateTimeIn;
|
|
}
|
|
|
|
ADD_SERIALIZE_METHODS;
|
|
|
|
template <typename Stream, typename Operation>
|
|
inline void SerializationOp(Stream& s, Operation ser_action) {
|
|
READWRITE(this->nVersion);
|
|
READWRITE(nCreateTime);
|
|
READWRITE(nBanUntil);
|
|
READWRITE(banReason);
|
|
}
|
|
|
|
void SetNull()
|
|
{
|
|
nVersion = CBanEntry::CURRENT_VERSION;
|
|
nCreateTime = 0;
|
|
nBanUntil = 0;
|
|
banReason = BanReasonUnknown;
|
|
}
|
|
|
|
std::string banReasonToString()
|
|
{
|
|
switch (banReason) {
|
|
case BanReasonNodeMisbehaving:
|
|
return "node misbehaving";
|
|
case BanReasonManuallyAdded:
|
|
return "manually added";
|
|
default:
|
|
return "unknown";
|
|
}
|
|
}
|
|
};
|
|
|
|
typedef std::map<CSubNet, CBanEntry> banmap_t;
|
|
|
|
/** Access to the (IP) address database (peers.dat) */
|
|
class CAddrDB
|
|
{
|
|
private:
|
|
boost::filesystem::path pathAddr;
|
|
public:
|
|
CAddrDB();
|
|
bool Write(const CAddrMan& addr);
|
|
bool Read(CAddrMan& addr);
|
|
bool Read(CAddrMan& addr, CDataStream& ssPeers);
|
|
};
|
|
|
|
/** Access to the banlist database (banlist.dat) */
|
|
class CBanDB
|
|
{
|
|
private:
|
|
boost::filesystem::path pathBanlist;
|
|
public:
|
|
CBanDB();
|
|
bool Write(const banmap_t& banSet);
|
|
bool Read(banmap_t& banSet);
|
|
};
|
|
|
|
#endif // BITCOIN_ADDRDB_H
|