diff --git a/net/dcsctp/public/BUILD.gn b/net/dcsctp/public/BUILD.gn index 8fb521cfb2..74136ac7f4 100644 --- a/net/dcsctp/public/BUILD.gn +++ b/net/dcsctp/public/BUILD.gn @@ -35,6 +35,7 @@ rtc_source_set("socket") { "../../../rtc_base:rtc_base_approved", ] sources = [ + "dcsctp_handover_state.cc", "dcsctp_handover_state.h", "dcsctp_socket.h", "packet_observer.h", diff --git a/net/dcsctp/public/dcsctp_handover_state.cc b/net/dcsctp/public/dcsctp_handover_state.cc new file mode 100644 index 0000000000..6a1bd06eba --- /dev/null +++ b/net/dcsctp/public/dcsctp_handover_state.cc @@ -0,0 +1,68 @@ +/* + * Copyright (c) 2021 The WebRTC project authors. All Rights Reserved. + * + * Use of this source code is governed by a BSD-style license + * that can be found in the LICENSE file in the root of the source + * tree. An additional intellectual property rights grant can be found + * in the file PATENTS. All contributing project authors may + * be found in the AUTHORS file in the root of the source tree. + */ +#include "net/dcsctp/public/dcsctp_handover_state.h" + +#include + +#include "absl/strings/string_view.h" + +namespace dcsctp { +namespace { +constexpr absl::string_view HandoverUnreadinessReasonToString( + HandoverUnreadinessReason reason) { + switch (reason) { + case HandoverUnreadinessReason::kWrongConnectionState: + return "WRONG_CONNECTION_STATE"; + case HandoverUnreadinessReason::kSendQueueNotEmpty: + return "SEND_QUEUE_NOT_EMPTY"; + case HandoverUnreadinessReason::kDataTrackerTsnBlocksPending: + return "DATA_TRACKER_TSN_BLOCKS_PENDING"; + case HandoverUnreadinessReason::kReassemblyQueueDeliveredTSNsGap: + return "REASSEMBLY_QUEUE_DELIVERED_TSN_GAP"; + case HandoverUnreadinessReason::kStreamResetDeferred: + return "STREAM_RESET_DEFERRED"; + case HandoverUnreadinessReason::kOrderedStreamHasUnassembledChunks: + return "ORDERED_STREAM_HAS_UNASSEMBLED_CHUNKS"; + case HandoverUnreadinessReason::kUnorderedStreamHasUnassembledChunks: + return "UNORDERED_STREAM_HAS_UNASSEMBLED_CHUNKS"; + case HandoverUnreadinessReason::kRetransmissionQueueOutstandingData: + return "RETRANSMISSION_QUEUE_OUTSTANDING_DATA"; + case HandoverUnreadinessReason::kRetransmissionQueueFastRecovery: + return "RETRANSMISSION_QUEUE_FAST_RECOVERY"; + case HandoverUnreadinessReason::kRetransmissionQueueNotEmpty: + return "RETRANSMISSION_QUEUE_NOT_EMPTY"; + case HandoverUnreadinessReason::kPendingStreamReset: + return "PENDING_STREAM_RESET"; + case HandoverUnreadinessReason::kPendingStreamResetRequest: + return "PENDING_STREAM_RESET_REQUEST"; + } +} +} // namespace + +std::string HandoverReadinessStatus::ToString() const { + std::string result; + for (uint32_t bit = 1; + bit <= static_cast(HandoverUnreadinessReason::kMax); + bit *= 2) { + auto flag = static_cast(bit); + if (Contains(flag)) { + if (!result.empty()) { + result.append(","); + } + absl::string_view s = HandoverUnreadinessReasonToString(flag); + result.append(s.data(), s.size()); + } + } + if (result.empty()) { + result = "READY"; + } + return result; +} +} // namespace dcsctp diff --git a/net/dcsctp/socket/dcsctp_socket.cc b/net/dcsctp/socket/dcsctp_socket.cc index afc30f61fd..bfe248c055 100644 --- a/net/dcsctp/socket/dcsctp_socket.cc +++ b/net/dcsctp/socket/dcsctp_socket.cc @@ -138,58 +138,8 @@ TieTag MakeTieTag(DcSctpSocketCallbacks& cb) { return TieTag(static_cast(tie_tag_upper) << 32 | static_cast(tie_tag_lower)); } - -constexpr absl::string_view HandoverUnreadinessReasonToString( - HandoverUnreadinessReason reason) { - switch (reason) { - case HandoverUnreadinessReason::kWrongConnectionState: - return "WRONG_CONNECTION_STATE"; - case HandoverUnreadinessReason::kSendQueueNotEmpty: - return "SEND_QUEUE_NOT_EMPTY"; - case HandoverUnreadinessReason::kDataTrackerTsnBlocksPending: - return "DATA_TRACKER_TSN_BLOCKS_PENDING"; - case HandoverUnreadinessReason::kReassemblyQueueDeliveredTSNsGap: - return "REASSEMBLY_QUEUE_DELIVERED_TSN_GAP"; - case HandoverUnreadinessReason::kStreamResetDeferred: - return "STREAM_RESET_DEFERRED"; - case HandoverUnreadinessReason::kOrderedStreamHasUnassembledChunks: - return "ORDERED_STREAM_HAS_UNASSEMBLED_CHUNKS"; - case HandoverUnreadinessReason::kUnorderedStreamHasUnassembledChunks: - return "UNORDERED_STREAM_HAS_UNASSEMBLED_CHUNKS"; - case HandoverUnreadinessReason::kRetransmissionQueueOutstandingData: - return "RETRANSMISSION_QUEUE_OUTSTANDING_DATA"; - case HandoverUnreadinessReason::kRetransmissionQueueFastRecovery: - return "RETRANSMISSION_QUEUE_FAST_RECOVERY"; - case HandoverUnreadinessReason::kRetransmissionQueueNotEmpty: - return "RETRANSMISSION_QUEUE_NOT_EMPTY"; - case HandoverUnreadinessReason::kPendingStreamReset: - return "PENDING_STREAM_RESET"; - case HandoverUnreadinessReason::kPendingStreamResetRequest: - return "PENDING_STREAM_RESET_REQUEST"; - } -} } // namespace -std::string HandoverReadinessStatus::ToString() const { - std::string result; - for (uint32_t bit = 1; - bit <= static_cast(HandoverUnreadinessReason::kMax); - bit *= 2) { - auto flag = static_cast(bit); - if (Contains(flag)) { - if (!result.empty()) { - result.append(","); - } - absl::string_view s = HandoverUnreadinessReasonToString(flag); - result.append(s.data(), s.size()); - } - } - if (result.empty()) { - result = "READY"; - } - return result; -} - DcSctpSocket::DcSctpSocket(absl::string_view log_prefix, DcSctpSocketCallbacks& callbacks, std::unique_ptr packet_observer,