Parcourir la source

Massive simplification of proxy support.

Purposefully separated from last commit, but
associated with it: No more need for special
cases after libocsync got fixed do adhere properly.
Daniel Molkentin il y a 13 ans
Parent
commit
3db60b4fe7
3 fichiers modifiés avec 36 ajouts et 91 suppressions
  1. 28 34
      src/mirall/csyncthread.cpp
  2. 3 8
      src/mirall/csyncthread.h
  3. 5 49
      src/mirall/owncloudfolder.cpp

+ 28 - 34
src/mirall/csyncthread.cpp

@@ -31,11 +31,7 @@ namespace Mirall {
 /* static variables to hold the credentials */
 QString CSyncThread::_user;
 QString CSyncThread::_passwd;
-QString CSyncThread::_proxyType;
-QString CSyncThread::_proxyPwd;
-QString CSyncThread::_proxyPort;
-QString CSyncThread::_proxyHost;
-QString CSyncThread::_proxyUser;
+QNetworkProxy CSyncThread::_proxy;
 
 QString CSyncThread::_csyncConfigDir;  // to be able to remove the lock file.
 
@@ -138,6 +134,26 @@ CSyncThread::~CSyncThread()
 
 }
 
+static char* proxyTypeToCStr(QNetworkProxy::ProxyType type)
+{
+    switch (type) {
+    case QNetworkProxy::NoProxy:
+        return qstrdup("NoProxy");
+    case QNetworkProxy::DefaultProxy:
+        return qstrdup("DefaultProxy");
+    case QNetworkProxy::Socks5Proxy:
+        return qstrdup("Socks5Proxy");
+    case  QNetworkProxy::HttpProxy:
+        return qstrdup("HttpProxy");
+    case  QNetworkProxy::HttpCachingProxy:
+        return qstrdup("HttpCachingProxy");
+    case  QNetworkProxy::FtpCachingProxy:
+        return qstrdup("FtpCachingProxy");
+    default:
+        return qstrdup("NoProxy");
+    }
+}
+
 void CSyncThread::startSync()
 {
     qDebug() << "starting to sync " << qApp->thread() << QThread::currentThread();
@@ -159,29 +175,14 @@ void CSyncThread::startSync()
     wStats->dirPermErrors = 0;
 
     ProxyInfo proxyInfo;
-    proxyInfo.proxyHost = 0;
-    proxyInfo.proxyPort = 0;
-    proxyInfo.proxyPwd  = 0;
-    proxyInfo.proxyType = 0;
-    proxyInfo.proxyUser = 0;
 
     _mutex.lock();
 
-    if( !_proxyType.isEmpty() ) {
-        proxyInfo.proxyType = qstrdup( _proxyType.toAscii().constData() );
-    }
-    if( !_proxyHost.isEmpty() ) {
-        proxyInfo.proxyHost = qstrdup( _proxyHost.toAscii().constData() );
-    }
-    if( !_proxyPort.isEmpty() ) {
-        proxyInfo.proxyPort = qstrdup( _proxyPort.toAscii().constData() );
-    }
-    if( !_proxyUser.isEmpty() ) {
-        proxyInfo.proxyUser = qstrdup( _proxyUser.toAscii().constData() );
-    }
-    if( !_proxyPwd.isEmpty() ) {
-        proxyInfo.proxyPwd  = qstrdup( _proxyPwd.toAscii().constData() );
-    }
+    proxyInfo.proxyType = proxyTypeToCStr( _proxy.type() );
+    proxyInfo.proxyHost = qstrdup( _proxy.hostName().toAscii().constData() );
+    proxyInfo.proxyPort = qstrdup( QByteArray::number( _proxy.port() ).constData() );
+    proxyInfo.proxyUser = qstrdup( _proxy.user().toAscii().constData() );
+    proxyInfo.proxyPwd  = qstrdup( _proxy.password().toAscii().constData() );
 
     emit(started());
 
@@ -364,19 +365,12 @@ void CSyncThread::emitStateDb( CSYNC *csync )
     }
 }
 
-void CSyncThread::setConnectionDetails( const QString& user, const QString& passwd,
-                                        const QString& proxyType, const QString& proxyHost,
-                                        int proxyPort , const QString& proxyUser, const QString& proxyPwd )
+void CSyncThread::setConnectionDetails( const QString &user, const QString &passwd, const QNetworkProxy &proxy )
 {
     _mutex.lock();
     _user = user;
     _passwd = passwd;
-    _proxyType = proxyType;
-    _proxyHost = proxyHost;
-    _proxyPort = QString::number(proxyPort);
-    qDebug() << "Proxy-Port: " << _proxyPort;
-    _proxyUser = proxyUser;
-    _proxyPwd  = proxyPwd;
+    _proxy = proxy;
     _mutex.unlock();
 }
 

