Bitcoin Core
31.1.0
P2P Digital Currency
Toggle main menu visibility
Loading...
Searching...
No Matches
src
net_permissions.h
Go to the documentation of this file.
1
// Copyright (c) 2009-present 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
#include <
netbase.h
>
7
8
#include <string>
9
#include <type_traits>
10
#include <vector>
11
12
#ifndef BITCOIN_NET_PERMISSIONS_H
13
#define BITCOIN_NET_PERMISSIONS_H
14
15
struct
bilingual_str
;
16
17
extern
const
std::vector<std::string>
NET_PERMISSIONS_DOC
;
18
20
constexpr
bool
DEFAULT_WHITELISTRELAY
=
true
;
22
constexpr
bool
DEFAULT_WHITELISTFORCERELAY
=
false
;
23
24
enum class
NetPermissionFlags
: uint32_t {
25
None
= 0,
26
// Can query bloomfilter even if -peerbloomfilters is false
27
BloomFilter
= (1U << 1),
28
// Relay and accept transactions from this peer, even if -blocksonly is true
29
// This peer is also not subject to limits on how many transaction INVs are tracked
30
Relay
= (1U << 3),
31
// Always relay transactions from this peer, even if already in mempool
32
// Keep parameter interaction: forcerelay implies relay
33
ForceRelay
= (1U << 2) |
Relay
,
34
// Allow getheaders during IBD and block-download after maxuploadtarget limit
35
Download
= (1U << 6),
36
// Can't be banned/disconnected/discouraged for misbehavior
37
NoBan
= (1U << 4) |
Download
,
38
// Can query the mempool
39
Mempool
= (1U << 5),
40
// Can request addrs without hitting a privacy-preserving cache, and send us
41
// unlimited amounts of addrs.
42
Addr
= (1U << 7),
43
44
// True if the user did not specifically set fine-grained permissions with
45
// the -whitebind or -whitelist configuration options.
46
Implicit
= (1U << 31),
47
All
=
BloomFilter
|
ForceRelay
|
Relay
|
NoBan
|
Mempool
|
Download
|
Addr
,
48
};
49
static
inline
constexpr
NetPermissionFlags
operator|
(
NetPermissionFlags
a,
NetPermissionFlags
b)
50
{
51
using
t
= std::underlying_type_t<NetPermissionFlags>;
52
return
static_cast<
NetPermissionFlags
>
(
static_cast<
t
>
(a) |
static_cast<
t
>
(b));
53
}
54
55
class
NetPermissions
56
{
57
public
:
58
NetPermissionFlags
m_flags
;
59
static
std::vector<std::string>
ToStrings
(
NetPermissionFlags
flags
);
60
static
inline
bool
HasFlag
(
NetPermissionFlags
flags
,
NetPermissionFlags
f)
61
{
62
using
t
= std::underlying_type_t<NetPermissionFlags>;
63
return
(
static_cast<
t
>
(
flags
) &
static_cast<
t
>
(f)) ==
static_cast<
t
>
(f);
64
}
65
static
inline
void
AddFlag
(
NetPermissionFlags
&
flags
,
NetPermissionFlags
f)
66
{
67
flags
=
flags
| f;
68
}
69
74
static
inline
void
ClearFlag
(
NetPermissionFlags
&
flags
,
NetPermissionFlags
f)
75
{
76
assert
(f ==
NetPermissionFlags::Implicit
);
77
using
t
= std::underlying_type_t<NetPermissionFlags>;
78
flags
=
static_cast<
NetPermissionFlags
>
(
static_cast<
t
>
(
flags
) & ~static_cast<t>(f));
79
}
80
};
81
82
class
NetWhitebindPermissions
:
public
NetPermissions
83
{
84
public
:
85
static
bool
TryParse
(
const
std::string& str,
NetWhitebindPermissions
& output,
bilingual_str
& error);
86
CService
m_service
;
87
};
88
89
class
NetWhitelistPermissions
:
public
NetPermissions
90
{
91
public
:
92
static
bool
TryParse
(
const
std::string& str,
NetWhitelistPermissions
& output,
ConnectionDirection
& output_connection_direction,
bilingual_str
& error);
93
CSubNet
m_subnet
;
94
};
95
96
#endif
// BITCOIN_NET_PERMISSIONS_H
flags
int flags
Definition
bitcoin-tx.cpp:529
CService
A combination of a network address (CNetAddr) and a (TCP) port.
Definition
netaddress.h:530
CSubNet
Definition
netaddress.h:480
NetPermissions
Definition
net_permissions.h:56
NetPermissions::m_flags
NetPermissionFlags m_flags
Definition
net_permissions.h:58
NetPermissions::AddFlag
static void AddFlag(NetPermissionFlags &flags, NetPermissionFlags f)
Definition
net_permissions.h:65
NetPermissions::ClearFlag
static void ClearFlag(NetPermissionFlags &flags, NetPermissionFlags f)
Definition
net_permissions.h:74
NetPermissions::ToStrings
static std::vector< std::string > ToStrings(NetPermissionFlags flags)
Definition
net_permissions.cpp:92
NetPermissions::HasFlag
static bool HasFlag(NetPermissionFlags flags, NetPermissionFlags f)
Definition
net_permissions.h:60
NetWhitebindPermissions
Definition
net_permissions.h:83
NetWhitebindPermissions::TryParse
static bool TryParse(const std::string &str, NetWhitebindPermissions &output, bilingual_str &error)
Definition
net_permissions.cpp:105
NetWhitebindPermissions::m_service
CService m_service
Definition
net_permissions.h:86
NetWhitelistPermissions
Definition
net_permissions.h:90
NetWhitelistPermissions::m_subnet
CSubNet m_subnet
Definition
net_permissions.h:93
NetWhitelistPermissions::TryParse
static bool TryParse(const std::string &str, NetWhitelistPermissions &output, ConnectionDirection &output_connection_direction, bilingual_str &error)
Definition
net_permissions.cpp:128
NET_PERMISSIONS_DOC
const std::vector< std::string > NET_PERMISSIONS_DOC
Definition
net_permissions.cpp:13
DEFAULT_WHITELISTFORCERELAY
constexpr bool DEFAULT_WHITELISTFORCERELAY
Default for -whitelistforcerelay.
Definition
net_permissions.h:22
DEFAULT_WHITELISTRELAY
constexpr bool DEFAULT_WHITELISTRELAY
Default for -whitelistrelay.
Definition
net_permissions.h:20
operator|
static constexpr NetPermissionFlags operator|(NetPermissionFlags a, NetPermissionFlags b)
Definition
net_permissions.h:49
NetPermissionFlags
NetPermissionFlags
Definition
net_permissions.h:24
NetPermissionFlags::Implicit
@ Implicit
Definition
net_permissions.h:46
NetPermissionFlags::NoBan
@ NoBan
Definition
net_permissions.h:37
NetPermissionFlags::Mempool
@ Mempool
Definition
net_permissions.h:39
NetPermissionFlags::Relay
@ Relay
Definition
net_permissions.h:30
NetPermissionFlags::Addr
@ Addr
Definition
net_permissions.h:42
NetPermissionFlags::ForceRelay
@ ForceRelay
Definition
net_permissions.h:33
NetPermissionFlags::None
@ None
Definition
net_permissions.h:25
NetPermissionFlags::Download
@ Download
Definition
net_permissions.h:35
NetPermissionFlags::All
@ All
Definition
net_permissions.h:47
NetPermissionFlags::BloomFilter
@ BloomFilter
Definition
net_permissions.h:27
netaddress.h
netbase.h
ConnectionDirection
ConnectionDirection
Definition
netbase.h:33
ByteUnit::t
@ t
Definition
strencodings.h:52
bilingual_str
Bilingual messages:
Definition
translation.h:24
assert
assert(!tx.IsCoinBase())
Generated on
for Bitcoin Core by
1.17.0