xref: /aosp_15_r20/external/cronet/net/third_party/quiche/src/quiche/quic/moqt/moqt_messages.cc (revision 6777b5387eb2ff775bb5750e3f5d96f37fb7352b)
1 // Copyright (c) 2023 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 "quiche/quic/moqt/moqt_messages.h"
6 
7 #include <string>
8 
9 #include "quiche/quic/platform/api/quic_bug_tracker.h"
10 
11 namespace moqt {
12 
MoqtMessageTypeToString(const MoqtMessageType message_type)13 std::string MoqtMessageTypeToString(const MoqtMessageType message_type) {
14   switch (message_type) {
15     case MoqtMessageType::kObjectStream:
16       return "OBJECT_STREAM";
17     case MoqtMessageType::kObjectDatagram:
18       return "OBJECT_PREFER_DATAGRAM";
19     case MoqtMessageType::kClientSetup:
20       return "CLIENT_SETUP";
21     case MoqtMessageType::kServerSetup:
22       return "SERVER_SETUP";
23     case MoqtMessageType::kSubscribe:
24       return "SUBSCRIBE_REQUEST";
25     case MoqtMessageType::kSubscribeOk:
26       return "SUBSCRIBE_OK";
27     case MoqtMessageType::kSubscribeError:
28       return "SUBSCRIBE_ERROR";
29     case MoqtMessageType::kUnsubscribe:
30       return "UNSUBSCRIBE";
31     case MoqtMessageType::kSubscribeDone:
32       return "SUBSCRIBE_DONE";
33     case MoqtMessageType::kAnnounce:
34       return "ANNOUNCE";
35     case MoqtMessageType::kAnnounceOk:
36       return "ANNOUNCE_OK";
37     case MoqtMessageType::kAnnounceError:
38       return "ANNOUNCE_ERROR";
39     case MoqtMessageType::kUnannounce:
40       return "UNANNOUNCE";
41     case MoqtMessageType::kGoAway:
42       return "GOAWAY";
43     case MoqtMessageType::kStreamHeaderTrack:
44       return "STREAM_HEADER_TRACK";
45     case MoqtMessageType::kStreamHeaderGroup:
46       return "STREAM_HEADER_GROUP";
47   }
48   return "Unknown message " + std::to_string(static_cast<int>(message_type));
49 }
50 
MoqtForwardingPreferenceToString(MoqtForwardingPreference preference)51 std::string MoqtForwardingPreferenceToString(
52     MoqtForwardingPreference preference) {
53   switch (preference) {
54     case MoqtForwardingPreference::kObject:
55       return "OBJECT";
56     case MoqtForwardingPreference::kDatagram:
57       return "DATAGRAM";
58     case MoqtForwardingPreference::kTrack:
59       return "TRACK";
60     case MoqtForwardingPreference::kGroup:
61       return "GROUP";
62   }
63   QUIC_BUG(quic_bug_bad_moqt_message_type_01)
64       << "Unknown preference " << std::to_string(static_cast<int>(preference));
65   return "Unknown preference " + std::to_string(static_cast<int>(preference));
66 }
67 
GetForwardingPreference(MoqtMessageType type)68 MoqtForwardingPreference GetForwardingPreference(MoqtMessageType type) {
69   switch (type) {
70     case MoqtMessageType::kObjectStream:
71       return MoqtForwardingPreference::kObject;
72     case MoqtMessageType::kObjectDatagram:
73       return MoqtForwardingPreference::kDatagram;
74     case MoqtMessageType::kStreamHeaderTrack:
75       return MoqtForwardingPreference::kTrack;
76     case MoqtMessageType::kStreamHeaderGroup:
77       return MoqtForwardingPreference::kGroup;
78     default:
79       break;
80   }
81   QUIC_BUG(quic_bug_bad_moqt_message_type_02)
82       << "Message type does not indicate forwarding preference";
83   return MoqtForwardingPreference::kObject;
84 };
85 
GetMessageTypeForForwardingPreference(MoqtForwardingPreference preference)86 MoqtMessageType GetMessageTypeForForwardingPreference(
87     MoqtForwardingPreference preference) {
88   switch (preference) {
89     case MoqtForwardingPreference::kObject:
90       return MoqtMessageType::kObjectStream;
91     case MoqtForwardingPreference::kDatagram:
92       return MoqtMessageType::kObjectDatagram;
93     case MoqtForwardingPreference::kTrack:
94       return MoqtMessageType::kStreamHeaderTrack;
95     case MoqtForwardingPreference::kGroup:
96       return MoqtMessageType::kStreamHeaderGroup;
97   }
98   QUIC_BUG(quic_bug_bad_moqt_message_type_03)
99       << "Forwarding preference does not indicate message type";
100   return MoqtMessageType::kObjectStream;
101 }
102 
103 }  // namespace moqt
104