diff --git a/core/networkpacket.cpp b/core/networkpacket.cpp index 82d8c09db..ced10f816 100644 --- a/core/networkpacket.cpp +++ b/core/networkpacket.cpp @@ -71,27 +71,17 @@ void NetworkPacket::createIdentityPacket(NetworkPacket* np) //qCDebug(KDECONNECT_CORE) << "createIdentityPacket" << np->serialize(); } -template -QVariantMap qobject2qvariant(const T* object) -{ - QVariantMap map; - auto metaObject = T::staticMetaObject; - for(int i = metaObject.propertyOffset(); i < metaObject.propertyCount(); ++i) { - QMetaProperty prop = metaObject.property(i); - map.insert(QString::fromLatin1(prop.name()), prop.readOnGadget(object)); - } - - return map; -} - QByteArray NetworkPacket::serialize() const { //Object -> QVariant - QVariantMap variant = qobject2qvariant(this); + QVariantMap variant; + variant.insert(QStringLiteral("id"), m_id); + variant.insert(QStringLiteral("type"), m_type); + variant.insert(QStringLiteral("body"), m_body); - if (!hasPayload()) { - variant.remove(QStringLiteral("payloadSize")); - variant.remove(QStringLiteral("payloadTransferInfo")); + if (hasPayload()) { + variant.insert(QStringLiteral("payloadSize"), m_payloadSize); + variant.insert(QStringLiteral("payloadTransferInfo"), m_payloadTransferInfo); } //QVariant -> json diff --git a/tests/networkpackettests.cpp b/tests/networkpackettests.cpp index 7cad0bf57..e4e8082ab 100644 --- a/tests/networkpackettests.cpp +++ b/tests/networkpackettests.cpp @@ -82,9 +82,10 @@ void NetworkPacketTests::networkPacketIdentityTest() void NetworkPacketTests::networkPacketPayloadTest() { QByteArray json; + NetworkPacket np; // empty package - NetworkPacket np(QStringLiteral("com.test")); + np = NetworkPacket(QStringLiteral("com.test")); json = np.serialize(); qDebug() << json; QVERIFY(!json.contains("\"payloadSize\"")); @@ -93,10 +94,10 @@ void NetworkPacketTests::networkPacketPayloadTest() // package with payload QByteArray buffer("test data"); auto payload = QSharedPointer(new QBuffer(&buffer, this)); - NetworkPacket payloadNp(QStringLiteral("com.test")); - payloadNp.setPayload(payload, buffer.size()); + np = NetworkPacket(QStringLiteral("com.test")); + np.setPayload(payload, buffer.size()); - json = payloadNp.serialize(); + json = np.serialize(); qDebug() << json; QVERIFY(json.contains("\"payloadSize\":9")); QVERIFY(json.contains("\"payloadTransferInfo\"")); @@ -104,13 +105,25 @@ void NetworkPacketTests::networkPacketPayloadTest() // package with empty payload QByteArray emptyBuffer("test data"); auto emptyPayload = QSharedPointer(new QBuffer(&emptyBuffer, this)); - NetworkPacket emptyPayloadNp(QStringLiteral("com.test")); - emptyPayloadNp.setPayload(emptyPayload, 0); + np = NetworkPacket(QStringLiteral("com.test")); + np.setPayload(emptyPayload, 0); - json = emptyPayloadNp.serialize(); + json = np.serialize(); qDebug() << json; QVERIFY(!json.contains("\"payloadSize\"")); QVERIFY(!json.contains("\"payloadTransferInfo\"")); + + // incoming package without payload + np = NetworkPacket(); + QVERIFY(NetworkPacket::unserialize( + "{\"body\":{},\"id\":\"1578136807254\",\"type\":\"com.test\"}\n", &np)); + QVERIFY(!np.hasPayload()); + + // incoming package without payload (but with payload keys) + np = NetworkPacket(); + QVERIFY(NetworkPacket::unserialize( + "{\"body\":{},\"id\":\"1578136807254\",\"payloadSize\":0,\"payloadTransferInfo\":{},\"type\":\"com.test\"}\n", &np)); + QVERIFY(!np.hasPayload()); } void NetworkPacketTests::cleanupTestCase()