summaryrefslogtreecommitdiff
path: root/saltoqd/toqconnection.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'saltoqd/toqconnection.cpp')
-rw-r--r--saltoqd/toqconnection.cpp39
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()