diff --git a/net/dcsctp/public/BUILD.gn b/net/dcsctp/public/BUILD.gn
index 8fb521c..74136ac 100644
--- a/net/dcsctp/public/BUILD.gn
+++ b/net/dcsctp/public/BUILD.gn
@@ -35,6 +35,7 @@
     "../../../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 0000000..6a1bd06
--- /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 <string>
+
+#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<uint32_t>(HandoverUnreadinessReason::kMax);
+       bit *= 2) {
+    auto flag = static_cast<HandoverUnreadinessReason>(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 afc30f6..bfe248c 100644
--- a/net/dcsctp/socket/dcsctp_socket.cc
+++ b/net/dcsctp/socket/dcsctp_socket.cc
@@ -138,58 +138,8 @@
   return TieTag(static_cast<uint64_t>(tie_tag_upper) << 32 |
                 static_cast<uint64_t>(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<uint32_t>(HandoverUnreadinessReason::kMax);
-       bit *= 2) {
-    auto flag = static_cast<HandoverUnreadinessReason>(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<PacketObserver> packet_observer,