+ 3 - 8
src/mirall/csyncthread.h

@@ -21,6 +21,7 @@
 #include <QMutex>
 #include <QThread>
 #include <QString>
+#include <QNetworkProxy>
 
 #include <csync.h>
 
@@ -62,9 +63,7 @@ public:
     CSyncThread(const QString &source, const QString &target, bool = false);
     ~CSyncThread();
 
-    static void setConnectionDetails( const QString&, const QString&,
-                                      const QString&, const QString&, int,
-                                      const QString&, const QString& );
+    static void setConnectionDetails( const QString&, const QString&, const QNetworkProxy& );
     static QString csyncConfigDir();
 
     Q_INVOKABLE void startSync();
@@ -94,11 +93,7 @@ private:
     static QMutex _mutex;
     static QString _user;
     static QString _passwd;
-    static QString _proxyType;
-    static QString _proxyHost;
-    static QString _proxyPort;
-    static QString _proxyUser;
-    static QString _proxyPwd;
+    static QNetworkProxy _proxy;
 
     static QString _csyncConfigDir;
 

+ 5 - 49
src/mirall/owncloudfolder.cpp

@@ -161,56 +161,12 @@ void ownCloudFolder::startSync(const QStringList &pathList)
     _csync = new CSyncThread( path(), url.toString(), _localCheckOnly );
     _csync->moveToThread(_thread);
 
-    // Proxy settings. Proceed them as strings to csync thread.
-    int intProxy = cfgFile.proxyType();
-
-    QString proxyHost = cfgFile.proxyHostName();
-    int proxyPort     = cfgFile.proxyPort();
-    QString proxyUser = cfgFile.proxyUser();
-    QString proxyPwd  = cfgFile.proxyPassword();
-
-    if( intProxy == QNetworkProxy::DefaultProxy ) {
-        // in case of system proxy we set the proxy in csync explicitely to the
-        // value of Qt as Qt should be able to handle the pac system configuration
-        // while libproxy (through libneon) might not on the target platform
-        QNetworkAccessManager *nam = ownCloudInfo::instance()->networkManager();
-        QNetworkProxy proxy = nam->proxy();
-        if( (!proxyHost.isEmpty()) && (proxyPort != 0) ) {
-            intProxy  = QNetworkProxy::HttpProxy; // switch to http proxy. Tells csync/owncloud to
-            // explicitely set the proxy host and port.
-        } else {
-            QList<QNetworkProxy> proxies = QNetworkProxyFactory::systemProxyForQuery(QUrl(cfgFile.ownCloudUrl()));
-            if (proxies.isEmpty())
-                qWarning() << "No proxy for PAC found";
-            else {
-                proxy = proxies.first();
-            }
-        }
-
-        proxyHost = proxy.hostName();
-        proxyPort = proxy.port();
-        proxyUser = proxy.user();
-        proxyPwd  = proxy.password();
-        qDebug() << "Re-Using the Qt proxy settings for csync, host: " << proxyHost;
-    }
+    QList<QNetworkProxy> proxies = QNetworkProxyFactory::systemProxyForQuery(QUrl(cfgFile.ownCloudUrl()));
+    // We set at least one in Application
+    Q_ASSERT(proxies.count() > 0);
+    QNetworkProxy proxy = proxies.first();
 
-    QString proxyType;
-    if( intProxy == QNetworkProxy::NoProxy )
-        proxyType = QLatin1String("NoProxy");
-    else if( intProxy == QNetworkProxy::DefaultProxy )
-        proxyType = QLatin1String("DefaultProxy");
-    else if( intProxy == QNetworkProxy::Socks5Proxy )
-        proxyType = QLatin1String("Socks5Proxy");
-    else if( intProxy == QNetworkProxy::HttpProxy )
-        proxyType = QLatin1String("HttpProxy");
-    else if( intProxy == QNetworkProxy::HttpCachingProxy )
-        proxyType = QLatin1String("HttpCachingProxy");
-    else if( intProxy == QNetworkProxy::FtpCachingProxy )
-        proxyType = QLatin1String("FtpCachingProxy");
-    else proxyType = QLatin1String("NoProxy");
-
-    _csync->setConnectionDetails( cfgFile.ownCloudUser(), cfgFile.ownCloudPasswd(), proxyType,
-                                  proxyHost, proxyPort, proxyUser, proxyPwd );
+    _csync->setConnectionDetails( cfgFile.ownCloudUser(), cfgFile.ownCloudPasswd(), proxy );
 
     connect(_csync, SIGNAL(started()),  SLOT(slotCSyncStarted()), Qt::QueuedConnection);
     connect(_csync, SIGNAL(finished()), SLOT(slotCSyncFinished()), Qt::QueuedConnection);