mirror of
https://github.com/mollyim/webrtc.git
synced 2025-05-13 13:50:40 +01:00

This reverts commit6b143c1c06
. Reason for revert: Relanding with updated expectations for SctpTransport::Information based on TransceiverStateSurfacer in Chromium. Original change's description: > Revert "Fix unsynchronized access to mid_to_transport_ in JsepTransportController" > > This reverts commit6cd4058504
. > > Reason for revert: Breaks WebRTC Chromium FYI Bots > > First failure: > https://ci.chromium.org/p/chromium/builders/webrtc.fyi/WebRTC%20Chromium%20FYI%20Android%20Tests%20%28dbg%29%20%28L%20Nexus5%29/1925 > > Failed tests: > WebRtcDataBrowserTest.CallWithSctpDataAndMedia > WebRtcDataBrowserTest.CallWithSctpDataOnly > > Original change's description: > > Fix unsynchronized access to mid_to_transport_ in JsepTransportController > > > > * Added several thread checks to JTC to help with programmer errors. > > * Avoid a few Invokes() to the network thread here and there such > > as for fetching sctp transport name for getStats(). The transport > > name is now cached when it changes on the network thread. > > * JsepTransportController instances now get deleted on the network > > thread rather than on the signaling thread + issuing an Invoke() > > in the dtor. > > * Moved some thread hops from JTC over to PC which is where the problem > > exists and also (imho) makes it easier to see where hops happen in > > the PC code. > > * The sctp transport is now started asynchronously when we push down the > > media description. > > * PeerConnection proxy calls GetSctpTransport directly on the network > > thread instead of to the signaling thread + blocking on the network > > thread. > > * The above changes simplified things for webrtc::SctpTransport which > > allowed for removing locking from that class and delete some code. > > > > Bug: webrtc:9987, webrtc:12445 > > Change-Id: Ic89a9426e314e1b93c81751d4f732f05fa448fbc > > Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/205620 > > Commit-Queue: Tommi <tommi@webrtc.org> > > Reviewed-by: Harald Alvestrand <hta@webrtc.org> > > Cr-Commit-Position: refs/heads/master@{#33191} > > TBR=tommi@webrtc.org,hta@webrtc.org > > Change-Id: I7b2913d5133807589461105cf07eff3e9bb7157e > No-Presubmit: true > No-Tree-Checks: true > No-Try: true > Bug: webrtc:9987 > Bug: webrtc:12445 > Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/206466 > Reviewed-by: Guido Urdaneta <guidou@webrtc.org> > Commit-Queue: Guido Urdaneta <guidou@webrtc.org> > Cr-Commit-Position: refs/heads/master@{#33204} TBR=tommi@webrtc.org,hta@webrtc.org,guidou@webrtc.org # Not skipping CQ checks because this is a reland. Bug: webrtc:9987 Bug: webrtc:12445 Change-Id: Icb205cbac493ed3b881d71ea3af4fb9018701bf4 Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/206560 Reviewed-by: Tommi <tommi@webrtc.org> Reviewed-by: Guido Urdaneta <guidou@webrtc.org> Commit-Queue: Tommi <tommi@webrtc.org> Cr-Commit-Position: refs/heads/master@{#33219}
92 lines
3.6 KiB
C++
92 lines
3.6 KiB
C++
/*
|
|
* 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 API_SCTP_TRANSPORT_INTERFACE_H_
|
|
#define API_SCTP_TRANSPORT_INTERFACE_H_
|
|
|
|
#include "absl/types/optional.h"
|
|
#include "api/dtls_transport_interface.h"
|
|
#include "api/rtc_error.h"
|
|
#include "api/scoped_refptr.h"
|
|
#include "rtc_base/ref_count.h"
|
|
|
|
namespace webrtc {
|
|
|
|
// States of a SCTP transport, corresponding to the JS API specification.
|
|
// http://w3c.github.io/webrtc-pc/#dom-rtcsctptransportstate
|
|
enum class SctpTransportState {
|
|
kNew, // Has not started negotiating yet. Non-standard state.
|
|
kConnecting, // In the process of negotiating an association.
|
|
kConnected, // Completed negotiation of an association.
|
|
kClosed, // Closed by local or remote party.
|
|
kNumValues
|
|
};
|
|
|
|
// This object gives snapshot information about the changeable state of a
|
|
// SctpTransport.
|
|
// It reflects the readonly attributes of the object in the specification.
|
|
// http://w3c.github.io/webrtc-pc/#rtcsctptransport-interface
|
|
class RTC_EXPORT SctpTransportInformation {
|
|
public:
|
|
SctpTransportInformation() = default;
|
|
SctpTransportInformation(const SctpTransportInformation&) = default;
|
|
explicit SctpTransportInformation(SctpTransportState state);
|
|
SctpTransportInformation(
|
|
SctpTransportState state,
|
|
rtc::scoped_refptr<DtlsTransportInterface> dtls_transport,
|
|
absl::optional<double> max_message_size,
|
|
absl::optional<int> max_channels);
|
|
~SctpTransportInformation();
|
|
// The DTLS transport that supports this SCTP transport.
|
|
rtc::scoped_refptr<DtlsTransportInterface> dtls_transport() const {
|
|
return dtls_transport_;
|
|
}
|
|
SctpTransportState state() const { return state_; }
|
|
absl::optional<double> MaxMessageSize() const { return max_message_size_; }
|
|
absl::optional<int> MaxChannels() const { return max_channels_; }
|
|
|
|
private:
|
|
SctpTransportState state_;
|
|
rtc::scoped_refptr<DtlsTransportInterface> dtls_transport_;
|
|
absl::optional<double> max_message_size_;
|
|
absl::optional<int> max_channels_;
|
|
};
|
|
|
|
class SctpTransportObserverInterface {
|
|
public:
|
|
// This callback carries information about the state of the transport.
|
|
// The argument is a pass-by-value snapshot of the state.
|
|
// The callback will be called on the network thread.
|
|
virtual void OnStateChange(SctpTransportInformation info) = 0;
|
|
|
|
protected:
|
|
virtual ~SctpTransportObserverInterface() = default;
|
|
};
|
|
|
|
// A SCTP transport, as represented to the outside world.
|
|
// This object is created on the network thread, and can only be
|
|
// accessed on that thread, except for functions explicitly marked otherwise.
|
|
// References can be held by other threads, and destruction can therefore
|
|
// be initiated by other threads.
|
|
class SctpTransportInterface : public rtc::RefCountInterface {
|
|
public:
|
|
// This function can be called from other threads.
|
|
virtual rtc::scoped_refptr<DtlsTransportInterface> dtls_transport() const = 0;
|
|
// Returns information on the state of the SctpTransport.
|
|
// This function can be called from other threads.
|
|
virtual SctpTransportInformation Information() const = 0;
|
|
// Observer management.
|
|
virtual void RegisterObserver(SctpTransportObserverInterface* observer) = 0;
|
|
virtual void UnregisterObserver() = 0;
|
|
};
|
|
|
|
} // namespace webrtc
|
|
|
|
#endif // API_SCTP_TRANSPORT_INTERFACE_H_
|