Skip to content

Commit 2f06b59

Browse files
committed
Merge pull request #3452
1ba3560 [Qt] let OptionsModel::getProxySettings() directly query proxy (Philip Kaufmann)
2 parents ceab53b + 1ba3560 commit 2f06b59

File tree

4 files changed

+39
-19
lines changed

4 files changed

+39
-19
lines changed

src/qt/optionsdialog.cpp

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,6 @@ OptionsDialog::OptionsDialog(QWidget *parent) :
5353
connect(ui->connectSocks, SIGNAL(toggled(bool)), ui->proxyIp, SLOT(setEnabled(bool)));
5454
connect(ui->connectSocks, SIGNAL(toggled(bool)), ui->proxyPort, SLOT(setEnabled(bool)));
5555
connect(ui->connectSocks, SIGNAL(toggled(bool)), ui->socksVersion, SLOT(setEnabled(bool)));
56-
connect(ui->connectSocks, SIGNAL(clicked(bool)), this, SLOT(showRestartWarning_Proxy()));
5756

5857
ui->proxyIp->installEventFilter(this);
5958

@@ -204,7 +203,7 @@ void OptionsDialog::on_resetButton_clicked()
204203
if(btnRetVal == QMessageBox::Cancel)
205204
return;
206205

207-
/* reset all options and close Bitcoin-Qt */
206+
/* reset all options and close GUI */
208207
model->Reset();
209208
QApplication::quit();
210209
}

src/qt/optionsmodel.cpp

Lines changed: 18 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
#include "walletdb.h"
2020
#endif
2121

22+
#include <QNetworkProxy>
2223
#include <QSettings>
2324
#include <QStringList>
2425

@@ -375,14 +376,25 @@ bool OptionsModel::setData(const QModelIndex & index, const QVariant & value, in
375376
return successful;
376377
}
377378

378-
bool OptionsModel::getProxySettings(QString& proxyIP, quint16 &proxyPort) const
379+
bool OptionsModel::getProxySettings(QNetworkProxy& proxy) const
379380
{
380-
std::string proxy = GetArg("-proxy", "");
381-
if (proxy.empty()) return false;
381+
// Directly query current base proxy, because
382+
// GUI settings can be overridden with -proxy.
383+
proxyType curProxy;
384+
if (GetProxy(NET_IPV4, curProxy)) {
385+
if (curProxy.second == 5) {
386+
proxy.setType(QNetworkProxy::Socks5Proxy);
387+
proxy.setHostName(QString::fromStdString(curProxy.first.ToStringIP()));
388+
proxy.setPort(curProxy.first.GetPort());
389+
390+
return true;
391+
}
392+
else
393+
return false;
394+
}
395+
else
396+
proxy.setType(QNetworkProxy::NoProxy);
382397

383-
CService addrProxy(proxy);
384-
proxyIP = QString(addrProxy.ToStringIP().c_str());
385-
proxyPort = addrProxy.GetPort();
386398
return true;
387399
}
388400

src/qt/optionsmodel.h

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,10 @@
77

88
#include <QAbstractListModel>
99

10+
QT_BEGIN_NAMESPACE
11+
class QNetworkProxy;
12+
QT_END_NAMESPACE
13+
1014
/** Interface from Qt to configuration data structure for Bitcoin client.
1115
To Qt, the options are presented as a list with the different options
1216
laid out vertically.
@@ -54,7 +58,7 @@ class OptionsModel : public QAbstractListModel
5458
bool getMinimizeOnClose() { return fMinimizeOnClose; }
5559
int getDisplayUnit() { return nDisplayUnit; }
5660
bool getDisplayAddresses() { return bDisplayAddresses; }
57-
bool getProxySettings(QString& proxyIP, quint16 &proxyPort) const;
61+
bool getProxySettings(QNetworkProxy& proxy) const;
5862
bool getCoinControlFeatures() { return fCoinControlFeatures; }
5963
const QString& getOverriddenByCommandLine() { return strOverriddenByCommandLine; }
6064

src/qt/paymentserver.cpp

Lines changed: 15 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -335,17 +335,22 @@ void PaymentServer::initNetManager()
335335
// netManager is used to fetch paymentrequests given in bitcoin: URIs
336336
netManager = new QNetworkAccessManager(this);
337337

338-
// Use proxy settings from optionsModel
339-
QString proxyIP;
340-
quint16 proxyPort;
341-
if (optionsModel->getProxySettings(proxyIP, proxyPort))
342-
{
343-
QNetworkProxy proxy;
344-
proxy.setType(QNetworkProxy::Socks5Proxy);
345-
proxy.setHostName(proxyIP);
346-
proxy.setPort(proxyPort);
347-
netManager->setProxy(proxy);
338+
QNetworkProxy proxy;
339+
340+
// Query active proxy (fails if no SOCKS5 proxy)
341+
if (optionsModel->getProxySettings(proxy)) {
342+
if (proxy.type() == QNetworkProxy::Socks5Proxy) {
343+
netManager->setProxy(proxy);
344+
345+
qDebug() << "PaymentServer::initNetManager : Using SOCKS5 proxy" << proxy.hostName() << ":" << proxy.port();
346+
}
347+
else
348+
qDebug() << "PaymentServer::initNetManager : No active proxy server found.";
348349
}
350+
else
351+
emit message(tr("Net manager warning"),
352+
tr("Your active proxy doesn't support SOCKS5, which is required for payment requests via proxy."),
353+
CClientUIInterface::MSG_WARNING);
349354

350355
connect(netManager, SIGNAL(finished(QNetworkReply*)),
351356
this, SLOT(netRequestFinished(QNetworkReply*)));

0 commit comments

Comments
 (0)