diff -ur qt-everywhere-opensource-src-4.6.3.orig/src/network/access/qhttpnetworkconnectionchannel.cpp qt-everywhere-opensource-src-4.6.3.new/src/network/access/qhttpnetworkconnectionchannel.cpp --- qt-everywhere-opensource-src-4.6.3.orig/src/network/access/qhttpnetworkconnectionchannel.cpp 2010-06-02 04:03:17.000000000 +0200 +++ qt-everywhere-opensource-src-4.6.3.new/src/network/access/qhttpnetworkconnectionchannel.cpp 2011-01-14 13:51:18.614841001 +0100 @@ -130,6 +130,9 @@ QObject::connect(sslSocket, SIGNAL(encryptedBytesWritten(qint64)), this, SLOT(_q_encryptedBytesWritten(qint64)), Qt::DirectConnection); + QObject::connect(sslSocket, SIGNAL(extendedContextInitialization(ssl_ctx_st*)), + this, SLOT(_q_extendedContextInitialization(ssl_ctx_st*)), + Qt::DirectConnection); } #endif } @@ -1019,6 +1022,13 @@ emit connection->sslErrors(errors); } +void QHttpNetworkConnectionChannel::_q_extendedContextInitialization(ssl_ctx_st* ctx) +{ + if (!socket) + return; + emit connection->extendedContextInitialization(ctx, qobject_cast(socket)); +} + void QHttpNetworkConnectionChannel::_q_encryptedBytesWritten(qint64 bytes) { Q_UNUSED(bytes); diff -ur qt-everywhere-opensource-src-4.6.3.orig/src/network/access/qhttpnetworkconnectionchannel_p.h qt-everywhere-opensource-src-4.6.3.new/src/network/access/qhttpnetworkconnectionchannel_p.h --- qt-everywhere-opensource-src-4.6.3.orig/src/network/access/qhttpnetworkconnectionchannel_p.h 2010-06-02 04:03:17.000000000 +0200 +++ qt-everywhere-opensource-src-4.6.3.new/src/network/access/qhttpnetworkconnectionchannel_p.h 2011-01-14 13:24:28.974841007 +0100 @@ -76,6 +76,10 @@ # include #endif +#ifndef QT_NO_OPENSSL +struct ssl_ctx_st; +#endif + QT_BEGIN_NAMESPACE class QHttpNetworkRequest; @@ -175,6 +179,7 @@ #ifndef QT_NO_OPENSSL void _q_encrypted(); // start sending request (https) void _q_sslErrors(const QList &errors); // ssl errors from the socket + void _q_extendedContextInitialization(ssl_ctx_st *ctx); void _q_encryptedBytesWritten(qint64 bytes); // proceed sending #endif }; diff -ur qt-everywhere-opensource-src-4.6.3.orig/src/network/access/qhttpnetworkconnection_p.h qt-everywhere-opensource-src-4.6.3.new/src/network/access/qhttpnetworkconnection_p.h --- qt-everywhere-opensource-src-4.6.3.orig/src/network/access/qhttpnetworkconnection_p.h 2010-06-02 04:03:17.000000000 +0200 +++ qt-everywhere-opensource-src-4.6.3.new/src/network/access/qhttpnetworkconnection_p.h 2011-01-14 13:19:27.444841004 +0100 @@ -123,6 +123,7 @@ Q_SIGNALS: void sslErrors(const QList &errors); + void extendedContextInitialization(ssl_ctx_st *ctx, QSslSocket *socket); #endif Q_SIGNALS: diff -ur qt-everywhere-opensource-src-4.6.3.orig/src/network/access/qnetworkaccessbackend.cpp qt-everywhere-opensource-src-4.6.3.new/src/network/access/qnetworkaccessbackend.cpp --- qt-everywhere-opensource-src-4.6.3.orig/src/network/access/qnetworkaccessbackend.cpp 2010-06-02 04:03:17.000000000 +0200 +++ qt-everywhere-opensource-src-4.6.3.new/src/network/access/qnetworkaccessbackend.cpp 2011-01-14 13:29:49.374841004 +0100 @@ -341,4 +341,13 @@ #endif } +void QNetworkAccessBackend::extendedContextInitialization(ssl_ctx_st* ctx, QSslSocket *socket) +{ +#ifndef QT_NO_OPENSSL + reply->extendedContextInitialization(ctx, socket); +#else + Q_UNUSED(ctx); +#endif +} + QT_END_NAMESPACE diff -ur qt-everywhere-opensource-src-4.6.3.orig/src/network/access/qnetworkaccessbackend_p.h qt-everywhere-opensource-src-4.6.3.new/src/network/access/qnetworkaccessbackend_p.h --- qt-everywhere-opensource-src-4.6.3.orig/src/network/access/qnetworkaccessbackend_p.h 2010-06-02 04:03:17.000000000 +0200 +++ qt-everywhere-opensource-src-4.6.3.new/src/network/access/qnetworkaccessbackend_p.h 2011-01-14 13:30:12.634841002 +0100 @@ -56,6 +56,10 @@ #include "qnetworkreplyimpl_p.h" #include "QtCore/qobject.h" +#ifndef QT_NO_OPENSSL +struct ssl_ctx_st; +#endif + QT_BEGIN_NAMESPACE class QAuthenticator; @@ -185,6 +189,7 @@ void redirectionRequested(const QUrl &destination); void sslErrors(const QList &errors); void emitReplyUploadProgress(qint64 bytesSent, qint64 bytesTotal); + void extendedContextInitialization(ssl_ctx_st *ctx, QSslSocket *socket); private: friend class QNetworkAccessManager; diff -ur qt-everywhere-opensource-src-4.6.3.orig/src/network/access/qnetworkaccesshttpbackend.cpp qt-everywhere-opensource-src-4.6.3.new/src/network/access/qnetworkaccesshttpbackend.cpp --- qt-everywhere-opensource-src-4.6.3.orig/src/network/access/qnetworkaccesshttpbackend.cpp 2010-06-02 04:03:17.000000000 +0200 +++ qt-everywhere-opensource-src-4.6.3.new/src/network/access/qnetworkaccesshttpbackend.cpp 2011-01-14 13:18:35.404841004 +0100 @@ -349,6 +349,8 @@ #ifndef QT_NO_OPENSSL connect(http, SIGNAL(sslErrors(QList)), SLOT(sslErrors(QList))); + connect(http, SIGNAL(extendedContextInitialization(ssl_ctx_st*, QSslSocket*)), + SLOT(extendedContextInitialization(ssl_ctx_st*, QSslSocket*))); #endif } diff -ur qt-everywhere-opensource-src-4.6.3.orig/src/network/access/qnetworkaccessmanager.cpp qt-everywhere-opensource-src-4.6.3.new/src/network/access/qnetworkaccessmanager.cpp --- qt-everywhere-opensource-src-4.6.3.orig/src/network/access/qnetworkaccessmanager.cpp 2010-06-02 04:03:17.000000000 +0200 +++ qt-everywhere-opensource-src-4.6.3.new/src/network/access/qnetworkaccessmanager.cpp 2011-01-14 13:21:07.544841001 +0100 @@ -777,6 +777,16 @@ #endif } +void QNetworkAccessManagerPrivate::_q_extendedContextInitialization(ssl_ctx_st *ctx, QSslSocket *socket) +{ +#ifndef QT_NO_OPENSSL + Q_Q(QNetworkAccessManager); + emit q->extendedContextInitialization(ctx, socket); +#else + Q_UNUSED(ctx); +#endif +} + QNetworkReply *QNetworkAccessManagerPrivate::postProcess(QNetworkReply *reply) { Q_Q(QNetworkAccessManager); @@ -786,6 +796,7 @@ /* In case we're compiled without SSL support, we don't have this signal and we need to * avoid getting a connection error. */ q->connect(reply, SIGNAL(sslErrors(QList)), SLOT(_q_replySslErrors(QList))); + q->connect(reply, SIGNAL(extendedContextInitialization(ssl_ctx_st*, QSslSocket*)), SLOT(_q_extendedContextInitialization(ssl_ctx_st*, QSslSocket*))); #endif return reply; diff -ur qt-everywhere-opensource-src-4.6.3.orig/src/network/access/qnetworkaccessmanager.h qt-everywhere-opensource-src-4.6.3.new/src/network/access/qnetworkaccessmanager.h --- qt-everywhere-opensource-src-4.6.3.orig/src/network/access/qnetworkaccessmanager.h 2010-06-02 04:03:17.000000000 +0200 +++ qt-everywhere-opensource-src-4.6.3.new/src/network/access/qnetworkaccessmanager.h 2011-01-14 13:22:42.014840998 +0100 @@ -46,6 +46,10 @@ QT_BEGIN_HEADER +#ifndef QT_NO_OPENSSL +struct ssl_ctx_st; +#endif + QT_BEGIN_NAMESPACE QT_MODULE(Network) @@ -62,6 +66,7 @@ class QNetworkProxy; class QNetworkProxyFactory; class QSslError; +class QSslSocket; class QNetworkReplyImplPrivate; class QNetworkAccessManagerPrivate; @@ -111,6 +116,7 @@ void finished(QNetworkReply *reply); #ifndef QT_NO_OPENSSL void sslErrors(QNetworkReply *reply, const QList &errors); + void extendedContextInitialization(ssl_ctx_st *ctx, QSslSocket *socket); #endif protected: @@ -122,6 +128,7 @@ Q_DECLARE_PRIVATE(QNetworkAccessManager) Q_PRIVATE_SLOT(d_func(), void _q_replyFinished()) Q_PRIVATE_SLOT(d_func(), void _q_replySslErrors(QList)) + Q_PRIVATE_SLOT(d_func(), void _q_extendedContextInitialization(ssl_ctx_st*, QSslSocket*)) }; QT_END_NAMESPACE diff -ur qt-everywhere-opensource-src-4.6.3.orig/src/network/access/qnetworkaccessmanager_p.h qt-everywhere-opensource-src-4.6.3.new/src/network/access/qnetworkaccessmanager_p.h --- qt-everywhere-opensource-src-4.6.3.orig/src/network/access/qnetworkaccessmanager_p.h 2010-06-02 04:03:17.000000000 +0200 +++ qt-everywhere-opensource-src-4.6.3.new/src/network/access/qnetworkaccessmanager_p.h 2011-01-14 13:28:00.214841000 +0100 @@ -59,6 +59,10 @@ #include "private/qobject_p.h" #include "QtNetwork/qnetworkproxy.h" +#ifndef QT_NO_OPENSSL +struct ssl_ctx_st; +#endif + QT_BEGIN_NAMESPACE class QAuthenticator; @@ -80,6 +84,7 @@ void _q_replyFinished(); void _q_replySslErrors(const QList &errors); + void _q_extendedContextInitialization(ssl_ctx_st *ctx, QSslSocket *socket); QNetworkReply *postProcess(QNetworkReply *reply); void createCookieJar() const; diff -ur qt-everywhere-opensource-src-4.6.3.orig/src/network/access/qnetworkreply.h qt-everywhere-opensource-src-4.6.3.new/src/network/access/qnetworkreply.h --- qt-everywhere-opensource-src-4.6.3.orig/src/network/access/qnetworkreply.h 2010-06-02 04:03:17.000000000 +0200 +++ qt-everywhere-opensource-src-4.6.3.new/src/network/access/qnetworkreply.h 2011-01-14 13:20:14.464841001 +0100 @@ -51,6 +51,10 @@ QT_BEGIN_HEADER +#ifndef QT_NO_OPENSSL +struct ssl_ctx_st; +#endif + QT_BEGIN_NAMESPACE QT_MODULE(Network) @@ -146,6 +150,7 @@ void error(QNetworkReply::NetworkError); #ifndef QT_NO_OPENSSL void sslErrors(const QList &errors); + void extendedContextInitialization(ssl_ctx_st *ctx, QSslSocket *socket); #endif void uploadProgress(qint64 bytesSent, qint64 bytesTotal); diff -ur qt-everywhere-opensource-src-4.6.3.orig/src/network/access/qnetworkreplyimpl.cpp qt-everywhere-opensource-src-4.6.3.new/src/network/access/qnetworkreplyimpl.cpp --- qt-everywhere-opensource-src-4.6.3.orig/src/network/access/qnetworkreplyimpl.cpp 2010-06-02 04:03:17.000000000 +0200 +++ qt-everywhere-opensource-src-4.6.3.new/src/network/access/qnetworkreplyimpl.cpp 2011-01-14 13:28:57.174841008 +0100 @@ -590,6 +590,16 @@ #endif } +void QNetworkReplyImplPrivate::extendedContextInitialization(ssl_ctx_st* ctx, QSslSocket *socket) +{ +#ifndef QT_NO_OPENSSL + Q_Q(QNetworkReplyImpl); + emit q->extendedContextInitialization(ctx, socket); +#else + Q_UNUSED(ctx); +#endif +} + bool QNetworkReplyImplPrivate::isFinished() const { return (state == Finished || state == Aborted); diff -ur qt-everywhere-opensource-src-4.6.3.orig/src/network/access/qnetworkreplyimpl_p.h qt-everywhere-opensource-src-4.6.3.new/src/network/access/qnetworkreplyimpl_p.h --- qt-everywhere-opensource-src-4.6.3.orig/src/network/access/qnetworkreplyimpl_p.h 2010-06-02 04:03:17.000000000 +0200 +++ qt-everywhere-opensource-src-4.6.3.new/src/network/access/qnetworkreplyimpl_p.h 2011-01-14 13:29:14.444841006 +0100 @@ -63,6 +63,10 @@ #include "private/qringbuffer_p.h" #include "private/qbytedata_p.h" +#ifndef QT_NO_OPENSSL +struct ssl_ctx_st; +#endif + QT_BEGIN_NAMESPACE class QAbstractNetworkCache; @@ -157,6 +161,7 @@ void metaDataChanged(); void redirectionRequested(const QUrl &target); void sslErrors(const QList &errors); + void extendedContextInitialization(ssl_ctx_st *ctx, QSslSocket *socket); bool isFinished() const; diff -ur qt-everywhere-opensource-src-4.6.3.orig/src/network/ssl/qsslsocket.h qt-everywhere-opensource-src-4.6.3.new/src/network/ssl/qsslsocket.h --- qt-everywhere-opensource-src-4.6.3.orig/src/network/ssl/qsslsocket.h 2010-06-02 04:03:17.000000000 +0200 +++ qt-everywhere-opensource-src-4.6.3.new/src/network/ssl/qsslsocket.h 2011-01-14 09:20:28.954841003 +0100 @@ -52,6 +52,10 @@ QT_BEGIN_HEADER +#ifndef QT_NO_OPENSSL +struct ssl_ctx_st; +#endif + QT_BEGIN_NAMESPACE QT_MODULE(Network) @@ -186,6 +190,7 @@ void sslErrors(const QList &errors); void modeChanged(QSslSocket::SslMode newMode); void encryptedBytesWritten(qint64 totalBytes); + void extendedContextInitialization(ssl_ctx_st* ctx); protected Q_SLOTS: void connectToHostImplementation(const QString &hostName, quint16 port, diff -ur qt-everywhere-opensource-src-4.6.3.orig/src/network/ssl/qsslsocket_openssl.cpp qt-everywhere-opensource-src-4.6.3.new/src/network/ssl/qsslsocket_openssl.cpp --- qt-everywhere-opensource-src-4.6.3.orig/src/network/ssl/qsslsocket_openssl.cpp 2010-06-02 04:03:17.000000000 +0200 +++ qt-everywhere-opensource-src-4.6.3.new/src/network/ssl/qsslsocket_openssl.cpp 2011-01-14 09:20:28.954841003 +0100 @@ -340,6 +340,8 @@ // Set verification depth. if (configuration.peerVerifyDepth != 0) q_SSL_CTX_set_verify_depth(ctx, configuration.peerVerifyDepth); + + emit q->extendedContextInitialization(ctx); // Create and initialize SSL session if (!(ssl = q_SSL_new(ctx))) {