Bitcoin Core  26.1.0
P2P Digital Currency
Classes | Typedefs | Enumerations | Functions | Variables
netbase.h File Reference
#include <compat/compat.h>
#include <netaddress.h>
#include <serialize.h>
#include <util/sock.h>
#include <functional>
#include <memory>
#include <stdint.h>
#include <string>
#include <type_traits>
#include <unordered_set>
#include <vector>
Include dependency graph for netbase.h:
This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Classes

class  Proxy
 
struct  ProxyCredentials
 Credentials for proxy authentication. More...
 
class  ReachableNets
 List of reachable networks. More...
 

Typedefs

using DNSLookupFn = std::function< std::vector< CNetAddr >(const std::string &, bool)>
 

Enumerations

enum  ConnectionDirection { ConnectionDirection::None = 0, ConnectionDirection::In = (1U << 0), ConnectionDirection::Out = (1U << 1), ConnectionDirection::Both = (In | Out) }
 

Functions

static ConnectionDirectionoperator|= (ConnectionDirection &a, ConnectionDirection b)
 
static bool operator & (ConnectionDirection a, ConnectionDirection b)
 
std::vector< CNetAddrWrappedGetAddrInfo (const std::string &name, bool allow_lookup)
 Wrapper for getaddrinfo(3). More...
 
enum Network ParseNetwork (const std::string &net)
 
std::string GetNetworkName (enum Network net)
 
std::vector< std::string > GetNetworkNames (bool append_unroutable=false)
 Return a vector of publicly routable Network names; optionally append NET_UNROUTABLE. More...
 
bool SetProxy (enum Network net, const Proxy &addrProxy)
 
bool GetProxy (enum Network net, Proxy &proxyInfoOut)
 
bool IsProxy (const CNetAddr &addr)
 
bool SetNameProxy (const Proxy &addrProxy)
 Set the name proxy to use for all connections to nodes specified by a hostname. More...
 
bool HaveNameProxy ()
 
bool GetNameProxy (Proxy &nameProxyOut)
 
std::vector< CNetAddrLookupHost (const std::string &name, unsigned int nMaxSolutions, bool fAllowLookup, DNSLookupFn dns_lookup_function=g_dns_lookup)
 Resolve a host string to its corresponding network addresses. More...
 
std::optional< CNetAddrLookupHost (const std::string &name, bool fAllowLookup, DNSLookupFn dns_lookup_function=g_dns_lookup)
 Resolve a host string to its first corresponding network address. More...
 
std::vector< CServiceLookup (const std::string &name, uint16_t portDefault, bool fAllowLookup, unsigned int nMaxSolutions, DNSLookupFn dns_lookup_function=g_dns_lookup)
 Resolve a service string to its corresponding service. More...
 
std::optional< CServiceLookup (const std::string &name, uint16_t portDefault, bool fAllowLookup, DNSLookupFn dns_lookup_function=g_dns_lookup)
 Resolve a service string to its first corresponding service. More...
 
CService LookupNumeric (const std::string &name, uint16_t portDefault=0, DNSLookupFn dns_lookup_function=g_dns_lookup)
 Resolve a service string with a numeric IP to its first corresponding service. More...
 
bool LookupSubNet (const std::string &subnet_str, CSubNet &subnet_out)
 Parse and resolve a specified subnet string into the appropriate internal representation. More...
 
std::unique_ptr< SockCreateSockTCP (const CService &address_family)
 Create a TCP socket in the given address family. More...
 
bool ConnectSocketDirectly (const CService &addrConnect, const Sock &sock, int nTimeout, bool manual_connection)
 Try to connect to the specified service on the specified socket. More...
 
bool ConnectThroughProxy (const Proxy &proxy, const std::string &strDest, uint16_t port, const Sock &sock, int nTimeout, bool &outProxyConnectionFailed)
 Connect to a specified destination service through a SOCKS5 proxy by first connecting to the SOCKS5 proxy. More...
 
void InterruptSocks5 (bool interrupt)
 
