diff options
author | Jonas M. Gastal <jgastal@profusion.mobi> | 2011-12-22 13:53:38 -0200 |
---|---|---|
committer | Qt by Nokia <qt-info@nokia.com> | 2012-01-09 19:18:08 +0100 |
commit | 159098719b8e8f40d1bd663c61bdc51f883c645f (patch) | |
tree | 028f1bd66b1e055b7a676b52ab2b690692139dae | |
parent | 4669d657d29ae883db746b7cbfed367758943ee9 (diff) |
Using proper virtual functions instead of Q_INVOKABLE tricks.
This mantains BC between version compiled with and without OPENSSL,
which was the reason for the use of "runtime virtuals". Using proper
virtuals should make code clearer.
Change-Id: I24f141ebaab68c000c2d602b54addbae1679a424
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
-rw-r--r-- | src/network/access/qnetworkreply.cpp | 69 | ||||
-rw-r--r-- | src/network/access/qnetworkreply.h | 4 | ||||
-rw-r--r-- | src/network/access/qnetworkreplyhttpimpl.cpp | 4 | ||||
-rw-r--r-- | src/network/access/qnetworkreplyhttpimpl_p.h | 17 | ||||
-rw-r--r-- | src/network/access/qnetworkreplyimpl.cpp | 6 | ||||
-rw-r--r-- | src/network/access/qnetworkreplyimpl_p.h | 15 |
6 files changed, 68 insertions, 47 deletions
diff --git a/src/network/access/qnetworkreply.cpp b/src/network/access/qnetworkreply.cpp index c38414ea44..db62f2935a 100644 --- a/src/network/access/qnetworkreply.cpp +++ b/src/network/access/qnetworkreply.cpp @@ -586,13 +586,7 @@ QVariant QNetworkReply::attribute(QNetworkRequest::Attribute code) const QSslConfiguration QNetworkReply::sslConfiguration() const { QSslConfiguration config; - - // determine if we support this extension - int id = metaObject()->indexOfMethod("sslConfigurationImplementation()"); - if (id != -1) { - void *arr[] = { &config, 0 }; - const_cast<QNetworkReply *>(this)->qt_metacall(QMetaObject::InvokeMetaMethod, id, arr); - } + sslConfigurationImplementation(config); return config; } @@ -602,15 +596,7 @@ QSslConfiguration QNetworkReply::sslConfiguration() const */ void QNetworkReply::setSslConfiguration(const QSslConfiguration &config) { - if (config.isNull()) - return; - - int id = metaObject()->indexOfMethod("setSslConfigurationImplementation(QSslConfiguration)"); - if (id != -1) { - QSslConfiguration copy(config); - void *arr[] = { 0, © }; - qt_metacall(QMetaObject::InvokeMetaMethod, id, arr); - } + setSslConfigurationImplementation(config); } /*! @@ -635,18 +621,53 @@ void QNetworkReply::setSslConfiguration(const QSslConfiguration &config) */ void QNetworkReply::ignoreSslErrors(const QList<QSslError> &errors) { - // do this cryptic trick, because we could not add a virtual method to this class later on - // since that breaks binary compatibility - int id = metaObject()->indexOfMethod("ignoreSslErrorsImplementation(QList<QSslError>)"); - if (id != -1) { - QList<QSslError> copy(errors); - void *arr[] = { 0, © }; - qt_metacall(QMetaObject::InvokeMetaMethod, id, arr); - } + ignoreSslErrorsImplementation(errors); } #endif /*! + \fn void QNetworkReply::sslConfigurationImplementation(QSslConfiguration &configuration) const + \since 5.0 + + This virtual method is provided to enable overriding the behavior of + sslConfiguration(). sslConfiguration() is a public wrapper for this method. + The configuration will be returned in \a configuration. + + \sa sslConfiguration() +*/ +void QNetworkReply::sslConfigurationImplementation(QSslConfiguration &) const +{ +} + +/*! + \fn void QNetworkReply::setSslConfigurationImplementation(const QSslConfiguration &configuration) + \since 5.0 + + This virtual method is provided to enable overriding the behavior of + setSslConfiguration(). setSslConfiguration() is a public wrapper for this method. + If you override this method use \a configuration to set the SSL configuration. + + \sa sslConfigurationImplementation(), setSslConfiguration() +*/ +void QNetworkReply::setSslConfigurationImplementation(const QSslConfiguration &) +{ +} + +/*! + \fn void QNetworkReply::ignoreSslErrorsImplementation(const QList<QSslError> &errors) + \since 5.0 + + This virtual method is provided to enable overriding the behavior of + ignoreSslErrors(). ignoreSslErrors() is a public wrapper for this method. + \a errors contains the errors the user wishes ignored. + + \sa ignoreSslErrors() +*/ +void QNetworkReply::ignoreSslErrorsImplementation(const QList<QSslError> &) +{ +} + +/*! If this function is called, SSL errors related to network connection will be ignored, including certificate validation errors. diff --git a/src/network/access/qnetworkreply.h b/src/network/access/qnetworkreply.h index dadbe4c958..492336bbf6 100644 --- a/src/network/access/qnetworkreply.h +++ b/src/network/access/qnetworkreply.h @@ -169,6 +169,10 @@ protected: void setRawHeader(const QByteArray &headerName, const QByteArray &value); void setAttribute(QNetworkRequest::Attribute code, const QVariant &value); + virtual void sslConfigurationImplementation(QSslConfiguration &) const; + virtual void setSslConfigurationImplementation(const QSslConfiguration &); + virtual void ignoreSslErrorsImplementation(const QList<QSslError> &); + private: Q_DECLARE_PRIVATE(QNetworkReply) }; diff --git a/src/network/access/qnetworkreplyhttpimpl.cpp b/src/network/access/qnetworkreplyhttpimpl.cpp index 284b8c64dc..a8b0a3e514 100644 --- a/src/network/access/qnetworkreplyhttpimpl.cpp +++ b/src/network/access/qnetworkreplyhttpimpl.cpp @@ -410,10 +410,10 @@ void QNetworkReplyHttpImpl::setSslConfigurationImplementation(const QSslConfigur Q_UNUSED(newconfig); } -QSslConfiguration QNetworkReplyHttpImpl::sslConfigurationImplementation() const +void QNetworkReplyHttpImpl::sslConfigurationImplementation(QSslConfiguration &configuration) const { Q_D(const QNetworkReplyHttpImpl); - return d->sslConfiguration; + configuration = d->sslConfiguration; } #endif diff --git a/src/network/access/qnetworkreplyhttpimpl_p.h b/src/network/access/qnetworkreplyhttpimpl_p.h index 346cc6464c..6c0467add2 100644 --- a/src/network/access/qnetworkreplyhttpimpl_p.h +++ b/src/network/access/qnetworkreplyhttpimpl_p.h @@ -94,16 +94,6 @@ public: void setReadBufferSize(qint64 size); bool canReadLine () const; -#ifndef QT_NO_OPENSSL - void ignoreSslErrors(); - // ### Qt5 Add proper virtual - Q_INVOKABLE void ignoreSslErrorsImplementation(const QList<QSslError> &errors); - // ### Qt5 Add proper virtual - Q_INVOKABLE void setSslConfigurationImplementation(const QSslConfiguration &configuration); - // ### Qt5 Add proper virtual - Q_INVOKABLE QSslConfiguration sslConfigurationImplementation() const; -#endif - Q_DECLARE_PRIVATE(QNetworkReplyHttpImpl) Q_PRIVATE_SLOT(d_func(), void _q_startOperation()) Q_PRIVATE_SLOT(d_func(), void _q_cacheLoadReadyRead()) @@ -135,6 +125,13 @@ public: Q_PRIVATE_SLOT(d_func(), void emitReplyUploadProgress(qint64, qint64)) +#ifndef QT_NO_OPENSSL +protected: + void ignoreSslErrors(); + void ignoreSslErrorsImplementation(const QList<QSslError> &errors); + void setSslConfigurationImplementation(const QSslConfiguration &configuration); + void sslConfigurationImplementation(QSslConfiguration &configuration) const; +#endif signals: // To HTTP thread: diff --git a/src/network/access/qnetworkreplyimpl.cpp b/src/network/access/qnetworkreplyimpl.cpp index 8513207ef7..14b4f8b96d 100644 --- a/src/network/access/qnetworkreplyimpl.cpp +++ b/src/network/access/qnetworkreplyimpl.cpp @@ -930,13 +930,11 @@ void QNetworkReplyImpl::setReadBufferSize(qint64 size) } #ifndef QT_NO_OPENSSL -QSslConfiguration QNetworkReplyImpl::sslConfigurationImplementation() const +void QNetworkReplyImpl::sslConfigurationImplementation(QSslConfiguration &configuration) const { Q_D(const QNetworkReplyImpl); - QSslConfiguration config; if (d->backend) - d->backend->fetchSslConfiguration(config); - return config; + d->backend->fetchSslConfiguration(configuration); } void QNetworkReplyImpl::setSslConfigurationImplementation(const QSslConfiguration &config) diff --git a/src/network/access/qnetworkreplyimpl_p.h b/src/network/access/qnetworkreplyimpl_p.h index aa3af3864b..0b7664acc6 100644 --- a/src/network/access/qnetworkreplyimpl_p.h +++ b/src/network/access/qnetworkreplyimpl_p.h @@ -87,13 +87,6 @@ public: virtual qint64 readData(char *data, qint64 maxlen); virtual bool event(QEvent *); -#ifndef QT_NO_OPENSSL - Q_INVOKABLE QSslConfiguration sslConfigurationImplementation() const; - Q_INVOKABLE void setSslConfigurationImplementation(const QSslConfiguration &configuration); - virtual void ignoreSslErrors(); - Q_INVOKABLE virtual void ignoreSslErrorsImplementation(const QList<QSslError> &errors); -#endif - Q_DECLARE_PRIVATE(QNetworkReplyImpl) Q_PRIVATE_SLOT(d_func(), void _q_startOperation()) Q_PRIVATE_SLOT(d_func(), void _q_copyReadyRead()) @@ -104,6 +97,14 @@ public: Q_PRIVATE_SLOT(d_func(), void _q_networkSessionConnected()) Q_PRIVATE_SLOT(d_func(), void _q_networkSessionFailed()) #endif + +#ifndef QT_NO_OPENSSL +protected: + void sslConfigurationImplementation(QSslConfiguration &configuration) const; + void setSslConfigurationImplementation(const QSslConfiguration &configuration); + virtual void ignoreSslErrors(); + virtual void ignoreSslErrorsImplementation(const QList<QSslError> &errors); +#endif }; class QNetworkReplyImplPrivate: public QNetworkReplyPrivate |