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 SanglardCastMessage 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 SanglardErrorOr<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