bool Socks5 (const std::string &strDest, uint16_t port, const ProxyCredentials *auth, const Sock &socket)
 Connect to a specified destination service through an already connected SOCKS5 proxy. More...
 
bool IsBadPort (uint16_t port)
 Determine if a port is "bad" from the perspective of attempting to connect to a node on that port. More...
 
CService MaybeFlipIPv6toCJDNS (const CService &service)
 If an IPv6 address belongs to the address range used by the CJDNS network and the CJDNS network is reachable (-cjdnsreachable config is set), then change the type from NET_IPV6 to NET_CJDNS. More...
 

Variables

int nConnectTimeout
 
bool fNameLookup
 
static const int DEFAULT_CONNECT_TIMEOUT = 5000
 -timeout default More...
 
static const int DEFAULT_NAME_LOOKUP = true
 -dns default More...
 
ReachableNets g_reachable_nets
 
DNSLookupFn g_dns_lookup
 
std::function< std::unique_ptr< Sock >const CService &)> CreateSock
 Socket factory. More...
 

Typedef Documentation

◆ DNSLookupFn

using DNSLookupFn = std::function<std::vector<CNetAddr>(const std::string&, bool)>

Definition at line 155 of file netbase.h.

Enumeration Type Documentation

◆ ConnectionDirection

enum ConnectionDirection
strong
Enumerator
None 
In 
Out 
Both 

Definition at line 33 of file netbase.h.

Function Documentation

◆ ConnectSocketDirectly()

bool ConnectSocketDirectly ( const CService addrConnect,
const Sock sock,
int  nTimeout,
bool  manual_connection 
)

Try to connect to the specified service on the specified socket.

Parameters
addrConnectThe service to which to connect.
sockThe socket on which to connect.
nTimeoutWait this many milliseconds for the connection to be established.
manual_connectionWhether or not the connection was manually requested (e.g. through the addnode RPC)
Returns
Whether or not a connection was successfully made.

Definition at line 514 of file netbase.cpp.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ ConnectThroughProxy()

bool ConnectThroughProxy ( const Proxy proxy,
const std::string &  strDest,
uint16_t  port,
const Sock sock,
int  nTimeout,
bool &  outProxyConnectionFailed 
)

Connect to a specified destination service through a SOCKS5 proxy by first connecting to the SOCKS5 proxy.

Parameters
proxyThe SOCKS5 proxy.
strDestThe destination service to which to connect.
portThe destination port.
sockThe socket on which to connect to the SOCKS5 proxy.
nTimeoutWait this many milliseconds for the connection to the SOCKS5 proxy to be established.
[out]outProxyConnectionFailedWhether or not the connection to the SOCKS5 proxy failed.
Returns
Whether or not the operation succeeded.

Definition at line 625 of file netbase.cpp.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ CreateSockTCP()

std::unique_ptr<Sock> CreateSockTCP ( const CService address_family)

Create a TCP socket in the given address family.

Parameters
[in]address_familyThe socket is created in the same address family as this address.
Returns
pointer to the created Sock object or unique_ptr that owns nothing in case of failure

Definition at line 453 of file netbase.cpp.

Here is the call graph for this function:

◆ GetNameProxy()

bool GetNameProxy ( Proxy nameProxyOut)

Definition at line 603 of file netbase.cpp.

Here is the caller graph for this function:

◆ GetNetworkName()

std::string GetNetworkName ( enum Network  net)

Definition at line 99 of file netbase.cpp.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ GetNetworkNames()

std::vector<std::string> GetNetworkNames ( bool  append_unroutable = false)

Return a vector of publicly routable Network names; optionally append NET_UNROUTABLE.

Definition at line 115 of file netbase.cpp.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ GetProxy()

bool GetProxy ( enum Network  net,
Proxy proxyInfoOut 
)

Definition at line 586 of file netbase.cpp.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ HaveNameProxy()

bool HaveNameProxy ( )

Definition at line 611 of file netbase.cpp.

Here is the caller graph for this function:

◆ InterruptSocks5()

void InterruptSocks5 ( bool  interrupt)

