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