Index: webrtc/pc/channel.h |
diff --git a/webrtc/pc/channel.h b/webrtc/pc/channel.h |
index eea1d7f0da0508ced02ff24d3c01ef3171bd25e0..2a5d3a55ec42f68111a3b79ca90d296b8eb2514e 100644 |
--- a/webrtc/pc/channel.h |
+++ b/webrtc/pc/channel.h |
@@ -160,7 +160,15 @@ class BaseChannel |
} |
// Made public for easier testing. |
- void SetReadyToSend(bool rtcp, bool ready); |
+ // |
+ // Updates "ready to send" for an individual channel, and informs the media |
+ // channel that the transport is ready to send if each channel (in use) is |
+ // ready to send. This is more specific than just "writable"; it means the |
+ // last send didn't return ENOTCONN. |
+ // |
+ // This should be called whenever a channel's ready-to-send state changes, |
+ // or when RTCP muxing becomes active/inactive. |
+ void SetTransportChannelReadyToSend(bool rtcp, bool ready); |
// Only public for unit tests. Otherwise, consider protected. |
int SetOption(SocketType type, rtc::Socket::Option o, int val) |
@@ -175,8 +183,10 @@ class BaseChannel |
protected: |
virtual MediaChannel* media_channel() const { return media_channel_; } |
- // Sets the |transport_channel_| (and |rtcp_transport_channel_|, if |rtcp_| is |
- // true). Gets the transport channels from |transport_controller_|. |
+ |
+ // Sets the |transport_channel_| (and |rtcp_transport_channel_|, if |
+ // |rtcp_enabled_| is true). Gets the transport channels from |
+ // |transport_controller_|. |
bool SetTransport_n(const std::string& transport_name); |
void SetTransportChannel_n(TransportChannel* transport); |
@@ -193,8 +203,18 @@ class BaseChannel |
void set_secure_required(bool secure_required) { |
secure_required_ = secure_required; |
} |
- bool IsReadyToReceive_w() const; |
- bool IsReadyToSend_w() const; |
+ // These methods verify that: |
+ // * The required content description directions have been set. |
+ // * The channel is enabled. |
+ // * And for sending: |
+ // - The SRTP filter is active if it's needed. |
+ // - The transport has been writable before, meaning it should be at least |
+ // possible to succeed in sending a packet. |
+ // |
+ // When any of these properties change, UpdateMediaSendRecvState_w should be |
+ // called. |
+ bool IsReadyToReceiveMedia_w() const; |
+ bool IsReadyToSendMedia_w() const; |
rtc::Thread* signaling_thread() { |
return transport_controller_->signaling_thread(); |
} |
@@ -242,9 +262,14 @@ class BaseChannel |
void EnableMedia_w(); |
void DisableMedia_w(); |
+ |
+ // Performs actions if the RTP/RTCP writable state changed. This should |
+ // be called whenever a channel's writable state changes or when RTCP muxing |
+ // becomes active/inactive. |
void UpdateWritableState_n(); |
void ChannelWritable_n(); |
void ChannelNotWritable_n(); |
+ |
bool AddRecvStream_w(const StreamParams& sp); |
bool RemoveRecvStream_w(uint32_t ssrc); |
bool AddSendStream_w(const StreamParams& sp); |
@@ -257,8 +282,11 @@ class BaseChannel |
// Set the DTLS-SRTP cipher policy on this channel as appropriate. |
bool SetDtlsSrtpCryptoSuites_n(TransportChannel* tc, bool rtcp); |
- void ChangeState(); |
- virtual void ChangeState_w() = 0; |
+ // Should be called whenever the conditions for |
+ // IsReadyToReceiveMedia/IsReadyToSendMedia are satisfied (or unsatisfied). |
+ // Updates the send/recv state of the media channel. |
+ void UpdateMediaSendRecvState(); |
+ virtual void UpdateMediaSendRecvState_w() = 0; |
// Gets the content info appropriate to the channel (audio or video). |
virtual const ContentInfo* GetFirstContent( |
@@ -329,7 +357,7 @@ class BaseChannel |
void SignalSentPacket_n(TransportChannel* channel, |
const rtc::SentPacket& sent_packet); |
void SignalSentPacket_w(const rtc::SentPacket& sent_packet); |
- bool IsTransportReadyToSend_n() const; |
+ bool IsReadyToSendMedia_n() const; |
void CacheRtpAbsSendTimeHeaderExtension_n(int rtp_abs_sendtime_extn_id); |
rtc::Thread* const worker_thread_; |
@@ -363,11 +391,12 @@ class BaseChannel |
rtc::CryptoOptions crypto_options_; |
int rtp_abs_sendtime_extn_id_ = -1; |
- // MediaChannel related members that should be access from worker thread. |
+ // MediaChannel related members that should be accessed from the worker |
+ // thread. |
MediaChannel* const media_channel_; |
- // Currently enabled_ flag accessed from signaling thread too, but it can |
- // be changed only when signaling thread does sunchronious call to worker |
- // thread, so it should be safe. |
+ // Currently the |enabled_| flag is accessed from the signaling thread as |
+ // well, but it can be changed only when signaling thread does a synchronous |
+ // call to the worker thread, so it should be safe. |
bool enabled_ = false; |
std::vector<StreamParams> local_streams_; |
std::vector<StreamParams> remote_streams_; |
@@ -458,7 +487,7 @@ class VoiceChannel : public BaseChannel { |
size_t len, |
const rtc::PacketTime& packet_time, |
int flags) override; |
- void ChangeState_w() override; |
+ void UpdateMediaSendRecvState_w() override; |
const ContentInfo* GetFirstContent(const SessionDescription* sdesc) override; |
bool SetLocalContent_w(const MediaContentDescription* content, |
ContentAction action, |
@@ -538,7 +567,7 @@ class VideoChannel : public BaseChannel { |
private: |
// overrides from BaseChannel |
- void ChangeState_w() override; |
+ void UpdateMediaSendRecvState_w() override; |
const ContentInfo* GetFirstContent(const SessionDescription* sdesc) override; |
bool SetLocalContent_w(const MediaContentDescription* content, |
ContentAction action, |
@@ -663,7 +692,7 @@ class DataChannel : public BaseChannel { |
bool SetRemoteContent_w(const MediaContentDescription* content, |
ContentAction action, |
std::string* error_desc) override; |
- void ChangeState_w() override; |
+ void UpdateMediaSendRecvState_w() override; |
bool WantsPacket(bool rtcp, const rtc::CopyOnWriteBuffer* packet) override; |
void OnMessage(rtc::Message* pmsg) override; |