Definition at line 684 of file netbase.cpp.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ IsBadPort()

bool IsBadPort ( uint16_t  port)

Determine if a port is "bad" from the perspective of attempting to connect to a node on that port.

See also
doc/p2p-bad-ports.md
Parameters
[in]portPort to check.
Returns
whether the port is bad

Definition at line 689 of file netbase.cpp.

Here is the caller graph for this function:

◆ IsProxy()

bool IsProxy ( const CNetAddr addr)

Definition at line 616 of file netbase.cpp.

◆ Lookup() [1/2]

std::vector<CService> Lookup ( const std::string &  name,
uint16_t  portDefault,
bool  fAllowLookup,
unsigned int  nMaxSolutions,
DNSLookupFn  dns_lookup_function = g_dns_lookup 
)

Resolve a service string to its corresponding service.

Parameters
nameThe string representing a service. Could be a name or a numerical IP address (IPv6 addresses should be in their disambiguated bracketed form), optionally followed by a uint16_t port number. (e.g. example.com:8333 or
portDefaultThe default port for resulting services if not specified by the service string.
fAllowLookupWhether or not hostname lookups are permitted. If yes, external queries may be performed.
nMaxSolutionsThe maximum number of results we want, specifying 0 means "as many solutions as we get."
Returns
The resulting services to which the specified service string resolved.

Definition at line 176 of file netbase.cpp.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ Lookup() [2/2]

std::optional<CService> Lookup ( const std::string &  name,
uint16_t  portDefault,
bool  fAllowLookup,
DNSLookupFn  dns_lookup_function = g_dns_lookup 
)

Resolve a service string to its first corresponding service.

See also
Lookup(const std::string&, uint16_t, bool, unsigned int, DNSLookupFn) for additional parameter descriptions.

Definition at line 194 of file netbase.cpp.

Here is the call graph for this function:

◆ LookupHost() [1/2]

std::vector<CNetAddr> LookupHost ( const std::string &  name,
unsigned int  nMaxSolutions,
bool  fAllowLookup,
DNSLookupFn  dns_lookup_function = g_dns_lookup 
)

Resolve a host string to its corresponding network addresses.

Parameters
nameThe string representing a host. Could be a name or a numerical IP address (IPv6 addresses in their bracketed form are allowed).
Returns
The resulting network addresses to which the specified host string resolved.
See also
Lookup(const std::string&, uint16_t, bool, unsigned int, DNSLookupFn) for additional parameter descriptions.

Definition at line 158 of file netbase.cpp.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ LookupHost() [2/2]

std::optional<CNetAddr> LookupHost ( const std::string &  name,
bool  fAllowLookup,
DNSLookupFn  dns_lookup_function = g_dns_lookup 
)

Resolve a host string to its first corresponding network address.

Returns
The resulting network address to which the specified host string resolved or std::nullopt if host does not resolve to an address.
See also
LookupHost(const std::string&, unsigned int, bool, DNSLookupFn) for additional parameter descriptions.

Definition at line 170 of file netbase.cpp.

Here is the call graph for this function:

◆ LookupNumeric()

CService LookupNumeric ( const std::string &  name,
uint16_t  portDefault = 0,
DNSLookupFn  dns_lookup_function = g_dns_lookup 
)

Resolve a service string with a numeric IP to its first corresponding service.

Returns
The resulting CService if the resolution was successful, [::]:0 otherwise.
See also
Lookup(const std::string&, uint16_t, bool, unsigned int, DNSLookupFn) for additional parameter descriptions.

Definition at line 201 of file netbase.cpp.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ LookupSubNet()

bool LookupSubNet ( const std::string &  subnet_str,
CSubNet subnet_out 
)

Parse and resolve a specified subnet string into the appropriate internal representation.

Parameters
[in]subnet_strA string representation of a subnet of the form network address [ "/", ( CIDR-style suffix | netmask ) ] e.g. "2001:db8::/32", "192.0.2.0/255.255.255.0" or "8.8.8.8".
[out]subnet_outInternal subnet representation, if parsable/resolvable from subnet_str.
Returns
whether the operation succeeded or not.

Definition at line 648 of file netbase.cpp.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ MaybeFlipIPv6toCJDNS()

CService MaybeFlipIPv6toCJDNS ( const CService service)

If an IPv6 address belongs to the address range used by the CJDNS network and the CJDNS network is reachable (-cjdnsreachable config is set), then change the type from NET_IPV6 to NET_CJDNS.

Parameters
[in]serviceAddress to potentially convert.
Returns
a copy of service either unmodified or changed to CJDNS.

Definition at line 779 of file netbase.cpp.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ operator &()

static bool operator& ( ConnectionDirection  a,
ConnectionDirection  b 
)
inlinestatic

Definition at line 44 of file netbase.h.

◆ operator|=()

static ConnectionDirection& operator|= ( ConnectionDirection a,
ConnectionDirection  b 
)
inlinestatic

Definition at line 39 of file netbase.h.

◆ ParseNetwork()

enum Network ParseNetwork ( const std::string &  net)

Definition at line 81 of file netbase.cpp.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ SetNameProxy()

bool SetNameProxy ( const Proxy addrProxy)

Set the name proxy to use for all connections to nodes specified by a hostname.

After setting this proxy, connecting to a node specified by a hostname won't result in a local lookup of said hostname, rather, connect to the node by asking the name proxy for a proxy connection to the hostname, effectively delegating the hostname lookup to the specified proxy.

This delegation increases privacy for those who set the name proxy as they no longer leak their external hostname queries to their DNS servers.

Returns
Whether or not the operation succeeded.
Note
SOCKS5's support for UDP-over-SOCKS5 has been considered, but no SOCK5 server in common use (most notably Tor) actually implements UDP support, and a DNS resolver is beyond the scope of this project.

Definition at line 595 of file netbase.cpp.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ SetProxy()

bool SetProxy ( enum Network  net,
const Proxy addrProxy 
)

Definition at line 577 of file netbase.cpp.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ Socks5()

bool Socks5 ( const std::string &  strDest,
uint16_t  port,
const ProxyCredentials auth,
const Sock socket 
)

Connect to a specified destination service through an already connected SOCKS5 proxy.

Parameters
strDestThe destination fully-qualified domain name.
portThe destination port.
authThe credentials with which to authenticate with the specified SOCKS5 proxy.
socketThe SOCKS5 proxy socket.
Returns
Whether or not the operation succeeded.
Note
The specified SOCKS5 proxy socket must already be connected to the SOCKS5 proxy.
See also
RFC1928: SOCKS Protocol Version 5

Definition at line 334 of file netbase.cpp.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ WrappedGetAddrInfo()

std::vector<CNetAddr> WrappedGetAddrInfo ( const std::string &  name,
bool  allow_lookup 
)

Wrapper for getaddrinfo(3).

Do not use directly: call Lookup/LookupHost/LookupNumeric/LookupSubNet.

Definition at line 37 of file netbase.cpp.

Here is the call graph for this function:
Here is the caller graph for this function:

Variable Documentation

◆ CreateSock

std::function<std::unique_ptr<Sock>const CService&)> CreateSock

Socket factory.

Defaults to CreateSockTCP(), but can be overridden by unit tests.

Definition at line 502 of file netbase.cpp.

◆ DEFAULT_CONNECT_TIMEOUT

const int DEFAULT_CONNECT_TIMEOUT = 5000
static

-timeout default

Definition at line 29 of file netbase.h.

◆ DEFAULT_NAME_LOOKUP

const int DEFAULT_NAME_LOOKUP = true
static

-dns default

Definition at line 31 of file netbase.h.

◆ fNameLookup

bool fNameLookup

Definition at line 29 of file netbase.cpp.

◆ g_dns_lookup

DNSLookupFn g_dns_lookup

Definition at line 79 of file netbase.cpp.

◆ g_reachable_nets

ReachableNets g_reachable_nets

Definition at line 35 of file netbase.cpp.

◆ nConnectTimeout

int nConnectTimeout

Definition at line 28 of file netbase.cpp.