diff options
Diffstat (limited to 'src/network')
-rw-r--r-- | src/network/access/qhttp2connection.cpp | 13 | ||||
-rw-r--r-- | src/network/android/REUSE.toml | 2 | ||||
-rw-r--r-- | src/network/kernel/qnetworkproxy_android.cpp | 3 | ||||
-rw-r--r-- | src/network/socket/qnativesocketengine.cpp | 13 | ||||
-rw-r--r-- | src/network/socket/qnativesocketengine_unix.cpp | 6 |
5 files changed, 27 insertions, 10 deletions
diff --git a/src/network/access/qhttp2connection.cpp b/src/network/access/qhttp2connection.cpp index 6f8a318dae0..9b339a19a24 100644 --- a/src/network/access/qhttp2connection.cpp +++ b/src/network/access/qhttp2connection.cpp @@ -663,8 +663,10 @@ void QHttp2Stream::handleDATA(const Frame &inboundFrame) { QHttp2Connection *connection = getConnection(); - qCDebug(qHttp2ConnectionLog, "[%p] stream %u, received DATA frame with payload of %u bytes", - connection, m_streamID, inboundFrame.payloadSize()); + qCDebug(qHttp2ConnectionLog, + "[%p] stream %u, received DATA frame with payload of %u bytes, closing stream? %s", + connection, m_streamID, inboundFrame.payloadSize(), + inboundFrame.flags().testFlag(Http2::FrameFlag::END_STREAM) ? "yes" : "no"); // RFC 9113, 6.1: If a DATA frame is received whose stream is not in the "open" or "half-closed // (local)" state, the recipient MUST respond with a stream error (Section 5.4.2) of type @@ -1426,7 +1428,8 @@ void QHttp2Connection::handleHEADERS() Q_ASSERT(inboundFrame.type() == FrameType::HEADERS); const auto streamID = inboundFrame.streamID(); - qCDebug(qHttp2ConnectionLog, "[%p] Received HEADERS frame on stream %d", this, streamID); + qCDebug(qHttp2ConnectionLog, "[%p] Received HEADERS frame on stream %d, end stream? %s", this, + streamID, inboundFrame.flags().testFlag(Http2::FrameFlag::END_STREAM) ? "yes" : "no"); // RFC 9113, 6.2: If a HEADERS frame is received whose Stream Identifier field is 0x00, the // recipient MUST respond with a connection error. @@ -1849,6 +1852,10 @@ void QHttp2Connection::handleWINDOW_UPDATE() void QHttp2Connection::handleCONTINUATION() { Q_ASSERT(inboundFrame.type() == FrameType::CONTINUATION); + auto streamID = inboundFrame.streamID(); + qCDebug(qHttp2ConnectionLog, + "[%p] Received CONTINUATION frame on stream %d, end stream? %s", this, streamID, + inboundFrame.flags().testFlag(Http2::FrameFlag::END_STREAM) ? "yes" : "no"); if (continuedFrames.empty()) return connectionError(PROTOCOL_ERROR, "CONTINUATION without a preceding HEADERS or PUSH_PROMISE"); diff --git a/src/network/android/REUSE.toml b/src/network/android/REUSE.toml index e46bfebe93c..8c759f3eee7 100644 --- a/src/network/android/REUSE.toml +++ b/src/network/android/REUSE.toml @@ -4,5 +4,5 @@ version = 1 path = ["jar/build.gradle", "jar/settings.gradle"] precedence = "closest" comment = "double check" -SPDX-FileCopyrightText = "Copyright (C) 2024 The Qt Company Ltd." +SPDX-FileCopyrightText = "Copyright (C) The Qt Company Ltd." SPDX-License-Identifier = "LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only" diff --git a/src/network/kernel/qnetworkproxy_android.cpp b/src/network/kernel/qnetworkproxy_android.cpp index d5b56bba865..2261572fea7 100644 --- a/src/network/kernel/qnetworkproxy_android.cpp +++ b/src/network/kernel/qnetworkproxy_android.cpp @@ -3,6 +3,7 @@ #include "qnetworkproxy.h" +#include <QtCore/qapplicationstatic.h> #include <QtCore/qcoreapplication_platform.h> #include <QtCore/qjnienvironment.h> #include <QtCore/qjniobject.h> @@ -21,7 +22,7 @@ public: using namespace QNativeInterface; using namespace QtJniTypes; -Q_GLOBAL_STATIC(ProxyInfoObject, proxyInfoInstance) +Q_APPLICATION_STATIC(ProxyInfoObject, proxyInfoInstance) Q_DECLARE_JNI_CLASS(QtNetwork, "org/qtproject/qt/android/network/QtNetwork") Q_DECLARE_JNI_CLASS(ProxyInfo, "android/net/ProxyInfo") diff --git a/src/network/socket/qnativesocketengine.cpp b/src/network/socket/qnativesocketengine.cpp index 4c8b3ebf3f8..ca5fb50f086 100644 --- a/src/network/socket/qnativesocketengine.cpp +++ b/src/network/socket/qnativesocketengine.cpp @@ -429,11 +429,14 @@ bool QNativeSocketEngine::initialize(QAbstractSocket::SocketType socketType, QAb if (socketType == QAbstractSocket::UdpSocket) { // Set the broadcasting flag if it's a UDP socket. - if (!setOption(BroadcastSocketOption, 1)) { - d->setError(QAbstractSocket::UnsupportedSocketOperationError, - QNativeSocketEnginePrivate::BroadcastingInitFailedErrorString); - close(); - return false; + // IPv6 does not support broadcast — only set option for IPv4 + if (protocol == QAbstractSocket::IPv4Protocol) { + if (!setOption(BroadcastSocketOption, 1)) { + d->setError(QAbstractSocket::UnsupportedSocketOperationError, + QNativeSocketEnginePrivate::BroadcastingInitFailedErrorString); + close(); + return false; + } } // Set some extra flags that are interesting to us, but accept failure diff --git a/src/network/socket/qnativesocketengine_unix.cpp b/src/network/socket/qnativesocketengine_unix.cpp index 6949eec9560..b78d2829704 100644 --- a/src/network/socket/qnativesocketengine_unix.cpp +++ b/src/network/socket/qnativesocketengine_unix.cpp @@ -822,6 +822,12 @@ qint64 QNativeSocketEnginePrivate::nativePendingDatagramSize() const recvResult = getsockopt(socketDescriptor, SOL_SOCKET, SO_NREAD, &value, &valuelen); if (recvResult != -1) recvResult = value; +#elif defined(Q_OS_VXWORKS) + // VxWorks: use ioctl(FIONREAD) to query the number of bytes available + int available = 0; + int ioctlResult = ::ioctl(socketDescriptor, FIONREAD, &available); + if (ioctlResult != -1) + recvResult = available; #else // We need to grow the buffer to fit the entire datagram. // We start at 1500 bytes (the MTU for Ethernet V2), which should catch |