Bitcoin ABC  0.29.2
P2P Digital Currency
net_permissions.h
Go to the documentation of this file.
1 // Copyright (c) 2009-2018 The Bitcoin Core developers
2 // Distributed under the MIT software license, see the accompanying
3 // file COPYING or http://www.opensource.org/licenses/mit-license.php.
4 
5 #ifndef BITCOIN_NET_PERMISSIONS_H
6 #define BITCOIN_NET_PERMISSIONS_H
7 
8 #include <netaddress.h>
9 
10 #include <string>
11 #include <type_traits>
12 #include <vector>
13 
14 struct bilingual_str;
15 
16 extern const std::vector<std::string> NET_PERMISSIONS_DOC;
17 
18 enum class NetPermissionFlags : uint32_t {
19  None = 0,
20  // Can query bloomfilter even if -peerbloomfilters is false
21  BloomFilter = (1U << 1),
22  // Relay and accept transactions from this peer, even if -blocksonly is true
23  // This peer is also not subject to limits on how many transaction INVs are
24  // tracked
25  Relay = (1U << 3),
26  // Always relay transactions from this peer, even if already in mempool
27  // Keep parameter interaction: forcerelay implies relay
28  ForceRelay = (1U << 2) | Relay,
29  // Allow getheaders during IBD and block-download after maxuploadtarget
30  // limit
31  Download = (1U << 6),
32  // Can't be banned/disconnected/discouraged for misbehavior
33  NoBan = (1U << 4) | Download,
34  // Can query the mempool
35  Mempool = (1U << 5),
36  // Can request addrs without hitting a privacy-preserving cache, and send us
37  // unlimited amounts of addrs.
38  Addr = (1U << 7),
39  // Bypass the limit on how many proof INVs are tracked from this peer as
40  // well as the delay penalty when reaching the the in-flight requests limit
41  BypassProofRequestLimits = (1U << 30),
42 
43  // True if the user did not specifically set fine grained permissions
44  Implicit = (1U << 31),
47 };
50  using t = typename std::underlying_type<NetPermissionFlags>::type;
51  return static_cast<NetPermissionFlags>(static_cast<t>(a) |
52  static_cast<t>(b));
53 }
54 
56 public:
58  static std::vector<std::string> ToStrings(NetPermissionFlags flags);
60  using t = typename std::underlying_type<NetPermissionFlags>::type;
61  return (static_cast<t>(flags) & static_cast<t>(f)) == static_cast<t>(f);
62  }
63  static inline void AddFlag(NetPermissionFlags &flags,
65  flags = flags | f;
66  }
73  static inline void ClearFlag(NetPermissionFlags &flags,
76  using t = typename std::underlying_type<NetPermissionFlags>::type;
77  flags = static_cast<NetPermissionFlags>(static_cast<t>(flags) &
78  ~static_cast<t>(f));
79  }
80 };
81 
83 public:
84  static bool TryParse(const std::string &str,
87 };
88 
90 public:
91  static bool TryParse(const std::string &str,
94 };
95 
96 #endif // BITCOIN_NET_PERMISSIONS_H
int flags
Definition: bitcoin-tx.cpp:533
A combination of a network address (CNetAddr) and a (TCP) port.
Definition: netaddress.h:545
NetPermissionFlags m_flags
static void AddFlag(NetPermissionFlags &flags, NetPermissionFlags f)
static void ClearFlag(NetPermissionFlags &flags, NetPermissionFlags f)
ClearFlag is only called with f == NetPermissionFlags::Implicit.
static std::vector< std::string > ToStrings(NetPermissionFlags flags)
static bool HasFlag(NetPermissionFlags flags, NetPermissionFlags f)
static bool TryParse(const std::string &str, NetWhitebindPermissions &output, bilingual_str &error)
static bool TryParse(const std::string &str, NetWhitelistPermissions &output, bilingual_str &error)
static constexpr NetPermissionFlags operator|(NetPermissionFlags a, NetPermissionFlags b)
NetPermissionFlags
const std::vector< std::string > NET_PERMISSIONS_DOC
Bilingual messages:
Definition: translation.h:17
bool error(const char *fmt, const Args &...args)
Definition: system.h:45
assert(!tx.IsCoinBase())