diff options
Diffstat (limited to 'qdb/hostmessages.cpp')
-rw-r--r-- | qdb/hostmessages.cpp | 124 |
1 files changed, 124 insertions, 0 deletions
diff --git a/qdb/hostmessages.cpp b/qdb/hostmessages.cpp new file mode 100644 index 0000000..9fda389 --- /dev/null +++ b/qdb/hostmessages.cpp @@ -0,0 +1,124 @@ +/****************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Debug Bridge. +** +** $QT_BEGIN_LICENSE:COMM$ +** +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** $QT_END_LICENSE$ +** +******************************************************************************/ +#include "hostmessages.h" + +const QString responseField = "response"; +const QString requestField = "request"; +const QString versionField = "_version"; + +void setVersionField(QJsonObject &obj) +{ + obj[versionField] = qdbHostMessageVersion; +} + +bool checkHostMessageVersion(const QJsonObject &obj) +{ + return obj[versionField].toInt() == qdbHostMessageVersion; +} + +QByteArray createRequest(const RequestType &type) +{ + QJsonObject obj; + setVersionField(obj); + obj[requestField] = requestTypeString(type); + return QJsonDocument{obj}.toJson(QJsonDocument::Compact).append('\n'); +} + +RequestType requestType(const QJsonObject &obj) +{ + const auto fieldValue = obj[requestField]; + if (fieldValue == requestTypeString(RequestType::Devices)) + return RequestType::Devices; + if (fieldValue == requestTypeString(RequestType::WatchDevices)) + return RequestType::WatchDevices; + if (fieldValue == requestTypeString(RequestType::StopServer)) + return RequestType::StopServer; + + return RequestType::Unknown; +} + +QString requestTypeString(const RequestType &type) +{ + switch (type) { + case RequestType::Devices: + return "devices"; + case RequestType::WatchDevices: + return "watch-devices"; + case RequestType::StopServer: + return "stop-server"; + case RequestType::Unknown: + break; + } + qFatal("Tried to use unknown request type as a value in requestTypeString"); +} + +QJsonObject initializeResponse(const ResponseType &type) +{ + QJsonObject obj; + setVersionField(obj); + obj[responseField] = responseTypeString(type); + return obj; +} + +ResponseType responseType(const QJsonObject &obj) +{ + const auto fieldValue = obj[responseField]; + if (fieldValue == responseTypeString(ResponseType::Devices)) + return ResponseType::Devices; + if (fieldValue == responseTypeString(ResponseType::NewDevice)) + return ResponseType::NewDevice; + if (fieldValue == responseTypeString(ResponseType::DisconnectedDevice)) + return ResponseType::DisconnectedDevice; + if (fieldValue == responseTypeString(ResponseType::Stopping)) + return ResponseType::Stopping; + if (fieldValue == responseTypeString(ResponseType::InvalidRequest)) + return ResponseType::InvalidRequest; + if (fieldValue == responseTypeString(ResponseType::UnsupportedVersion)) + return ResponseType::UnsupportedVersion; + + return ResponseType::Unknown; +} + +QString responseTypeString(const ResponseType &type) +{ + switch (type) { + case ResponseType::Devices: + return "devices"; + case ResponseType::NewDevice: + return "new-device"; + case ResponseType::DisconnectedDevice: + return "disconnected-device"; + case ResponseType::Stopping: + return "stopping"; + case ResponseType::InvalidRequest: + return "invalid-request"; + case ResponseType::UnsupportedVersion: + return "unsupported-version"; + case ResponseType::Unknown: + break; + } + qFatal("Tried to use unknown response type as a value in responseTypeString"); +} + +QByteArray serialiseResponse(const QJsonObject &obj) +{ + return QJsonDocument{obj}.toJson(QJsonDocument::Compact).append('\n'); +} |