00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023 #include <qgsnetworkaccessmanager.h>
00024 #include <qgslogger.h>
00025
00026 #include <QUrl>
00027
00028 #if QT_VERSION >= 0x40500
00029 class QgsNetworkProxyFactory : public QNetworkProxyFactory
00030 {
00031 public:
00032 QgsNetworkProxyFactory() {}
00033 virtual ~QgsNetworkProxyFactory() {}
00034
00035 virtual QList<QNetworkProxy> queryProxy( const QNetworkProxyQuery & query = QNetworkProxyQuery() )
00036 {
00037 QgsNetworkAccessManager *nam = QgsNetworkAccessManager::instance();
00038
00039
00040 foreach( QNetworkProxyFactory *f, nam->proxyFactories() )
00041 {
00042 QList<QNetworkProxy> proxies = f->queryProxy( query );
00043 if ( proxies.size() > 0 )
00044 return proxies;
00045 }
00046
00047
00048 if ( query.queryType() != QNetworkProxyQuery::UrlRequest )
00049 return QList<QNetworkProxy>() << nam->fallbackProxy();
00050
00051 QString url = query.url().toString();
00052
00053 foreach( QString exclude, nam->excludeList() )
00054 {
00055 if ( url.startsWith( exclude ) )
00056 {
00057 QgsDebugMsg( QString( "using default proxy for %1 [exclude %2]" ).arg( url ).arg( exclude ) );
00058 return QList<QNetworkProxy>() << QNetworkProxy();
00059 }
00060 }
00061
00062 QgsDebugMsg( QString( "using user proxy for %1" ).arg( url ) );
00063 return QList<QNetworkProxy>() << nam->fallbackProxy();
00064 }
00065 };
00066 #endif
00067
00068 QgsNetworkAccessManager *QgsNetworkAccessManager::smNAM = 0;
00069
00070 QgsNetworkAccessManager *QgsNetworkAccessManager::instance()
00071 {
00072 if ( smNAM )
00073 return smNAM;
00074
00075 smNAM = new QgsNetworkAccessManager();
00076
00077 return smNAM;
00078 }
00079
00080 QgsNetworkAccessManager::QgsNetworkAccessManager( QObject *parent )
00081 : QNetworkAccessManager( parent )
00082 {
00083 #if QT_VERSION >= 0x40500
00084 setProxyFactory( new QgsNetworkProxyFactory() );
00085 #endif
00086 }
00087
00088 QgsNetworkAccessManager::~QgsNetworkAccessManager()
00089 {
00090 }
00091
00092 #if QT_VERSION >= 0x40500
00093 void QgsNetworkAccessManager::insertProxyFactory( QNetworkProxyFactory *factory )
00094 {
00095 mProxyFactories.insert( 0, factory );
00096 }
00097
00098 void QgsNetworkAccessManager::removeProxyFactory( QNetworkProxyFactory *factory )
00099 {
00100 mProxyFactories.removeAll( factory );
00101 }
00102
00103 const QList<QNetworkProxyFactory *> QgsNetworkAccessManager::proxyFactories() const
00104 {
00105 return mProxyFactories;
00106 }
00107 #endif
00108
00109 const QStringList &QgsNetworkAccessManager::excludeList() const
00110 {
00111 return mExcludedURLs;
00112 }
00113
00114 const QNetworkProxy &QgsNetworkAccessManager::fallbackProxy() const
00115 {
00116 return mFallbackProxy;
00117 }
00118
00119 void QgsNetworkAccessManager::setFallbackProxyAndExcludes( const QNetworkProxy &proxy, const QStringList &excludes )
00120 {
00121 mFallbackProxy = proxy;
00122 mExcludedURLs = excludes;
00123 }
00124
00125 QNetworkReply *QgsNetworkAccessManager::createRequest( QNetworkAccessManager::Operation op, const QNetworkRequest &req, QIODevice *outgoingData )
00126 {
00127 emit requestAboutToBeCreated( op, req, outgoingData );
00128 QNetworkReply *reply = QNetworkAccessManager::createRequest( op, req, outgoingData );
00129 emit requestCreated( reply );
00130 return reply;
00131 }