Dash Core Source Documentation (0.16.0.1)

Find detailed information regarding the Dash Core source code.

netbase.cpp File Reference
#include <netbase.h>
#include <hash.h>
#include <sync.h>
#include <uint256.h>
#include <random.h>
#include <util.h>
#include <utilstrencodings.h>
#include <atomic>
#include <fcntl.h>
#include <boost/algorithm/string/case_conv.hpp>
#include <boost/algorithm/string/predicate.hpp>
+ Include dependency graph for netbase.cpp:

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_MAXGUARDED_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)
 Convert milliseconds to a struct timeval for e.g. More...
 
static IntrRecvError InterruptibleRecv (uint8_t *data, size_t len, int timeout, const SOCKET &hSocket)
 Read bytes from socket. More...
 
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 using SOCKS5 (as described in RFC1928) More...
 
SOCKET CreateSocket (const CService &addrConnect)
 
bool ConnectSocketDirectly (const CService &addrConnect, const SOCKET &hSocket, int nTimeout)
 
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)
 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 CCriticalSection cs_proxyInfos
 
int nConnectTimeout = DEFAULT_CONNECT_TIMEOUT
 
bool fNameLookup = DEFAULT_NAME_LOOKUP
 
static const int SOCKS5_RECV_TIMEOUT = 20 * 1000
 

Macro Definition Documentation

◆ MSG_NOSIGNAL

#define MSG_NOSIGNAL   0

Definition at line 28 of file netbase.cpp.

Referenced by Socks5().

Enumeration Type Documentation

◆ IntrRecvError

enum IntrRecvError
strong

Status codes that can be returned by InterruptibleRecv.

Enumerator
OK 
Timeout 
Disconnected 
NetworkError 
Interrupted 

Definition at line 228 of file netbase.cpp.

◆ SOCKS5Atyp

enum SOCKS5Atyp : uint8_t

Values defined for ATYPE in RFC1928.

Enumerator
IPV4 
DOMAINNAME 
IPV6 

Definition at line 221 of file netbase.cpp.

◆ SOCKS5Command

enum SOCKS5Command : uint8_t

Values defined for CMD in RFC1928.

Enumerator
CONNECT 
BIND 
UDP_ASSOCIATE 

Definition at line 201 of file netbase.cpp.

◆ SOCKS5Method

enum SOCKS5Method : uint8_t

Values defined for METHOD in RFC1928.

Enumerator
NOAUTH 
GSSAPI 

No authentication required.

USER_PASS 

GSSAPI.

NO_ACCEPTABLE 

Username/password.

Definition at line 193 of file netbase.cpp.

◆ SOCKS5Reply

enum SOCKS5Reply : uint8_t

Values defined for REP in RFC1928.

Enumerator
SUCCEEDED 
GENFAILURE 

Succeeded.

NOTALLOWED 

General failure.

NETUNREACHABLE 

Connection not allowed by ruleset.

HOSTUNREACHABLE 

Network unreachable.

CONNREFUSED 

Network unreachable.

TTLEXPIRED 

Connection refused.

CMDUNSUPPORTED 

TTL expired.

ATYPEUNSUPPORTED 

Command not supported.

Definition at line 208 of file netbase.cpp.

◆ SOCKSVersion

enum SOCKSVersion : uint8_t

SOCKS version.

Enumerator
SOCKS4 
SOCKS5 

Definition at line 187 of file netbase.cpp.

Function Documentation

◆ CloseSocket()

◆ ConnectSocketDirectly()

◆ ConnectThroughProxy()

bool ConnectThroughProxy ( const proxyType proxy,
const std::string &  strDest,
int  port,
const SOCKET hSocket,
int  nTimeout,
bool *  outProxyConnectionFailed 
)

◆ CreateSocket()

◆ GetNameProxy()

bool GetNameProxy ( proxyType nameProxyOut)

Definition at line 573 of file netbase.cpp.

References cs_proxyInfos, and LOCK.

Referenced by CConnman::ConnectNode().

◆ GetNetworkName()

std::string GetNetworkName ( enum Network  net)

Definition at line 50 of file netbase.cpp.

References NET_IPV4, NET_IPV6, and NET_TOR.

Referenced by GetNetworksInfo().

◆ GetProxy()

bool GetProxy ( enum Network  net,
proxyType proxyInfoOut 
)

◆ GUARDED_BY()

static proxyType nameProxy GUARDED_BY ( cs_proxyInfos  )
static

◆ HaveNameProxy()

bool HaveNameProxy ( )

Definition at line 581 of file netbase.cpp.

References cs_proxyInfos, and LOCK.

Referenced by CConnman::ConnectNode(), and CConnman::ThreadDNSAddressSeed().

◆ InterruptibleRecv()

static IntrRecvError InterruptibleRecv ( uint8_t *  data,
size_t  len,
int  timeout,
const SOCKET hSocket 
)
static

Read bytes from socket.

This will either read the full number of bytes requested or return False on error or timeout. This function can be interrupted by calling InterruptSocks5()

Parameters
dataBuffer to receive into
lenLength of data to receive
timeoutTimeout in milliseconds for receive operation
Note
This function requires that hSocket is in non-blocking mode.

Definition at line 247 of file netbase.cpp.

