1 /* 2 * Copyright (c) 2021 The WebRTC project authors. All Rights Reserved. 3 * 4 * Use of this source code is governed by a BSD-style license 5 * that can be found in the LICENSE file in the root of the source 6 * tree. An additional intellectual property rights grant can be found 7 * in the file PATENTS. All contributing project authors may 8 * be found in the AUTHORS file in the root of the source tree. 9 */ 10 #include "net/dcsctp/public/dcsctp_handover_state.h" 11 12 #include <string> 13 14 #include "absl/strings/string_view.h" 15 16 namespace dcsctp { 17 namespace { HandoverUnreadinessReasonToString(HandoverUnreadinessReason reason)18constexpr absl::string_view HandoverUnreadinessReasonToString( 19 HandoverUnreadinessReason reason) { 20 switch (reason) { 21 case HandoverUnreadinessReason::kWrongConnectionState: 22 return "WRONG_CONNECTION_STATE"; 23 case HandoverUnreadinessReason::kSendQueueNotEmpty: 24 return "SEND_QUEUE_NOT_EMPTY"; 25 case HandoverUnreadinessReason::kDataTrackerTsnBlocksPending: 26 return "DATA_TRACKER_TSN_BLOCKS_PENDING"; 27 case HandoverUnreadinessReason::kReassemblyQueueDeliveredTSNsGap: 28 return "REASSEMBLY_QUEUE_DELIVERED_TSN_GAP"; 29 case HandoverUnreadinessReason::kStreamResetDeferred: 30 return "STREAM_RESET_DEFERRED"; 31 case HandoverUnreadinessReason::kOrderedStreamHasUnassembledChunks: 32 return "ORDERED_STREAM_HAS_UNASSEMBLED_CHUNKS"; 33 case HandoverUnreadinessReason::kUnorderedStreamHasUnassembledChunks: 34 return "UNORDERED_STREAM_HAS_UNASSEMBLED_CHUNKS"; 35 case HandoverUnreadinessReason::kRetransmissionQueueOutstandingData: 36 return "RETRANSMISSION_QUEUE_OUTSTANDING_DATA"; 37 case HandoverUnreadinessReason::kRetransmissionQueueFastRecovery: 38 return "RETRANSMISSION_QUEUE_FAST_RECOVERY"; 39 case HandoverUnreadinessReason::kRetransmissionQueueNotEmpty: 40 return "RETRANSMISSION_QUEUE_NOT_EMPTY"; 41 case HandoverUnreadinessReason::kPendingStreamReset: 42 return "PENDING_STREAM_RESET"; 43 case HandoverUnreadinessReason::kPendingStreamResetRequest: 44 return "PENDING_STREAM_RESET_REQUEST"; 45 } 46 } 47 } // namespace 48 ToString() const49std::string HandoverReadinessStatus::ToString() const { 50 std::string result; 51 for (uint32_t bit = 1; 52 bit <= static_cast<uint32_t>(HandoverUnreadinessReason::kMax); 53 bit *= 2) { 54 auto flag = static_cast<HandoverUnreadinessReason>(bit); 55 if (Contains(flag)) { 56 if (!result.empty()) { 57 result.append(","); 58 } 59 absl::string_view s = HandoverUnreadinessReasonToString(flag); 60 result.append(s.data(), s.size()); 61 } 62 } 63 if (result.empty()) { 64 result = "READY"; 65 } 66 return result; 67 } 68 } // namespace dcsctp 69