blob: 343d2f9e640c176aa94ddd64a347f7c6d6514852 [file] [log] [blame]
// Copyright 2014 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.
#ifndef COMPONENTS_CAST_CHANNEL_CAST_MESSAGE_UTIL_H_
#define COMPONENTS_CAST_CHANNEL_CAST_MESSAGE_UTIL_H_
#include <string>
#include "base/values.h"
namespace cast_channel {
class AuthContext;
class CastMessage;
class DeviceAuthMessage;
// Cast application protocol message types.
enum class CastMessageType { kOther, kPing, kPong };
// Checks if the contents of |message_proto| are valid.
bool IsCastMessageValid(const CastMessage& message_proto);
// Parses and returns the UTF-8 payload from |message|. Returns nullptr
// if the UTF-8 payload doesn't exist, or if it is not a dictionary.
std::unique_ptr<base::Value> GetDictionaryFromCastMessage(
const CastMessage& message);
// Parses the JSON-encoded payload of |message| and returns the value in the
// "type" field or |kUnknown| if the parse fails or the field is not found.
// The result is only valid if |message| is a Cast application protocol message.
CastMessageType ParseMessageType(const CastMessage& message);
// Returns a human readable string for |message_type|.
const char* CastMessageTypeToString(CastMessageType message_type);
// Returns a human readable string for |message_proto|.
std::string CastMessageToString(const CastMessage& message_proto);
// Returns a human readable string for |message|.
std::string AuthMessageToString(const DeviceAuthMessage& message);
// Fills |message_proto| appropriately for an auth challenge request message.
// Uses the nonce challenge in |auth_context|.
void CreateAuthChallengeMessage(CastMessage* message_proto,
const AuthContext& auth_context);
// Returns whether the given message is an auth handshake message.
bool IsAuthMessage(const CastMessage& message);
// Returns whether |message| is a Cast receiver message.
bool IsReceiverMessage(const CastMessage& message);
// Returns whether |message| is destined for the platform sender.
bool IsPlatformSenderMessage(const CastMessage& message);
// Creates a keep-alive message of either type PING or PONG.
CastMessage CreateKeepAlivePingMessage();
CastMessage CreateKeepAlivePongMessage();
// Creates a virtual connection request message for |source_id| and
// |destination_id|.
CastMessage CreateVirtualConnectionRequest(const std::string& source_id,
const std::string& destination_id);
// Creates an app availability request for |app_id| from |source_id| with
// ID |request_id|.
// TODO(imcheng): May not need |source_id|, just use sender-0?
CastMessage CreateGetAppAvailabilityRequest(const std::string& source_id,
int request_id,
const std::string& app_id);
// Possible results of a GET_APP_AVAILABILITY request.
enum class GetAppAvailabilityResult {
kAvailable,
kUnavailable,
kUnknown,
};
// Extracts request ID from |payload| corresponding to a Cast message response.
// If request ID is available, assigns it to |request_id|. Return |true| if
// request ID is found.
bool GetRequestIdFromResponse(const base::Value& payload, int* request_id);
// Returns the GetAppAvailabilityResult corresponding to |app_id| in |payload|.
// Returns kUnknown if result is not found.
GetAppAvailabilityResult GetAppAvailabilityResultFromResponse(
const base::Value& payload,
const std::string& app_id);
} // namespace cast_channel
#endif // COMPONENTS_CAST_CHANNEL_CAST_MESSAGE_UTIL_H_