Bitcoin
|
#include <netbase.h>
#include <sync.h>
#include <tinyformat.h>
#include <util/system.h>
#include <util/strencodings.h>
#include <atomic>
#include <fcntl.h>
Classes | |
struct | ProxyCredentials |
Macros | |
#define | MSG_NOSIGNAL 0 |
Enumerations | |
enum | SOCKSVersion : uint8_t { SOCKS4 = 0x04, SOCKS5 = 0x05 } |
enum | SOCKS5Method : uint8_t { NOAUTH = 0x00, GSSAPI = 0x01, USER_PASS = 0x02, NO_ACCEPTABLE = 0xff } |
enum | SOCKS5Command : uint8_t { CONNECT = 0x01, BIND = 0x02, UDP_ASSOCIATE = 0x03 } |
enum | SOCKS5Reply : uint8_t { SUCCEEDED = 0x00, GENFAILURE = 0x01, NOTALLOWED = 0x02, NETUNREACHABLE = 0x03, HOSTUNREACHABLE = 0x04, CONNREFUSED = 0x05, TTLEXPIRED = 0x06, CMDUNSUPPORTED = 0x07, ATYPEUNSUPPORTED = 0x08 } |
enum | SOCKS5Atyp : uint8_t { IPV4 = 0x01, DOMAINNAME = 0x03, IPV6 = 0x04 } |
enum | IntrRecvError { IntrRecvError::OK, IntrRecvError::Timeout, IntrRecvError::Disconnected, IntrRecvError::NetworkError, IntrRecvError::Interrupted } |
Functions | |
static proxyType proxyInfo [NET_MAX] | GUARDED_BY (cs_proxyInfos) |
static std::atomic< bool > | interruptSocks5Recv (false) |
enum Network | ParseNetwork (std::string net) |
std::string | GetNetworkName (enum Network net) |
static bool | LookupIntern (const char *pszName, std::vector< CNetAddr > &vIP, unsigned int nMaxSolutions, bool fAllowLookup) |
bool | LookupHost (const char *pszName, std::vector< CNetAddr > &vIP, unsigned int nMaxSolutions, bool fAllowLookup) |
bool | LookupHost (const char *pszName, CNetAddr &addr, bool fAllowLookup) |
bool | Lookup (const char *pszName, std::vector< CService > &vAddr, int portDefault, bool fAllowLookup, unsigned int nMaxSolutions) |
bool | Lookup (const char *pszName, CService &addr, int portDefault, bool fAllowLookup) |
CService | LookupNumeric (const char *pszName, int portDefault) |
struct timeval | MillisToTimeval (int64_t nTimeout) |
static IntrRecvError | InterruptibleRecv (uint8_t *data, size_t len, int timeout, const SOCKET &hSocket) |
static std::string | Socks5ErrorString (uint8_t err) |
static bool | Socks5 (const std::string &strDest, int port, const ProxyCredentials *auth, const SOCKET &hSocket) |
SOCKET | CreateSocket (const CService &addrConnect) |
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) |
bool | SetProxy (enum Network net, const proxyType &addrProxy) |
bool | GetProxy (enum Network net, proxyType &proxyInfoOut) |
bool | SetNameProxy (const proxyType &addrProxy) |
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) |
bool | LookupSubNet (const char *pszName, CSubNet &ret) |
std::string | NetworkErrorString (int err) |
bool | CloseSocket (SOCKET &hSocket) |
bool | SetSocketNonBlocking (const SOCKET &hSocket, bool fNonBlocking) |
bool | SetSocketNoDelay (const SOCKET &hSocket) |
void | InterruptSocks5 (bool interrupt) |
Variables | |
static CCriticalSection | cs_proxyInfos |
int | nConnectTimeout = DEFAULT_CONNECT_TIMEOUT |
bool | fNameLookup = DEFAULT_NAME_LOOKUP |
static const int | SOCKS5_RECV_TIMEOUT = 20 * 1000 |
#define MSG_NOSIGNAL 0 |
|
strong |
enum SOCKS5Atyp : uint8_t |
enum SOCKS5Command : uint8_t |
enum SOCKS5Method : uint8_t |
enum SOCKS5Reply : uint8_t |
Values defined for REP in RFC1928
enum SOCKSVersion : uint8_t |
bool CloseSocket | ( | SOCKET & | hSocket | ) |
Close socket and set hSocket to INVALID_SOCKET
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. thru the addnode RPC) |
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. |
outProxyConnectionFailed[out] | Whether or not the connection to the SOCKS5 proxy failed. |
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.
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. |
void InterruptSocks5 | ( | bool | interrupt | ) |
|
static |
bool IsProxy | ( | const CNetAddr & | addr | ) |
|
static |
bool Lookup | ( | const char * | pszName, |
std::vector< CService > & | vAddr, | ||
int | portDefault, | ||
bool | fAllowLookup, | ||
unsigned int | nMaxSolutions | ||
) |
Resolve a service string to its corresponding service.
pszName | 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." |
bool Lookup | ( | const char * | pszName, |
CService & | addr, | ||
int | portDefault, | ||
bool | fAllowLookup | ||
) |
Resolve a service string to its first corresponding service.
bool LookupHost | ( | const char * | pszName, |
std::vector< CNetAddr > & | vIP, | ||
unsigned int | nMaxSolutions, | ||
bool | fAllowLookup | ||
) |
Resolve a host string to its corresponding network addresses.
pszName | 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. |
bool LookupHost | ( | const char * | pszName, |
CNetAddr & | addr, | ||
bool | fAllowLookup | ||
) |
Resolve a host string to its first corresponding network address.
|
static |
CService LookupNumeric | ( | const char * | pszName, |
int | portDefault | ||
) |
Resolve a service string with a numeric IP to its first corresponding service.
bool LookupSubNet | ( | const char * | pszName, |
CSubNet & | ret | ||
) |
Parse and resolve a specified subnet string into the appropriate internal representation.
pszName | 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. |
struct timeval MillisToTimeval | ( | int64_t | nTimeout | ) |
Convert milliseconds to a struct timeval for e.g. select.
std::string NetworkErrorString | ( | int | err | ) |
Return readable error string for a network error code
enum Network ParseNetwork | ( | std::string | net | ) |
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 sepcified 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.
bool SetSocketNoDelay | ( | const SOCKET & | hSocket | ) |
Set the TCP_NODELAY flag on a socket
bool SetSocketNonBlocking | ( | const SOCKET & | hSocket, |
bool | fNonBlocking | ||
) |
Disable or enable blocking-mode for a socket
|
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. |
|
static |
Convert SOCKS5 reply to an error message
|
static |
bool fNameLookup = DEFAULT_NAME_LOOKUP |
int nConnectTimeout = DEFAULT_CONNECT_TIMEOUT |
|
static |