From 80d31849e258d8105e9ac1558023e10b6514fdd3 Mon Sep 17 00:00:00 2001 From: BogDan Vatra Date: Tue, 28 Oct 2014 15:15:41 +0200 Subject: Fix indentation & coding style. Change-Id: Id974abca3ee2be9cb70c380a842e76c0ba1520bd Reviewed-by: Oswald Buddenhagen --- src/network/socket/qlocalserver_unix.cpp | 36 ++++++++++++++++---------------- 1 file changed, 18 insertions(+), 18 deletions(-) (limited to 'src/network') diff --git a/src/network/socket/qlocalserver_unix.cpp b/src/network/socket/qlocalserver_unix.cpp index 149d89c000..a5ae363540 100644 --- a/src/network/socket/qlocalserver_unix.cpp +++ b/src/network/socket/qlocalserver_unix.cpp @@ -160,30 +160,30 @@ bool QLocalServerPrivate::listen(const QString &requestedServerName) } if (socketOptions & QLocalServer::WorldAccessOption) { - mode_t mode = 000; + mode_t mode = 000; - if (socketOptions & QLocalServer::UserAccessOption) { - mode |= S_IRWXU; - } - if (socketOptions & QLocalServer::GroupAccessOption) { - mode |= S_IRWXG; - } - if (socketOptions & QLocalServer::OtherAccessOption) { - mode |= S_IRWXO; - } + if (socketOptions & QLocalServer::UserAccessOption) + mode |= S_IRWXU; - if (mode) { - if (-1 == ::chmod(tempPath.toLatin1(), mode)) { - setError(QLatin1String("QLocalServer::listen")); - closeServer(); - return false; - } - } - if (-1 == ::rename(tempPath.toLatin1(), fullServerName.toLatin1())){ + if (socketOptions & QLocalServer::GroupAccessOption) + mode |= S_IRWXG; + + if (socketOptions & QLocalServer::OtherAccessOption) + mode |= S_IRWXO; + + if (mode) { + if (::chmod(tempPath.toLatin1(), mode) == -1) { setError(QLatin1String("QLocalServer::listen")); closeServer(); return false; } + } + + if (::rename(tempPath.toLatin1(), fullServerName.toLatin1()) == -1) { + setError(QLatin1String("QLocalServer::listen")); + closeServer(); + return false; + } } Q_ASSERT(!socketNotifier); -- cgit v1.2.3 From 4b8d4034d7d62c1e2022619d5cff60174d244770 Mon Sep 17 00:00:00 2001 From: BogDan Vatra Date: Tue, 28 Oct 2014 15:16:55 +0200 Subject: Removed pointless conditional. Mode is always != 0 at this point (QLocalServer::WorldAccessOption is a combination of the bits tested later). Change-Id: I5abfb4e49fdc7903e21398525af05989f40d7f94 Reviewed-by: Oswald Buddenhagen Reviewed-by: BogDan Vatra --- src/network/socket/qlocalserver_unix.cpp | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) (limited to 'src/network') diff --git a/src/network/socket/qlocalserver_unix.cpp b/src/network/socket/qlocalserver_unix.cpp index a5ae363540..1e5a4e98ee 100644 --- a/src/network/socket/qlocalserver_unix.cpp +++ b/src/network/socket/qlocalserver_unix.cpp @@ -171,12 +171,10 @@ bool QLocalServerPrivate::listen(const QString &requestedServerName) if (socketOptions & QLocalServer::OtherAccessOption) mode |= S_IRWXO; - if (mode) { - if (::chmod(tempPath.toLatin1(), mode) == -1) { - setError(QLatin1String("QLocalServer::listen")); - closeServer(); - return false; - } + if (::chmod(tempPath.toLatin1(), mode) == -1) { + setError(QLatin1String("QLocalServer::listen")); + closeServer(); + return false; } if (::rename(tempPath.toLatin1(), fullServerName.toLatin1()) == -1) { -- cgit v1.2.3 From aa4d76e468512d34b690c08b803c36a4bfc4a3bf Mon Sep 17 00:00:00 2001 From: BogDan Vatra Date: Tue, 28 Oct 2014 15:23:37 +0200 Subject: Remove redundant permission set. The temp socket is in a safe place. There is no need to set any permissions at this point. Change-Id: I18ea4b71b7c20db65dc46c57ddc5d34d8b93f577 Reviewed-by: Oswald Buddenhagen --- src/network/socket/qlocalserver_unix.cpp | 7 ------- 1 file changed, 7 deletions(-) (limited to 'src/network') diff --git a/src/network/socket/qlocalserver_unix.cpp b/src/network/socket/qlocalserver_unix.cpp index 1e5a4e98ee..313fe4ad29 100644 --- a/src/network/socket/qlocalserver_unix.cpp +++ b/src/network/socket/qlocalserver_unix.cpp @@ -124,13 +124,6 @@ bool QLocalServerPrivate::listen(const QString &requestedServerName) } ::memcpy(addr.sun_path, tempPath.toLatin1().data(), tempPath.toLatin1().size() + 1); - - if (-1 == ::fchmod(listenSocket, 0)) { - setError(QLatin1String("QLocalServer::listen")); - closeServer(); - return false; - } - } else { ::memcpy(addr.sun_path, fullServerName.toLatin1().data(), fullServerName.toLatin1().size() + 1); -- cgit v1.2.3 From 320360131559df76ba1f635b665659f57e147665 Mon Sep 17 00:00:00 2001 From: BogDan Vatra Date: Tue, 28 Oct 2014 13:53:14 +0200 Subject: Fix QLocalServer, create a temp path as small as possible. If requestedServerName is a full path e.g. "/tmp/some/long/path" the temp path will end up "/tmp/some/long/path.balblabla/tmp/some/long/path" and it might fail because it doesn't fit in addr.sun_path. Change-Id: I6a138fd92be9e0b3b432ab9ac977d04cb330f3fd Reviewed-by: Oswald Buddenhagen --- src/network/socket/qlocalserver_unix.cpp | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) (limited to 'src/network') diff --git a/src/network/socket/qlocalserver_unix.cpp b/src/network/socket/qlocalserver_unix.cpp index 313fe4ad29..a615dcc7b6 100644 --- a/src/network/socket/qlocalserver_unix.cpp +++ b/src/network/socket/qlocalserver_unix.cpp @@ -90,13 +90,14 @@ bool QLocalServerPrivate::listen(const QString &requestedServerName) // Check any of the flags if (socketOptions & QLocalServer::WorldAccessOption) { - tempDir.reset(new QTemporaryDir(fullServerName)); + QFileInfo serverNameFileInfo(fullServerName); + tempDir.reset(new QTemporaryDir(serverNameFileInfo.absolutePath() + QLatin1Char('/'))); if (!tempDir->isValid()) { setError(QLatin1String("QLocalServer::listen")); return false; } tempPath = tempDir->path(); - tempPath += QLatin1Char('/') + requestedServerName; + tempPath += QLatin1String("/s"); } // create the unix socket -- cgit v1.2.3 From 6c58c9b3ec78ecdd3f72f601041ac34bf2c59320 Mon Sep 17 00:00:00 2001 From: Kai Koehne Date: Tue, 28 Oct 2014 16:06:43 +0100 Subject: clang: Fix compilation with -openssl-linked Fixes errors like qsslsocket_openssl_symbols.cpp:111:6: error: unused function 'qsslSocketUnresolvedSymbolWarning' [-Werror,-Wunused-function] void qsslSocketUnresolvedSymbolWarning(const char *functionName) ^ 1 error generated. Change-Id: I164518de583f080724ab9a7165c885602a1c6231 Reviewed-by: Richard J. Moore --- src/network/ssl/qsslsocket_openssl_symbols.cpp | 4 ++++ 1 file changed, 4 insertions(+) (limited to 'src/network') diff --git a/src/network/ssl/qsslsocket_openssl_symbols.cpp b/src/network/ssl/qsslsocket_openssl_symbols.cpp index d919d8e934..f4562cdb21 100644 --- a/src/network/ssl/qsslsocket_openssl_symbols.cpp +++ b/src/network/ssl/qsslsocket_openssl_symbols.cpp @@ -107,6 +107,8 @@ QT_BEGIN_NAMESPACE possibly with a different version of OpenSSL. */ +#ifndef QT_LINKED_OPENSSL + namespace { void qsslSocketUnresolvedSymbolWarning(const char *functionName) { @@ -119,6 +121,8 @@ void qsslSocketCannotResolveSymbolWarning(const char *functionName) } } +#endif // QT_LINKED_OPENSSL + #ifdef SSLEAY_MACROS DEFINEFUNC3(void *, ASN1_dup, i2d_of_void *a, a, d2i_of_void *b, b, char *c, c, return 0, return) #endif -- cgit v1.2.3 From af279b34a8ecccd7dfa0d59b718bc3cf65ebce65 Mon Sep 17 00:00:00 2001 From: Lorn Potter Date: Mon, 27 Oct 2014 19:26:47 +1000 Subject: Reset QNAM's NetworkConfiguration when state changes. Since QNAM is initialized with defaultConfiguration, we need to reset the internal configuration used to the current defaultConfiguration when the state changes and a new configuration becomes the default. Task-number: QTBUG-40234 Change-Id: I50f23c62804f29370915eecac2c92301c5f3ead2 Reviewed-by: Kai Koehne Reviewed-by: Alex Blasche --- src/network/access/qnetworkaccessmanager.cpp | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) (limited to 'src/network') diff --git a/src/network/access/qnetworkaccessmanager.cpp b/src/network/access/qnetworkaccessmanager.cpp index f00b58a8ce..52d56fb071 100644 --- a/src/network/access/qnetworkaccessmanager.cpp +++ b/src/network/access/qnetworkaccessmanager.cpp @@ -1135,7 +1135,12 @@ QNetworkReply *QNetworkAccessManager::createRequest(QNetworkAccessManager::Opera if (!d->networkSessionStrongRef && (d->initializeSession || !d->networkConfiguration.identifier().isEmpty())) { QNetworkConfigurationManager manager; if (!d->networkConfiguration.identifier().isEmpty()) { - d->createSession(d->networkConfiguration); + if ((d->networkConfiguration.state() & QNetworkConfiguration::Defined) + && d->networkConfiguration != manager.defaultConfiguration()) + d->createSession(manager.defaultConfiguration()); + else + d->createSession(d->networkConfiguration); + } else { if (manager.capabilities() & QNetworkConfigurationManager::NetworkSessionRequired) d->createSession(manager.defaultConfiguration()); @@ -1590,6 +1595,11 @@ void QNetworkAccessManagerPrivate::_q_onlineStateChanged(bool isOnline) if (customNetworkConfiguration) { online = (networkConfiguration.state() & QNetworkConfiguration::Active); } else { + if (isOnline && online != isOnline) { + networkSessionStrongRef.clear(); + networkSessionWeakRef.clear(); + } + online = isOnline; } } -- cgit v1.2.3 From 13401116cce64bc7f2cf80b07ce34a4ad3abe829 Mon Sep 17 00:00:00 2001 From: Alex Trotsenko Date: Sat, 6 Sep 2014 13:07:37 +0300 Subject: Remove incorrect read from QSslSocket::readData() QIODevice makes readData() call only when its read buffer is empty. Also data argument points to the user or reserved read buffer area. So, no need in data transfer from read buffer at this point at all. Task-number: QTBUG-41797 Change-Id: Ieb4afdf7eec37fdf288073e4a060e64424f22b9c Reviewed-by: Thiago Macieira (cherry picked from commit 1853579dad1bbb44599314213a1d8a203ecae1c9) Reviewed-by: Alex Trotsenko Reviewed-by: Oswald Buddenhagen --- src/network/ssl/qsslsocket.cpp | 16 ++++++---------- 1 file changed, 6 insertions(+), 10 deletions(-) (limited to 'src/network') diff --git a/src/network/ssl/qsslsocket.cpp b/src/network/ssl/qsslsocket.cpp index 27b085ddbd..8887f478dd 100644 --- a/src/network/ssl/qsslsocket.cpp +++ b/src/network/ssl/qsslsocket.cpp @@ -1908,18 +1908,14 @@ qint64 QSslSocket::readData(char *data, qint64 maxlen) if (d->mode == UnencryptedMode && !d->autoStartHandshake) { readBytes = d->plainSocket->read(data, maxlen); - } else { - int bytesToRead = qMin(maxlen, d->buffer.size()); - readBytes = d->buffer.read(data, bytesToRead); - } - #ifdef QSSLSOCKET_DEBUG - qDebug() << "QSslSocket::readData(" << (void *)data << ',' << maxlen << ") ==" << readBytes; + qDebug() << "QSslSocket::readData(" << (void *)data << ',' << maxlen << ") ==" + << readBytes; #endif - - // possibly trigger another transmit() to decrypt more data from the socket - if (d->buffer.isEmpty() && d->plainSocket->bytesAvailable()) { - QMetaObject::invokeMethod(this, "_q_flushReadBuffer", Qt::QueuedConnection); + } else { + // possibly trigger another transmit() to decrypt more data from the socket + if (d->plainSocket->bytesAvailable()) + QMetaObject::invokeMethod(this, "_q_flushReadBuffer", Qt::QueuedConnection); } return readBytes; -- cgit v1.2.3 From 8ce93376cd6aa1fac0eeacbd804bc211b0814c91 Mon Sep 17 00:00:00 2001 From: Kai Koehne Date: Tue, 28 Oct 2014 16:56:05 +0100 Subject: OS X and iOS: Search for openssl libs in .app/Contents/Frameworks This allows apps to ship their own openssl libraries inside the application bundle. The change consists of two parts: First, adding /Contents/Frameworks to the alternative search paths. Second, disabling the preemtive check for libssl.dylib, libcrypto.dylib in the system paths: The system's /usr/lib/libssl.dylib, /usr/lib/libcrypto.dylib will still be picked up as a fallback in the alternative search paths, but only after .app/Contents/Frameworks have been inspected. [ChangeLog][QtNetwork][QSsl] On OS X and iOS, openssl dylib's are picked up from the 'Frameworks' directory of the app bundle. Change-Id: I982930f4a6cf5e0114c04ecbc87f27e54ba8bb88 Reviewed-by: Jake Petroules --- src/network/ssl/qsslsocket_openssl_symbols.cpp | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) (limited to 'src/network') diff --git a/src/network/ssl/qsslsocket_openssl_symbols.cpp b/src/network/ssl/qsslsocket_openssl_symbols.cpp index f4562cdb21..71b8237e03 100644 --- a/src/network/ssl/qsslsocket_openssl_symbols.cpp +++ b/src/network/ssl/qsslsocket_openssl_symbols.cpp @@ -63,6 +63,9 @@ #if defined(Q_OS_LINUX) && !defined(Q_OS_ANDROID) #include #endif +#ifdef Q_OS_DARWIN +#include "private/qcore_mac_p.h" +#endif #include @@ -452,6 +455,15 @@ static QStringList libraryPathList() # ifdef Q_OS_DARWIN paths = QString::fromLatin1(qgetenv("DYLD_LIBRARY_PATH")) .split(QLatin1Char(':'), QString::SkipEmptyParts); + + // search in .app/Contents/Frameworks + UInt32 packageType; + CFBundleGetPackageInfo(CFBundleGetMainBundle(), &packageType, NULL); + if (packageType == FOUR_CHAR_CODE('APPL')) { + QUrl bundleUrl = QUrl::fromCFURL(QCFType(CFBundleCopyBundleURL(CFBundleGetMainBundle()))); + QUrl frameworksUrl = QUrl::fromCFURL(QCFType(CFBundleCopyPrivateFrameworksURL(CFBundleGetMainBundle()))); + paths << bundleUrl.resolved(frameworksUrl).path(); + } # else paths = QString::fromLatin1(qgetenv("LD_LIBRARY_PATH")) .split(QLatin1Char(':'), QString::SkipEmptyParts); @@ -601,7 +613,13 @@ static QPair loadOpenSsl() } #endif +#ifndef Q_OS_DARWIN // second attempt: find the development files libssl.so and libcrypto.so + // + // disabled on OS X/iOS: + // OS X's /usr/lib/libssl.dylib, /usr/lib/libcrypto.dylib will be picked up in the third + // attempt, _after_ /Contents/Frameworks has been searched. + // iOS does not ship a system libssl.dylib, libcrypto.dylib in the first place. libssl->setFileNameAndVersion(QLatin1String("ssl"), -1); libcrypto->setFileNameAndVersion(QLatin1String("crypto"), -1); if (libcrypto->load() && libssl->load()) { @@ -611,6 +629,7 @@ static QPair loadOpenSsl() libssl->unload(); libcrypto->unload(); } +#endif // third attempt: loop on the most common library paths and find libssl QStringList sslList = findAllLibSsl(); -- cgit v1.2.3 From db31a5009af21719c040b7f203c32fd821ae011e Mon Sep 17 00:00:00 2001 From: Oliver Wolff Date: Tue, 11 Nov 2014 14:17:27 +0100 Subject: WinRT: Fill data in QUdpSocket::readDatagram There was still a TODO left in there and the data was never filled. In addition to filling the data, some pointer checks for addr and port were added. Task-number: QTBUG-42244 Change-Id: I8e358b5544edcdb4077a52f433e4bc17d92014ce Reviewed-by: Andrew Knight --- src/network/socket/qnativesocketengine_winrt.cpp | 92 ++++++++++++------------ src/network/socket/qnativesocketengine_winrt_p.h | 9 ++- 2 files changed, 56 insertions(+), 45 deletions(-) (limited to 'src/network') diff --git a/src/network/socket/qnativesocketengine_winrt.cpp b/src/network/socket/qnativesocketengine_winrt.cpp index c3be3eb408..cacfe11fea 100644 --- a/src/network/socket/qnativesocketengine_winrt.cpp +++ b/src/network/socket/qnativesocketengine_winrt.cpp @@ -529,41 +529,27 @@ qint64 QNativeSocketEngine::write(const char *data, qint64 len) qint64 QNativeSocketEngine::readDatagram(char *data, qint64 maxlen, QHostAddress *addr, quint16 *port) { Q_D(QNativeSocketEngine); - if (d->socketType != QAbstractSocket::UdpSocket) + if (d->socketType != QAbstractSocket::UdpSocket || d->pendingDatagrams.isEmpty()) return -1; - QHostAddress returnAddress; - quint16 returnPort; - - for (int i = 0; i < d->pendingDatagrams.size(); ++i) { - IDatagramSocketMessageReceivedEventArgs *arg = d->pendingDatagrams.at(i); - ComPtr remoteHost; - HString remoteHostString; - HString remotePort; - arg->get_RemoteAddress(&remoteHost); - arg->get_RemotePort(remotePort.GetAddressOf()); - remoteHost->get_CanonicalName(remoteHostString.GetAddressOf()); - returnAddress.setAddress(qt_QStringFromHString(remoteHostString)); - returnPort = qt_QStringFromHString(remotePort).toInt(); - ComPtr reader; - arg->GetDataReader(&reader); - if (!reader) - continue; - - BYTE buffer[1024]; - reader->ReadBytes(maxlen, buffer); - *addr = returnAddress; - *port = returnPort; - arg = d->pendingDatagrams.takeFirst(); - arg->Release(); - - // TODO: fill data - Q_UNUSED(data); - --i; - return maxlen; + WinRtDatagram datagram = d->pendingDatagrams.takeFirst(); + if (addr) + *addr = datagram.address; + + if (port) + *port = datagram.port; + + QByteArray readOrigin; + // Do not read the whole datagram. Put the rest of it back into the "queue" + if (maxlen < datagram.data.length()) { + QByteArray readOrigin = datagram.data.left(maxlen); + datagram.data = datagram.data.remove(0, maxlen); + d->pendingDatagrams.prepend(datagram); + } else { + readOrigin = datagram.data; } - - return -1; + strcpy(data, readOrigin); + return readOrigin.length(); } qint64 QNativeSocketEngine::writeDatagram(const char *data, qint64 len, const QHostAddress &addr, quint16 port) @@ -609,17 +595,10 @@ bool QNativeSocketEngine::hasPendingDatagrams() const qint64 QNativeSocketEngine::pendingDatagramSize() const { Q_D(const QNativeSocketEngine); - qint64 ret = 0; - foreach (IDatagramSocketMessageReceivedEventArgs *arg, d->pendingDatagrams) { - ComPtr reader; - UINT32 unconsumedBufferLength; - arg->GetDataReader(&reader); - if (!reader) - return -1; - reader->get_UnconsumedBufferLength(&unconsumedBufferLength); - ret += unconsumedBufferLength; - } - return ret; + if (d->pendingDatagrams.isEmpty()) + return -1; + + return d->pendingDatagrams.at(0).data.length(); } qint64 QNativeSocketEngine::bytesToWrite() const @@ -1236,7 +1215,32 @@ HRESULT QNativeSocketEnginePrivate::handleNewDatagram(IDatagramSocket *socket, I { Q_Q(QNativeSocketEngine); Q_UNUSED(socket); - pendingDatagrams.append(args); + + WinRtDatagram datagram; + QHostAddress returnAddress; + ComPtr remoteHost; + HRESULT hr = args->get_RemoteAddress(&remoteHost); + RETURN_OK_IF_FAILED("Could not obtain remote host"); + HString remoteHostString; + remoteHost->get_CanonicalName(remoteHostString.GetAddressOf()); + RETURN_OK_IF_FAILED("Could not obtain remote host's canonical name"); + returnAddress.setAddress(qt_QStringFromHString(remoteHostString)); + datagram.address = returnAddress; + HString remotePort; + hr = args->get_RemotePort(remotePort.GetAddressOf()); + RETURN_OK_IF_FAILED("Could not obtain remote port"); + datagram.port = qt_QStringFromHString(remotePort).toInt(); + + ComPtr reader; + hr = args->GetDataReader(&reader); + RETURN_OK_IF_FAILED("Could not obtain data reader"); + quint32 length; + hr = reader->get_UnconsumedBufferLength(&length); + RETURN_OK_IF_FAILED("Could not obtain unconsumed buffer length"); + datagram.data.resize(length); + hr = reader->ReadBytes(length, reinterpret_cast(datagram.data.data())); + RETURN_OK_IF_FAILED("Could not read datagram"); + pendingDatagrams.append(datagram); emit q->readReady(); return S_OK; diff --git a/src/network/socket/qnativesocketengine_winrt_p.h b/src/network/socket/qnativesocketengine_winrt_p.h index 7652a09b17..716403097d 100644 --- a/src/network/socket/qnativesocketengine_winrt_p.h +++ b/src/network/socket/qnativesocketengine_winrt_p.h @@ -55,6 +55,12 @@ QT_BEGIN_NAMESPACE class QNativeSocketEnginePrivate; +struct WinRtDatagram { + QByteArray data; + int port; + QHostAddress address; +}; + class Q_AUTOTEST_EXPORT QNativeSocketEngine : public QAbstractSocketEngine { Q_OBJECT @@ -197,7 +203,8 @@ private: Microsoft::WRL::ComPtr connectOp; QBuffer readBytes; QMutex readMutex; - QList pendingDatagrams; + + QList pendingDatagrams; QList pendingConnections; QList currentConnections; QEventLoop eventLoop; -- cgit v1.2.3 From e37a69252eb7c564fd888361b3672cfc31eca949 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9=20Klitzing?= Date: Mon, 17 Nov 2014 18:41:05 +0100 Subject: Fix memcpy with incorrect destination Variable dsa is assigned in this block with q_DSA_new instead of rsa. So this should be the destination of memcpy. Change-Id: Id5a41d99f1606bf525ad5f819bbc06bb1235bf5b Reviewed-by: Richard J. Moore --- src/network/ssl/qsslkey_openssl.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'src/network') diff --git a/src/network/ssl/qsslkey_openssl.cpp b/src/network/ssl/qsslkey_openssl.cpp index 6b0fa954eb..e4d30ff229 100644 --- a/src/network/ssl/qsslkey_openssl.cpp +++ b/src/network/ssl/qsslkey_openssl.cpp @@ -95,7 +95,7 @@ bool QSslKeyPrivate::fromEVP_PKEY(EVP_PKEY *pkey) type = QSsl::PrivateKey; dsa = q_DSA_new(); - memcpy(rsa, q_EVP_PKEY_get1_DSA(pkey), sizeof(DSA)); + memcpy(dsa, q_EVP_PKEY_get1_DSA(pkey), sizeof(DSA)); return true; } -- cgit v1.2.3 From ccd4da392c366dd4f7f71fa3b8aeddde1b3bc169 Mon Sep 17 00:00:00 2001 From: Allan Sandfeld Jensen Date: Wed, 12 Nov 2014 16:58:15 +0100 Subject: Do not force a content-type on POST request with no content While a POST request with no body may be a pointless thing it does happen on many websites. Currently this causes QtNetwork to print a warning to the console and set an invalid content-type. This patch allows the content-type to be absent when content is. Task-number: QTBUG-42479 Change-Id: Ia84c89147d2469a9421b9694d062c797987b3194 Reviewed-by: Jocelyn Turcotte Reviewed-by: Thiago Macieira --- src/network/access/qhttpnetworkrequest.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'src/network') diff --git a/src/network/access/qhttpnetworkrequest.cpp b/src/network/access/qhttpnetworkrequest.cpp index f50a79b061..66f093e490 100644 --- a/src/network/access/qhttpnetworkrequest.cpp +++ b/src/network/access/qhttpnetworkrequest.cpp @@ -151,7 +151,7 @@ QByteArray QHttpNetworkRequestPrivate::header(const QHttpNetworkRequest &request } if (request.d->operation == QHttpNetworkRequest::Post) { // add content type, if not set in the request - if (request.headerField("content-type").isEmpty()) { + if (request.headerField("content-type").isEmpty() && ((request.d->uploadByteDevice && request.d->uploadByteDevice->size() > 0) || request.d->url.hasQuery())) { //Content-Type is mandatory. We can't say anything about the encoding, but x-www-form-urlencoded is the most likely to work. //This warning indicates a bug in application code not setting a required header. //Note that if using QHttpMultipart, the content-type is set in QNetworkAccessManagerPrivate::prepareMultipart already -- cgit v1.2.3 From c6e21eb673a7c3e4abcf90bd3bad1ec0890d6b5f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9=20Klitzing?= Date: Fri, 14 Nov 2014 18:01:17 +0100 Subject: SSL: Fix sslConfiguration in encrypted slot If "encrypted" signal is fired the configuration of ssl is not updated. If someone wants to perform additional checks on the certificate chain it is now possible to use peerCertificate and peerCertificateChain. Change-Id: Id5136a8c52727562c36028eaef721cc9ad86619d Task-number: QTBUG-40401 Reviewed-by: Richard J. Moore --- src/network/access/qhttpthreaddelegate.cpp | 1 + 1 file changed, 1 insertion(+) (limited to 'src/network') diff --git a/src/network/access/qhttpthreaddelegate.cpp b/src/network/access/qhttpthreaddelegate.cpp index 524042add6..4e1d24280b 100644 --- a/src/network/access/qhttpthreaddelegate.cpp +++ b/src/network/access/qhttpthreaddelegate.cpp @@ -644,6 +644,7 @@ void QHttpThreadDelegate::encryptedSlot() if (!httpReply) return; + emit sslConfigurationChanged(httpReply->sslConfiguration()); emit encrypted(); } -- cgit v1.2.3