xref: /aosp_15_r20/external/openscreen/cast/sender/channel/message_util.cc (revision 3f982cf4871df8771c9d4abe6e9a6f8d829b2736)
1*3f982cf4SFabien Sanglard // Copyright 2019 The Chromium Authors. All rights reserved.
2*3f982cf4SFabien Sanglard // Use of this source code is governed by a BSD-style license that can be
3*3f982cf4SFabien Sanglard // found in the LICENSE file.
4*3f982cf4SFabien Sanglard 
5*3f982cf4SFabien Sanglard #include "cast/sender/channel/message_util.h"
6*3f982cf4SFabien Sanglard 
7*3f982cf4SFabien Sanglard #include "cast/sender/channel/cast_auth_util.h"
8*3f982cf4SFabien Sanglard #include "util/json/json_serialization.h"
9*3f982cf4SFabien Sanglard 
10*3f982cf4SFabien Sanglard namespace openscreen {
11*3f982cf4SFabien Sanglard namespace cast {
12*3f982cf4SFabien Sanglard 
13*3f982cf4SFabien Sanglard using ::cast::channel::AuthChallenge;
14*3f982cf4SFabien Sanglard using ::cast::channel::CastMessage;
15*3f982cf4SFabien Sanglard using ::cast::channel::DeviceAuthMessage;
16*3f982cf4SFabien Sanglard 
CreateAuthChallengeMessage(const AuthContext & auth_context)17*3f982cf4SFabien Sanglard CastMessage CreateAuthChallengeMessage(const AuthContext& auth_context) {
18*3f982cf4SFabien Sanglard   CastMessage message;
19*3f982cf4SFabien Sanglard   DeviceAuthMessage auth_message;
20*3f982cf4SFabien Sanglard 
21*3f982cf4SFabien Sanglard   AuthChallenge* challenge = auth_message.mutable_challenge();
22*3f982cf4SFabien Sanglard   challenge->set_sender_nonce(auth_context.nonce());
23*3f982cf4SFabien Sanglard   challenge->set_hash_algorithm(::cast::channel::SHA256);
24*3f982cf4SFabien Sanglard 
25*3f982cf4SFabien Sanglard   std::string auth_message_string;
26*3f982cf4SFabien Sanglard   auth_message.SerializeToString(&auth_message_string);
27*3f982cf4SFabien Sanglard 
28*3f982cf4SFabien Sanglard   message.set_protocol_version(CastMessage::CASTV2_1_0);
29*3f982cf4SFabien Sanglard   message.set_source_id(kPlatformSenderId);
30*3f982cf4SFabien Sanglard   message.set_destination_id(kPlatformReceiverId);
31*3f982cf4SFabien Sanglard   message.set_namespace_(kAuthNamespace);
32*3f982cf4SFabien Sanglard   message.set_payload_type(::cast::channel::CastMessage_PayloadType_BINARY);
33*3f982cf4SFabien Sanglard   message.set_payload_binary(auth_message_string);
34*3f982cf4SFabien Sanglard 
35*3f982cf4SFabien Sanglard   return message;
36*3f982cf4SFabien Sanglard }
37*3f982cf4SFabien Sanglard 
CreateAppAvailabilityRequest(const std::string & sender_id,int request_id,const std::string & app_id)38*3f982cf4SFabien Sanglard ErrorOr<CastMessage> CreateAppAvailabilityRequest(const std::string& sender_id,
39*3f982cf4SFabien Sanglard                                                   int request_id,
40*3f982cf4SFabien Sanglard                                                   const std::string& app_id) {
41*3f982cf4SFabien Sanglard   Json::Value dict(Json::ValueType::objectValue);
42*3f982cf4SFabien Sanglard   dict[kMessageKeyType] = Json::Value(
43*3f982cf4SFabien Sanglard       CastMessageTypeToString(CastMessageType::kGetAppAvailability));
44*3f982cf4SFabien Sanglard   Json::Value app_id_value(Json::ValueType::arrayValue);
45*3f982cf4SFabien Sanglard   app_id_value.append(Json::Value(app_id));
46*3f982cf4SFabien Sanglard   dict[kMessageKeyAppId] = std::move(app_id_value);
47*3f982cf4SFabien Sanglard   dict[kMessageKeyRequestId] = Json::Value(request_id);
48*3f982cf4SFabien Sanglard 
49*3f982cf4SFabien Sanglard   CastMessage message;
50*3f982cf4SFabien Sanglard   message.set_payload_type(::cast::channel::CastMessage_PayloadType_STRING);
51*3f982cf4SFabien Sanglard   ErrorOr<std::string> serialized = json::Stringify(dict);
52*3f982cf4SFabien Sanglard   if (serialized.is_error()) {
53*3f982cf4SFabien Sanglard     return serialized.error();
54*3f982cf4SFabien Sanglard   }
55*3f982cf4SFabien Sanglard   message.set_payload_utf8(serialized.value());
56*3f982cf4SFabien Sanglard 
57*3f982cf4SFabien Sanglard   message.set_protocol_version(
58*3f982cf4SFabien Sanglard       ::cast::channel::CastMessage_ProtocolVersion_CASTV2_1_0);
59*3f982cf4SFabien Sanglard   message.set_source_id(sender_id);
60*3f982cf4SFabien Sanglard   message.set_destination_id(kPlatformReceiverId);
61*3f982cf4SFabien Sanglard   message.set_namespace_(kReceiverNamespace);
62*3f982cf4SFabien Sanglard 
63*3f982cf4SFabien Sanglard   return message;
64*3f982cf4SFabien Sanglard }
65*3f982cf4SFabien Sanglard 
66*3f982cf4SFabien Sanglard }  // namespace cast
67*3f982cf4SFabien Sanglard }  // namespace openscreen
68