summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorkh1 <karsten.heimrich@nokia.com>2012-04-16 14:08:38 +0200
committerTim Jenssen <tim.jenssen@nokia.com>2012-04-19 11:23:05 +0200
commit8525ec7a17f68f7b2f4d335da2e620a1ecc1720d (patch)
treeb43fea791ed638bcf7281ba0460a7b418569cec3
parentaeaf1b84553f337a19b14e1be1aa34c99b4a4e65 (diff)
Implement https support, reuse http downloader.
Fixes Task-number: QTIFW-119 Change-Id: If374603834f5dfe9e7b51f41139cd3b78ad21c61 Reviewed-by: Richard J. Moore <rich@kde.org> Reviewed-by: Niels Weber <niels.2.weber@nokia.com> Reviewed-by: Tim Jenssen <tim.jenssen@nokia.com>
-rw-r--r--src/libs/kdtools/kdupdaterfiledownloader.cpp31
-rw-r--r--src/libs/kdtools/kdupdaterfiledownloader.h10
-rw-r--r--src/libs/kdtools/kdupdaterfiledownloader_p.h5
-rw-r--r--src/libs/kdtools/kdupdaterfiledownloaderfactory.cpp12
4 files changed, 51 insertions, 7 deletions
diff --git a/src/libs/kdtools/kdupdaterfiledownloader.cpp b/src/libs/kdtools/kdupdaterfiledownloader.cpp
index 6494d72b2..67639dda6 100644
--- a/src/libs/kdtools/kdupdaterfiledownloader.cpp
+++ b/src/libs/kdtools/kdupdaterfiledownloader.cpp
@@ -36,7 +36,7 @@
#include <QCryptographicHash>
#include <QThreadPool>
#include <QDebug>
-
+#include <QSslError>
#include <QBasicTimer>
#include <QTimerEvent>
@@ -320,6 +320,11 @@ QString KDUpdater::FileDownloader::scheme() const
return d->scheme;
}
+void KDUpdater::FileDownloader::setScheme(const QString &scheme)
+{
+ d->scheme = scheme;
+}
+
void KDUpdater::FileDownloader::setAutoRemoveDownloadedFile(bool val)
{
d->autoRemove = val;
@@ -1081,6 +1086,11 @@ KDUpdater::HttpDownloader::HttpDownloader(QObject *parent)
: KDUpdater::FileDownloader(QLatin1String("http"), parent)
, d(new Private(this))
{
+#ifndef QT_NO_OPENSSL
+ // TODO: once we switch to Qt5, use QT_NO_SSL instead of QT_NO_OPENSSL
+ connect(&d->manager, SIGNAL(sslErrors(QNetworkReply*, QList<QSslError>)),
+ this, SLOT(onSslErrors(QNetworkReply*, QList<QSslError>)));
+#endif
connect(&d->manager, SIGNAL(authenticationRequired(QNetworkReply*, QAuthenticator*)), this,
SLOT(onAuthenticationRequired(QNetworkReply*, QAuthenticator*)));
}
@@ -1282,3 +1292,22 @@ void KDUpdater::HttpDownloader::onAuthenticationRequired(QNetworkReply *reply, Q
authenticator->setPassword(this->authenticator().password());
}
}
+
+#ifndef QT_NO_OPENSSL
+// TODO: once we switch to Qt5, use QT_NO_SSL instead of QT_NO_OPENSSL
+void KDUpdater::HttpDownloader::onSslErrors(QNetworkReply* reply, const QList<QSslError> &errors)
+{
+ Q_UNUSED(reply)
+
+ QString errorString;
+ foreach (const QSslError &error, errors) {
+ if (!errorString.isEmpty())
+ errorString += QLatin1String(", ");
+ errorString += error.errorString();
+ }
+ qDebug() << errorString;
+
+ if (!d->aborted)
+ httpDone(true);
+}
+#endif
diff --git a/src/libs/kdtools/kdupdaterfiledownloader.h b/src/libs/kdtools/kdupdaterfiledownloader.h
index bdba0a859..67467bff4 100644
--- a/src/libs/kdtools/kdupdaterfiledownloader.h
+++ b/src/libs/kdtools/kdupdaterfiledownloader.h
@@ -45,20 +45,22 @@ class KDTOOLS_EXPORT FileDownloader : public QObject
Q_OBJECT
Q_PROPERTY(bool autoRemoveDownloadedFile READ isAutoRemoveDownloadedFile WRITE setAutoRemoveDownloadedFile)
Q_PROPERTY(QUrl url READ url WRITE setUrl)
- Q_PROPERTY(QString scheme READ scheme)
+ Q_PROPERTY(QString scheme READ scheme WRITE setScheme)
public:
explicit FileDownloader(const QString &scheme, QObject *parent = 0);
~FileDownloader();
- void setUrl(const QUrl &url);
QUrl url() const;
+ void setUrl(const QUrl &url);
- void setSha1Sum(const QByteArray &sha1);
QByteArray sha1Sum() const;
+ void setSha1Sum(const QByteArray &sha1);
- QString errorString() const;
QString scheme() const;
+ void setScheme(const QString &scheme);
+
+ QString errorString() const;
virtual bool canDownload() const = 0;
virtual bool isDownloaded() const = 0;
diff --git a/src/libs/kdtools/kdupdaterfiledownloader_p.h b/src/libs/kdtools/kdupdaterfiledownloader_p.h
index 127c3f5d9..81b3c2c98 100644
--- a/src/libs/kdtools/kdupdaterfiledownloader_p.h
+++ b/src/libs/kdtools/kdupdaterfiledownloader_p.h
@@ -195,7 +195,10 @@ private Q_SLOTS:
void httpDone(bool error);
void httpReqFinished();
void onAuthenticationRequired(QNetworkReply *reply, QAuthenticator *authenticator);
-
+#ifndef QT_NO_OPENSSL
+ // TODO: once we switch to Qt5, use QT_NO_SSL instead of QT_NO_OPENSSL
+ void onSslErrors(QNetworkReply* reply, const QList<QSslError> &errors);
+#endif
private:
void startDownload(const QUrl &url);
diff --git a/src/libs/kdtools/kdupdaterfiledownloaderfactory.cpp b/src/libs/kdtools/kdupdaterfiledownloaderfactory.cpp
index 8be508cc7..1862a27e5 100644
--- a/src/libs/kdtools/kdupdaterfiledownloaderfactory.cpp
+++ b/src/libs/kdtools/kdupdaterfiledownloaderfactory.cpp
@@ -23,6 +23,8 @@
#include "kdupdaterfiledownloaderfactory.h"
#include "kdupdaterfiledownloader_p.h"
+#include <QtNetwork/QSslSocket>
+
/*!
\internal
\ingroup kdupdater
@@ -64,6 +66,13 @@ FileDownloaderFactory::FileDownloaderFactory()
registerFileDownloader<FtpDownloader>(QLatin1String("ftp"));
registerFileDownloader<HttpDownloader>(QLatin1String("http"));
registerFileDownloader<ResourceFileDownloader >(QLatin1String("resource"));
+
+#ifndef QT_NO_OPENSSL
+ // TODO: once we switch to Qt5, use QT_NO_SSL instead of QT_NO_OPENSSL
+ if (QSslSocket::supportsSsl())
+ registerFileDownloader<HttpDownloader>(QLatin1String("https"));
+#endif
+
d->m_followRedirects = false;
}
@@ -98,6 +107,7 @@ FileDownloader *FileDownloaderFactory::create(const QString &scheme, QObject *pa
FileDownloader *downloader = KDGenericFactory<FileDownloader>::create(scheme);
if (downloader != 0) {
downloader->setParent(parent);
+ downloader->setScheme(scheme);
downloader->setFollowRedirects(d->m_followRedirects);
if (d->m_factory)
downloader->setProxyFactory(d->m_factory->clone());
@@ -108,5 +118,5 @@ FileDownloader *FileDownloaderFactory::create(const QString &scheme, QObject *pa
/*!
KDUpdater::FileDownloaderFactory::registerFileDownlooader
Registers a new file downloader with the factory. If there is already a downloader with the same scheme,
- the downloader is replaced. The ownership of the downloader is transfered to the factory.
+ the downloader is replaced. The ownership of the downloader is transferred to the factory.
*/