xref: /aosp_15_r20/external/webrtc/net/dcsctp/public/dcsctp_handover_state.cc (revision d9f758449e529ab9291ac668be2861e7a55c2422)
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)18 constexpr 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() const49 std::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