![]() |
Bitcoin ABC
0.22.13
P2P Digital Currency
|
#include <netbase.h>
#include <sync.h>
#include <tinyformat.h>
#include <util/strencodings.h>
#include <util/string.h>
#include <util/system.h>
#include <atomic>
#include <fcntl.h>
Go to the source code of this file.
Classes | |
struct | ProxyCredentials |
Credentials for proxy authentication. More... | |
Macros | |
#define | MSG_NOSIGNAL 0 |
Enumerations | |
enum | SOCKSVersion : uint8_t { SOCKS4 = 0x04, SOCKS5 = 0x05 } |
SOCKS version. More... | |
enum | SOCKS5Method : uint8_t { NOAUTH = 0x00, GSSAPI = 0x01, USER_PASS = 0x02, NO_ACCEPTABLE = 0xff } |
Values defined for METHOD in RFC1928. More... | |
enum | SOCKS5Command : uint8_t { CONNECT = 0x01, BIND = 0x02, UDP_ASSOCIATE = 0x03 } |
Values defined for CMD in RFC1928. More... | |
enum | SOCKS5Reply : uint8_t { SUCCEEDED = 0x00, GENFAILURE = 0x01, NOTALLOWED = 0x02, NETUNREACHABLE = 0x03, HOSTUNREACHABLE = 0x04, CONNREFUSED = 0x05, TTLEXPIRED = 0x06, CMDUNSUPPORTED = 0x07, ATYPEUNSUPPORTED = 0x08 } |
Values defined for REP in RFC1928. More... | |
enum | SOCKS5Atyp : uint8_t { IPV4 = 0x01, DOMAINNAME = 0x03, IPV6 = 0x04 } |
Values defined for ATYPE in RFC1928. More... | |
enum | IntrRecvError { IntrRecvError::OK, IntrRecvError::Timeout, IntrRecvError::Disconnected, IntrRecvError::NetworkError, IntrRecvError::Interrupted } |
Status codes that can be returned by InterruptibleRecv. More... | |
Functions | |
static proxyType proxyInfo [NET_MAX] | GUARDED_BY (cs_proxyInfos) |
static std::atomic< bool > | interruptSocks5Recv (false) |
enum Network | ParseNetwork (const std::string &net_in) |
std::string | GetNetworkName (enum Network net) |
static bool | LookupIntern (const std::string &name, std::vector< CNetAddr > &vIP, unsigned int nMaxSolutions, bool fAllowLookup) |
bool | LookupHost (const std::string &name, std::vector< CNetAddr > &vIP, unsigned int nMaxSolutions, bool fAllowLookup) |
Resolve a host string to its corresponding network addresses. More... | |
bool | LookupHost (const std::string &name, CNetAddr &addr, bool fAllowLookup) |
Resolve a host string to its first corresponding network address. More... | |
bool | Lookup (const std::string &name, std::vector< CService > &vAddr, int portDefault, bool fAllowLookup, unsigned int nMaxSolutions) |
Resolve a service string to its corresponding service. More... | |
bool | Lookup (const std::string &name, CService &addr, int portDefault, bool fAllowLookup) |
Resolve a service string to its first corresponding service. More... | |
CService | LookupNumeric (const std::string &name, int portDefault) |
Resolve a service string with a numeric IP to its first corresponding service. More... | |
struct timeval | MillisToTimeval (int64_t nTimeout) |
Convert milliseconds to a struct timeval for e.g. More... | |
static IntrRecvError | InterruptibleRecv (uint8_t *data, size_t len, int timeout, const SOCKET &hSocket) |
Try to read a specified number of bytes from a socket. More... | |
static std::string | Socks5ErrorString (uint8_t err) |
Convert SOCKS5 reply to an error message. More... | |
static bool | Socks5 (const std::string &strDest, int port, const ProxyCredentials *auth, const SOCKET &hSocket) |
Connect to a specified destination service through an already connected SOCKS5 proxy. More... | |
SOCKET | CreateSocket (const CService &addrConnect) |
Try to create a socket file descriptor with specific properties in the communications domain (address family) of the specified service. More... | |
template<typename... Args> | |
static void | LogConnectFailure (bool manual_connection, const char *fmt, const Args &... args) |
bool | ConnectSocketDirectly (const CService &addrConnect, const SOCKET &hSocket, int nTimeout, bool manual_connection) |
Try to connect to the specified service on the specified socket. More... | |
bool | SetProxy (enum Network net, const proxyType &addrProxy) |
bool | GetProxy (enum Network net, proxyType &proxyInfoOut) |
bool | SetNameProxy (const proxyType &addrProxy) |
Set the name proxy to use for all connections to nodes specified by a hostname. More... | |
bool | GetNameProxy (proxyType &nameProxyOut) |
bool | HaveNameProxy () |
bool | IsProxy (const CNetAddr &addr) |
bool | ConnectThroughProxy (const proxyType &proxy, const std::string &strDest, int port, const SOCKET &hSocket, int nTimeout, bool &outProxyConnectionFailed) |
Connect to a specified destination service through a SOCKS5 proxy by first connecting to the SOCKS5 proxy. More... | |
bool | LookupSubNet (const std::string &strSubnet, CSubNet &ret) |
Parse and resolve a specified subnet string into the appropriate internal representation. More... | |
std::string | NetworkErrorString (int err) |
Return readable error string for a network error code. More... | |
bool | CloseSocket (SOCKET &hSocket) |
Close socket and set hSocket to INVALID_SOCKET. More... | |
bool | SetSocketNonBlocking (const SOCKET &hSocket, bool fNonBlocking) |
Disable or enable blocking-mode for a socket. More... | |
bool | SetSocketNoDelay (const SOCKET &hSocket) |
Set the TCP_NODELAY flag on a socket. More... | |
void | InterruptSocks5 (bool interrupt) |
Variables | |
static RecursiveMutex | cs_proxyInfos |
int | nConnectTimeout = DEFAULT_CONNECT_TIMEOUT |
bool | fNameLookup = DEFAULT_NAME_LOOKUP |
static const int | SOCKS5_RECV_TIMEOUT = 20 * 1000 |
#define MSG_NOSIGNAL 0 |
Definition at line 25 of file netbase.cpp.
|
strong |
Status codes that can be returned by InterruptibleRecv.
Enumerator | |
---|---|
OK | |
Timeout | |
Disconnected | |
NetworkError | |
Interrupted |
Definition at line 329 of file netbase.cpp.
enum SOCKS5Atyp : uint8_t |
Values defined for ATYPE in RFC1928.
Enumerator | |
---|---|
IPV4 | |
DOMAINNAME | |
IPV6 |
Definition at line 322 of file netbase.cpp.
enum SOCKS5Command : uint8_t |
Values defined for CMD in RFC1928.
Enumerator | |
---|---|
CONNECT | |
BIND | |
UDP_ASSOCIATE |
Definition at line 302 of file netbase.cpp.
enum SOCKS5Method : uint8_t |
Values defined for METHOD in RFC1928.
Enumerator | |
---|---|
NOAUTH | No authentication required. |
GSSAPI | GSSAPI. |
USER_PASS | Username/password. |
NO_ACCEPTABLE | No acceptable methods. |
Definition at line 294 of file netbase.cpp.
enum SOCKS5Reply : uint8_t |
Values defined for REP in RFC1928.
Definition at line 309 of file netbase.cpp.
enum SOCKSVersion : uint8_t |
bool CloseSocket | ( | SOCKET & | hSocket | ) |
Close socket and set hSocket to INVALID_SOCKET.
Definition at line 962 of file netbase.cpp.
bool ConnectSocketDirectly | ( | const CService & | addrConnect, |
const SOCKET & | hSocket, | ||
int | nTimeout, | ||
bool | manual_connection | ||
) |
Try to connect to the specified service on the specified socket.
addrConnect | The service to which to connect. |
hSocket | The socket on which to connect. |
nTimeout | Wait this many milliseconds for the connection to be established. |
manual_connection | Whether or not the connection was manually requested (e.g. through the addnode RPC) |
Definition at line 683 of file netbase.cpp.
bool ConnectThroughProxy | ( | const proxyType & | proxy, |
const std::string & | strDest, | ||
int | port, | ||
const SOCKET & | hSocket, | ||
int | nTimeout, | ||
bool & | outProxyConnectionFailed | ||
) |
Connect to a specified destination service through a SOCKS5 proxy by first connecting to the SOCKS5 proxy.
proxy | The SOCKS5 proxy. | |
strDest | The destination service to which to connect. | |
port | The destination port. | |
hSocket | The socket on which to connect to the SOCKS5 proxy. | |
nTimeout | Wait this many milliseconds for the connection to the SOCKS5 proxy to be established. | |
[out] | outProxyConnectionFailed | Whether or not the connection to the SOCKS5 proxy failed. |
Definition at line 856 of file netbase.cpp.
Try to create a socket file descriptor with specific properties in the communications domain (address family) of the specified service.
For details on the desired properties, see the inline comments in the source code.
Definition at line 613 of file netbase.cpp.
bool GetNameProxy | ( | proxyType & | nameProxyOut | ) |
std::string GetNetworkName | ( | enum Network | net | ) |
|
static |
bool HaveNameProxy | ( | ) |
|
static |
Try to read a specified number of bytes from a socket.
Please read the "see also" section for more detail.
data | The buffer where the read bytes should be stored. |
len | The number of bytes to read into the specified buffer. |
timeout | The total timeout in milliseconds for this read. |
hSocket | The socket (has to be in non-blocking mode) from which to read bytes. |
Definition at line 355 of file netbase.cpp.
void InterruptSocks5 | ( | bool | interrupt | ) |
Definition at line 1012 of file netbase.cpp.
|
static |
bool IsProxy | ( | const CNetAddr & | addr | ) |
Definition at line 831 of file netbase.cpp.
|
static |
Definition at line 661 of file netbase.cpp.
bool Lookup | ( | const std::string & | name, |
std::vector< CService > & | vAddr, | ||
int | portDefault, | ||
bool | fAllowLookup, | ||
unsigned int | nMaxSolutions | ||
) |
Resolve a service string to its corresponding service.
name | The 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 port number. (e.g. example.com:8333 or | |
[out] | vAddr | The resulting services to which the specified service string resolved. |
portDefault | The default port for resulting services if not specified by the service string. | |
fAllowLookup | Whether or not hostname lookups are permitted. If yes, external queries may be performed. | |
nMaxSolutions | The maximum number of results we want, specifying 0 means "as many solutions as we get." |
Definition at line 219 of file netbase.cpp.
bool Lookup | ( | const std::string & | name, |
CService & | addr, | ||
int | portDefault, | ||
bool | fAllowLookup | ||
) |
Resolve a service string to its first corresponding service.
Definition at line 246 of file netbase.cpp.
bool LookupHost | ( | const std::string & | name, |
std::vector< CNetAddr > & | vIP, | ||
unsigned int | nMaxSolutions, | ||
bool | fAllowLookup | ||
) |
Resolve a host string to its corresponding network addresses.
name | The string representing a host. Could be a name or a numerical IP address (IPv6 addresses in their bracketed form are allowed). | |
[out] | vIP | The resulting network addresses to which the specified host string resolved. |
Definition at line 164 of file netbase.cpp.
bool LookupHost | ( | const std::string & | name, |
CNetAddr & | addr, | ||
bool | fAllowLookup | ||
) |
Resolve a host string to its first corresponding network address.
Definition at line 186 of file netbase.cpp.
|
static |
Definition at line 72 of file netbase.cpp.
CService LookupNumeric | ( | const std::string & | name, |
int | portDefault | ||
) |
Resolve a service string with a numeric IP to its first corresponding service.
Definition at line 270 of file netbase.cpp.
bool LookupSubNet | ( | const std::string & | strSubnet, |
CSubNet & | ret | ||
) |
Parse and resolve a specified subnet string into the appropriate internal representation.
strSubnet | A 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 ). |
ret | The resulting internal representation of a subnet. |
Definition at line 890 of file netbase.cpp.
struct timeval MillisToTimeval | ( | int64_t | nTimeout | ) |
Convert milliseconds to a struct timeval for e.g.
select.
Definition at line 283 of file netbase.cpp.
std::string NetworkErrorString | ( | int | err | ) |
Return readable error string for a network error code.
Too bad there are two incompatible implementations of the thread-safe strerror.
Definition at line 940 of file netbase.cpp.
enum Network ParseNetwork | ( | const std::string & | net_in | ) |
Definition at line 40 of file netbase.cpp.
bool SetNameProxy | ( | const proxyType & | 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.
Definition at line 808 of file netbase.cpp.
Definition at line 772 of file netbase.cpp.
bool SetSocketNoDelay | ( | const SOCKET & | hSocket | ) |
Set the TCP_NODELAY flag on a socket.
Definition at line 1005 of file netbase.cpp.
bool SetSocketNonBlocking | ( | const SOCKET & | hSocket, |
bool | fNonBlocking | ||
) |
Disable or enable blocking-mode for a socket.
Definition at line 979 of file netbase.cpp.
|
static |
Connect to a specified destination service through an already connected SOCKS5 proxy.
strDest | The destination fully-qualified domain name. |
port | The destination port. |
auth | The credentials with which to authenticate with the specified SOCKS5 proxy. |
hSocket | The SOCKS5 proxy socket. |
If a timeout happens here, this effectively means we timed out while connecting to the remote node. This is very common for Tor, so do not print an error message.
Definition at line 457 of file netbase.cpp.
|
static |
Convert SOCKS5 reply to an error message.
Definition at line 416 of file netbase.cpp.
|
static |
Definition at line 29 of file netbase.cpp.
bool fNameLookup = DEFAULT_NAME_LOOKUP |
Definition at line 33 of file netbase.cpp.
int nConnectTimeout = DEFAULT_CONNECT_TIMEOUT |
Definition at line 32 of file netbase.cpp.
|
static |
Definition at line 37 of file netbase.cpp.