diff options
Diffstat (limited to 'src/qml/debugger')
-rw-r--r-- | src/qml/debugger/debugger.pri | 6 | ||||
-rw-r--r-- | src/qml/debugger/qpacket.cpp | 147 | ||||
-rw-r--r-- | src/qml/debugger/qpacket_p.h | 76 | ||||
-rw-r--r-- | src/qml/debugger/qqmldebugservice.cpp | 26 | ||||
-rw-r--r-- | src/qml/debugger/qqmldebugservice_p.h | 11 |
5 files changed, 227 insertions, 39 deletions
diff --git a/src/qml/debugger/debugger.pri b/src/qml/debugger/debugger.pri index 30a44eedd1..62b375f72f 100644 --- a/src/qml/debugger/debugger.pri +++ b/src/qml/debugger/debugger.pri @@ -6,7 +6,8 @@ SOURCES += \ $$PWD/qqmldebugservice.cpp \ $$PWD/qqmldebugserviceinterfaces.cpp \ $$PWD/qqmlabstractprofileradapter.cpp \ - $$PWD/qqmlprofiler.cpp + $$PWD/qqmlprofiler.cpp \ + $$PWD/qpacket.cpp HEADERS += \ $$PWD/qqmldebugconnector_p.h \ @@ -18,6 +19,7 @@ HEADERS += \ $$PWD/qqmldebug.h \ $$PWD/qqmlprofilerdefinitions_p.h \ $$PWD/qqmlabstractprofileradapter_p.h \ - $$PWD/qqmlprofiler_p.h + $$PWD/qqmlprofiler_p.h \ + $$PWD/qpacket_p.h INCLUDEPATH += $$PWD diff --git a/src/qml/debugger/qpacket.cpp b/src/qml/debugger/qpacket.cpp new file mode 100644 index 0000000000..30f2191689 --- /dev/null +++ b/src/qml/debugger/qpacket.cpp @@ -0,0 +1,147 @@ +/**************************************************************************** +** +** Copyright (C) 2015 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the QtQml module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL21$ +** 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. +** +** 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. +** +** 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. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "qpacket_p.h" + +QT_BEGIN_NAMESPACE + +/*! + \class QPacket + \internal + + \brief The QPacket class encapsulates an unfragmentable packet of data to be + transmitted by QPacketProtocol. + + The QPacket class works together with QPacketProtocol to make it simple to + send arbitrary sized data "packets" across fragmented transports such as TCP + and UDP. + + QPacket provides a QDataStream interface to an unfragmentable packet. + Applications should construct a QPacket, propagate it with data and then + transmit it over a QPacketProtocol instance. For example: + \code + QPacketProtocol protocol(...); + + QPacket myPacket; + myPacket << "Hello world!" << 123; + protocol.send(myPacket); + \endcode + + As long as both ends of the connection are using the QPacketProtocol class, + the data within this packet will be delivered unfragmented at the other end, + ready for extraction. + + \code + QByteArray greeting; + int count; + + QPacket myPacket = protocol.read(); + + myPacket >> greeting >> count; + \endcode + + Only packets constructed from raw byte arrays may be read from. Empty QPacket + instances are for transmission only and are considered "write only". Attempting + to read data from them will result in undefined behavior. + + \ingroup io + \sa QPacketProtocol + */ + +int QPacket::s_dataStreamVersion = QDataStream::Qt_4_7; + +void QPacket::setDataStreamVersion(int dataStreamVersion) +{ + s_dataStreamVersion = dataStreamVersion; +} + +int QPacket::dataStreamVersion() +{ + return s_dataStreamVersion; +} + +/*! + Constructs an empty write-only packet. + */ +QPacket::QPacket() +{ + init(QIODevice::WriteOnly); +} + +/*! + Creates a copy of \a other. The initial stream positions are shared, but the + two packets are otherwise independent. + */ +QPacket::QPacket(const QPacket &other) : QDataStream() +{ + assign(other); +} + +QPacket &QPacket::operator=(const QPacket &other) +{ + if (this != &other) { + buf.close(); + assign(other); + } + return *this; +} + +QPacket::QPacket(const QByteArray &data) +{ + buf.setData(data); + init(QIODevice::ReadOnly); +} + +/*! + Returns raw packet data. + */ +QByteArray QPacket::data() const +{ + return buf.data(); +} + +void QPacket::init(QIODevice::OpenMode mode) +{ + buf.open(mode); + setDevice(&buf); + setVersion(s_dataStreamVersion); +} + +void QPacket::assign(const QPacket &other) +{ + buf.setData(other.buf.data()); + init(other.buf.openMode()); + buf.seek(other.buf.pos()); +} + +QT_END_NAMESPACE diff --git a/src/qml/debugger/qpacket_p.h b/src/qml/debugger/qpacket_p.h new file mode 100644 index 0000000000..759ed25145 --- /dev/null +++ b/src/qml/debugger/qpacket_p.h @@ -0,0 +1,76 @@ +/**************************************************************************** +** +** Copyright (C) 2015 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the QtQml module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL21$ +** 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. +** +** 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. +** +** 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. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef QPACKET_P_H +#define QPACKET_P_H + +#include <QtCore/qdatastream.h> +#include <QtCore/qbuffer.h> +#include <QtQml/private/qtqmlglobal_p.h> + +// +// W A R N I N G +// ------------- +// +// This file is not part of the Qt API. It exists purely as an +// implementation detail. This header file may change from version to +// version without notice, or even be removed. +// +// We mean it. +// + +QT_BEGIN_NAMESPACE + +class Q_QML_PRIVATE_EXPORT QPacket : public QDataStream +{ +public: + QPacket(); + QPacket(const QPacket &other); + explicit QPacket(const QByteArray &ba); + QPacket &operator=(const QPacket &other); + + QByteArray data() const; + + static int dataStreamVersion(); + static void setDataStreamVersion(int dataStreamVersion); + +private: + static int s_dataStreamVersion; + void init(QIODevice::OpenMode mode); + void assign(const QPacket &other); + QBuffer buf; +}; + +QT_END_NAMESPACE + +#endif // QPACKET_P_H diff --git a/src/qml/debugger/qqmldebugservice.cpp b/src/qml/debugger/qqmldebugservice.cpp index 0b07f320ec..bbcf67a54b 100644 --- a/src/qml/debugger/qqmldebugservice.cpp +++ b/src/qml/debugger/qqmldebugservice.cpp @@ -200,32 +200,6 @@ void QQmlDebugService::engineRemoved(QQmlEngine *) { } -int QQmlDebugStream::s_dataStreamVersion = QDataStream::Qt_4_7; - -QQmlDebugStream::QQmlDebugStream() - : QDataStream() -{ - setVersion(s_dataStreamVersion); -} - -QQmlDebugStream::QQmlDebugStream(QIODevice *d) - : QDataStream(d) -{ - setVersion(s_dataStreamVersion); -} - -QQmlDebugStream::QQmlDebugStream(QByteArray *ba, QIODevice::OpenMode flags) - : QDataStream(ba, flags) -{ - setVersion(s_dataStreamVersion); -} - -QQmlDebugStream::QQmlDebugStream(const QByteArray &ba) - : QDataStream(ba) -{ - setVersion(s_dataStreamVersion); -} - QT_END_NAMESPACE #include "qqmldebugservice.moc" diff --git a/src/qml/debugger/qqmldebugservice_p.h b/src/qml/debugger/qqmldebugservice_p.h index 3d692133cc..8b58f57349 100644 --- a/src/qml/debugger/qqmldebugservice_p.h +++ b/src/qml/debugger/qqmldebugservice_p.h @@ -96,17 +96,6 @@ signals: void messagesToClient(const QString &name, const QList<QByteArray> &messages); }; -class Q_QML_PRIVATE_EXPORT QQmlDebugStream : public QDataStream -{ -public: - static int s_dataStreamVersion; - - QQmlDebugStream(); - explicit QQmlDebugStream(QIODevice *d); - QQmlDebugStream(QByteArray *ba, QIODevice::OpenMode flags); - QQmlDebugStream(const QByteArray &ba); -}; - QT_END_NAMESPACE #endif // QQMLDEBUGSERVICE_H |