From 36ef3a44204d772fb4d92bbf8ad73092013cd2a0 Mon Sep 17 00:00:00 2001 From: Dominik Schmidt Date: Mon, 15 Jul 2013 20:41:21 +0200 Subject: [PATCH] Completely rip TomahawkSettings out of proxy code --- .../utils/NetworkAccessManager.cpp | 134 ++++++++++++++++-- src/libtomahawk/utils/NetworkAccessManager.h | 25 ++++ src/libtomahawk/utils/NetworkProxyFactory.h | 2 +- src/tomahawk/SettingsDialog.cpp | 4 +- src/tomahawk/TomahawkApp.cpp | 10 ++ 5 files changed, 157 insertions(+), 18 deletions(-) diff --git a/src/libtomahawk/utils/NetworkAccessManager.cpp b/src/libtomahawk/utils/NetworkAccessManager.cpp index e64992e7a..121da386b 100644 --- a/src/libtomahawk/utils/NetworkAccessManager.cpp +++ b/src/libtomahawk/utils/NetworkAccessManager.cpp @@ -23,15 +23,12 @@ #include "NetworkProxyFactory.h" #include "utils/Logger.h" -// TODO: get rid of this here! -#include "TomahawkSettings.h" - - #include #include #include #include #include +#include namespace Tomahawk { @@ -57,7 +54,7 @@ NetworkProxyFactory::queryProxy( const QNetworkProxyQuery& query ) s_noProxyHostsMutex.lock(); if ( !hostname.isEmpty() && s_noProxyHosts.contains( hostname ) ) proxies << QNetworkProxy::NoProxy << systemProxyForQuery( query ); - else if ( m_proxy.hostName().isEmpty() || TomahawkSettings::instance()->proxyType() == QNetworkProxy::NoProxy ) + else if ( m_proxy.hostName().isEmpty() || proxyType() == QNetworkProxy::NoProxy ) proxies << systemProxyForQuery( query ); else proxies << m_proxy << systemProxyForQuery( query ); @@ -87,7 +84,7 @@ NetworkProxyFactory::setNoProxyHosts( const QStringList& hosts ) void -NetworkProxyFactory::setProxy( const QNetworkProxy& proxy ) +NetworkProxyFactory::setProxy( const QNetworkProxy& proxy, bool useProxyDns ) { m_proxyChanged = false; if ( m_proxy != proxy ) @@ -97,12 +94,12 @@ NetworkProxyFactory::setProxy( const QNetworkProxy& proxy ) QFlags< QNetworkProxy::Capability > proxyCaps; proxyCaps |= QNetworkProxy::TunnelingCapability; proxyCaps |= QNetworkProxy::ListeningCapability; - if ( TomahawkSettings::instance()->proxyDns() ) + if ( useProxyDns ) proxyCaps |= QNetworkProxy::HostNameLookupCapability; m_proxy.setCapabilities( proxyCaps ); tDebug( LOGVERBOSE ) << Q_FUNC_INFO << "Proxy using host" << proxy.hostName() << "and port" << proxy.port(); - tDebug( LOGVERBOSE ) << Q_FUNC_INFO << "setting proxy to use proxy DNS?" << (TomahawkSettings::instance()->proxyDns() ? "true" : "false"); + tDebug( LOGVERBOSE ) << Q_FUNC_INFO << "setting proxy to use proxy DNS?" << useProxyDns; } @@ -242,25 +239,25 @@ setNam( QNetworkAccessManager* nam, bool noMutexLocker ) { tDebug( LOGVERBOSE ) << "creating initial gui thread (" << QCoreApplication::instance()->thread() << ") nam"; // Should only get here on first initialization of the nam - TomahawkSettings *s = TomahawkSettings::instance(); + NetworkProxyFactory* proxyFactory = new NetworkProxyFactory(); - if ( s->proxyType() != QNetworkProxy::NoProxy && !s->proxyHost().isEmpty() ) + if ( proxyType() != QNetworkProxy::NoProxy && !proxyHost().isEmpty() ) { tDebug( LOGVERBOSE ) << "Setting proxy to saved values"; - QNetworkProxy proxy( s->proxyType(), s->proxyHost(), s->proxyPort(), s->proxyUsername(), s->proxyPassword() ); - proxyFactory->setProxy( proxy ); + QNetworkProxy proxy( proxyType(), proxyHost(), proxyPort(), proxyUsername(), proxyPassword() ); + proxyFactory->setProxy( proxy, proxyDns() ); //FIXME: Jreen is broke without this //QNetworkProxy::setApplicationProxy( proxy ); s_noProxyHostsMutex.lock(); - if ( !s->proxyNoProxyHosts().isEmpty() && s_noProxyHosts.isEmpty() ) + if ( !proxyNoProxyHosts().isEmpty() && s_noProxyHosts.isEmpty() ) { s_noProxyHostsMutex.unlock(); - proxyFactory->setNoProxyHosts( s->proxyNoProxyHosts().split( ',', QString::SkipEmptyParts ) ); + proxyFactory->setNoProxyHosts( proxyNoProxyHosts().split( ',', QString::SkipEmptyParts ) ); } else s_noProxyHostsMutex.unlock(); } - + QNetworkProxyFactory::setApplicationProxyFactory( proxyFactory ); nam->setProxyFactory( proxyFactory ); s_threadNamHash[ QThread::currentThread() ] = nam; @@ -274,5 +271,112 @@ setNam( QNetworkAccessManager* nam, bool noMutexLocker ) setProxyFactory( dynamic_cast< NetworkProxyFactory* >( nam->proxyFactory() ), true ); } + +bool s_proxyDns; +QNetworkProxy::ProxyType s_proxyType; +QString s_proxyHost; +int s_proxyPort; +QString s_proxyUsername; +QString s_proxyPassword; +QString s_proxyNoProxyHosts; + +QString +proxyHost() +{ + return s_proxyHost; +} + + +void +setProxyHost( const QString& host ) +{ + s_proxyHost = host; +} + + +QString +proxyNoProxyHosts() +{ + return s_proxyNoProxyHosts; +} + + +void +setProxyNoProxyHosts( const QString& hosts ) +{ + s_proxyNoProxyHosts = hosts; +} + + +qulonglong +proxyPort() +{ + return s_proxyPort; +} + + +void +setProxyPort( const qulonglong port ) +{ + s_proxyPort = port; +} + + +QString +proxyUsername() +{ + return s_proxyUsername; +} + + +void +setProxyUsername( const QString& username ) +{ + s_proxyUsername = username; +} + + +QString +proxyPassword() +{ + return s_proxyPassword; +} + + +void +setProxyPassword( const QString& password ) +{ + s_proxyPassword = password; +} + + +QNetworkProxy::ProxyType +proxyType() +{ + return s_proxyType; +} + + +void +setProxyType( const QNetworkProxy::ProxyType type ) +{ + s_proxyType = type; +} + + +bool +proxyDns() +{ + return s_proxyDns; +} + + +void +setProxyDns( bool proxyDns ) +{ + s_proxyDns = proxyDns; +} + + } } diff --git a/src/libtomahawk/utils/NetworkAccessManager.h b/src/libtomahawk/utils/NetworkAccessManager.h index 937001f95..33606b330 100644 --- a/src/libtomahawk/utils/NetworkAccessManager.h +++ b/src/libtomahawk/utils/NetworkAccessManager.h @@ -22,6 +22,9 @@ #ifndef TOMAHAWK_UTILS_NETWORKACCESSMANAGER_H #define TOMAHAWK_UTILS_NETWORKACCESSMANAGER_H + +#include + #include "DllMacro.h" class QNetworkAccessManager; @@ -32,6 +35,28 @@ namespace Utils { DLLEXPORT QNetworkAccessManager* nam(); DLLEXPORT void setNam( QNetworkAccessManager* nam, bool noMutexLocker = false ); + + // Proxy settings + DLLEXPORT bool proxyDns(); + DLLEXPORT void setProxyDns( bool proxyDns ); + + DLLEXPORT QNetworkProxy::ProxyType proxyType(); + DLLEXPORT void setProxyType( QNetworkProxy::ProxyType proxyType ); + + DLLEXPORT QString proxyHost(); + DLLEXPORT void setProxyHost( const QString& proxyHost ); + + DLLEXPORT qulonglong proxyPort(); + DLLEXPORT void setProxyPort( qulonglong proxyPort ); + + DLLEXPORT QString proxyUsername(); + DLLEXPORT void setProxyUsername( const QString& proxyUsername ); + + DLLEXPORT QString proxyPassword(); + DLLEXPORT void setProxyPassword( const QString& proxyPassword ); + + DLLEXPORT QString proxyNoProxyHosts(); + DLLEXPORT void setProxyNoProxyHosts( const QString& proxyNoProxyHosts ); } } diff --git a/src/libtomahawk/utils/NetworkProxyFactory.h b/src/libtomahawk/utils/NetworkProxyFactory.h index 36750837a..742171238 100644 --- a/src/libtomahawk/utils/NetworkProxyFactory.h +++ b/src/libtomahawk/utils/NetworkProxyFactory.h @@ -46,7 +46,7 @@ namespace Utils virtual void setNoProxyHosts( const QStringList &hosts ); virtual QStringList noProxyHosts() const { return m_noProxyHosts; } - virtual void setProxy( const QNetworkProxy &proxy ); + virtual void setProxy( const QNetworkProxy &proxy, bool useProxyDns ); virtual QNetworkProxy proxy() { return m_proxy; } virtual NetworkProxyFactory& operator=( const NetworkProxyFactory &rhs ); diff --git a/src/tomahawk/SettingsDialog.cpp b/src/tomahawk/SettingsDialog.cpp index 75fa66a24..3d082ceec 100644 --- a/src/tomahawk/SettingsDialog.cpp +++ b/src/tomahawk/SettingsDialog.cpp @@ -296,12 +296,12 @@ SettingsDialog::saveSettings() if ( !m_advancedWidgetUi->enableProxyCheckBox->isChecked() ) { tDebug() << Q_FUNC_INFO << "Got NoProxy selected"; - proxyFactory->setProxy( QNetworkProxy::NoProxy ); + proxyFactory->setProxy( QNetworkProxy::NoProxy, s->proxyDns() ); } else { tDebug() << Q_FUNC_INFO << "Got Socks5Proxy selected"; - proxyFactory->setProxy( QNetworkProxy( QNetworkProxy::Socks5Proxy, s->proxyHost(), s->proxyPort(), s->proxyUsername(), s->proxyPassword() ) ); + proxyFactory->setProxy( QNetworkProxy( QNetworkProxy::Socks5Proxy, s->proxyHost(), s->proxyPort(), s->proxyUsername(), s->proxyPassword() ), s->proxyDns() ); if ( !s->proxyNoProxyHosts().isEmpty() ) { tDebug() << Q_FUNC_INFO << "noproxy hosts:" << s->proxyNoProxyHosts(); diff --git a/src/tomahawk/TomahawkApp.cpp b/src/tomahawk/TomahawkApp.cpp index d7ec1895b..76cfd170f 100644 --- a/src/tomahawk/TomahawkApp.cpp +++ b/src/tomahawk/TomahawkApp.cpp @@ -198,6 +198,16 @@ TomahawkApp::init() new ACLRegistryImpl( this ); tDebug( LOGINFO ) << "Setting NAM."; + + TomahawkSettings *s = TomahawkSettings::instance(); + Tomahawk::Utils::setProxyDns( s->proxyDns() ); + Tomahawk::Utils::setProxyType( s->proxyType() ); + Tomahawk::Utils::setProxyHost( s->proxyHost() ); + Tomahawk::Utils::setProxyPort( s->proxyPort() ); + Tomahawk::Utils::setProxyUsername( s->proxyUsername() ); + Tomahawk::Utils::setProxyPassword( s->proxyPassword() ); + Tomahawk::Utils::setProxyNoProxyHosts( s->proxyNoProxyHosts() ); + // Cause the creation of the nam, but don't need to address it directly, so prevent warning Q_UNUSED( Tomahawk::Utils::nam() );