diff options
Diffstat (limited to 'saltoqd/toqconnection.cpp')
-rw-r--r-- | saltoqd/toqconnection.cpp | 39 |
1 files changed, 27 insertions, 12 deletions
diff --git a/saltoqd/toqconnection.cpp b/saltoqd/toqconnection.cpp index 6c1035e..8ffd02f 100644 --- a/saltoqd/toqconnection.cpp +++ b/saltoqd/toqconnection.cpp @@ -21,6 +21,26 @@ ToqConnection::ToqConnection(QObject *parent) : _reconnectTimer->setSingleShot(true); } +ToqConnection::Message::Message(Endpoint source, Endpoint destination, quint16 transactionId, quint32 type, const QJsonDocument &payload) + : source(source), destination(destination), transactionId(transactionId), type(type), + payload(payload.toJson(QJsonDocument::Compact)) +{ + +} + +QJsonDocument ToqConnection::Message::toJson() const +{ + QJsonDocument doc; + QJsonParseError error; + + doc = QJsonDocument::fromJson(payload, &error); + if (error.error) { + qWarning() << "Failure while parsing message JSON payload: " << error.errorString(); + } + + return doc; +} + QString ToqConnection::nameOfEndpoint(Endpoint ep) { int index = staticMetaObject.indexOfEnumerator("CoreEndpoints"); @@ -96,32 +116,27 @@ ToqConnection::Message ToqConnection::unpackMessage(const QByteArray &data) msg.destination = header[1]; msg.transactionId = qFromBigEndian<quint16>(&header[4]); msg.type = qFromBigEndian<quint32>(&header[6]); - - if (!data.isEmpty()) { - QJsonParseError error; - msg.payload = QJsonDocument::fromJson(data.mid(HEADER_LENGTH), &error); - if (error.error) { - qWarning() << "Failure while parsing message JSON payload: " << error.errorString(); - } - } + msg.payload = data.mid(HEADER_LENGTH); return msg; } QByteArray ToqConnection::packMessage(const Message &msg) { - QByteArray payload = msg.payload.toJson(QJsonDocument::Compact); uchar header[HEADER_LENGTH]; header[0] = msg.source; header[1] = msg.destination; - qToBigEndian<quint16>(payload.length() + 4, &header[2]); + qToBigEndian<quint16>(msg.payload.length() + 4, &header[2]); qToBigEndian<quint16>(msg.transactionId, &header[4]); qToBigEndian<quint32>(msg.type, &header[6]); - payload.prepend(reinterpret_cast<char*>(&header[0]), HEADER_LENGTH); + QByteArray data; + data.reserve(HEADER_LENGTH + msg.payload.length()); + data.append(reinterpret_cast<char*>(&header[0]), HEADER_LENGTH); + data.append(msg.payload); - return payload; + return data; } void ToqConnection::tryConnect() |