Index: talk/app/webrtc/webrtcsession.cc |
diff --git a/talk/app/webrtc/webrtcsession.cc b/talk/app/webrtc/webrtcsession.cc |
index 2ab9a1e6969599983724f9ffdce7aebb91b5d418..381f5a9d526c3bdb42f9bacd0adfe69ba4837f4b 100644 |
--- a/talk/app/webrtc/webrtcsession.cc |
+++ b/talk/app/webrtc/webrtcsession.cc |
@@ -45,12 +45,14 @@ |
#include "talk/session/media/channelmanager.h" |
#include "talk/session/media/mediasession.h" |
#include "webrtc/base/basictypes.h" |
+#include "webrtc/base/bind.h" |
#include "webrtc/base/checks.h" |
#include "webrtc/base/helpers.h" |
#include "webrtc/base/logging.h" |
#include "webrtc/base/stringencode.h" |
#include "webrtc/base/stringutils.h" |
#include "webrtc/p2p/base/portallocator.h" |
+#include "webrtc/p2p/base/transportchannel.h" |
using cricket::ContentInfo; |
using cricket::ContentInfos; |
@@ -63,6 +65,8 @@ using cricket::STUN_PORT_TYPE; |
using cricket::RELAY_PORT_TYPE; |
using cricket::PRFLX_PORT_TYPE; |
+using rtc::Bind; |
+ |
namespace webrtc { |
// Error messages |
@@ -536,12 +540,11 @@ class IceRestartAnswerLatch { |
bool ice_restart_; |
}; |
-WebRtcSession::WebRtcSession( |
- cricket::ChannelManager* channel_manager, |
- rtc::Thread* signaling_thread, |
- rtc::Thread* worker_thread, |
- cricket::PortAllocator* port_allocator, |
- MediaStreamSignaling* mediastream_signaling) |
+WebRtcSession::WebRtcSession(webrtc::MediaControllerInterface* media_controller, |
+ rtc::Thread* signaling_thread, |
+ rtc::Thread* worker_thread, |
+ cricket::PortAllocator* port_allocator, |
+ MediaStreamSignaling* mediastream_signaling) |
: cricket::BaseSession(signaling_thread, |
worker_thread, |
port_allocator, |
@@ -550,7 +553,8 @@ WebRtcSession::WebRtcSession( |
// RFC 3264: The numeric value of the session id and version in the |
// o line MUST be representable with a "64 bit signed integer". |
// Due to this constraint session id |sid_| is max limited to LLONG_MAX. |
- channel_manager_(channel_manager), |
+ media_controller_(media_controller), |
+ channel_manager_(media_controller_->channel_manager()), |
mediastream_signaling_(mediastream_signaling), |
ice_observer_(NULL), |
ice_connection_state_(PeerConnectionInterface::kIceConnectionNew), |
@@ -776,9 +780,6 @@ bool WebRtcSession::Initialize( |
cricket::PORTALLOCATOR_ENABLE_LOCALHOST_CANDIDATE); |
} |
- media_controller_.reset(MediaControllerInterface::Create( |
- worker_thread(), channel_manager_->media_engine()->GetVoE())); |
- |
return true; |
} |
@@ -1819,7 +1820,7 @@ bool WebRtcSession::CreateChannels(const SessionDescription* desc) { |
bool WebRtcSession::CreateVoiceChannel(const cricket::ContentInfo* content) { |
voice_channel_.reset(channel_manager_->CreateVoiceChannel( |
- media_controller_.get(), transport_controller(), content->name, true, |
+ media_controller_, transport_controller(), content->name, true, |
audio_options_)); |
if (!voice_channel_) { |
return false; |
@@ -1827,12 +1828,14 @@ bool WebRtcSession::CreateVoiceChannel(const cricket::ContentInfo* content) { |
voice_channel_->SignalDtlsSetupFailure.connect( |
this, &WebRtcSession::OnDtlsSetupFailure); |
+ voice_channel_->transport_channel()->SignalSentPacket.connect( |
+ this, &WebRtcSession::OnSentPacket); |
return true; |
} |
bool WebRtcSession::CreateVideoChannel(const cricket::ContentInfo* content) { |
video_channel_.reset(channel_manager_->CreateVideoChannel( |
- media_controller_.get(), transport_controller(), content->name, true, |
+ media_controller_, transport_controller(), content->name, true, |
video_options_)); |
if (!video_channel_) { |
return false; |
@@ -1840,6 +1843,8 @@ bool WebRtcSession::CreateVideoChannel(const cricket::ContentInfo* content) { |
video_channel_->SignalDtlsSetupFailure.connect( |
this, &WebRtcSession::OnDtlsSetupFailure); |
+ video_channel_->transport_channel()->SignalSentPacket.connect( |
+ this, &WebRtcSession::OnSentPacket); |
return true; |
} |
@@ -1862,6 +1867,8 @@ bool WebRtcSession::CreateDataChannel(const cricket::ContentInfo* content) { |
data_channel_->SignalDtlsSetupFailure.connect( |
this, &WebRtcSession::OnDtlsSetupFailure); |
+ data_channel_->transport_channel()->SignalSentPacket.connect( |
+ this, &WebRtcSession::OnSentPacket); |
return true; |
} |
@@ -2185,4 +2192,16 @@ void WebRtcSession::ReportNegotiatedCiphers( |
} |
} |
+void WebRtcSession::OnSentPacket(cricket::TransportChannel* channel, |
+ const rtc::SentPacket& sent_packet) { |
+ worker_thread()->Invoke<void>( |
+ rtc::Bind(&WebRtcSession::OnSentPacket_w, this, sent_packet)); |
+ media_controller_->call_w()->OnSentPacket(sent_packet); |
pthatcher1
2015/10/13 05:31:13
Two things:
1. If you hop to the worker thread,
stefan-webrtc
2015/10/13 08:09:20
You are right, it should. Keeping OnSentPacket_w.
|
+} |
+ |
+void WebRtcSession::OnSentPacket_w(const rtc::SentPacket& sent_packet) { |
+ RTC_DCHECK(worker_thread()->IsCurrent()); |
+ media_controller_->call_w()->OnSentPacket(sent_packet); |
+} |
+ |
} // namespace webrtc |