diff --git a/src/core/bittorrent/session.cpp b/src/core/bittorrent/session.cpp
index 67c78fce9..d94c58c03 100644
--- a/src/core/bittorrent/session.cpp
+++ b/src/core/bittorrent/session.cpp
@@ -1828,35 +1828,44 @@ void Session::setProxySettings(libt::proxy_settings proxySettings)
proxySettings.proxy_peer_connections = Preferences::instance()->proxyPeerConnections();
m_nativeSession->set_proxy(proxySettings);
- // Define environment variable
- QString proxy_str;
- switch(proxySettings.type) {
- case libt::proxy_settings::http_pw:
- proxy_str = QString("http://%1:%2@%3:%4").arg(Utils::String::fromStdString(proxySettings.username)).arg(Utils::String::fromStdString(proxySettings.password))
- .arg(Utils::String::fromStdString(proxySettings.hostname)).arg(proxySettings.port);
- break;
- case libt::proxy_settings::http:
- proxy_str = QString("http://%1:%2").arg(Utils::String::fromStdString(proxySettings.hostname)).arg(proxySettings.port);
- break;
- case libt::proxy_settings::socks5:
- proxy_str = QString("%1:%2").arg(Utils::String::fromStdString(proxySettings.hostname)).arg(proxySettings.port);
- break;
- case libt::proxy_settings::socks5_pw:
- proxy_str = QString("%1:%2@%3:%4").arg(Utils::String::fromStdString(proxySettings.username)).arg(Utils::String::fromStdString(proxySettings.password))
- .arg(Utils::String::fromStdString(proxySettings.hostname)).arg(proxySettings.port);
- break;
- default:
- qDebug("Disabling HTTP communications proxy");
+ // Define environment variables for urllib in search engine plugins
+ if (Preferences::instance()->isProxyOnlyForTorrents()) {
qputenv("http_proxy", QByteArray());
+ qputenv("https_proxy", QByteArray());
qputenv("sock_proxy", QByteArray());
- return;
}
- // We need this for urllib in search engine plugins
- qDebug("HTTP communications proxy string: %s", qPrintable(proxy_str));
- if ((proxySettings.type == libt::proxy_settings::socks5) || (proxySettings.type == libt::proxy_settings::socks5_pw))
- qputenv("sock_proxy", proxy_str.toLocal8Bit());
- else
- qputenv("http_proxy", proxy_str.toLocal8Bit());
+ else {
+ QString proxy_str;
+ switch(proxySettings.type) {
+ case libt::proxy_settings::http_pw:
+ proxy_str = QString("http://%1:%2@%3:%4").arg(Utils::String::fromStdString(proxySettings.username)).arg(Utils::String::fromStdString(proxySettings.password))
+ .arg(Utils::String::fromStdString(proxySettings.hostname)).arg(proxySettings.port);
+ break;
+ case libt::proxy_settings::http:
+ proxy_str = QString("http://%1:%2").arg(Utils::String::fromStdString(proxySettings.hostname)).arg(proxySettings.port);
+ break;
+ case libt::proxy_settings::socks5:
+ proxy_str = QString("%1:%2").arg(Utils::String::fromStdString(proxySettings.hostname)).arg(proxySettings.port);
+ break;
+ case libt::proxy_settings::socks5_pw:
+ proxy_str = QString("%1:%2@%3:%4").arg(Utils::String::fromStdString(proxySettings.username)).arg(Utils::String::fromStdString(proxySettings.password))
+ .arg(Utils::String::fromStdString(proxySettings.hostname)).arg(proxySettings.port);
+ break;
+ default:
+ qDebug("Disabling HTTP communications proxy");
+ qputenv("http_proxy", QByteArray());
+ qputenv("https_proxy", QByteArray());
+ qputenv("sock_proxy", QByteArray());
+ return;
+ }
+ qDebug("HTTP communications proxy string: %s", qPrintable(proxy_str));
+ if ((proxySettings.type == libt::proxy_settings::socks5) || (proxySettings.type == libt::proxy_settings::socks5_pw))
+ qputenv("sock_proxy", proxy_str.toLocal8Bit());
+ else {
+ qputenv("http_proxy", proxy_str.toLocal8Bit());
+ qputenv("https_proxy", proxy_str.toLocal8Bit());
+ }
+ }
}
// Will resume torrents in backup directory
diff --git a/src/core/net/downloadmanager.cpp b/src/core/net/downloadmanager.cpp
index 4e1ff2047..7aed502c7 100644
--- a/src/core/net/downloadmanager.cpp
+++ b/src/core/net/downloadmanager.cpp
@@ -110,7 +110,7 @@ void DownloadManager::applyProxySettings()
QNetworkProxy proxy;
const Preferences* const pref = Preferences::instance();
- if (pref->isProxyEnabled()) {
+ if (pref->isProxyEnabled() && !pref->isProxyOnlyForTorrents()) {
// Proxy enabled
proxy.setHostName(pref->getProxyIp());
proxy.setPort(pref->getProxyPort());
diff --git a/src/core/preferences.cpp b/src/core/preferences.cpp
index d90b2aa26..df2f9d16c 100644
--- a/src/core/preferences.cpp
+++ b/src/core/preferences.cpp
@@ -832,6 +832,16 @@ void Preferences::setForceProxy(bool enabled)
setValue("Preferences/Connection/ProxyForce", enabled);
}
+void Preferences::setProxyOnlyForTorrents(bool enabled)
+{
+ setValue("Preferences/Connection/ProxyOnlyForTorrents", enabled);
+}
+
+bool Preferences::isProxyOnlyForTorrents() const
+{
+ return value("Preferences/Connection/ProxyOnlyForTorrents", false).toBool();
+}
+
// Bittorrent options
int Preferences::getMaxConnecs() const
{
diff --git a/src/core/preferences.h b/src/core/preferences.h
index e81357f2f..1ff708344 100644
--- a/src/core/preferences.h
+++ b/src/core/preferences.h
@@ -246,6 +246,8 @@ public:
void setProxyPeerConnections(bool enabled);
bool getForceProxy() const;
void setForceProxy(bool enabled);
+ void setProxyOnlyForTorrents(bool enabled);
+ bool isProxyOnlyForTorrents() const;
// Bittorrent options
int getMaxConnecs() const;
diff --git a/src/gui/options.ui b/src/gui/options.ui
index ea37388eb..6810b357e 100644
--- a/src/gui/options.ui
+++ b/src/gui/options.ui
@@ -1384,6 +1384,19 @@
+ -
+
+
+ Use proxy only for torrents
+
+
+ RSS feeds, search engine, software updates or anything else other than torrent transfers and related operations (such as peer exchanges) will use a direct connection
+
+
+ false
+
+
+
-
diff --git a/src/gui/options_imp.cpp b/src/gui/options_imp.cpp
index 841af7756..f84940140 100644
--- a/src/gui/options_imp.cpp
+++ b/src/gui/options_imp.cpp
@@ -235,6 +235,7 @@ options_imp::options_imp(QWidget *parent):
connect(spinProxyPort, SIGNAL(valueChanged(QString)), this, SLOT(enableApplyButton()));
connect(checkProxyPeerConnecs, SIGNAL(toggled(bool)), SLOT(enableApplyButton()));
connect(checkForceProxy, SIGNAL(toggled(bool)), SLOT(enableApplyButton()));
+ connect(isProxyOnlyForTorrents, SIGNAL(toggled(bool)), SLOT(enableApplyButton()));
connect(checkProxyAuth, SIGNAL(toggled(bool)), this, SLOT(enableApplyButton()));
connect(textProxyUsername, SIGNAL(textChanged(QString)), this, SLOT(enableApplyButton()));
connect(textProxyPassword, SIGNAL(textChanged(QString)), this, SLOT(enableApplyButton()));
@@ -445,6 +446,7 @@ void options_imp::saveOptions() {
pref->setProxyPort(getProxyPort());
pref->setProxyPeerConnections(checkProxyPeerConnecs->isChecked());
pref->setForceProxy(checkForceProxy->isChecked());
+ pref->setProxyOnlyForTorrents(isProxyOnlyForTorrents->isChecked());
pref->setProxyAuthEnabled(isProxyAuthEnabled());
pref->setProxyUsername(getProxyUsername());
pref->setProxyPassword(getProxyPassword());
@@ -700,6 +702,7 @@ void options_imp::loadOptions() {
spinProxyPort->setValue(pref->getProxyPort());
checkProxyPeerConnecs->setChecked(pref->proxyPeerConnections());
checkForceProxy->setChecked(pref->getForceProxy());
+ isProxyOnlyForTorrents->setChecked(pref->isProxyOnlyForTorrents());
checkProxyAuth->setChecked(pref->isProxyAuthEnabled());
textProxyUsername->setText(pref->getProxyUsername());
textProxyPassword->setText(pref->getProxyPassword());
@@ -1002,6 +1005,7 @@ void options_imp::enableProxy(int index) {
spinProxyPort->setEnabled(true);
checkProxyPeerConnecs->setEnabled(true);
checkForceProxy->setEnabled(true);
+ isProxyOnlyForTorrents->setEnabled(true);
if (index > 1) {
checkProxyAuth->setEnabled(true);
} else {
@@ -1016,6 +1020,7 @@ void options_imp::enableProxy(int index) {
spinProxyPort->setEnabled(false);
checkProxyPeerConnecs->setEnabled(false);
checkForceProxy->setEnabled(false);
+ isProxyOnlyForTorrents->setEnabled(false);
checkProxyAuth->setEnabled(false);
checkProxyAuth->setChecked(false);
}