diff options
Diffstat (limited to 'src/mqtt/qmqttcontrolpacket.cpp')
-rw-r--r-- | src/mqtt/qmqttcontrolpacket.cpp | 45 |
1 files changed, 39 insertions, 6 deletions
diff --git a/src/mqtt/qmqttcontrolpacket.cpp b/src/mqtt/qmqttcontrolpacket.cpp index 3d0db8d..4eb3663 100644 --- a/src/mqtt/qmqttcontrolpacket.cpp +++ b/src/mqtt/qmqttcontrolpacket.cpp @@ -28,10 +28,14 @@ ******************************************************************************/ #include "qmqttcontrolpacket_p.h" + #include <QtCore/QtEndian> +#include <QtCore/QLoggingCategory> QT_BEGIN_NAMESPACE +Q_DECLARE_LOGGING_CATEGORY(lcMqttClient) + QMqttControlPacket::QMqttControlPacket() { @@ -73,8 +77,14 @@ void QMqttControlPacket::append(quint16 value) { const quint16 msb = qToBigEndian<quint16>(value); const char * msb_c = reinterpret_cast<const char*>(&msb); - m_payload.append(msb_c[0]); - m_payload.append(msb_c[1]); + m_payload.append(msb_c, 2); +} + +void QMqttControlPacket::append(quint32 value) +{ + const quint32 msb = qToBigEndian<quint32>(value); + const char * msb_c = reinterpret_cast<const char*>(&msb); + m_payload.append(msb_c, 4); } void QMqttControlPacket::append(const QByteArray &data) @@ -88,16 +98,40 @@ void QMqttControlPacket::appendRaw(const QByteArray &data) m_payload.append(data); } +void QMqttControlPacket::appendRawVariableInteger(quint32 value) +{ + QByteArray data; + // Add length + if (value > 268435455) + qCDebug(lcMqttClient) << "Attempting to write variable integer overflow."; + do { + quint8 b = value % 128; + value /= 128; + if (value > 0) + b |= 0x80; + data.append(char(b)); + } while (value > 0); + appendRaw(data); +} + QByteArray QMqttControlPacket::serialize() const { // Create ByteArray QByteArray data; // Add Header data.append(char(m_header)); + data.append(serializePayload()); + + return data; +} + +QByteArray QMqttControlPacket::serializePayload() const +{ + QByteArray data; // Add length - quint32 msgSize = m_payload.size(); - if (msgSize > 268435455) // 0xFFFFFF7F - qWarning("Publishing a message bigger than maximum size!"); + quint32 msgSize = quint32(m_payload.size()); + if (msgSize > 268435455) + qCDebug(lcMqttClient) << "Publishing a message bigger than maximum size."; do { quint8 b = msgSize % 128; msgSize /= 128; @@ -107,7 +141,6 @@ QByteArray QMqttControlPacket::serialize() const } while (msgSize > 0); // Add payload data.append(m_payload); - return data; } |