diff options
Diffstat (limited to 'src/network/access/qnetworkaccessmanager.cpp')
-rw-r--r-- | src/network/access/qnetworkaccessmanager.cpp | 66 |
1 files changed, 59 insertions, 7 deletions
diff --git a/src/network/access/qnetworkaccessmanager.cpp b/src/network/access/qnetworkaccessmanager.cpp index 0ab3760eed..07644b869f 100644 --- a/src/network/access/qnetworkaccessmanager.cpp +++ b/src/network/access/qnetworkaccessmanager.cpp @@ -66,10 +66,12 @@ #include "QtNetwork/private/qauthenticator_p.h" #include "QtNetwork/qsslconfiguration.h" #include "QtNetwork/qnetworkconfigmanager.h" -#include "QtNetwork/qhttpmultipart.h" -#include "qhttpmultipart_p.h" +#if QT_CONFIG(http) +#include "qhttpmultipart.h" +#include "qhttpmultipart_p.h" #include "qnetworkreplyhttpimpl_p.h" +#endif #include "qthread.h" @@ -469,7 +471,7 @@ QNetworkAccessManager::QNetworkAccessManager(QObject *parent) qRegisterMetaType<QSslPreSharedKeyAuthenticator *>(); #endif qRegisterMetaType<QList<QPair<QByteArray,QByteArray> > >(); -#ifndef QT_NO_HTTP +#if QT_CONFIG(http) qRegisterMetaType<QHttpNetworkRequest>(); #endif qRegisterMetaType<QNetworkReply::NetworkError>(); @@ -735,9 +737,53 @@ bool QNetworkAccessManager::isStrictTransportSecurityEnabled() const } /*! + \since 5.10 + + If \a enabled is \c true, the internal HSTS cache will use a persistent store + to read and write HSTS policies. \a storeDir defines where this store will be + located. The default location is defined by QStandardPaths::CacheLocation. + If there is no writable QStandartPaths::CacheLocation and \a storeDir is an + empty string, the store will be located in the program's working directory. + + \note If HSTS cache already contains HSTS policies by the time persistent + store is enabled, these policies will be preserved in the store. In case both + cache and store contain the same known hosts, policies from cache are considered + to be more up-to-date (and thus will overwrite the previous values in the store). + If this behavior is undesired, enable HSTS store before enabling Strict Tranport + Security. By default, the persistent store of HSTS policies is disabled. + + \sa isStrictTransportSecurityStoreEnabled(), setStrictTransportSecurityEnabled(), + QStandardPaths::standardLocations() +*/ + +void QNetworkAccessManager::enableStrictTransportSecurityStore(bool enabled, const QString &storeDir) +{ + Q_D(QNetworkAccessManager); + d->stsStore.reset(enabled ? new QHstsStore(storeDir) : nullptr); + d->stsCache.setStore(d->stsStore.data()); +} + +/*! + \since 5.10 + + Returns true if HSTS cache uses a permanent store to load and store HSTS + policies. + + \sa enableStrictTransportSecurityStore() +*/ + +bool QNetworkAccessManager::isStrictTransportSecurityStoreEnabled() const +{ + Q_D(const QNetworkAccessManager); + return bool(d->stsStore.data()); +} + +/*! \since 5.9 Adds HTTP Strict Transport Security policies into HSTS cache. + \a knownHosts contains the known hosts that have QHstsPolicy + information. \note An expired policy will remove a known host from the cache, if previously present. @@ -749,7 +795,7 @@ bool QNetworkAccessManager::isStrictTransportSecurityEnabled() const policies, but this information can be overridden by "Strict-Transport-Security" response headers. - \sa addStrictTransportSecurityHosts(), QHstsPolicy + \sa addStrictTransportSecurityHosts(), enableStrictTransportSecurityStore(), QHstsPolicy */ void QNetworkAccessManager::addStrictTransportSecurityHosts(const QVector<QHstsPolicy> &knownHosts) @@ -835,6 +881,7 @@ QNetworkReply *QNetworkAccessManager::post(const QNetworkRequest &request, const return reply; } +#if QT_CONFIG(http) /*! \since 4.8 @@ -874,6 +921,7 @@ QNetworkReply *QNetworkAccessManager::put(const QNetworkRequest &request, QHttpM QNetworkReply *reply = put(newRequest, device); return reply; } +#endif // QT_CONFIG(http) /*! Uploads the contents of \a data to the destination \a request and @@ -1241,6 +1289,7 @@ QNetworkReply *QNetworkAccessManager::sendCustomRequest(const QNetworkRequest &r return reply; } +#if QT_CONFIG(http) /*! \since 5.8 @@ -1262,6 +1311,7 @@ QNetworkReply *QNetworkAccessManager::sendCustomRequest(const QNetworkRequest &r QNetworkReply *reply = sendCustomRequest(newRequest, verb, device); return reply; } +#endif // QT_CONFIG(http) /*! Returns a new QNetworkReply object to handle the operation \a op @@ -1374,7 +1424,7 @@ QNetworkReply *QNetworkAccessManager::createRequest(QNetworkAccessManager::Opera } } -#ifndef QT_NO_HTTP +#if QT_CONFIG(http) // Since Qt 5 we use the new QNetworkReplyHttpImpl if (scheme == QLatin1String("http") || scheme == QLatin1String("preconnect-http") #ifndef QT_NO_SSL @@ -1406,7 +1456,7 @@ QNetworkReply *QNetworkAccessManager::createRequest(QNetworkAccessManager::Opera #endif return reply; } -#endif // QT_NO_HTTP +#endif // QT_CONFIG(http) // first step: create the reply QNetworkReplyImpl *reply = new QNetworkReplyImpl(this); @@ -1482,7 +1532,7 @@ QStringList QNetworkAccessManager::supportedSchemesImplementation() const QStringList schemes = d->backendSupportedSchemes(); // Those ones don't exist in backends -#ifndef QT_NO_HTTP +#if QT_CONFIG(http) schemes << QStringLiteral("http"); #ifndef QT_NO_SSL if (QSslSocket::supportsSsl()) @@ -1949,6 +1999,7 @@ void QNetworkAccessManagerPrivate::_q_networkSessionFailed(QNetworkSession::Sess #endif // QT_NO_BEARERMANAGEMENT +#if QT_CONFIG(http) QNetworkRequest QNetworkAccessManagerPrivate::prepareMultipart(const QNetworkRequest &request, QHttpMultiPart *multiPart) { // copy the request, we probably need to add some headers @@ -1996,6 +2047,7 @@ QNetworkRequest QNetworkAccessManagerPrivate::prepareMultipart(const QNetworkReq return newRequest; } +#endif // QT_CONFIG(http) QT_END_NAMESPACE |