summaryrefslogtreecommitdiffstats
path: root/third_party/libwebrtc/pc/sctp_transport.h
diff options
context:
space:
mode:
Diffstat (limited to 'third_party/libwebrtc/pc/sctp_transport.h')
-rw-r--r--third_party/libwebrtc/pc/sctp_transport.h101
1 files changed, 101 insertions, 0 deletions
diff --git a/third_party/libwebrtc/pc/sctp_transport.h b/third_party/libwebrtc/pc/sctp_transport.h
new file mode 100644
index 0000000000..35e7656100
--- /dev/null
+++ b/third_party/libwebrtc/pc/sctp_transport.h
@@ -0,0 +1,101 @@
+/*
+ * Copyright 2019 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.
+ */
+
+#ifndef PC_SCTP_TRANSPORT_H_
+#define PC_SCTP_TRANSPORT_H_
+
+#include <memory>
+
+#include "api/dtls_transport_interface.h"
+#include "api/scoped_refptr.h"
+#include "api/sctp_transport_interface.h"
+#include "api/sequence_checker.h"
+#include "api/transport/data_channel_transport_interface.h"
+#include "media/sctp/sctp_transport_internal.h"
+#include "p2p/base/dtls_transport_internal.h"
+#include "pc/dtls_transport.h"
+#include "rtc_base/checks.h"
+#include "rtc_base/thread.h"
+#include "rtc_base/thread_annotations.h"
+
+namespace webrtc {
+
+// This implementation wraps a cricket::SctpTransport, and takes
+// ownership of it.
+// This object must be constructed and updated on the networking thread,
+// the same thread as the one the cricket::SctpTransportInternal object
+// lives on.
+class SctpTransport : public SctpTransportInterface,
+ public DataChannelTransportInterface {
+ public:
+ explicit SctpTransport(
+ std::unique_ptr<cricket::SctpTransportInternal> internal);
+
+ // SctpTransportInterface
+ rtc::scoped_refptr<DtlsTransportInterface> dtls_transport() const override;
+ SctpTransportInformation Information() const override;
+ void RegisterObserver(SctpTransportObserverInterface* observer) override;
+ void UnregisterObserver() override;
+
+ // DataChannelTransportInterface
+ RTCError OpenChannel(int channel_id) override;
+ RTCError SendData(int channel_id,
+ const SendDataParams& params,
+ const rtc::CopyOnWriteBuffer& buffer) override;
+ RTCError CloseChannel(int channel_id) override;
+ void SetDataSink(DataChannelSink* sink) override;
+ bool IsReadyToSend() const override;
+
+ // Internal functions
+ void Clear();
+ void SetDtlsTransport(rtc::scoped_refptr<DtlsTransport>);
+ // Initialize the cricket::SctpTransport. This can be called from
+ // the signaling thread.
+ void Start(int local_port, int remote_port, int max_message_size);
+
+ // TODO(https://bugs.webrtc.org/10629): Move functions that need
+ // internal() to be functions on the webrtc::SctpTransport interface,
+ // and make the internal() function private.
+ cricket::SctpTransportInternal* internal() {
+ RTC_DCHECK_RUN_ON(owner_thread_);
+ return internal_sctp_transport_.get();
+ }
+
+ const cricket::SctpTransportInternal* internal() const {
+ RTC_DCHECK_RUN_ON(owner_thread_);
+ return internal_sctp_transport_.get();
+ }
+
+ protected:
+ ~SctpTransport() override;
+
+ private:
+ void UpdateInformation(SctpTransportState state);
+ void OnInternalReadyToSendData();
+ void OnAssociationChangeCommunicationUp();
+ void OnInternalClosingProcedureStartedRemotely(int sid);
+ void OnInternalClosingProcedureComplete(int sid);
+ void OnDtlsStateChange(cricket::DtlsTransportInternal* transport,
+ DtlsTransportState state);
+
+ // NOTE: `owner_thread_` is the thread that the SctpTransport object is
+ // constructed on. In the context of PeerConnection, it's the network thread.
+ rtc::Thread* const owner_thread_;
+ SctpTransportInformation info_ RTC_GUARDED_BY(owner_thread_);
+ std::unique_ptr<cricket::SctpTransportInternal> internal_sctp_transport_
+ RTC_GUARDED_BY(owner_thread_);
+ SctpTransportObserverInterface* observer_ RTC_GUARDED_BY(owner_thread_) =
+ nullptr;
+ rtc::scoped_refptr<DtlsTransport> dtls_transport_
+ RTC_GUARDED_BY(owner_thread_);
+};
+
+} // namespace webrtc
+#endif // PC_SCTP_TRANSPORT_H_