Bitcoin Core  21.99.0
P2P Digital Currency
net_permissions.h
Go to the documentation of this file.
1 // Copyright (c) 2009-2020 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 #include <netaddress.h>
6 
7 #include <string>
8 #include <vector>
9 
10 #ifndef BITCOIN_NET_PERMISSIONS_H
11 #define BITCOIN_NET_PERMISSIONS_H
12 
13 struct bilingual_str;
14 
15 extern const std::vector<std::string> NET_PERMISSIONS_DOC;
16 
18  PF_NONE = 0,
19  // Can query bloomfilter even if -peerbloomfilters is false
20  PF_BLOOMFILTER = (1U << 1),
21  // Relay and accept transactions from this peer, even if -blocksonly is true
22  // This peer is also not subject to limits on how many transaction INVs are tracked
23  PF_RELAY = (1U << 3),
24  // Always relay transactions from this peer, even if already in mempool
25  // Keep parameter interaction: forcerelay implies relay
26  PF_FORCERELAY = (1U << 2) | PF_RELAY,
27  // Allow getheaders during IBD and block-download after maxuploadtarget limit
28  PF_DOWNLOAD = (1U << 6),
29  // Can't be banned/disconnected/discouraged for misbehavior
30  PF_NOBAN = (1U << 4) | PF_DOWNLOAD,
31  // Can query the mempool
32  PF_MEMPOOL = (1U << 5),
33  // Can request addrs without hitting a privacy-preserving cache
34  PF_ADDR = (1U << 7),
35 
36  // True if the user did not specifically set fine grained permissions
37  PF_ISIMPLICIT = (1U << 31),
39 };
40 
42 {
43 public:
45  static std::vector<std::string> ToStrings(NetPermissionFlags flags);
46  static inline bool HasFlag(const NetPermissionFlags& flags, NetPermissionFlags f)
47  {
48  return (flags & f) == f;
49  }
51  {
52  flags = static_cast<NetPermissionFlags>(flags | f);
53  }
55  {
56  flags = static_cast<NetPermissionFlags>(flags & ~f);
57  }
58 };
59 
61 {
62 public:
63  static bool TryParse(const std::string str, NetWhitebindPermissions& output, bilingual_str& error);
65 };
66 
68 {
69 public:
70  static bool TryParse(const std::string str, NetWhitelistPermissions& output, bilingual_str& error);
72 };
73 
74 #endif // BITCOIN_NET_PERMISSIONS_H
CService
A combination of a network address (CNetAddr) and a (TCP) port.
Definition: netaddress.h:551
PF_DOWNLOAD
@ PF_DOWNLOAD
Definition: net_permissions.h:28
NetPermissions::ToStrings
static std::vector< std::string > ToStrings(NetPermissionFlags flags)
Definition: net_permissions.cpp:71
PF_FORCERELAY
@ PF_FORCERELAY
Definition: net_permissions.h:26
flags
int flags
Definition: bitcoin-tx.cpp:512
PF_ALL
@ PF_ALL
Definition: net_permissions.h:38
PF_NONE
@ PF_NONE
Definition: net_permissions.h:18
bilingual_str
Bilingual messages:
Definition: translation.h:16
PF_RELAY
@ PF_RELAY
Definition: net_permissions.h:23
NetPermissions::ClearFlag
static void ClearFlag(NetPermissionFlags &flags, NetPermissionFlags f)
Definition: net_permissions.h:54
NetWhitelistPermissions::m_subnet
CSubNet m_subnet
Definition: net_permissions.h:71
NET_PERMISSIONS_DOC
const std::vector< std::string > NET_PERMISSIONS_DOC
Definition: net_permissions.cpp:11
NetPermissions::HasFlag
static bool HasFlag(const NetPermissionFlags &flags, NetPermissionFlags f)
Definition: net_permissions.h:46
NetWhitelistPermissions
Definition: net_permissions.h:67
netaddress.h
NetPermissionFlags
NetPermissionFlags
Definition: net_permissions.h:17
NetWhitebindPermissions::m_service
CService m_service
Definition: net_permissions.h:64
NetWhitebindPermissions::TryParse
static bool TryParse(const std::string str, NetWhitebindPermissions &output, bilingual_str &error)
Definition: net_permissions.cpp:84
CSubNet
Definition: netaddress.h:480
PF_BLOOMFILTER
@ PF_BLOOMFILTER
Definition: net_permissions.h:20
NetPermissions::AddFlag
static void AddFlag(NetPermissionFlags &flags, NetPermissionFlags f)
Definition: net_permissions.h:50
NetPermissions::m_flags
NetPermissionFlags m_flags
Definition: net_permissions.h:44
PF_MEMPOOL
@ PF_MEMPOOL
Definition: net_permissions.h:32
NetPermissions
Definition: net_permissions.h:41
PF_ADDR
@ PF_ADDR
Definition: net_permissions.h:34
error
bool error(const char *fmt, const Args &... args)
Definition: system.h:50
PF_NOBAN
@ PF_NOBAN
Definition: net_permissions.h:30
PF_ISIMPLICIT
@ PF_ISIMPLICIT
Definition: net_permissions.h:37
NetWhitebindPermissions
Definition: net_permissions.h:60
NetWhitelistPermissions::TryParse
static bool TryParse(const std::string str, NetWhitelistPermissions &output, bilingual_str &error)
Definition: net_permissions.cpp:107