Index: webrtc/pc/channel.h |
diff --git a/webrtc/pc/channel.h b/webrtc/pc/channel.h |
index e4848b2334c444496e368f119b23f570d3094eb6..0c95d936e579ada24e0476fc2d85a54766d23882 100644 |
--- a/webrtc/pc/channel.h |
+++ b/webrtc/pc/channel.h |
@@ -30,6 +30,8 @@ |
#include "webrtc/media/base/streamparams.h" |
#include "webrtc/media/base/videosinkinterface.h" |
#include "webrtc/media/base/videosourceinterface.h" |
+#include "webrtc/p2p/base/dtlstransportinternal.h" |
+#include "webrtc/p2p/base/packettransportinterface.h" |
#include "webrtc/p2p/base/transportcontroller.h" |
#include "webrtc/p2p/client/socketmonitor.h" |
#include "webrtc/pc/audiomonitor.h" |
@@ -39,10 +41,6 @@ |
#include "webrtc/pc/rtcpmuxfilter.h" |
#include "webrtc/pc/srtpfilter.h" |
-namespace rtc { |
-class PacketTransportInterface; |
-} |
- |
namespace webrtc { |
class AudioSinkInterface; |
} // namespace webrtc |
@@ -75,7 +73,6 @@ class BaseChannel |
public MediaChannel::NetworkInterface, |
public ConnectionStatsGetter { |
public: |
- // |rtcp| represents whether or not this channel uses RTCP. |
// If |srtp_required| is true, the channel will not send or receive any |
// RTP/RTCP packets without using SRTP (either using SDES or DTLS-SRTP). |
BaseChannel(rtc::Thread* worker_thread, |
@@ -87,7 +84,9 @@ class BaseChannel |
bool srtp_required); |
virtual ~BaseChannel(); |
bool Init_w(DtlsTransportInternal* rtp_dtls_transport, |
- DtlsTransportInternal* rtcp_dtls_transport); |
+ DtlsTransportInternal* rtcp_dtls_transport, |
+ rtc::PacketTransportInterface* rtp_packet_transport, |
+ rtc::PacketTransportInterface* rtcp_packet_transport); |
// Deinit may be called multiple times and is simply ignored if it's already |
// done. |
void Deinit(); |
@@ -95,6 +94,7 @@ class BaseChannel |
rtc::Thread* worker_thread() const { return worker_thread_; } |
rtc::Thread* network_thread() const { return network_thread_; } |
const std::string& content_name() const { return content_name_; } |
+ // TODO(deadbeef): This is redundant; remove this. |
const std::string& transport_name() const { return transport_name_; } |
bool enabled() const { return enabled_; } |
@@ -113,8 +113,12 @@ class BaseChannel |
// RTCP muxing is not fully active yet). |
// |rtp_transport| and |rtcp_transport| must share the same transport name as |
// well. |
+ // Can not start with "rtc::PacketTransportInterface" and switch to |
+ // "DtlsTransportInternal", or vice-versa. |
void SetTransports(DtlsTransportInternal* rtp_dtls_transport, |
DtlsTransportInternal* rtcp_dtls_transport); |
+ void SetTransports(rtc::PacketTransportInterface* rtp_packet_transport, |
+ rtc::PacketTransportInterface* rtcp_packet_transport); |
bool PushdownLocalDescription(const SessionDescription* local_desc, |
ContentAction action, |
std::string* error_desc); |
@@ -206,11 +210,15 @@ class BaseChannel |
virtual MediaChannel* media_channel() const { return media_channel_; } |
void SetTransports_n(DtlsTransportInternal* rtp_dtls_transport, |
- DtlsTransportInternal* rtcp_dtls_transport); |
+ DtlsTransportInternal* rtcp_dtls_transport, |
+ rtc::PacketTransportInterface* rtp_packet_transport, |
+ rtc::PacketTransportInterface* rtcp_packet_transport); |
// This does not update writability or "ready-to-send" state; it just |
// disconnects from the old channel and connects to the new one. |
- void SetTransport_n(bool rtcp, DtlsTransportInternal* new_transport); |
+ void SetTransport_n(bool rtcp, |
+ DtlsTransportInternal* new_dtls_transport, |
+ rtc::PacketTransportInterface* new_packet_transport); |
bool was_ever_writable() const { return was_ever_writable_; } |
void set_local_content_direction(MediaContentDirection direction) { |
@@ -233,8 +241,10 @@ class BaseChannel |
bool IsReadyToSendMedia_w() const; |
rtc::Thread* signaling_thread() { return signaling_thread_; } |
- void ConnectToTransport(DtlsTransportInternal* transport); |
- void DisconnectFromTransport(DtlsTransportInternal* transport); |
+ void ConnectToDtlsTransport(DtlsTransportInternal* transport); |
+ void DisconnectFromDtlsTransport(DtlsTransportInternal* transport); |
+ void ConnectToPacketTransport(rtc::PacketTransportInterface* transport); |
+ void DisconnectFromPacketTransport(rtc::PacketTransportInterface* transport); |
void FlushRtcpMessages_n(); |
@@ -366,7 +376,9 @@ class BaseChannel |
private: |
bool InitNetwork_n(DtlsTransportInternal* rtp_dtls_transport, |
- DtlsTransportInternal* rtcp_dtls_transport); |
+ DtlsTransportInternal* rtcp_dtls_transport, |
+ rtc::PacketTransportInterface* rtp_packet_transport, |
+ rtc::PacketTransportInterface* rtcp_packet_transport); |
void DisconnectTransportChannels_n(); |
void SignalSentPacket_n(rtc::PacketTransportInterface* transport, |
const rtc::SentPacket& sent_packet); |
@@ -384,14 +396,20 @@ class BaseChannel |
const std::string content_name_; |
std::unique_ptr<ConnectionMonitor> connection_monitor_; |
+ // Won't be set when using raw packet transports. SDP-specific thing. |
std::string transport_name_; |
// True if RTCP-multiplexing is required. In other words, no standalone RTCP |
// transport will ever be used for this channel. |
const bool rtcp_mux_required_; |
+ // Separate DTLS/non-DTLS pointers to support using BaseChannel without DTLS. |
+ // Temporary measure until more refactoring is done. |
+ // If non-null, "X_dtls_transport_" will always equal "X_packet_transport_". |
DtlsTransportInternal* rtp_dtls_transport_ = nullptr; |
- std::vector<std::pair<rtc::Socket::Option, int> > socket_options_; |
DtlsTransportInternal* rtcp_dtls_transport_ = nullptr; |
+ rtc::PacketTransportInterface* rtp_packet_transport_ = nullptr; |
+ rtc::PacketTransportInterface* rtcp_packet_transport_ = nullptr; |
+ std::vector<std::pair<rtc::Socket::Option, int> > socket_options_; |
std::vector<std::pair<rtc::Socket::Option, int> > rtcp_socket_options_; |
SrtpFilter srtp_filter_; |
RtcpMuxFilter rtcp_mux_filter_; |
@@ -433,8 +451,6 @@ class VoiceChannel : public BaseChannel { |
bool rtcp_mux_required, |
bool srtp_required); |
~VoiceChannel(); |
- bool Init_w(DtlsTransportInternal* rtp_dtls_transport, |
- DtlsTransportInternal* rtcp_dtls_transport); |
// Configure sending media on the stream with SSRC |ssrc| |
// If there is only one sending stream SSRC 0 can be used. |
@@ -552,8 +568,6 @@ class VideoChannel : public BaseChannel { |
bool rtcp_mux_required, |
bool srtp_required); |
~VideoChannel(); |
- bool Init_w(DtlsTransportInternal* rtp_dtls_transport, |
- DtlsTransportInternal* rtcp_dtls_transport); |
// downcasts a MediaChannel |
VideoMediaChannel* media_channel() const override { |
@@ -633,7 +647,9 @@ class RtpDataChannel : public BaseChannel { |
bool srtp_required); |
~RtpDataChannel(); |
bool Init_w(DtlsTransportInternal* rtp_dtls_transport, |
- DtlsTransportInternal* rtcp_dtls_transport); |
+ DtlsTransportInternal* rtcp_dtls_transport, |
+ rtc::PacketTransportInterface* rtp_packet_transport, |
+ rtc::PacketTransportInterface* rtcp_packet_transport); |
virtual bool SendData(const SendDataParams& params, |
const rtc::CopyOnWriteBuffer& payload, |