mirror of
https://github.com/dogecoin/dogecoin.git
synced 2026-01-31 18:40:58 +00:00
While working with other networking code, Patrick and I noticed that we use signed types and wrongly-sized types for several networking related values, including data lengths, timeout durations, and port numbers. This commit corrects several of these types and improves error handling slightly to account for potentially invalid values.
70 lines
2.7 KiB
C++
70 lines
2.7 KiB
C++
// Copyright (c) 2009-2016 The Bitcoin Core developers
|
|
// Copyright (c) 2022 The Dogecoin Core developers
|
|
// Distributed under the MIT software license, see the accompanying
|
|
// file COPYING or http://www.opensource.org/licenses/mit-license.php.
|
|
|
|
#ifndef BITCOIN_NETBASE_H
|
|
#define BITCOIN_NETBASE_H
|
|
|
|
#if defined(HAVE_CONFIG_H)
|
|
#include "config/bitcoin-config.h"
|
|
#endif
|
|
|
|
#include "compat.h"
|
|
#include "netaddress.h"
|
|
#include "serialize.h"
|
|
|
|
#include <stdint.h>
|
|
#include <string>
|
|
#include <vector>
|
|
|
|
extern uint64_t nConnectTimeout;
|
|
extern bool fNameLookup;
|
|
|
|
//! -timeout default
|
|
static const uint64_t DEFAULT_CONNECT_TIMEOUT = 5000;
|
|
//! -dns default
|
|
static const int DEFAULT_NAME_LOOKUP = true;
|
|
|
|
class proxyType
|
|
{
|
|
public:
|
|
proxyType(): randomize_credentials(false) {}
|
|
proxyType(const CService &_proxy, bool _randomize_credentials=false): proxy(_proxy), randomize_credentials(_randomize_credentials) {}
|
|
|
|
bool IsValid() const { return proxy.IsValid(); }
|
|
|
|
CService proxy;
|
|
bool randomize_credentials;
|
|
};
|
|
|
|
enum Network ParseNetwork(std::string net);
|
|
std::string GetNetworkName(enum Network net);
|
|
void SplitHostPort(std::string in, uint16_t &portOut, std::string &hostOut);
|
|
bool SetProxy(enum Network net, const proxyType &addrProxy);
|
|
bool GetProxy(enum Network net, proxyType &proxyInfoOut);
|
|
bool IsProxy(const CNetAddr &addr);
|
|
bool SetNameProxy(const proxyType &addrProxy);
|
|
bool HaveNameProxy();
|
|
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, CService& addr, uint16_t portDefault, bool fAllowLookup);
|
|
bool Lookup(const char *pszName, std::vector<CService>& vAddr, uint16_t portDefault, bool fAllowLookup, unsigned int nMaxSolutions);
|
|
CService LookupNumeric(const char *pszName, uint16_t portDefault = 0);
|
|
bool LookupSubNet(const char *pszName, CSubNet& subnet);
|
|
bool ConnectSocket(const CService &addr, SOCKET& hSocketRet, uint64_t nTimeout, bool *outProxyConnectionFailed = 0);
|
|
bool ConnectSocketByName(CService &addr, SOCKET& hSocketRet, const char *pszDest, uint16_t portDefault, uint64_t nTimeout, bool *outProxyConnectionFailed = 0);
|
|
/** Return readable error string for a network error code */
|
|
std::string NetworkErrorString(int err);
|
|
/** Close socket and set hSocket to INVALID_SOCKET */
|
|
bool CloseSocket(SOCKET& hSocket);
|
|
/** Disable or enable blocking-mode for a socket */
|
|
bool SetSocketNonBlocking(SOCKET& hSocket, bool fNonBlocking);
|
|
/**
|
|
* Convert milliseconds to a struct timeval for e.g. select.
|
|
*/
|
|
struct timeval MillisToTimeval(uint64_t nTimeout);
|
|
void InterruptSocks5(bool interrupt);
|
|
|
|
#endif // BITCOIN_NETBASE_H
|