// Copyright 2019 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #include "cast/sender/channel/message_util.h" #include "cast/sender/channel/cast_auth_util.h" #include "util/json/json_serialization.h" namespace openscreen { namespace cast { using ::cast::channel::AuthChallenge; using ::cast::channel::CastMessage; using ::cast::channel::DeviceAuthMessage; CastMessage CreateAuthChallengeMessage(const AuthContext& auth_context) { CastMessage message; DeviceAuthMessage auth_message; AuthChallenge* challenge = auth_message.mutable_challenge(); challenge->set_sender_nonce(auth_context.nonce()); challenge->set_hash_algorithm(::cast::channel::SHA256); std::string auth_message_string; auth_message.SerializeToString(&auth_message_string); message.set_protocol_version(CastMessage::CASTV2_1_0); message.set_source_id(kPlatformSenderId); message.set_destination_id(kPlatformReceiverId); message.set_namespace_(kAuthNamespace); message.set_payload_type(::cast::channel::CastMessage_PayloadType_BINARY); message.set_payload_binary(auth_message_string); return message; } ErrorOr CreateAppAvailabilityRequest(const std::string& sender_id, int request_id, const std::string& app_id) { Json::Value dict(Json::ValueType::objectValue); dict[kMessageKeyType] = Json::Value( CastMessageTypeToString(CastMessageType::kGetAppAvailability)); Json::Value app_id_value(Json::ValueType::arrayValue); app_id_value.append(Json::Value(app_id)); dict[kMessageKeyAppId] = std::move(app_id_value); dict[kMessageKeyRequestId] = Json::Value(request_id); CastMessage message; message.set_payload_type(::cast::channel::CastMessage_PayloadType_STRING); ErrorOr serialized = json::Stringify(dict); if (serialized.is_error()) { return serialized.error(); } message.set_payload_utf8(serialized.value()); message.set_protocol_version( ::cast::channel::CastMessage_ProtocolVersion_CASTV2_1_0); message.set_source_id(sender_id); message.set_destination_id(kPlatformReceiverId); message.set_namespace_(kReceiverNamespace); return message; } } // namespace cast } // namespace openscreen