From 8ba3ee467d792328984c6a26c8a08ead8ebbf1e0 Mon Sep 17 00:00:00 2001 From: svost Date: Mon, 30 Jan 2017 12:27:12 +0300 Subject: [PATCH] Remove socks4 support --- contrib/debian/examples/novacoin.conf | 2 +- contrib/debian/manpages/novacoin.conf.5 | 2 +- contrib/debian/manpages/novacoind.1 | 2 +- src/init.cpp | 18 ++---- src/netbase.cpp | 114 +++++++------------------------ src/netbase.h | 6 +- src/qt/forms/optionsdialog.ui | 20 ------ src/qt/optionsdialog.cpp | 7 -- src/qt/optionsmodel.cpp | 58 ++++++---------- src/rpcwallet.cpp | 2 +- 10 files changed, 57 insertions(+), 174 deletions(-) diff --git a/contrib/debian/examples/novacoin.conf b/contrib/debian/examples/novacoin.conf index 3e0dd1f..3ca9e02 100644 --- a/contrib/debian/examples/novacoin.conf +++ b/contrib/debian/examples/novacoin.conf @@ -6,7 +6,7 @@ # Run on the test network instead of the real novacoin network. #testnet=1 -# Connect via a socks4 proxy +# Connect via a socks5 proxy #proxy=127.0.0.1:9050 # Use as many addnode= settings as you like to connect to specific peers diff --git a/contrib/debian/manpages/novacoin.conf.5 b/contrib/debian/manpages/novacoin.conf.5 index 1901e16..20590d0 100644 --- a/contrib/debian/manpages/novacoin.conf.5 +++ b/contrib/debian/manpages/novacoin.conf.5 @@ -16,7 +16,7 @@ novacoin.conf should be located in $HOME/.novacoin Enable or disable run on the test network instead of the real *novacoin* network. .TP \fBproxy=\fR\fI'127.0.0.1:9050'\fR -Connect via a socks4 proxy. +Connect via a socks5 proxy. .TP \fBaddnode=\fR\fI'10.0.0.2:8333'\fR Use as many *addnode=* settings as you like to connect to specific peers. diff --git a/contrib/debian/manpages/novacoind.1 b/contrib/debian/manpages/novacoind.1 index b8199c2..a17b398 100644 --- a/contrib/debian/manpages/novacoind.1 +++ b/contrib/debian/manpages/novacoind.1 @@ -28,7 +28,7 @@ Start minimized Specify data directory .TP \fB\-proxy=\fR -Connect through socks4 proxy +Connect through socks5 proxy .TP \fB\-addnode=\fR Add a node to connect to diff --git a/src/init.cpp b/src/init.cpp index 90bf8de..4b64d35 100644 --- a/src/init.cpp +++ b/src/init.cpp @@ -239,8 +239,7 @@ std::string HelpMessage() " -dbcache= " + _("Set database cache size in megabytes (default: 25)") + "\n" + " -dblogsize= " + _("Set database disk log size in megabytes (default: 100)") + "\n" + " -timeout= " + _("Specify connection timeout in milliseconds (default: 5000)") + "\n" + - " -proxy= " + _("Connect through socks proxy") + "\n" + - " -socks= " + _("Select the version of socks proxy to use (4-5, default: 5)") + "\n" + + " -proxy= " + _("Connect through socks5 proxy") + "\n" + " -tor= " + _("Use proxy to reach tor hidden services (default: same as -proxy)") + "\n" " -torname= " + _("Send the specified hidden service name when connecting to Tor nodes (default: none)") + "\n" " -dns " + _("Allow DNS lookups for -addnode, -seednode and -connect") + "\n" + @@ -629,11 +628,6 @@ bool AppInit2() // ********************************************************* Step 6: network initialization - int nSocksVersion = GetArgInt("-socks", 5); - - if (nSocksVersion != 4 && nSocksVersion != 5) - return InitError(strprintf(_("Unknown -socks proxy version requested: %i"), nSocksVersion)); - if (mapArgs.count("-onlynet")) { std::set nets; for(std::string snet : mapMultiArgs["-onlynet"]) { @@ -663,14 +657,12 @@ bool AppInit2() return InitError(strprintf(_("Invalid -proxy address: '%s'"), mapArgs["-proxy"].c_str())); if (!IsLimited(NET_IPV4)) - SetProxy(NET_IPV4, addrProxy, nSocksVersion); - if (nSocksVersion > 4) { + SetProxy(NET_IPV4, addrProxy); #ifdef USE_IPV6 if (!IsLimited(NET_IPV6)) - SetProxy(NET_IPV6, addrProxy, nSocksVersion); + SetProxy(NET_IPV6, addrProxy); #endif - SetNameProxy(addrProxy, nSocksVersion); - } + SetNameProxy(addrProxy); fProxy = true; } @@ -683,7 +675,7 @@ bool AppInit2() addrOnion = CService(mapArgs["-tor"], nSocksDefault); if (!addrOnion.IsValid()) return InitError(strprintf(_("Invalid -tor address: '%s'"), mapArgs["-tor"].c_str())); - SetProxy(NET_TOR, addrOnion, 5); + SetProxy(NET_TOR, addrOnion); SetReachable(NET_TOR); } diff --git a/src/netbase.cpp b/src/netbase.cpp index ebc5f9f..79c5b2a 100644 --- a/src/netbase.cpp +++ b/src/netbase.cpp @@ -25,7 +25,7 @@ using namespace std; // Settings static proxyType proxyInfo[NET_MAX]; -static proxyType nameproxyInfo; +static CService nameProxy; static CCriticalSection cs_proxyInfos; int nConnectTimeout = 5000; bool fNameLookup = false; @@ -179,50 +179,6 @@ bool LookupNumeric(const char *pszName, CService& addr, uint16_t portDefault) return Lookup(pszName, addr, portDefault, false); } -bool static Socks4(const CService &addrDest, SOCKET& hSocket) -{ - printf("SOCKS4 connecting %s\n", addrDest.ToString().c_str()); - if (!addrDest.IsIPv4()) - { - CloseSocket(hSocket); - return error("Proxy destination is not IPv4"); - } - char pszSocks4IP[] = "\4\1\0\0\0\0\0\0user"; - struct sockaddr_in addr; - socklen_t len = sizeof(addr); - if (!addrDest.GetSockAddr((struct sockaddr*)&addr, &len) || addr.sin_family != AF_INET) - { - CloseSocket(hSocket); - return error("Cannot get proxy destination address"); - } - memcpy(pszSocks4IP + 2, &addr.sin_port, 2); - memcpy(pszSocks4IP + 4, &addr.sin_addr, 4); - char* pszSocks4 = pszSocks4IP; - int nSize = sizeof(pszSocks4IP); - - int ret = send(hSocket, pszSocks4, nSize, MSG_NOSIGNAL); - if (ret != nSize) - { - CloseSocket(hSocket); - return error("Error sending to proxy"); - } - char pchRet[8]; - if (recv(hSocket, pchRet, 8, 0) != 8) - { - CloseSocket(hSocket); - return error("Error reading proxy response"); - } - if (pchRet[1] != 0x5a) - { - CloseSocket(hSocket); - if (pchRet[1] != 0x5b) - printf("ERROR: Proxy returned error %d\n", pchRet[1]); - return false; - } - printf("SOCKS4 connected %s\n", addrDest.ToString().c_str()); - return true; -} - bool static Socks5(string strDest, uint16_t port, SOCKET& hSocket) { printf("SOCKS5 connecting %s\n", strDest.c_str()); @@ -435,53 +391,49 @@ bool static ConnectSocketDirectly(const CService &addrConnect, SOCKET& hSocketRe return true; } -bool SetProxy(enum Network net, CService addrProxy, int nSocksVersion) { +bool SetProxy(enum Network net, CService addrProxy) { assert(net >= 0 && net < NET_MAX); - if (nSocksVersion != 0 && nSocksVersion != 4 && nSocksVersion != 5) - return false; - if (nSocksVersion != 0 && !addrProxy.IsValid()) + if (!addrProxy.IsValid()) return false; LOCK(cs_proxyInfos); - proxyInfo[net] = std::make_pair(addrProxy, nSocksVersion); + proxyInfo[net] = addrProxy; return true; } bool GetProxy(enum Network net, proxyType &proxyInfoOut) { assert(net >= 0 && net < NET_MAX); LOCK(cs_proxyInfos); - if (!proxyInfo[net].second) + if (!proxyInfo[net].IsValid()) return false; proxyInfoOut = proxyInfo[net]; return true; } -bool SetNameProxy(CService addrProxy, int nSocksVersion) { - if (nSocksVersion != 0 && nSocksVersion != 5) - return false; - if (nSocksVersion != 0 && !addrProxy.IsValid()) +bool SetNameProxy(CService addrProxy) { + if (!addrProxy.IsValid()) return false; LOCK(cs_proxyInfos); - nameproxyInfo = std::make_pair(addrProxy, nSocksVersion); + nameProxy = addrProxy; return true; } -bool GetNameProxy(proxyType &nameproxyInfoOut) { +bool GetNameProxy(CService &nameProxyOut) { LOCK(cs_proxyInfos); - if (!nameproxyInfo.second) + if (!nameProxy.IsValid()) return false; - nameproxyInfoOut = nameproxyInfo; + nameProxyOut = nameProxy; return true; } bool HaveNameProxy() { LOCK(cs_proxyInfos); - return nameproxyInfo.second != 0; + return nameProxy.IsValid(); } bool IsProxy(const CNetAddr &addr) { LOCK(cs_proxyInfos); for (int i = 0; i < NET_MAX; i++) { - if (proxyInfo[i].second && (addr == (CNetAddr)proxyInfo[i].first)) + if (addr == (CNetAddr)proxyInfo[i]) return true; } return false; @@ -498,23 +450,12 @@ bool ConnectSocket(const CService &addrDest, SOCKET& hSocketRet, int nTimeout) SOCKET hSocket = INVALID_SOCKET; // first connect to proxy server - if (!ConnectSocketDirectly(proxy.first, hSocket, nTimeout)) + if (!ConnectSocketDirectly(proxy, hSocket, nTimeout)) return false; // do socks negotiation - switch (proxy.second) { - case 4: - if (!Socks4(addrDest, hSocket)) - return false; - break; - case 5: - if (!Socks5(addrDest.ToStringIP(), addrDest.GetPort(), hSocket)) - return false; - break; - default: - CloseSocket(hSocket); + if (!Socks5(addrDest.ToStringIP(), addrDest.GetPort(), hSocket)) return false; - } hSocketRet = hSocket; return true; @@ -528,30 +469,23 @@ bool ConnectSocketByName(CService &addr, SOCKET& hSocketRet, const char *pszDest SOCKET hSocket = INVALID_SOCKET; - proxyType nameproxy; - GetNameProxy(nameproxy); + CService nameProxy; + GetNameProxy(nameProxy); - CService addrResolved(CNetAddr(strDest, fNameLookup && !nameproxy.second), port); + CService addrResolved(CNetAddr(strDest, fNameLookup && !HaveNameProxy()), port); if (addrResolved.IsValid()) { addr = addrResolved; return ConnectSocket(addr, hSocketRet, nTimeout); } addr = CService("0.0.0.0:0"); - if (!nameproxy.second) + if (!HaveNameProxy) return false; - if (!ConnectSocketDirectly(nameproxy.first, hSocket, nTimeout)) + // first connect to name proxy server + if (!ConnectSocketDirectly(nameProxy, hSocket, nTimeout)) + return false; + // do socks negotiation + if (!Socks5(strDest, port, hSocket)) return false; - - switch(nameproxy.second) { - default: - case 4: - CloseSocket(hSocket); - return false; - case 5: - if (!Socks5(strDest, port, hSocket)) - return false; - break; - } hSocketRet = hSocket; return true; diff --git a/src/netbase.h b/src/netbase.h index 14c632e..e6f3e6d 100644 --- a/src/netbase.h +++ b/src/netbase.h @@ -126,14 +126,14 @@ class CService : public CNetAddr ) }; -typedef std::pair proxyType; +typedef CService proxyType; enum Network ParseNetwork(std::string net); void SplitHostPort(std::string in, uint16_t &portOut, std::string &hostOut); -bool SetProxy(enum Network net, CService addrProxy, int nSocksVersion = 5); +bool SetProxy(enum Network net, CService addrProxy); bool GetProxy(enum Network net, proxyType &proxyInfoOut); bool IsProxy(const CNetAddr &addr); -bool SetNameProxy(CService addrProxy, int nSocksVersion = 5); +bool SetNameProxy(CService addrProxy); bool HaveNameProxy(); bool LookupHost(const std::string& strName, std::vector& vIP, unsigned int nMaxSolutions = 0, bool fAllowLookup = true); bool LookupHost(const char *pszName, std::vector& vIP, unsigned int nMaxSolutions = 0, bool fAllowLookup = true); diff --git a/src/qt/forms/optionsdialog.ui b/src/qt/forms/optionsdialog.ui index 7cf60cf..d843ffe 100644 --- a/src/qt/forms/optionsdialog.ui +++ b/src/qt/forms/optionsdialog.ui @@ -185,26 +185,6 @@ - - - SOCKS &Version: - - - Qt::PlainText - - - socksVersion - - - - - - - SOCKS version of the proxy (e.g. 5) - - - - Qt::Horizontal diff --git a/src/qt/optionsdialog.cpp b/src/qt/optionsdialog.cpp index adb6ffb..dc3122a 100644 --- a/src/qt/optionsdialog.cpp +++ b/src/qt/optionsdialog.cpp @@ -47,14 +47,8 @@ OptionsDialog::OptionsDialog(QWidget *parent) : ui->TorOnly->setEnabled(false); ui->torName->setEnabled(false); - ui->socksVersion->setEnabled(false); - ui->socksVersion->addItem("5", 5); - ui->socksVersion->addItem("4", 4); - ui->socksVersion->setCurrentIndex(0); - connect(ui->connectSocks, SIGNAL(toggled(bool)), ui->proxyIp, SLOT(setEnabled(bool))); connect(ui->connectSocks, SIGNAL(toggled(bool)), ui->proxyPort, SLOT(setEnabled(bool))); - connect(ui->connectSocks, SIGNAL(toggled(bool)), ui->socksVersion, SLOT(setEnabled(bool))); connect(ui->connectSocks, SIGNAL(clicked(bool)), this, SLOT(showRestartWarning_Proxy())); connect(ui->connectTor, SIGNAL(clicked(bool)), this, SLOT(showRestartWarning_Tor())); @@ -164,7 +158,6 @@ void OptionsDialog::setMapper() mapper->addMapping(ui->connectSocks, OptionsModel::ProxyUse); mapper->addMapping(ui->proxyIp, OptionsModel::ProxyIP); mapper->addMapping(ui->proxyPort, OptionsModel::ProxyPort); - mapper->addMapping(ui->socksVersion, OptionsModel::ProxySocksVersion); mapper->addMapping(ui->connectTor, OptionsModel::TorUse); mapper->addMapping(ui->torIp, OptionsModel::TorIP); diff --git a/src/qt/optionsmodel.cpp b/src/qt/optionsmodel.cpp index 80fc84f..7e80615 100644 --- a/src/qt/optionsmodel.cpp +++ b/src/qt/optionsmodel.cpp @@ -16,25 +16,21 @@ bool static ApplyProxySettings() { QSettings settings; CService addrProxy(settings.value("addrProxy", "127.0.0.1:9050").toString().toStdString()); - int nSocksVersion(settings.value("nSocksVersion", 5).toInt()); if (!settings.value("fUseProxy", false).toBool()) { addrProxy = CService(); - nSocksVersion = 0; return false; } - if (nSocksVersion && !addrProxy.IsValid()) + if (!addrProxy.IsValid()) return false; if (!IsLimited(NET_IPV4)) - SetProxy(NET_IPV4, addrProxy, nSocksVersion); - if (nSocksVersion > 4) { + SetProxy(NET_IPV4, addrProxy); #ifdef USE_IPV6 if (!IsLimited(NET_IPV6)) - SetProxy(NET_IPV6, addrProxy, nSocksVersion); + SetProxy(NET_IPV6, addrProxy); #endif - } - SetNameProxy(addrProxy, nSocksVersion); + SetNameProxy(addrProxy); return true; } @@ -50,7 +46,7 @@ bool static ApplyTorSettings() if (!addrTor.IsValid()) return false; - SetProxy(NET_TOR, addrTor, 5); + SetProxy(NET_TOR, addrTor); SetReachable(NET_TOR); return true; @@ -132,32 +128,30 @@ QVariant OptionsModel::data(const QModelIndex & index, int role) const case ProxyIP: { proxyType proxy; if (GetProxy(NET_IPV4, proxy)) - return QVariant(QString::fromStdString(proxy.first.ToStringIP())); + return QVariant(QString::fromStdString(proxy.ToStringIP())); else return QVariant(QString::fromStdString("127.0.0.1")); } case ProxyPort: { proxyType proxy; if (GetProxy(NET_IPV4, proxy)) - return QVariant(proxy.first.GetPort()); + return QVariant(proxy.GetPort()); else return QVariant(nSocksDefault); } - case ProxySocksVersion: - return settings.value("nSocksVersion", 5); case TorUse: return settings.value("fUseTor", false); case TorIP: { proxyType proxy; if (GetProxy(NET_TOR, proxy)) - return QVariant(QString::fromStdString(proxy.first.ToStringIP())); + return QVariant(QString::fromStdString(proxy.ToStringIP())); else return QVariant(QString::fromStdString("127.0.0.1")); } case TorPort: { proxyType proxy; if (GetProxy(NET_TOR, proxy)) - return QVariant(proxy.first.GetPort()); + return QVariant(proxy.GetPort()); else return QVariant(nSocksDefault); } @@ -213,32 +207,22 @@ bool OptionsModel::setData(const QModelIndex & index, const QVariant & value, in break; case ProxyIP: { proxyType proxy; - proxy.first = CService("127.0.0.1", nSocksDefault); + proxy = CService("127.0.0.1", nSocksDefault); GetProxy(NET_IPV4, proxy); CNetAddr addr(value.toString().toStdString()); - proxy.first.SetIP(addr); - settings.setValue("addrProxy", proxy.first.ToStringIPPort().c_str()); + proxy.SetIP(addr); + settings.setValue("addrProxy", proxy.ToStringIPPort().c_str()); successful = ApplyProxySettings(); } break; case ProxyPort: { proxyType proxy; - proxy.first = CService("127.0.0.1", nSocksDefault); - GetProxy(NET_IPV4, proxy); - - proxy.first.SetupPort(value.toInt()); - settings.setValue("addrProxy", proxy.first.ToStringIPPort().c_str()); - successful = ApplyProxySettings(); - } - break; - case ProxySocksVersion: { - proxyType proxy; - proxy.second = 5; + proxy = CService("127.0.0.1", nSocksDefault); GetProxy(NET_IPV4, proxy); - proxy.second = value.toInt(); - settings.setValue("nSocksVersion", proxy.second); + proxy.SetupPort(value.toInt()); + settings.setValue("addrProxy", proxy.ToStringIPPort().c_str()); successful = ApplyProxySettings(); } break; @@ -249,22 +233,22 @@ bool OptionsModel::setData(const QModelIndex & index, const QVariant & value, in break; case TorIP: { proxyType proxy; - proxy.first = CService("127.0.0.1", nSocksDefault); + proxy = CService("127.0.0.1", nSocksDefault); GetProxy(NET_TOR, proxy); CNetAddr addr(value.toString().toStdString()); - proxy.first.SetIP(addr); - settings.setValue("addrTor", proxy.first.ToStringIPPort().c_str()); + proxy.SetIP(addr); + settings.setValue("addrTor", proxy.ToStringIPPort().c_str()); successful = ApplyTorSettings(); } break; case TorPort: { proxyType proxy; - proxy.first = CService("127.0.0.1", nSocksDefault); + proxy = CService("127.0.0.1", nSocksDefault); GetProxy(NET_TOR, proxy); - proxy.first.SetupPort((uint16_t)value.toUInt()); - settings.setValue("addrTor", proxy.first.ToStringIPPort().c_str()); + proxy.SetupPort((uint16_t)value.toUInt()); + settings.setValue("addrTor", proxy.ToStringIPPort().c_str()); successful = ApplyTorSettings(); } break; diff --git a/src/rpcwallet.cpp b/src/rpcwallet.cpp index 0892121..8f82c97 100644 --- a/src/rpcwallet.cpp +++ b/src/rpcwallet.cpp @@ -95,7 +95,7 @@ Value getinfo(const Array& params, bool fHelp) obj.push_back(Pair("moneysupply", ValueFromAmount(pindexBest->nMoneySupply))); obj.push_back(Pair("connections", (int)vNodes.size())); - obj.push_back(Pair("proxy", (proxy.first.IsValid() ? proxy.first.ToStringIPPort() : string()))); + obj.push_back(Pair("proxy", (proxy.IsValid() ? proxy.ToStringIPPort() : string()))); obj.push_back(Pair("ip", addrSeenByPeer.ToStringIP())); diff.push_back(Pair("proof-of-work", GetDifficulty())); -- 1.7.1