1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100
|
// Copyright 2020 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "components/cast_streaming/common/message_serialization.h"
#include <optional>
#include "base/json/json_reader.h"
#include "base/json/json_writer.h"
#include "base/values.h"
namespace cast_streaming {
const char kMirroringNamespace[] = "urn:x-cast:com.google.cast.webrtc";
const char kRemotingNamespace[] = "urn:x-cast:com.google.cast.remoting";
const char kSystemNamespace[] = "urn:x-cast:com.google.cast.system";
const char kInjectNamespace[] = "urn:x-cast:com.google.cast.inject";
const char kMediaNamespace[] = "urn:x-cast:com.google.cast.media";
const char kKeySenderId[] = "senderId";
const char kKeyNamespace[] = "namespace";
const char kKeyData[] = "data";
const char kKeyType[] = "type";
const char kKeyRequestId[] = "requestId";
const char kKeyCode[] = "code";
const char kKeyStatus[] = "status";
const char kValueSystemSenderId[] = "SystemSender";
const char kValueWrapped[] = "WRAPPED";
const char kValueError[] = "ERROR";
const char kValueWrappedError[] = "WRAPPED_ERROR";
const char kValueMediaPlay[] = "PLAY";
const char kValueMediaPause[] = "PAUSE";
const char kValueMediaGetStatus[] = "GET_STATUS";
const char kValueMediaStatus[] = "MEDIA_STATUS";
const char kValueInjectNotSupportedError[] =
R"({"code":"NOT_SUPPORTED","type":"ERROR"})";
const char kInitialConnectMessage[] = R"(
{
"type": "ready",
"activeNamespaces": [
"urn:x-cast:com.google.cast.webrtc",
"urn:x-cast:com.google.cast.remoting",
"urn:x-cast:com.google.cast.inject",
"urn:x-cast:com.google.cast.media"
],
"version": "2.0.0",
"messagesVersion": "1.0"
}
)";
bool DeserializeCastMessage(std::string_view buffer,
std::string* sender_id,
std::string* message_namespace,
std::string* message) {
std::optional<base::Value::Dict> converted_dict =
base::JSONReader::ReadDict(buffer);
if (!converted_dict) {
return false;
}
const std::string* sender_id_value = converted_dict->FindString(kKeySenderId);
if (!sender_id_value) {
return false;
}
*sender_id = *sender_id_value;
const std::string* message_namespace_value =
converted_dict->FindString(kKeyNamespace);
if (!message_namespace_value) {
return false;
}
*message_namespace = *message_namespace_value;
const std::string* message_value = converted_dict->FindString(kKeyData);
if (!message_value) {
return false;
}
*message = *message_value;
return true;
}
std::string SerializeCastMessage(const std::string& sender_id,
const std::string& message_namespace,
const std::string& message) {
base::Value::Dict value;
value.Set(kKeyNamespace, message_namespace);
value.Set(kKeySenderId, sender_id);
value.Set(kKeyData, message);
std::string json_message;
CHECK(base::JSONWriter::Write(value, &json_message));
return json_message;
}
} // namespace cast_streaming
|