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); }