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)13std::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)51std::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)68MoqtForwardingPreference 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)86MoqtMessageType 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