diff options
Diffstat (limited to 'src/network/access/qspdyprotocolhandler.cpp')
-rw-r--r-- | src/network/access/qspdyprotocolhandler.cpp | 87 |
1 files changed, 42 insertions, 45 deletions
diff --git a/src/network/access/qspdyprotocolhandler.cpp b/src/network/access/qspdyprotocolhandler.cpp index 5f9697ab92..413b03cc22 100644 --- a/src/network/access/qspdyprotocolhandler.cpp +++ b/src/network/access/qspdyprotocolhandler.cpp @@ -1,32 +1,38 @@ /**************************************************************************** ** ** Copyright (C) 2014 BlackBerry Limited. All rights reserved. -** Copyright (C) 2015 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ ** ** This file is part of the QtNetwork module of the Qt Toolkit. ** -** $QT_BEGIN_LICENSE:LGPL21$ +** $QT_BEGIN_LICENSE:LGPL$ ** Commercial License Usage ** Licensees holding valid commercial Qt licenses may use this file in ** accordance with the commercial license agreement provided with the ** Software or, alternatively, in accordance with the terms contained in ** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. ** ** GNU Lesser General Public License Usage ** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 2.1 or version 3 as published by the Free -** Software Foundation and appearing in the file LICENSE.LGPLv21 and -** LICENSE.LGPLv3 included in the packaging of this file. Please review the -** following information to ensure the GNU Lesser General Public License -** requirements will be met: https://www.gnu.org/licenses/lgpl.html and -** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. ** -** As a special exception, The Qt Company gives you certain additional -** rights. These rights are described in The Qt Company LGPL Exception -** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or (at your option) the GNU General +** Public license version 3 or any later version approved by the KDE Free +** Qt Foundation. The licenses are as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-2.0.html and +** https://www.gnu.org/licenses/gpl-3.0.html. ** ** $QT_END_LICENSE$ ** @@ -358,43 +364,43 @@ void QSpdyProtocolHandler::_q_readyRead() static qint16 twoBytesToInt(const char *bytes) { - return qFromBigEndian<qint16>(reinterpret_cast<const uchar *>(bytes)); + return qFromBigEndian<qint16>(bytes); } static qint32 threeBytesToInt(const char *bytes) { - return qFromBigEndian<qint32>(reinterpret_cast<const uchar *>(bytes)) >> 8; + return qFromBigEndian<qint32>(bytes) >> 8; } static qint32 fourBytesToInt(const char *bytes) { - return qFromBigEndian<qint32>(reinterpret_cast<const uchar *>(bytes)); + return qFromBigEndian<qint32>(bytes); } static void appendIntToThreeBytes(char *output, qint32 number) { - qToBigEndian<qint16>(number, reinterpret_cast<uchar *>(output + 1)); - qToBigEndian<qint8>(number >> 16, reinterpret_cast<uchar *>(output)); + qToBigEndian<qint16>(number, output + 1); + qToBigEndian<qint8>(number >> 16, output); } static void appendIntToFourBytes(char *output, qint32 number) { - qToBigEndian<qint32>(number, reinterpret_cast<uchar *>(output)); + qToBigEndian<qint32>(number, output); } static QByteArray intToFourBytes(qint32 number) // ### try to use appendIntToFourBytes where possible { - uchar data[4]; + char data[4]; qToBigEndian<qint32>(number, data); - QByteArray ret(reinterpret_cast<char *>(data), 4); + QByteArray ret(data, 4); return ret; } static QByteArray intToThreeBytes(qint32 number) { - uchar data[4]; + char data[4]; qToBigEndian<qint32>(number << 8, data); - QByteArray ret(reinterpret_cast<char *>(data), 3); + QByteArray ret(data, 3); return ret; } @@ -470,7 +476,7 @@ QByteArray QSpdyProtocolHandler::composeHeader(const QHttpNetworkRequest &reques // calculate additional headers first, because we need to know the size // ### do not partially copy the list, but restrict the set header fields // in QHttpNetworkConnection - QList<QPair<QByteArray, QByteArray> > additionalHeaders; + QVector<QPair<QByteArray, QByteArray> > additionalHeaders; for (int a = 0; a < request.header().count(); ++a) { QByteArray key = request.header().at(a).first; if (key == "Connection" || key == "Host" || key == "Keep-Alive" @@ -601,7 +607,7 @@ void QSpdyProtocolHandler::sendControlFrame(FrameType type, Q_UNUSED(written); // silence -Wunused-variable } -void QSpdyProtocolHandler::sendSYN_STREAM(HttpMessagePair messagePair, +void QSpdyProtocolHandler::sendSYN_STREAM(const HttpMessagePair &messagePair, qint32 streamID, qint32 associatedToStreamID) { QHttpNetworkRequest request = messagePair.first; @@ -866,7 +872,8 @@ void QSpdyProtocolHandler::handleSYN_REPLY(char flags, quint32 /*length*/, const void QSpdyProtocolHandler::parseHttpHeaders(char flags, const QByteArray &frameData) { qint32 streamID = getStreamID(frameData.constData()); - if (!m_inFlightStreams.contains(streamID)) { + const auto it = m_inFlightStreams.constFind(streamID); + if (it == m_inFlightStreams.cend()) { sendRST_STREAM(streamID, RST_STREAM_INVALID_STREAM); return; } @@ -876,7 +883,7 @@ void QSpdyProtocolHandler::parseHttpHeaders(char flags, const QByteArray &frameD QByteArray headerValuePairs = frameData.mid(4); - HttpMessagePair pair = m_inFlightStreams.value(streamID); + HttpMessagePair pair = it.value(); QHttpNetworkReply *httpReply = pair.second; Q_ASSERT(httpReply != 0); @@ -928,19 +935,7 @@ void QSpdyProtocolHandler::parseHttpHeaders(char flags, const QByteArray &frameD } else if (name == "content-length") { httpReply->setContentLength(value.toLongLong()); } else { - if (value.contains('\0')) { - QList<QByteArray> values = value.split('\0'); - QByteArray binder(", "); - if (name == "set-cookie") - binder = "\n"; - value.clear(); - Q_FOREACH (const QByteArray& ivalue, values) { - if (value.isEmpty()) - value = ivalue; - else - value += binder + ivalue; - } - } + value.replace('\0', name == "set-cookie" ? "\n" : ", "); httpReply->setHeaderField(name, value); } } @@ -1146,12 +1141,13 @@ void QSpdyProtocolHandler::handleWINDOW_UPDATE(char /*flags*/, quint32 /*length* qint32 streamID = getStreamID(frameData.constData()); qint32 deltaWindowSize = fourBytesToInt(frameData.constData() + 4); - if (!m_inFlightStreams.contains(streamID)) { + const auto it = m_inFlightStreams.constFind(streamID); + if (it == m_inFlightStreams.cend()) { sendRST_STREAM(streamID, RST_STREAM_INVALID_STREAM); return; } - QHttpNetworkReply *reply = m_inFlightStreams.value(streamID).second; + QHttpNetworkReply *reply = it.value().second; Q_ASSERT(reply); QHttpNetworkReplyPrivate *replyPrivate = reply->d_func(); Q_ASSERT(replyPrivate); @@ -1170,7 +1166,8 @@ void QSpdyProtocolHandler::handleDataFrame(const QByteArray &frameHeaders) Q_ASSERT(frameHeaders.count() >= 8); qint32 streamID = getStreamID(frameHeaders.constData()); - if (!m_inFlightStreams.contains(streamID)) { + const auto it = m_inFlightStreams.constFind(streamID); + if (it == m_inFlightStreams.cend()) { sendRST_STREAM(streamID, RST_STREAM_INVALID_STREAM); return; } @@ -1192,7 +1189,7 @@ void QSpdyProtocolHandler::handleDataFrame(const QByteArray &frameHeaders) m_waitingForCompleteStream = false; } - HttpMessagePair pair = m_inFlightStreams.value(streamID); + HttpMessagePair pair = it.value(); QHttpNetworkRequest httpRequest = pair.first; QHttpNetworkReply *httpReply = pair.second; Q_ASSERT(httpReply != 0); |