xref: /aosp_15_r20/external/openscreen/cast/streaming/sender_message.h (revision 3f982cf4871df8771c9d4abe6e9a6f8d829b2736)
1*3f982cf4SFabien Sanglard // Copyright 2020 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 #ifndef CAST_STREAMING_SENDER_MESSAGE_H_
6*3f982cf4SFabien Sanglard #define CAST_STREAMING_SENDER_MESSAGE_H_
7*3f982cf4SFabien Sanglard 
8*3f982cf4SFabien Sanglard #include <memory>
9*3f982cf4SFabien Sanglard #include <string>
10*3f982cf4SFabien Sanglard #include <vector>
11*3f982cf4SFabien Sanglard 
12*3f982cf4SFabien Sanglard #include "absl/types/variant.h"
13*3f982cf4SFabien Sanglard #include "cast/streaming/offer_messages.h"
14*3f982cf4SFabien Sanglard #include "json/value.h"
15*3f982cf4SFabien Sanglard #include "platform/base/error.h"
16*3f982cf4SFabien Sanglard #include "util/osp_logging.h"
17*3f982cf4SFabien Sanglard 
18*3f982cf4SFabien Sanglard namespace openscreen {
19*3f982cf4SFabien Sanglard namespace cast {
20*3f982cf4SFabien Sanglard 
21*3f982cf4SFabien Sanglard struct SenderMessage {
22*3f982cf4SFabien Sanglard  public:
23*3f982cf4SFabien Sanglard   // Receiver response message type.
24*3f982cf4SFabien Sanglard   enum class Type {
25*3f982cf4SFabien Sanglard     // Unknown message type.
26*3f982cf4SFabien Sanglard     kUnknown,
27*3f982cf4SFabien Sanglard 
28*3f982cf4SFabien Sanglard     // OFFER request message.
29*3f982cf4SFabien Sanglard     kOffer,
30*3f982cf4SFabien Sanglard 
31*3f982cf4SFabien Sanglard     // GET_CAPABILITIES request message.
32*3f982cf4SFabien Sanglard     kGetCapabilities,
33*3f982cf4SFabien Sanglard 
34*3f982cf4SFabien Sanglard     // Rpc binary messages. The payload is base64-encoded.
35*3f982cf4SFabien Sanglard     kRpc,
36*3f982cf4SFabien Sanglard   };
37*3f982cf4SFabien Sanglard 
38*3f982cf4SFabien Sanglard   static ErrorOr<SenderMessage> Parse(const Json::Value& value);
39*3f982cf4SFabien Sanglard   ErrorOr<Json::Value> ToJson() const;
40*3f982cf4SFabien Sanglard 
41*3f982cf4SFabien Sanglard   Type type = Type::kUnknown;
42*3f982cf4SFabien Sanglard   int32_t sequence_number = -1;
43*3f982cf4SFabien Sanglard   bool valid = false;
44*3f982cf4SFabien Sanglard   absl::variant<absl::monostate,
45*3f982cf4SFabien Sanglard                 std::vector<uint8_t>,  // Binary-encoded RPC message.
46*3f982cf4SFabien Sanglard                 Offer,
47*3f982cf4SFabien Sanglard                 std::string>
48*3f982cf4SFabien Sanglard       body;
49*3f982cf4SFabien Sanglard };
50*3f982cf4SFabien Sanglard 
51*3f982cf4SFabien Sanglard }  // namespace cast
52*3f982cf4SFabien Sanglard }  // namespace openscreen
53*3f982cf4SFabien Sanglard 
54*3f982cf4SFabien Sanglard #endif  // CAST_STREAMING_SENDER_MESSAGE_H_
55