mirror of
https://github.com/bitcoin/bitcoin.git
synced 2025-06-13 10:21:34 +02:00
scripted-diff: rename NetPermissionFlags enumerators
- drop redundant PF_ permission flags prefixes - drop ALL_CAPS naming per https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines#Renum-caps - rename IsImplicit to Implicit -BEGIN VERIFY SCRIPT- s() { git grep -l "$1" src | xargs sed -i "s/$1/$2/g"; } s 'PF_NONE' 'None' s 'PF_BLOOMFILTER' 'BloomFilter' s 'PF_RELAY' 'Relay' s 'PF_FORCERELAY' 'ForceRelay' s 'PF_DOWNLOAD' 'Download' s 'PF_NOBAN' 'NoBan' s 'PF_MEMPOOL' 'Mempool' s 'PF_ADDR' 'Addr' s 'PF_ISIMPLICIT' 'Implicit' s 'PF_ALL' 'All' -END VERIFY SCRIPT-
This commit is contained in:
parent
810d0929c1
commit
a95540cf43
34
src/net.cpp
34
src/net.cpp
@ -1005,7 +1005,7 @@ bool CConnman::AttemptToEvictConnection()
|
|||||||
|
|
||||||
LOCK(cs_vNodes);
|
LOCK(cs_vNodes);
|
||||||
for (const CNode* node : vNodes) {
|
for (const CNode* node : vNodes) {
|
||||||
if (node->HasPermission(NetPermissionFlags::PF_NOBAN))
|
if (node->HasPermission(NetPermissionFlags::NoBan))
|
||||||
continue;
|
continue;
|
||||||
if (!node->IsInboundConn())
|
if (!node->IsInboundConn())
|
||||||
continue;
|
continue;
|
||||||
@ -1062,7 +1062,7 @@ void CConnman::AcceptConnection(const ListenSocket& hListenSocket) {
|
|||||||
|
|
||||||
const CAddress addr_bind = GetBindAddress(hSocket);
|
const CAddress addr_bind = GetBindAddress(hSocket);
|
||||||
|
|
||||||
NetPermissionFlags permissionFlags = NetPermissionFlags::PF_NONE;
|
NetPermissionFlags permissionFlags = NetPermissionFlags::None;
|
||||||
hListenSocket.AddSocketPermissionFlags(permissionFlags);
|
hListenSocket.AddSocketPermissionFlags(permissionFlags);
|
||||||
|
|
||||||
CreateNodeFromAcceptedSocket(hSocket, permissionFlags, addr_bind, addr);
|
CreateNodeFromAcceptedSocket(hSocket, permissionFlags, addr_bind, addr);
|
||||||
@ -1077,12 +1077,12 @@ void CConnman::CreateNodeFromAcceptedSocket(SOCKET hSocket,
|
|||||||
int nMaxInbound = nMaxConnections - m_max_outbound;
|
int nMaxInbound = nMaxConnections - m_max_outbound;
|
||||||
|
|
||||||
AddWhitelistPermissionFlags(permissionFlags, addr);
|
AddWhitelistPermissionFlags(permissionFlags, addr);
|
||||||
if (NetPermissions::HasFlag(permissionFlags, NetPermissionFlags::PF_ISIMPLICIT)) {
|
if (NetPermissions::HasFlag(permissionFlags, NetPermissionFlags::Implicit)) {
|
||||||
NetPermissions::ClearFlag(permissionFlags, NetPermissionFlags::PF_ISIMPLICIT);
|
NetPermissions::ClearFlag(permissionFlags, NetPermissionFlags::Implicit);
|
||||||
if (gArgs.GetBoolArg("-whitelistforcerelay", DEFAULT_WHITELISTFORCERELAY)) NetPermissions::AddFlag(permissionFlags, NetPermissionFlags::PF_FORCERELAY);
|
if (gArgs.GetBoolArg("-whitelistforcerelay", DEFAULT_WHITELISTFORCERELAY)) NetPermissions::AddFlag(permissionFlags, NetPermissionFlags::ForceRelay);
|
||||||
if (gArgs.GetBoolArg("-whitelistrelay", DEFAULT_WHITELISTRELAY)) NetPermissions::AddFlag(permissionFlags, NetPermissionFlags::PF_RELAY);
|
if (gArgs.GetBoolArg("-whitelistrelay", DEFAULT_WHITELISTRELAY)) NetPermissions::AddFlag(permissionFlags, NetPermissionFlags::Relay);
|
||||||
NetPermissions::AddFlag(permissionFlags, NetPermissionFlags::PF_MEMPOOL);
|
NetPermissions::AddFlag(permissionFlags, NetPermissionFlags::Mempool);
|
||||||
NetPermissions::AddFlag(permissionFlags, NetPermissionFlags::PF_NOBAN);
|
NetPermissions::AddFlag(permissionFlags, NetPermissionFlags::NoBan);
|
||||||
}
|
}
|
||||||
|
|
||||||
{
|
{
|
||||||
@ -1111,7 +1111,7 @@ void CConnman::CreateNodeFromAcceptedSocket(SOCKET hSocket,
|
|||||||
|
|
||||||
// Don't accept connections from banned peers.
|
// Don't accept connections from banned peers.
|
||||||
bool banned = m_banman && m_banman->IsBanned(addr);
|
bool banned = m_banman && m_banman->IsBanned(addr);
|
||||||
if (!NetPermissions::HasFlag(permissionFlags, NetPermissionFlags::PF_NOBAN) && banned)
|
if (!NetPermissions::HasFlag(permissionFlags, NetPermissionFlags::NoBan) && banned)
|
||||||
{
|
{
|
||||||
LogPrint(BCLog::NET, "connection from %s dropped (banned)\n", addr.ToString());
|
LogPrint(BCLog::NET, "connection from %s dropped (banned)\n", addr.ToString());
|
||||||
CloseSocket(hSocket);
|
CloseSocket(hSocket);
|
||||||
@ -1120,7 +1120,7 @@ void CConnman::CreateNodeFromAcceptedSocket(SOCKET hSocket,
|
|||||||
|
|
||||||
// Only accept connections from discouraged peers if our inbound slots aren't (almost) full.
|
// Only accept connections from discouraged peers if our inbound slots aren't (almost) full.
|
||||||
bool discouraged = m_banman && m_banman->IsDiscouraged(addr);
|
bool discouraged = m_banman && m_banman->IsDiscouraged(addr);
|
||||||
if (!NetPermissions::HasFlag(permissionFlags, NetPermissionFlags::PF_NOBAN) && nInbound + 1 >= nMaxInbound && discouraged)
|
if (!NetPermissions::HasFlag(permissionFlags, NetPermissionFlags::NoBan) && nInbound + 1 >= nMaxInbound && discouraged)
|
||||||
{
|
{
|
||||||
LogPrint(BCLog::NET, "connection from %s dropped (discouraged)\n", addr.ToString());
|
LogPrint(BCLog::NET, "connection from %s dropped (discouraged)\n", addr.ToString());
|
||||||
CloseSocket(hSocket);
|
CloseSocket(hSocket);
|
||||||
@ -1141,7 +1141,7 @@ void CConnman::CreateNodeFromAcceptedSocket(SOCKET hSocket,
|
|||||||
uint64_t nonce = GetDeterministicRandomizer(RANDOMIZER_ID_LOCALHOSTNONCE).Write(id).Finalize();
|
uint64_t nonce = GetDeterministicRandomizer(RANDOMIZER_ID_LOCALHOSTNONCE).Write(id).Finalize();
|
||||||
|
|
||||||
ServiceFlags nodeServices = nLocalServices;
|
ServiceFlags nodeServices = nLocalServices;
|
||||||
if (NetPermissions::HasFlag(permissionFlags, NetPermissionFlags::PF_BLOOMFILTER)) {
|
if (NetPermissions::HasFlag(permissionFlags, NetPermissionFlags::BloomFilter)) {
|
||||||
nodeServices = static_cast<ServiceFlags>(nodeServices | NODE_BLOOM);
|
nodeServices = static_cast<ServiceFlags>(nodeServices | NODE_BLOOM);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2253,7 +2253,7 @@ void CConnman::ThreadI2PAcceptIncoming()
|
|||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
CreateNodeFromAcceptedSocket(conn.sock->Release(), NetPermissionFlags::PF_NONE,
|
CreateNodeFromAcceptedSocket(conn.sock->Release(), NetPermissionFlags::None,
|
||||||
CAddress{conn.me, NODE_NONE}, CAddress{conn.peer, NODE_NONE});
|
CAddress{conn.me, NODE_NONE}, CAddress{conn.peer, NODE_NONE});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -2411,7 +2411,7 @@ bool CConnman::Bind(const CService &addr, unsigned int flags, NetPermissionFlags
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (addr.IsRoutable() && fDiscover && !(flags & BF_DONT_ADVERTISE) && !NetPermissions::HasFlag(permissions, NetPermissionFlags::PF_NOBAN)) {
|
if (addr.IsRoutable() && fDiscover && !(flags & BF_DONT_ADVERTISE) && !NetPermissions::HasFlag(permissions, NetPermissionFlags::NoBan)) {
|
||||||
AddLocal(addr, LOCAL_BIND);
|
AddLocal(addr, LOCAL_BIND);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2425,7 +2425,7 @@ bool CConnman::InitBinds(
|
|||||||
{
|
{
|
||||||
bool fBound = false;
|
bool fBound = false;
|
||||||
for (const auto& addrBind : binds) {
|
for (const auto& addrBind : binds) {
|
||||||
fBound |= Bind(addrBind, (BF_EXPLICIT | BF_REPORT_ERROR), NetPermissionFlags::PF_NONE);
|
fBound |= Bind(addrBind, (BF_EXPLICIT | BF_REPORT_ERROR), NetPermissionFlags::None);
|
||||||
}
|
}
|
||||||
for (const auto& addrBind : whiteBinds) {
|
for (const auto& addrBind : whiteBinds) {
|
||||||
fBound |= Bind(addrBind.m_service, (BF_EXPLICIT | BF_REPORT_ERROR), addrBind.m_flags);
|
fBound |= Bind(addrBind.m_service, (BF_EXPLICIT | BF_REPORT_ERROR), addrBind.m_flags);
|
||||||
@ -2434,12 +2434,12 @@ bool CConnman::InitBinds(
|
|||||||
struct in_addr inaddr_any;
|
struct in_addr inaddr_any;
|
||||||
inaddr_any.s_addr = htonl(INADDR_ANY);
|
inaddr_any.s_addr = htonl(INADDR_ANY);
|
||||||
struct in6_addr inaddr6_any = IN6ADDR_ANY_INIT;
|
struct in6_addr inaddr6_any = IN6ADDR_ANY_INIT;
|
||||||
fBound |= Bind(CService(inaddr6_any, GetListenPort()), BF_NONE, NetPermissionFlags::PF_NONE);
|
fBound |= Bind(CService(inaddr6_any, GetListenPort()), BF_NONE, NetPermissionFlags::None);
|
||||||
fBound |= Bind(CService(inaddr_any, GetListenPort()), !fBound ? BF_REPORT_ERROR : BF_NONE, NetPermissionFlags::PF_NONE);
|
fBound |= Bind(CService(inaddr_any, GetListenPort()), !fBound ? BF_REPORT_ERROR : BF_NONE, NetPermissionFlags::None);
|
||||||
}
|
}
|
||||||
|
|
||||||
for (const auto& addr_bind : onion_binds) {
|
for (const auto& addr_bind : onion_binds) {
|
||||||
fBound |= Bind(addr_bind, BF_EXPLICIT | BF_DONT_ADVERTISE, NetPermissionFlags::PF_NONE);
|
fBound |= Bind(addr_bind, BF_EXPLICIT | BF_DONT_ADVERTISE, NetPermissionFlags::None);
|
||||||
}
|
}
|
||||||
|
|
||||||
return fBound;
|
return fBound;
|
||||||
|
@ -402,7 +402,7 @@ public:
|
|||||||
std::unique_ptr<TransportDeserializer> m_deserializer;
|
std::unique_ptr<TransportDeserializer> m_deserializer;
|
||||||
std::unique_ptr<TransportSerializer> m_serializer;
|
std::unique_ptr<TransportSerializer> m_serializer;
|
||||||
|
|
||||||
NetPermissionFlags m_permissionFlags{NetPermissionFlags::PF_NONE};
|
NetPermissionFlags m_permissionFlags{NetPermissionFlags::None};
|
||||||
std::atomic<ServiceFlags> nServices{NODE_NONE};
|
std::atomic<ServiceFlags> nServices{NODE_NONE};
|
||||||
SOCKET hSocket GUARDED_BY(cs_hSocket);
|
SOCKET hSocket GUARDED_BY(cs_hSocket);
|
||||||
/** Total size of all vSendMsg entries */
|
/** Total size of all vSendMsg entries */
|
||||||
|
@ -23,12 +23,12 @@ namespace {
|
|||||||
// The parse the following format "perm1,perm2@xxxxxx"
|
// The parse the following format "perm1,perm2@xxxxxx"
|
||||||
bool TryParsePermissionFlags(const std::string str, NetPermissionFlags& output, size_t& readen, bilingual_str& error)
|
bool TryParsePermissionFlags(const std::string str, NetPermissionFlags& output, size_t& readen, bilingual_str& error)
|
||||||
{
|
{
|
||||||
NetPermissionFlags flags = NetPermissionFlags::PF_NONE;
|
NetPermissionFlags flags = NetPermissionFlags::None;
|
||||||
const auto atSeparator = str.find('@');
|
const auto atSeparator = str.find('@');
|
||||||
|
|
||||||
// if '@' is not found (ie, "xxxxx"), the caller should apply implicit permissions
|
// if '@' is not found (ie, "xxxxx"), the caller should apply implicit permissions
|
||||||
if (atSeparator == std::string::npos) {
|
if (atSeparator == std::string::npos) {
|
||||||
NetPermissions::AddFlag(flags, NetPermissionFlags::PF_ISIMPLICIT);
|
NetPermissions::AddFlag(flags, NetPermissionFlags::Implicit);
|
||||||
readen = 0;
|
readen = 0;
|
||||||
}
|
}
|
||||||
// else (ie, "perm1,perm2@xxxxx"), let's enumerate the permissions by splitting by ',' and calculate the flags
|
// else (ie, "perm1,perm2@xxxxx"), let's enumerate the permissions by splitting by ',' and calculate the flags
|
||||||
@ -44,14 +44,14 @@ bool TryParsePermissionFlags(const std::string str, NetPermissionFlags& output,
|
|||||||
readen += len; // We read "perm1"
|
readen += len; // We read "perm1"
|
||||||
if (commaSeparator != std::string::npos) readen++; // We read ","
|
if (commaSeparator != std::string::npos) readen++; // We read ","
|
||||||
|
|
||||||
if (permission == "bloomfilter" || permission == "bloom") NetPermissions::AddFlag(flags, NetPermissionFlags::PF_BLOOMFILTER);
|
if (permission == "bloomfilter" || permission == "bloom") NetPermissions::AddFlag(flags, NetPermissionFlags::BloomFilter);
|
||||||
else if (permission == "noban") NetPermissions::AddFlag(flags, NetPermissionFlags::PF_NOBAN);
|
else if (permission == "noban") NetPermissions::AddFlag(flags, NetPermissionFlags::NoBan);
|
||||||
else if (permission == "forcerelay") NetPermissions::AddFlag(flags, NetPermissionFlags::PF_FORCERELAY);
|
else if (permission == "forcerelay") NetPermissions::AddFlag(flags, NetPermissionFlags::ForceRelay);
|
||||||
else if (permission == "mempool") NetPermissions::AddFlag(flags, NetPermissionFlags::PF_MEMPOOL);
|
else if (permission == "mempool") NetPermissions::AddFlag(flags, NetPermissionFlags::Mempool);
|
||||||
else if (permission == "download") NetPermissions::AddFlag(flags, NetPermissionFlags::PF_DOWNLOAD);
|
else if (permission == "download") NetPermissions::AddFlag(flags, NetPermissionFlags::Download);
|
||||||
else if (permission == "all") NetPermissions::AddFlag(flags, NetPermissionFlags::PF_ALL);
|
else if (permission == "all") NetPermissions::AddFlag(flags, NetPermissionFlags::All);
|
||||||
else if (permission == "relay") NetPermissions::AddFlag(flags, NetPermissionFlags::PF_RELAY);
|
else if (permission == "relay") NetPermissions::AddFlag(flags, NetPermissionFlags::Relay);
|
||||||
else if (permission == "addr") NetPermissions::AddFlag(flags, NetPermissionFlags::PF_ADDR);
|
else if (permission == "addr") NetPermissions::AddFlag(flags, NetPermissionFlags::Addr);
|
||||||
else if (permission.length() == 0); // Allow empty entries
|
else if (permission.length() == 0); // Allow empty entries
|
||||||
else {
|
else {
|
||||||
error = strprintf(_("Invalid P2P permission: '%s'"), permission);
|
error = strprintf(_("Invalid P2P permission: '%s'"), permission);
|
||||||
@ -71,13 +71,13 @@ bool TryParsePermissionFlags(const std::string str, NetPermissionFlags& output,
|
|||||||
std::vector<std::string> NetPermissions::ToStrings(NetPermissionFlags flags)
|
std::vector<std::string> NetPermissions::ToStrings(NetPermissionFlags flags)
|
||||||
{
|
{
|
||||||
std::vector<std::string> strings;
|
std::vector<std::string> strings;
|
||||||
if (NetPermissions::HasFlag(flags, NetPermissionFlags::PF_BLOOMFILTER)) strings.push_back("bloomfilter");
|
if (NetPermissions::HasFlag(flags, NetPermissionFlags::BloomFilter)) strings.push_back("bloomfilter");
|
||||||
if (NetPermissions::HasFlag(flags, NetPermissionFlags::PF_NOBAN)) strings.push_back("noban");
|
if (NetPermissions::HasFlag(flags, NetPermissionFlags::NoBan)) strings.push_back("noban");
|
||||||
if (NetPermissions::HasFlag(flags, NetPermissionFlags::PF_FORCERELAY)) strings.push_back("forcerelay");
|
if (NetPermissions::HasFlag(flags, NetPermissionFlags::ForceRelay)) strings.push_back("forcerelay");
|
||||||
if (NetPermissions::HasFlag(flags, NetPermissionFlags::PF_RELAY)) strings.push_back("relay");
|
if (NetPermissions::HasFlag(flags, NetPermissionFlags::Relay)) strings.push_back("relay");
|
||||||
if (NetPermissions::HasFlag(flags, NetPermissionFlags::PF_MEMPOOL)) strings.push_back("mempool");
|
if (NetPermissions::HasFlag(flags, NetPermissionFlags::Mempool)) strings.push_back("mempool");
|
||||||
if (NetPermissions::HasFlag(flags, NetPermissionFlags::PF_DOWNLOAD)) strings.push_back("download");
|
if (NetPermissions::HasFlag(flags, NetPermissionFlags::Download)) strings.push_back("download");
|
||||||
if (NetPermissions::HasFlag(flags, NetPermissionFlags::PF_ADDR)) strings.push_back("addr");
|
if (NetPermissions::HasFlag(flags, NetPermissionFlags::Addr)) strings.push_back("addr");
|
||||||
return strings;
|
return strings;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -16,27 +16,27 @@ struct bilingual_str;
|
|||||||
extern const std::vector<std::string> NET_PERMISSIONS_DOC;
|
extern const std::vector<std::string> NET_PERMISSIONS_DOC;
|
||||||
|
|
||||||
enum class NetPermissionFlags : uint32_t {
|
enum class NetPermissionFlags : uint32_t {
|
||||||
PF_NONE = 0,
|
None = 0,
|
||||||
// Can query bloomfilter even if -peerbloomfilters is false
|
// Can query bloomfilter even if -peerbloomfilters is false
|
||||||
PF_BLOOMFILTER = (1U << 1),
|
BloomFilter = (1U << 1),
|
||||||
// Relay and accept transactions from this peer, even if -blocksonly is true
|
// Relay and accept transactions from this peer, even if -blocksonly is true
|
||||||
// This peer is also not subject to limits on how many transaction INVs are tracked
|
// This peer is also not subject to limits on how many transaction INVs are tracked
|
||||||
PF_RELAY = (1U << 3),
|
Relay = (1U << 3),
|
||||||
// Always relay transactions from this peer, even if already in mempool
|
// Always relay transactions from this peer, even if already in mempool
|
||||||
// Keep parameter interaction: forcerelay implies relay
|
// Keep parameter interaction: forcerelay implies relay
|
||||||
PF_FORCERELAY = (1U << 2) | PF_RELAY,
|
ForceRelay = (1U << 2) | Relay,
|
||||||
// Allow getheaders during IBD and block-download after maxuploadtarget limit
|
// Allow getheaders during IBD and block-download after maxuploadtarget limit
|
||||||
PF_DOWNLOAD = (1U << 6),
|
Download = (1U << 6),
|
||||||
// Can't be banned/disconnected/discouraged for misbehavior
|
// Can't be banned/disconnected/discouraged for misbehavior
|
||||||
PF_NOBAN = (1U << 4) | PF_DOWNLOAD,
|
NoBan = (1U << 4) | Download,
|
||||||
// Can query the mempool
|
// Can query the mempool
|
||||||
PF_MEMPOOL = (1U << 5),
|
Mempool = (1U << 5),
|
||||||
// Can request addrs without hitting a privacy-preserving cache
|
// Can request addrs without hitting a privacy-preserving cache
|
||||||
PF_ADDR = (1U << 7),
|
Addr = (1U << 7),
|
||||||
|
|
||||||
// True if the user did not specifically set fine grained permissions
|
// True if the user did not specifically set fine grained permissions
|
||||||
PF_ISIMPLICIT = (1U << 31),
|
Implicit = (1U << 31),
|
||||||
PF_ALL = PF_BLOOMFILTER | PF_FORCERELAY | PF_RELAY | PF_NOBAN | PF_MEMPOOL | PF_DOWNLOAD | PF_ADDR,
|
All = BloomFilter | ForceRelay | Relay | NoBan | Mempool | Download | Addr,
|
||||||
};
|
};
|
||||||
static inline constexpr NetPermissionFlags operator|(NetPermissionFlags a, NetPermissionFlags b)
|
static inline constexpr NetPermissionFlags operator|(NetPermissionFlags a, NetPermissionFlags b)
|
||||||
{
|
{
|
||||||
@ -58,14 +58,14 @@ public:
|
|||||||
{
|
{
|
||||||
flags = flags | f;
|
flags = flags | f;
|
||||||
}
|
}
|
||||||
//! ClearFlag is only called with `f` == NetPermissionFlags::PF_ISIMPLICIT.
|
//! ClearFlag is only called with `f` == NetPermissionFlags::Implicit.
|
||||||
//! If that should change in the future, be aware that ClearFlag should not
|
//! If that should change in the future, be aware that ClearFlag should not
|
||||||
//! be called with a subflag of a multiflag, e.g. NetPermissionFlags::PF_RELAY
|
//! be called with a subflag of a multiflag, e.g. NetPermissionFlags::Relay
|
||||||
//! or NetPermissionFlags::PF_DOWNLOAD, as that would leave `flags` in an
|
//! or NetPermissionFlags::Download, as that would leave `flags` in an
|
||||||
//! invalid state corresponding to none of the existing flags.
|
//! invalid state corresponding to none of the existing flags.
|
||||||
static inline void ClearFlag(NetPermissionFlags& flags, NetPermissionFlags f)
|
static inline void ClearFlag(NetPermissionFlags& flags, NetPermissionFlags f)
|
||||||
{
|
{
|
||||||
assert(f == NetPermissionFlags::PF_ISIMPLICIT);
|
assert(f == NetPermissionFlags::Implicit);
|
||||||
using t = typename std::underlying_type<NetPermissionFlags>::type;
|
using t = typename std::underlying_type<NetPermissionFlags>::type;
|
||||||
flags = static_cast<NetPermissionFlags>(static_cast<t>(flags) & ~static_cast<t>(f));
|
flags = static_cast<NetPermissionFlags>(static_cast<t>(flags) & ~static_cast<t>(f));
|
||||||
}
|
}
|
||||||
|
@ -680,7 +680,7 @@ static void UpdatePreferredDownload(const CNode& node, CNodeState* state) EXCLUS
|
|||||||
nPreferredDownload -= state->fPreferredDownload;
|
nPreferredDownload -= state->fPreferredDownload;
|
||||||
|
|
||||||
// Whether this node should be marked as a preferred download node.
|
// Whether this node should be marked as a preferred download node.
|
||||||
state->fPreferredDownload = (!node.IsInboundConn() || node.HasPermission(NetPermissionFlags::PF_NOBAN)) && !node.IsAddrFetchConn() && !node.fClient;
|
state->fPreferredDownload = (!node.IsInboundConn() || node.HasPermission(NetPermissionFlags::NoBan)) && !node.IsAddrFetchConn() && !node.fClient;
|
||||||
|
|
||||||
nPreferredDownload += state->fPreferredDownload;
|
nPreferredDownload += state->fPreferredDownload;
|
||||||
}
|
}
|
||||||
@ -960,24 +960,24 @@ void PeerManagerImpl::AddTxAnnouncement(const CNode& node, const GenTxid& gtxid,
|
|||||||
{
|
{
|
||||||
AssertLockHeld(::cs_main); // For m_txrequest
|
AssertLockHeld(::cs_main); // For m_txrequest
|
||||||
NodeId nodeid = node.GetId();
|
NodeId nodeid = node.GetId();
|
||||||
if (!node.HasPermission(NetPermissionFlags::PF_RELAY) && m_txrequest.Count(nodeid) >= MAX_PEER_TX_ANNOUNCEMENTS) {
|
if (!node.HasPermission(NetPermissionFlags::Relay) && m_txrequest.Count(nodeid) >= MAX_PEER_TX_ANNOUNCEMENTS) {
|
||||||
// Too many queued announcements from this peer
|
// Too many queued announcements from this peer
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
const CNodeState* state = State(nodeid);
|
const CNodeState* state = State(nodeid);
|
||||||
|
|
||||||
// Decide the TxRequestTracker parameters for this announcement:
|
// Decide the TxRequestTracker parameters for this announcement:
|
||||||
// - "preferred": if fPreferredDownload is set (= outbound, or NetPermissionFlags::PF_NOBAN permission)
|
// - "preferred": if fPreferredDownload is set (= outbound, or NetPermissionFlags::NoBan permission)
|
||||||
// - "reqtime": current time plus delays for:
|
// - "reqtime": current time plus delays for:
|
||||||
// - NONPREF_PEER_TX_DELAY for announcements from non-preferred connections
|
// - NONPREF_PEER_TX_DELAY for announcements from non-preferred connections
|
||||||
// - TXID_RELAY_DELAY for txid announcements while wtxid peers are available
|
// - TXID_RELAY_DELAY for txid announcements while wtxid peers are available
|
||||||
// - OVERLOADED_PEER_TX_DELAY for announcements from peers which have at least
|
// - OVERLOADED_PEER_TX_DELAY for announcements from peers which have at least
|
||||||
// MAX_PEER_TX_REQUEST_IN_FLIGHT requests in flight (and don't have NetPermissionFlags::PF_RELAY).
|
// MAX_PEER_TX_REQUEST_IN_FLIGHT requests in flight (and don't have NetPermissionFlags::Relay).
|
||||||
auto delay = std::chrono::microseconds{0};
|
auto delay = std::chrono::microseconds{0};
|
||||||
const bool preferred = state->fPreferredDownload;
|
const bool preferred = state->fPreferredDownload;
|
||||||
if (!preferred) delay += NONPREF_PEER_TX_DELAY;
|
if (!preferred) delay += NONPREF_PEER_TX_DELAY;
|
||||||
if (!gtxid.IsWtxid() && m_wtxid_relay_peers > 0) delay += TXID_RELAY_DELAY;
|
if (!gtxid.IsWtxid() && m_wtxid_relay_peers > 0) delay += TXID_RELAY_DELAY;
|
||||||
const bool overloaded = !node.HasPermission(NetPermissionFlags::PF_RELAY) &&
|
const bool overloaded = !node.HasPermission(NetPermissionFlags::Relay) &&
|
||||||
m_txrequest.CountInFlight(nodeid) >= MAX_PEER_TX_REQUEST_IN_FLIGHT;
|
m_txrequest.CountInFlight(nodeid) >= MAX_PEER_TX_REQUEST_IN_FLIGHT;
|
||||||
if (overloaded) delay += OVERLOADED_PEER_TX_DELAY;
|
if (overloaded) delay += OVERLOADED_PEER_TX_DELAY;
|
||||||
m_txrequest.ReceivedInv(nodeid, gtxid, preferred, current_time + delay);
|
m_txrequest.ReceivedInv(nodeid, gtxid, preferred, current_time + delay);
|
||||||
@ -1637,14 +1637,14 @@ void PeerManagerImpl::ProcessGetBlockData(CNode& pfrom, Peer& peer, const CInv&
|
|||||||
// disconnect node in case we have reached the outbound limit for serving historical blocks
|
// disconnect node in case we have reached the outbound limit for serving historical blocks
|
||||||
if (m_connman.OutboundTargetReached(true) &&
|
if (m_connman.OutboundTargetReached(true) &&
|
||||||
(((pindexBestHeader != nullptr) && (pindexBestHeader->GetBlockTime() - pindex->GetBlockTime() > HISTORICAL_BLOCK_AGE)) || inv.IsMsgFilteredBlk()) &&
|
(((pindexBestHeader != nullptr) && (pindexBestHeader->GetBlockTime() - pindex->GetBlockTime() > HISTORICAL_BLOCK_AGE)) || inv.IsMsgFilteredBlk()) &&
|
||||||
!pfrom.HasPermission(NetPermissionFlags::PF_DOWNLOAD) // nodes with the download permission may exceed target
|
!pfrom.HasPermission(NetPermissionFlags::Download) // nodes with the download permission may exceed target
|
||||||
) {
|
) {
|
||||||
LogPrint(BCLog::NET, "historical block serving limit reached, disconnect peer=%d\n", pfrom.GetId());
|
LogPrint(BCLog::NET, "historical block serving limit reached, disconnect peer=%d\n", pfrom.GetId());
|
||||||
pfrom.fDisconnect = true;
|
pfrom.fDisconnect = true;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
// Avoid leaking prune-height by never sending blocks below the NODE_NETWORK_LIMITED threshold
|
// Avoid leaking prune-height by never sending blocks below the NODE_NETWORK_LIMITED threshold
|
||||||
if (!pfrom.HasPermission(NetPermissionFlags::PF_NOBAN) && (
|
if (!pfrom.HasPermission(NetPermissionFlags::NoBan) && (
|
||||||
(((pfrom.GetLocalServices() & NODE_NETWORK_LIMITED) == NODE_NETWORK_LIMITED) && ((pfrom.GetLocalServices() & NODE_NETWORK) != NODE_NETWORK) && (m_chainman.ActiveChain().Tip()->nHeight - pindex->nHeight > (int)NODE_NETWORK_LIMITED_MIN_BLOCKS + 2 /* add two blocks buffer extension for possible races */) )
|
(((pfrom.GetLocalServices() & NODE_NETWORK_LIMITED) == NODE_NETWORK_LIMITED) && ((pfrom.GetLocalServices() & NODE_NETWORK) != NODE_NETWORK) && (m_chainman.ActiveChain().Tip()->nHeight - pindex->nHeight > (int)NODE_NETWORK_LIMITED_MIN_BLOCKS + 2 /* add two blocks buffer extension for possible races */) )
|
||||||
)) {
|
)) {
|
||||||
LogPrint(BCLog::NET, "Ignore block request below NODE_NETWORK_LIMITED threshold, disconnect peer=%d\n", pfrom.GetId());
|
LogPrint(BCLog::NET, "Ignore block request below NODE_NETWORK_LIMITED threshold, disconnect peer=%d\n", pfrom.GetId());
|
||||||
@ -2738,7 +2738,7 @@ void PeerManagerImpl::ProcessMessage(CNode& pfrom, const std::string& msg_type,
|
|||||||
bool fBlocksOnly = m_ignore_incoming_txs || (pfrom.m_tx_relay == nullptr);
|
bool fBlocksOnly = m_ignore_incoming_txs || (pfrom.m_tx_relay == nullptr);
|
||||||
|
|
||||||
// Allow peers with relay permission to send data other than blocks in blocks only mode
|
// Allow peers with relay permission to send data other than blocks in blocks only mode
|
||||||
if (pfrom.HasPermission(NetPermissionFlags::PF_RELAY)) {
|
if (pfrom.HasPermission(NetPermissionFlags::Relay)) {
|
||||||
fBlocksOnly = false;
|
fBlocksOnly = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2952,7 +2952,7 @@ void PeerManagerImpl::ProcessMessage(CNode& pfrom, const std::string& msg_type,
|
|||||||
}
|
}
|
||||||
|
|
||||||
LOCK(cs_main);
|
LOCK(cs_main);
|
||||||
if (m_chainman.ActiveChainstate().IsInitialBlockDownload() && !pfrom.HasPermission(NetPermissionFlags::PF_DOWNLOAD)) {
|
if (m_chainman.ActiveChainstate().IsInitialBlockDownload() && !pfrom.HasPermission(NetPermissionFlags::Download)) {
|
||||||
LogPrint(BCLog::NET, "Ignoring getheaders from peer=%d because node is in initial block download\n", pfrom.GetId());
|
LogPrint(BCLog::NET, "Ignoring getheaders from peer=%d because node is in initial block download\n", pfrom.GetId());
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -3011,7 +3011,7 @@ void PeerManagerImpl::ProcessMessage(CNode& pfrom, const std::string& msg_type,
|
|||||||
// Stop processing the transaction early if
|
// Stop processing the transaction early if
|
||||||
// 1) We are in blocks only mode and peer has no relay permission
|
// 1) We are in blocks only mode and peer has no relay permission
|
||||||
// 2) This peer is a block-relay-only peer
|
// 2) This peer is a block-relay-only peer
|
||||||
if ((m_ignore_incoming_txs && !pfrom.HasPermission(NetPermissionFlags::PF_RELAY)) || (pfrom.m_tx_relay == nullptr))
|
if ((m_ignore_incoming_txs && !pfrom.HasPermission(NetPermissionFlags::Relay)) || (pfrom.m_tx_relay == nullptr))
|
||||||
{
|
{
|
||||||
LogPrint(BCLog::NET, "transaction sent in violation of protocol peer=%d\n", pfrom.GetId());
|
LogPrint(BCLog::NET, "transaction sent in violation of protocol peer=%d\n", pfrom.GetId());
|
||||||
pfrom.fDisconnect = true;
|
pfrom.fDisconnect = true;
|
||||||
@ -3056,7 +3056,7 @@ void PeerManagerImpl::ProcessMessage(CNode& pfrom, const std::string& msg_type,
|
|||||||
// (older than our recency filter) if trying to DoS us, without any need
|
// (older than our recency filter) if trying to DoS us, without any need
|
||||||
// for witness malleation.
|
// for witness malleation.
|
||||||
if (AlreadyHaveTx(GenTxid(/* is_wtxid=*/true, wtxid))) {
|
if (AlreadyHaveTx(GenTxid(/* is_wtxid=*/true, wtxid))) {
|
||||||
if (pfrom.HasPermission(NetPermissionFlags::PF_FORCERELAY)) {
|
if (pfrom.HasPermission(NetPermissionFlags::ForceRelay)) {
|
||||||
// Always relay transactions received from peers with forcerelay
|
// Always relay transactions received from peers with forcerelay
|
||||||
// permission, even if they were already in the mempool, allowing
|
// permission, even if they were already in the mempool, allowing
|
||||||
// the node to function as a gateway for nodes hidden behind it.
|
// the node to function as a gateway for nodes hidden behind it.
|
||||||
@ -3585,7 +3585,7 @@ void PeerManagerImpl::ProcessMessage(CNode& pfrom, const std::string& msg_type,
|
|||||||
|
|
||||||
pfrom.vAddrToSend.clear();
|
pfrom.vAddrToSend.clear();
|
||||||
std::vector<CAddress> vAddr;
|
std::vector<CAddress> vAddr;
|
||||||
if (pfrom.HasPermission(NetPermissionFlags::PF_ADDR)) {
|
if (pfrom.HasPermission(NetPermissionFlags::Addr)) {
|
||||||
vAddr = m_connman.GetAddresses(MAX_ADDR_TO_SEND, MAX_PCT_ADDR_TO_SEND);
|
vAddr = m_connman.GetAddresses(MAX_ADDR_TO_SEND, MAX_PCT_ADDR_TO_SEND);
|
||||||
} else {
|
} else {
|
||||||
vAddr = m_connman.GetAddresses(pfrom, MAX_ADDR_TO_SEND, MAX_PCT_ADDR_TO_SEND);
|
vAddr = m_connman.GetAddresses(pfrom, MAX_ADDR_TO_SEND, MAX_PCT_ADDR_TO_SEND);
|
||||||
@ -3598,9 +3598,9 @@ void PeerManagerImpl::ProcessMessage(CNode& pfrom, const std::string& msg_type,
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (msg_type == NetMsgType::MEMPOOL) {
|
if (msg_type == NetMsgType::MEMPOOL) {
|
||||||
if (!(pfrom.GetLocalServices() & NODE_BLOOM) && !pfrom.HasPermission(NetPermissionFlags::PF_MEMPOOL))
|
if (!(pfrom.GetLocalServices() & NODE_BLOOM) && !pfrom.HasPermission(NetPermissionFlags::Mempool))
|
||||||
{
|
{
|
||||||
if (!pfrom.HasPermission(NetPermissionFlags::PF_NOBAN))
|
if (!pfrom.HasPermission(NetPermissionFlags::NoBan))
|
||||||
{
|
{
|
||||||
LogPrint(BCLog::NET, "mempool request with bloom filters disabled, disconnect peer=%d\n", pfrom.GetId());
|
LogPrint(BCLog::NET, "mempool request with bloom filters disabled, disconnect peer=%d\n", pfrom.GetId());
|
||||||
pfrom.fDisconnect = true;
|
pfrom.fDisconnect = true;
|
||||||
@ -3608,9 +3608,9 @@ void PeerManagerImpl::ProcessMessage(CNode& pfrom, const std::string& msg_type,
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (m_connman.OutboundTargetReached(false) && !pfrom.HasPermission(NetPermissionFlags::PF_MEMPOOL))
|
if (m_connman.OutboundTargetReached(false) && !pfrom.HasPermission(NetPermissionFlags::Mempool))
|
||||||
{
|
{
|
||||||
if (!pfrom.HasPermission(NetPermissionFlags::PF_NOBAN))
|
if (!pfrom.HasPermission(NetPermissionFlags::NoBan))
|
||||||
{
|
{
|
||||||
LogPrint(BCLog::NET, "mempool request with bandwidth limit reached, disconnect peer=%d\n", pfrom.GetId());
|
LogPrint(BCLog::NET, "mempool request with bandwidth limit reached, disconnect peer=%d\n", pfrom.GetId());
|
||||||
pfrom.fDisconnect = true;
|
pfrom.fDisconnect = true;
|
||||||
@ -3825,7 +3825,7 @@ bool PeerManagerImpl::MaybeDiscourageAndDisconnect(CNode& pnode, Peer& peer)
|
|||||||
peer.m_should_discourage = false;
|
peer.m_should_discourage = false;
|
||||||
} // peer.m_misbehavior_mutex
|
} // peer.m_misbehavior_mutex
|
||||||
|
|
||||||
if (pnode.HasPermission(NetPermissionFlags::PF_NOBAN)) {
|
if (pnode.HasPermission(NetPermissionFlags::NoBan)) {
|
||||||
// We never disconnect or discourage peers for bad behavior if they have the NOBAN permission flag
|
// We never disconnect or discourage peers for bad behavior if they have the NOBAN permission flag
|
||||||
LogPrintf("Warning: not punishing noban peer %d!\n", peer.m_id);
|
LogPrintf("Warning: not punishing noban peer %d!\n", peer.m_id);
|
||||||
return false;
|
return false;
|
||||||
@ -4463,7 +4463,7 @@ bool PeerManagerImpl::SendMessages(CNode* pto)
|
|||||||
if (pto->m_tx_relay != nullptr) {
|
if (pto->m_tx_relay != nullptr) {
|
||||||
LOCK(pto->m_tx_relay->cs_tx_inventory);
|
LOCK(pto->m_tx_relay->cs_tx_inventory);
|
||||||
// Check whether periodic sends should happen
|
// Check whether periodic sends should happen
|
||||||
bool fSendTrickle = pto->HasPermission(NetPermissionFlags::PF_NOBAN);
|
bool fSendTrickle = pto->HasPermission(NetPermissionFlags::NoBan);
|
||||||
if (pto->m_tx_relay->nNextInvSend < current_time) {
|
if (pto->m_tx_relay->nNextInvSend < current_time) {
|
||||||
fSendTrickle = true;
|
fSendTrickle = true;
|
||||||
if (pto->IsInboundConn()) {
|
if (pto->IsInboundConn()) {
|
||||||
@ -4625,7 +4625,7 @@ bool PeerManagerImpl::SendMessages(CNode* pto)
|
|||||||
// Note: If all our peers are inbound, then we won't
|
// Note: If all our peers are inbound, then we won't
|
||||||
// disconnect our sync peer for stalling; we have bigger
|
// disconnect our sync peer for stalling; we have bigger
|
||||||
// problems if we can't get any outbound peers.
|
// problems if we can't get any outbound peers.
|
||||||
if (!pto->HasPermission(NetPermissionFlags::PF_NOBAN)) {
|
if (!pto->HasPermission(NetPermissionFlags::NoBan)) {
|
||||||
LogPrintf("Timeout downloading headers from peer=%d, disconnecting\n", pto->GetId());
|
LogPrintf("Timeout downloading headers from peer=%d, disconnecting\n", pto->GetId());
|
||||||
pto->fDisconnect = true;
|
pto->fDisconnect = true;
|
||||||
return true;
|
return true;
|
||||||
@ -4712,7 +4712,7 @@ bool PeerManagerImpl::SendMessages(CNode* pto)
|
|||||||
!m_ignore_incoming_txs &&
|
!m_ignore_incoming_txs &&
|
||||||
pto->GetCommonVersion() >= FEEFILTER_VERSION &&
|
pto->GetCommonVersion() >= FEEFILTER_VERSION &&
|
||||||
gArgs.GetBoolArg("-feefilter", DEFAULT_FEEFILTER) &&
|
gArgs.GetBoolArg("-feefilter", DEFAULT_FEEFILTER) &&
|
||||||
!pto->HasPermission(NetPermissionFlags::PF_FORCERELAY) // peers with the forcerelay permission should not filter txs to us
|
!pto->HasPermission(NetPermissionFlags::ForceRelay) // peers with the forcerelay permission should not filter txs to us
|
||||||
) {
|
) {
|
||||||
CAmount currentFilter = m_mempool.GetMinFee(gArgs.GetArg("-maxmempool", DEFAULT_MAX_MEMPOOL_SIZE) * 1000000).GetFeePerK();
|
CAmount currentFilter = m_mempool.GetMinFee(gArgs.GetArg("-maxmempool", DEFAULT_MAX_MEMPOOL_SIZE) * 1000000).GetFeePerK();
|
||||||
static FeeFilterRounder g_filter_rounder{CFeeRate{DEFAULT_MIN_RELAY_TX_FEE}};
|
static FeeFilterRounder g_filter_rounder{CFeeRate{DEFAULT_MIN_RELAY_TX_FEE}};
|
||||||
|
@ -1062,7 +1062,7 @@ void RPCConsole::updateDetailWidget()
|
|||||||
ui->peerSubversion->setText(QString::fromStdString(stats->nodeStats.cleanSubVer));
|
ui->peerSubversion->setText(QString::fromStdString(stats->nodeStats.cleanSubVer));
|
||||||
ui->peerConnectionType->setText(GUIUtil::ConnectionTypeToQString(stats->nodeStats.m_conn_type, /* prepend_direction */ true));
|
ui->peerConnectionType->setText(GUIUtil::ConnectionTypeToQString(stats->nodeStats.m_conn_type, /* prepend_direction */ true));
|
||||||
ui->peerNetwork->setText(GUIUtil::NetworkToQString(stats->nodeStats.m_network));
|
ui->peerNetwork->setText(GUIUtil::NetworkToQString(stats->nodeStats.m_network));
|
||||||
if (stats->nodeStats.m_permissionFlags == NetPermissionFlags::PF_NONE) {
|
if (stats->nodeStats.m_permissionFlags == NetPermissionFlags::None) {
|
||||||
ui->peerPermissions->setText(ts.na);
|
ui->peerPermissions->setText(ts.na);
|
||||||
} else {
|
} else {
|
||||||
QStringList permissions;
|
QStringList permissions;
|
||||||
|
@ -25,7 +25,7 @@ FUZZ_TARGET(net_permissions)
|
|||||||
(void)NetPermissions::ToStrings(net_whitebind_permissions.m_flags);
|
(void)NetPermissions::ToStrings(net_whitebind_permissions.m_flags);
|
||||||
(void)NetPermissions::AddFlag(net_whitebind_permissions.m_flags, net_permission_flags);
|
(void)NetPermissions::AddFlag(net_whitebind_permissions.m_flags, net_permission_flags);
|
||||||
assert(NetPermissions::HasFlag(net_whitebind_permissions.m_flags, net_permission_flags));
|
assert(NetPermissions::HasFlag(net_whitebind_permissions.m_flags, net_permission_flags));
|
||||||
(void)NetPermissions::ClearFlag(net_whitebind_permissions.m_flags, NetPermissionFlags::PF_ISIMPLICIT);
|
(void)NetPermissions::ClearFlag(net_whitebind_permissions.m_flags, NetPermissionFlags::Implicit);
|
||||||
(void)NetPermissions::ToStrings(net_whitebind_permissions.m_flags);
|
(void)NetPermissions::ToStrings(net_whitebind_permissions.m_flags);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -35,7 +35,7 @@ FUZZ_TARGET(net_permissions)
|
|||||||
(void)NetPermissions::ToStrings(net_whitelist_permissions.m_flags);
|
(void)NetPermissions::ToStrings(net_whitelist_permissions.m_flags);
|
||||||
(void)NetPermissions::AddFlag(net_whitelist_permissions.m_flags, net_permission_flags);
|
(void)NetPermissions::AddFlag(net_whitelist_permissions.m_flags, net_permission_flags);
|
||||||
assert(NetPermissions::HasFlag(net_whitelist_permissions.m_flags, net_permission_flags));
|
assert(NetPermissions::HasFlag(net_whitelist_permissions.m_flags, net_permission_flags));
|
||||||
(void)NetPermissions::ClearFlag(net_whitelist_permissions.m_flags, NetPermissionFlags::PF_ISIMPLICIT);
|
(void)NetPermissions::ClearFlag(net_whitelist_permissions.m_flags, NetPermissionFlags::Implicit);
|
||||||
(void)NetPermissions::ToStrings(net_whitelist_permissions.m_flags);
|
(void)NetPermissions::ToStrings(net_whitelist_permissions.m_flags);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -381,27 +381,27 @@ BOOST_AUTO_TEST_CASE(netpermissions_test)
|
|||||||
// If no permission flags, assume backward compatibility
|
// If no permission flags, assume backward compatibility
|
||||||
BOOST_CHECK(NetWhitebindPermissions::TryParse("1.2.3.4:32", whitebindPermissions, error));
|
BOOST_CHECK(NetWhitebindPermissions::TryParse("1.2.3.4:32", whitebindPermissions, error));
|
||||||
BOOST_CHECK(error.empty());
|
BOOST_CHECK(error.empty());
|
||||||
BOOST_CHECK_EQUAL(whitebindPermissions.m_flags, NetPermissionFlags::PF_ISIMPLICIT);
|
BOOST_CHECK_EQUAL(whitebindPermissions.m_flags, NetPermissionFlags::Implicit);
|
||||||
BOOST_CHECK(NetPermissions::HasFlag(whitebindPermissions.m_flags, NetPermissionFlags::PF_ISIMPLICIT));
|
BOOST_CHECK(NetPermissions::HasFlag(whitebindPermissions.m_flags, NetPermissionFlags::Implicit));
|
||||||
NetPermissions::ClearFlag(whitebindPermissions.m_flags, NetPermissionFlags::PF_ISIMPLICIT);
|
NetPermissions::ClearFlag(whitebindPermissions.m_flags, NetPermissionFlags::Implicit);
|
||||||
BOOST_CHECK(!NetPermissions::HasFlag(whitebindPermissions.m_flags, NetPermissionFlags::PF_ISIMPLICIT));
|
BOOST_CHECK(!NetPermissions::HasFlag(whitebindPermissions.m_flags, NetPermissionFlags::Implicit));
|
||||||
BOOST_CHECK_EQUAL(whitebindPermissions.m_flags, NetPermissionFlags::PF_NONE);
|
BOOST_CHECK_EQUAL(whitebindPermissions.m_flags, NetPermissionFlags::None);
|
||||||
NetPermissions::AddFlag(whitebindPermissions.m_flags, NetPermissionFlags::PF_ISIMPLICIT);
|
NetPermissions::AddFlag(whitebindPermissions.m_flags, NetPermissionFlags::Implicit);
|
||||||
BOOST_CHECK(NetPermissions::HasFlag(whitebindPermissions.m_flags, NetPermissionFlags::PF_ISIMPLICIT));
|
BOOST_CHECK(NetPermissions::HasFlag(whitebindPermissions.m_flags, NetPermissionFlags::Implicit));
|
||||||
|
|
||||||
// Can set one permission
|
// Can set one permission
|
||||||
BOOST_CHECK(NetWhitebindPermissions::TryParse("bloom@1.2.3.4:32", whitebindPermissions, error));
|
BOOST_CHECK(NetWhitebindPermissions::TryParse("bloom@1.2.3.4:32", whitebindPermissions, error));
|
||||||
BOOST_CHECK_EQUAL(whitebindPermissions.m_flags, NetPermissionFlags::PF_BLOOMFILTER);
|
BOOST_CHECK_EQUAL(whitebindPermissions.m_flags, NetPermissionFlags::BloomFilter);
|
||||||
BOOST_CHECK(NetWhitebindPermissions::TryParse("@1.2.3.4:32", whitebindPermissions, error));
|
BOOST_CHECK(NetWhitebindPermissions::TryParse("@1.2.3.4:32", whitebindPermissions, error));
|
||||||
BOOST_CHECK_EQUAL(whitebindPermissions.m_flags, NetPermissionFlags::PF_NONE);
|
BOOST_CHECK_EQUAL(whitebindPermissions.m_flags, NetPermissionFlags::None);
|
||||||
|
|
||||||
NetWhitebindPermissions noban, noban_download, download_noban, download;
|
NetWhitebindPermissions noban, noban_download, download_noban, download;
|
||||||
|
|
||||||
// "noban" implies "download"
|
// "noban" implies "download"
|
||||||
BOOST_REQUIRE(NetWhitebindPermissions::TryParse("noban@1.2.3.4:32", noban, error));
|
BOOST_REQUIRE(NetWhitebindPermissions::TryParse("noban@1.2.3.4:32", noban, error));
|
||||||
BOOST_CHECK_EQUAL(noban.m_flags, NetPermissionFlags::PF_NOBAN);
|
BOOST_CHECK_EQUAL(noban.m_flags, NetPermissionFlags::NoBan);
|
||||||
BOOST_CHECK(NetPermissions::HasFlag(noban.m_flags, NetPermissionFlags::PF_DOWNLOAD));
|
BOOST_CHECK(NetPermissions::HasFlag(noban.m_flags, NetPermissionFlags::Download));
|
||||||
BOOST_CHECK(NetPermissions::HasFlag(noban.m_flags, NetPermissionFlags::PF_NOBAN));
|
BOOST_CHECK(NetPermissions::HasFlag(noban.m_flags, NetPermissionFlags::NoBan));
|
||||||
|
|
||||||
// "noban,download" is equivalent to "noban"
|
// "noban,download" is equivalent to "noban"
|
||||||
BOOST_REQUIRE(NetWhitebindPermissions::TryParse("noban,download@1.2.3.4:32", noban_download, error));
|
BOOST_REQUIRE(NetWhitebindPermissions::TryParse("noban,download@1.2.3.4:32", noban_download, error));
|
||||||
@ -413,31 +413,31 @@ BOOST_AUTO_TEST_CASE(netpermissions_test)
|
|||||||
|
|
||||||
// "download" excludes (does not imply) "noban"
|
// "download" excludes (does not imply) "noban"
|
||||||
BOOST_REQUIRE(NetWhitebindPermissions::TryParse("download@1.2.3.4:32", download, error));
|
BOOST_REQUIRE(NetWhitebindPermissions::TryParse("download@1.2.3.4:32", download, error));
|
||||||
BOOST_CHECK_EQUAL(download.m_flags, NetPermissionFlags::PF_DOWNLOAD);
|
BOOST_CHECK_EQUAL(download.m_flags, NetPermissionFlags::Download);
|
||||||
BOOST_CHECK(NetPermissions::HasFlag(download.m_flags, NetPermissionFlags::PF_DOWNLOAD));
|
BOOST_CHECK(NetPermissions::HasFlag(download.m_flags, NetPermissionFlags::Download));
|
||||||
BOOST_CHECK(!NetPermissions::HasFlag(download.m_flags, NetPermissionFlags::PF_NOBAN));
|
BOOST_CHECK(!NetPermissions::HasFlag(download.m_flags, NetPermissionFlags::NoBan));
|
||||||
|
|
||||||
// Happy path, can parse flags
|
// Happy path, can parse flags
|
||||||
BOOST_CHECK(NetWhitebindPermissions::TryParse("bloom,forcerelay@1.2.3.4:32", whitebindPermissions, error));
|
BOOST_CHECK(NetWhitebindPermissions::TryParse("bloom,forcerelay@1.2.3.4:32", whitebindPermissions, error));
|
||||||
// forcerelay should also activate the relay permission
|
// forcerelay should also activate the relay permission
|
||||||
BOOST_CHECK_EQUAL(whitebindPermissions.m_flags, NetPermissionFlags::PF_BLOOMFILTER | NetPermissionFlags::PF_FORCERELAY | NetPermissionFlags::PF_RELAY);
|
BOOST_CHECK_EQUAL(whitebindPermissions.m_flags, NetPermissionFlags::BloomFilter | NetPermissionFlags::ForceRelay | NetPermissionFlags::Relay);
|
||||||
BOOST_CHECK(NetWhitebindPermissions::TryParse("bloom,relay,noban@1.2.3.4:32", whitebindPermissions, error));
|
BOOST_CHECK(NetWhitebindPermissions::TryParse("bloom,relay,noban@1.2.3.4:32", whitebindPermissions, error));
|
||||||
BOOST_CHECK_EQUAL(whitebindPermissions.m_flags, NetPermissionFlags::PF_BLOOMFILTER | NetPermissionFlags::PF_RELAY | NetPermissionFlags::PF_NOBAN);
|
BOOST_CHECK_EQUAL(whitebindPermissions.m_flags, NetPermissionFlags::BloomFilter | NetPermissionFlags::Relay | NetPermissionFlags::NoBan);
|
||||||
BOOST_CHECK(NetWhitebindPermissions::TryParse("bloom,forcerelay,noban@1.2.3.4:32", whitebindPermissions, error));
|
BOOST_CHECK(NetWhitebindPermissions::TryParse("bloom,forcerelay,noban@1.2.3.4:32", whitebindPermissions, error));
|
||||||
BOOST_CHECK(NetWhitebindPermissions::TryParse("all@1.2.3.4:32", whitebindPermissions, error));
|
BOOST_CHECK(NetWhitebindPermissions::TryParse("all@1.2.3.4:32", whitebindPermissions, error));
|
||||||
BOOST_CHECK_EQUAL(whitebindPermissions.m_flags, NetPermissionFlags::PF_ALL);
|
BOOST_CHECK_EQUAL(whitebindPermissions.m_flags, NetPermissionFlags::All);
|
||||||
|
|
||||||
// Allow dups
|
// Allow dups
|
||||||
BOOST_CHECK(NetWhitebindPermissions::TryParse("bloom,relay,noban,noban@1.2.3.4:32", whitebindPermissions, error));
|
BOOST_CHECK(NetWhitebindPermissions::TryParse("bloom,relay,noban,noban@1.2.3.4:32", whitebindPermissions, error));
|
||||||
BOOST_CHECK_EQUAL(whitebindPermissions.m_flags, NetPermissionFlags::PF_BLOOMFILTER | NetPermissionFlags::PF_RELAY | NetPermissionFlags::PF_NOBAN | NetPermissionFlags::PF_DOWNLOAD); // "noban" implies "download"
|
BOOST_CHECK_EQUAL(whitebindPermissions.m_flags, NetPermissionFlags::BloomFilter | NetPermissionFlags::Relay | NetPermissionFlags::NoBan | NetPermissionFlags::Download); // "noban" implies "download"
|
||||||
|
|
||||||
// Allow empty
|
// Allow empty
|
||||||
BOOST_CHECK(NetWhitebindPermissions::TryParse("bloom,relay,,noban@1.2.3.4:32", whitebindPermissions, error));
|
BOOST_CHECK(NetWhitebindPermissions::TryParse("bloom,relay,,noban@1.2.3.4:32", whitebindPermissions, error));
|
||||||
BOOST_CHECK_EQUAL(whitebindPermissions.m_flags, NetPermissionFlags::PF_BLOOMFILTER | NetPermissionFlags::PF_RELAY | NetPermissionFlags::PF_NOBAN);
|
BOOST_CHECK_EQUAL(whitebindPermissions.m_flags, NetPermissionFlags::BloomFilter | NetPermissionFlags::Relay | NetPermissionFlags::NoBan);
|
||||||
BOOST_CHECK(NetWhitebindPermissions::TryParse(",@1.2.3.4:32", whitebindPermissions, error));
|
BOOST_CHECK(NetWhitebindPermissions::TryParse(",@1.2.3.4:32", whitebindPermissions, error));
|
||||||
BOOST_CHECK_EQUAL(whitebindPermissions.m_flags, NetPermissionFlags::PF_NONE);
|
BOOST_CHECK_EQUAL(whitebindPermissions.m_flags, NetPermissionFlags::None);
|
||||||
BOOST_CHECK(NetWhitebindPermissions::TryParse(",,@1.2.3.4:32", whitebindPermissions, error));
|
BOOST_CHECK(NetWhitebindPermissions::TryParse(",,@1.2.3.4:32", whitebindPermissions, error));
|
||||||
BOOST_CHECK_EQUAL(whitebindPermissions.m_flags, NetPermissionFlags::PF_NONE);
|
BOOST_CHECK_EQUAL(whitebindPermissions.m_flags, NetPermissionFlags::None);
|
||||||
|
|
||||||
// Detect invalid flag
|
// Detect invalid flag
|
||||||
BOOST_CHECK(!NetWhitebindPermissions::TryParse("bloom,forcerelay,oopsie@1.2.3.4:32", whitebindPermissions, error));
|
BOOST_CHECK(!NetWhitebindPermissions::TryParse("bloom,forcerelay,oopsie@1.2.3.4:32", whitebindPermissions, error));
|
||||||
@ -449,16 +449,16 @@ BOOST_AUTO_TEST_CASE(netpermissions_test)
|
|||||||
|
|
||||||
// Happy path for whitelist parsing
|
// Happy path for whitelist parsing
|
||||||
BOOST_CHECK(NetWhitelistPermissions::TryParse("noban@1.2.3.4", whitelistPermissions, error));
|
BOOST_CHECK(NetWhitelistPermissions::TryParse("noban@1.2.3.4", whitelistPermissions, error));
|
||||||
BOOST_CHECK_EQUAL(whitelistPermissions.m_flags, NetPermissionFlags::PF_NOBAN);
|
BOOST_CHECK_EQUAL(whitelistPermissions.m_flags, NetPermissionFlags::NoBan);
|
||||||
BOOST_CHECK(NetPermissions::HasFlag(whitelistPermissions.m_flags, NetPermissionFlags::PF_NOBAN));
|
BOOST_CHECK(NetPermissions::HasFlag(whitelistPermissions.m_flags, NetPermissionFlags::NoBan));
|
||||||
|
|
||||||
BOOST_CHECK(NetWhitelistPermissions::TryParse("bloom,forcerelay,noban,relay@1.2.3.4/32", whitelistPermissions, error));
|
BOOST_CHECK(NetWhitelistPermissions::TryParse("bloom,forcerelay,noban,relay@1.2.3.4/32", whitelistPermissions, error));
|
||||||
BOOST_CHECK_EQUAL(whitelistPermissions.m_flags, NetPermissionFlags::PF_BLOOMFILTER | NetPermissionFlags::PF_FORCERELAY | NetPermissionFlags::PF_NOBAN | NetPermissionFlags::PF_RELAY);
|
BOOST_CHECK_EQUAL(whitelistPermissions.m_flags, NetPermissionFlags::BloomFilter | NetPermissionFlags::ForceRelay | NetPermissionFlags::NoBan | NetPermissionFlags::Relay);
|
||||||
BOOST_CHECK(error.empty());
|
BOOST_CHECK(error.empty());
|
||||||
BOOST_CHECK_EQUAL(whitelistPermissions.m_subnet.ToString(), "1.2.3.4/32");
|
BOOST_CHECK_EQUAL(whitelistPermissions.m_subnet.ToString(), "1.2.3.4/32");
|
||||||
BOOST_CHECK(NetWhitelistPermissions::TryParse("bloom,forcerelay,noban,relay,mempool@1.2.3.4/32", whitelistPermissions, error));
|
BOOST_CHECK(NetWhitelistPermissions::TryParse("bloom,forcerelay,noban,relay,mempool@1.2.3.4/32", whitelistPermissions, error));
|
||||||
|
|
||||||
const auto strings = NetPermissions::ToStrings(NetPermissionFlags::PF_ALL);
|
const auto strings = NetPermissions::ToStrings(NetPermissionFlags::All);
|
||||||
BOOST_CHECK_EQUAL(strings.size(), 7U);
|
BOOST_CHECK_EQUAL(strings.size(), 7U);
|
||||||
BOOST_CHECK(std::find(strings.begin(), strings.end(), "bloomfilter") != strings.end());
|
BOOST_CHECK(std::find(strings.begin(), strings.end(), "bloomfilter") != strings.end());
|
||||||
BOOST_CHECK(std::find(strings.begin(), strings.end(), "forcerelay") != strings.end());
|
BOOST_CHECK(std::find(strings.begin(), strings.end(), "forcerelay") != strings.end());
|
||||||
|
@ -46,16 +46,16 @@ constexpr ServiceFlags ALL_SERVICE_FLAGS[]{
|
|||||||
};
|
};
|
||||||
|
|
||||||
constexpr NetPermissionFlags ALL_NET_PERMISSION_FLAGS[]{
|
constexpr NetPermissionFlags ALL_NET_PERMISSION_FLAGS[]{
|
||||||
NetPermissionFlags::PF_NONE,
|
NetPermissionFlags::None,
|
||||||
NetPermissionFlags::PF_BLOOMFILTER,
|
NetPermissionFlags::BloomFilter,
|
||||||
NetPermissionFlags::PF_RELAY,
|
NetPermissionFlags::Relay,
|
||||||
NetPermissionFlags::PF_FORCERELAY,
|
NetPermissionFlags::ForceRelay,
|
||||||
NetPermissionFlags::PF_NOBAN,
|
NetPermissionFlags::NoBan,
|
||||||
NetPermissionFlags::PF_MEMPOOL,
|
NetPermissionFlags::Mempool,
|
||||||
NetPermissionFlags::PF_ADDR,
|
NetPermissionFlags::Addr,
|
||||||
NetPermissionFlags::PF_DOWNLOAD,
|
NetPermissionFlags::Download,
|
||||||
NetPermissionFlags::PF_ISIMPLICIT,
|
NetPermissionFlags::Implicit,
|
||||||
NetPermissionFlags::PF_ALL,
|
NetPermissionFlags::All,
|
||||||
};
|
};
|
||||||
|
|
||||||
constexpr ConnectionType ALL_CONNECTION_TYPES[]{
|
constexpr ConnectionType ALL_CONNECTION_TYPES[]{
|
||||||
|
Loading…
x
Reference in New Issue
Block a user