References Disconnected, GetTimeMillis(), Interrupted, interruptSocks5Recv(), IsSelectableSocket(), MillisToTimeval(), NetworkError, OK, SOCKET_ERROR, Timeout, WSAEINPROGRESS, WSAEINVAL, WSAEWOULDBLOCK, and WSAGetLastError.

Referenced by Socks5().

◆ InterruptSocks5()

void InterruptSocks5 ( bool  interrupt)

Definition at line 740 of file netbase.cpp.

References interruptSocks5Recv().

Referenced by CConnman::Interrupt(), and CConnman::Start().

◆ interruptSocks5Recv()

static std::atomic<bool> interruptSocks5Recv ( false  )
static

◆ IsProxy()

bool IsProxy ( const CNetAddr addr)

Definition at line 586 of file netbase.cpp.

References cs_proxyInfos, LOCK, and NET_MAX.

◆ Lookup() [1/2]

bool Lookup ( const char *  pszName,
std::vector< CService > &  vAddr,
int  portDefault,
bool  fAllowLookup,
unsigned int  nMaxSolutions 
)

◆ Lookup() [2/2]

bool Lookup ( const char *  pszName,
CService addr,
int  portDefault,
bool  fAllowLookup 
)

Definition at line 158 of file netbase.cpp.

References Lookup().

◆ LookupHost() [1/2]

bool LookupHost ( const char *  pszName,
std::vector< CNetAddr > &  vIP,
unsigned int  nMaxSolutions,
bool  fAllowLookup 
)

◆ LookupHost() [2/2]

bool LookupHost ( const char *  pszName,
CNetAddr addr,
bool  fAllowLookup 
)

Definition at line 130 of file netbase.cpp.

References LookupHost().

◆ LookupIntern()

static bool LookupIntern ( const char *  pszName,
std::vector< CNetAddr > &  vIP,
unsigned int  nMaxSolutions,
bool  fAllowLookup 
)
static

Definition at line 60 of file netbase.cpp.

References CNetAddr::IsInternal(), and CNetAddr::SetSpecial().

Referenced by Lookup(), and LookupHost().

◆ LookupNumeric()

CService LookupNumeric ( const char *  pszName,
int  portDefault 
)

◆ LookupSubNet()

bool LookupSubNet ( const char *  pszName,
CSubNet ret 
)

◆ MillisToTimeval()

struct timeval MillisToTimeval ( int64_t  nTimeout)

Convert milliseconds to a struct timeval for e.g.

select.

Definition at line 178 of file netbase.cpp.

Referenced by ConnectSocketDirectly(), TorController::disconnected_cb(), and InterruptibleRecv().

◆ NetworkErrorString()

◆ ParseNetwork()

enum Network ParseNetwork ( std::string  net)

Definition at line 42 of file netbase.cpp.

References NET_IPV4, NET_IPV6, NET_TOR, and NET_UNROUTABLE.

Referenced by AppInitMain().

◆ SetNameProxy()

bool SetNameProxy ( const proxyType addrProxy)

Definition at line 565 of file netbase.cpp.

References cs_proxyInfos, proxyType::IsValid(), and LOCK.

Referenced by AppInitMain().

◆ SetProxy()

bool SetProxy ( enum Network  net,
const proxyType addrProxy 
)

Definition at line 547 of file netbase.cpp.

References cs_proxyInfos, proxyType::IsValid(), LOCK, and NET_MAX.

Referenced by AppInitMain(), and TorController::auth_cb().

◆ SetSocketNoDelay()

bool SetSocketNoDelay ( const SOCKET hSocket)

Set the TCP_NODELAY flag on a socket.

Definition at line 733 of file netbase.cpp.

Referenced by CConnman::AcceptConnection(), and CreateSocket().

◆ SetSocketNonBlocking()

bool SetSocketNonBlocking ( const SOCKET hSocket,
bool  fNonBlocking 
)

Disable or enable blocking-mode for a socket.

Definition at line 706 of file netbase.cpp.

References SOCKET_ERROR.

Referenced by CreateSocket().

◆ Socks5()

static bool Socks5 ( const std::string &  strDest,
int  port,
const ProxyCredentials auth,
const SOCKET hSocket 
)
static

◆ Socks5ErrorString()

std::string Socks5ErrorString ( uint8_t  err)

Convert SOCKS5 reply to an error message.

Definition at line 302 of file netbase.cpp.

References ATYPEUNSUPPORTED, CMDUNSUPPORTED, CONNREFUSED, GENFAILURE, HOSTUNREACHABLE, NETUNREACHABLE, NOTALLOWED, and TTLEXPIRED.

Referenced by Socks5().

Variable Documentation

◆ cs_proxyInfos

CCriticalSection cs_proxyInfos
static

Definition at line 32 of file netbase.cpp.

Referenced by GetNameProxy(), GetProxy(), HaveNameProxy(), IsProxy(), SetNameProxy(), and SetProxy().

◆ fNameLookup

bool fNameLookup = DEFAULT_NAME_LOOKUP

Definition at line 36 of file netbase.cpp.

Referenced by AppInitMain(), and CConnman::ConnectNode().

◆ nConnectTimeout

◆ SOCKS5_RECV_TIMEOUT

const int SOCKS5_RECV_TIMEOUT = 20 * 1000
static

Definition at line 39 of file netbase.cpp.

Referenced by Socks5().

Released under the MIT license