diff options
author | Javier <dev.git@javispedro.com> | 2015-03-31 01:42:07 +0200 |
---|---|---|
committer | Javier <dev.git@javispedro.com> | 2015-03-31 01:42:07 +0200 |
commit | 1a72dfb10bb0189e842c754b3550795538a79493 (patch) | |
tree | 3fc85e627b94138c7db689779b555a14e138600c /saltoqd/toqconnection.cpp | |
parent | 459da42728aa88dfcd0128319984de567384d65e (diff) | |
download | saltoq-1a72dfb10bb0189e842c754b3550795538a79493.tar.gz saltoq-1a72dfb10bb0189e842c754b3550795538a79493.zip |
allow non-json message payloads
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() |