OLD | NEW |
1 /* | 1 /* |
2 * libjingle | 2 * libjingle |
3 * Copyright 2012 Google Inc. | 3 * Copyright 2012 Google Inc. |
4 * | 4 * |
5 * Redistribution and use in source and binary forms, with or without | 5 * Redistribution and use in source and binary forms, with or without |
6 * modification, are permitted provided that the following conditions are met: | 6 * modification, are permitted provided that the following conditions are met: |
7 * | 7 * |
8 * 1. Redistributions of source code must retain the above copyright notice, | 8 * 1. Redistributions of source code must retain the above copyright notice, |
9 * this list of conditions and the following disclaimer. | 9 * this list of conditions and the following disclaimer. |
10 * 2. Redistributions in binary form must reproduce the above copyright notice, | 10 * 2. Redistributions in binary form must reproduce the above copyright notice, |
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
44 #include "talk/media/base/videocapturer.h" | 44 #include "talk/media/base/videocapturer.h" |
45 #include "talk/session/media/channel.h" | 45 #include "talk/session/media/channel.h" |
46 #include "talk/session/media/channelmanager.h" | 46 #include "talk/session/media/channelmanager.h" |
47 #include "talk/session/media/mediasession.h" | 47 #include "talk/session/media/mediasession.h" |
48 #include "webrtc/base/basictypes.h" | 48 #include "webrtc/base/basictypes.h" |
49 #include "webrtc/base/checks.h" | 49 #include "webrtc/base/checks.h" |
50 #include "webrtc/base/helpers.h" | 50 #include "webrtc/base/helpers.h" |
51 #include "webrtc/base/logging.h" | 51 #include "webrtc/base/logging.h" |
52 #include "webrtc/base/stringencode.h" | 52 #include "webrtc/base/stringencode.h" |
53 #include "webrtc/base/stringutils.h" | 53 #include "webrtc/base/stringutils.h" |
| 54 #include "webrtc/call.h" |
54 #include "webrtc/p2p/base/portallocator.h" | 55 #include "webrtc/p2p/base/portallocator.h" |
| 56 #include "webrtc/p2p/base/transportchannel.h" |
55 | 57 |
56 using cricket::ContentInfo; | 58 using cricket::ContentInfo; |
57 using cricket::ContentInfos; | 59 using cricket::ContentInfos; |
58 using cricket::MediaContentDescription; | 60 using cricket::MediaContentDescription; |
59 using cricket::SessionDescription; | 61 using cricket::SessionDescription; |
60 using cricket::TransportInfo; | 62 using cricket::TransportInfo; |
61 | 63 |
62 using cricket::LOCAL_PORT_TYPE; | 64 using cricket::LOCAL_PORT_TYPE; |
63 using cricket::STUN_PORT_TYPE; | 65 using cricket::STUN_PORT_TYPE; |
64 using cricket::RELAY_PORT_TYPE; | 66 using cricket::RELAY_PORT_TYPE; |
(...skipping 457 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
522 return true; | 524 return true; |
523 } | 525 } |
524 } | 526 } |
525 return false; | 527 return false; |
526 } | 528 } |
527 | 529 |
528 private: | 530 private: |
529 bool ice_restart_; | 531 bool ice_restart_; |
530 }; | 532 }; |
531 | 533 |
532 WebRtcSession::WebRtcSession(cricket::ChannelManager* channel_manager, | 534 WebRtcSession::WebRtcSession(webrtc::MediaControllerInterface* media_controller, |
533 rtc::Thread* signaling_thread, | 535 rtc::Thread* signaling_thread, |
534 rtc::Thread* worker_thread, | 536 rtc::Thread* worker_thread, |
535 cricket::PortAllocator* port_allocator) | 537 cricket::PortAllocator* port_allocator) |
536 : signaling_thread_(signaling_thread), | 538 : signaling_thread_(signaling_thread), |
537 worker_thread_(worker_thread), | 539 worker_thread_(worker_thread), |
538 port_allocator_(port_allocator), | 540 port_allocator_(port_allocator), |
539 // RFC 3264: The numeric value of the session id and version in the | 541 // RFC 3264: The numeric value of the session id and version in the |
540 // o line MUST be representable with a "64 bit signed integer". | 542 // o line MUST be representable with a "64 bit signed integer". |
541 // Due to this constraint session id |sid_| is max limited to LLONG_MAX. | 543 // Due to this constraint session id |sid_| is max limited to LLONG_MAX. |
542 sid_(rtc::ToString(rtc::CreateRandomId64() & LLONG_MAX)), | 544 sid_(rtc::ToString(rtc::CreateRandomId64() & LLONG_MAX)), |
543 transport_controller_(new cricket::TransportController(signaling_thread, | 545 transport_controller_(new cricket::TransportController(signaling_thread, |
544 worker_thread, | 546 worker_thread, |
545 port_allocator)), | 547 port_allocator)), |
546 channel_manager_(channel_manager), | 548 media_controller_(media_controller), |
| 549 channel_manager_(media_controller_->channel_manager()), |
547 ice_observer_(NULL), | 550 ice_observer_(NULL), |
548 ice_connection_state_(PeerConnectionInterface::kIceConnectionNew), | 551 ice_connection_state_(PeerConnectionInterface::kIceConnectionNew), |
549 ice_connection_receiving_(true), | 552 ice_connection_receiving_(true), |
550 older_version_remote_peer_(false), | 553 older_version_remote_peer_(false), |
551 dtls_enabled_(false), | 554 dtls_enabled_(false), |
552 data_channel_type_(cricket::DCT_NONE), | 555 data_channel_type_(cricket::DCT_NONE), |
553 ice_restart_latch_(new IceRestartAnswerLatch), | 556 ice_restart_latch_(new IceRestartAnswerLatch), |
554 metrics_observer_(NULL) { | 557 metrics_observer_(NULL) { |
555 transport_controller_->SetIceRole(cricket::ICEROLE_CONTROLLED); | 558 transport_controller_->SetIceRole(cricket::ICEROLE_CONTROLLED); |
556 transport_controller_->SignalConnectionState.connect( | 559 transport_controller_->SignalConnectionState.connect( |
(...skipping 199 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
756 } | 759 } |
757 port_allocator()->set_candidate_filter( | 760 port_allocator()->set_candidate_filter( |
758 ConvertIceTransportTypeToCandidateFilter(rtc_configuration.type)); | 761 ConvertIceTransportTypeToCandidateFilter(rtc_configuration.type)); |
759 | 762 |
760 if (rtc_configuration.enable_localhost_ice_candidate) { | 763 if (rtc_configuration.enable_localhost_ice_candidate) { |
761 port_allocator()->set_flags( | 764 port_allocator()->set_flags( |
762 port_allocator()->flags() | | 765 port_allocator()->flags() | |
763 cricket::PORTALLOCATOR_ENABLE_LOCALHOST_CANDIDATE); | 766 cricket::PORTALLOCATOR_ENABLE_LOCALHOST_CANDIDATE); |
764 } | 767 } |
765 | 768 |
766 media_controller_.reset(MediaControllerInterface::Create( | |
767 worker_thread(), channel_manager_->media_engine()->GetVoE())); | |
768 | |
769 return true; | 769 return true; |
770 } | 770 } |
771 | 771 |
772 void WebRtcSession::Close() { | 772 void WebRtcSession::Close() { |
773 SetState(STATE_CLOSED); | 773 SetState(STATE_CLOSED); |
774 RemoveUnusedChannels(nullptr); | 774 RemoveUnusedChannels(nullptr); |
775 ASSERT(!voice_channel_); | 775 ASSERT(!voice_channel_); |
776 ASSERT(!video_channel_); | 776 ASSERT(!video_channel_); |
777 ASSERT(!data_channel_); | 777 ASSERT(!data_channel_); |
778 } | 778 } |
(...skipping 1058 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1837 LOG(LS_WARNING) << "max-bundle failed to enable bundling."; | 1837 LOG(LS_WARNING) << "max-bundle failed to enable bundling."; |
1838 return false; | 1838 return false; |
1839 } | 1839 } |
1840 } | 1840 } |
1841 | 1841 |
1842 return true; | 1842 return true; |
1843 } | 1843 } |
1844 | 1844 |
1845 bool WebRtcSession::CreateVoiceChannel(const cricket::ContentInfo* content) { | 1845 bool WebRtcSession::CreateVoiceChannel(const cricket::ContentInfo* content) { |
1846 voice_channel_.reset(channel_manager_->CreateVoiceChannel( | 1846 voice_channel_.reset(channel_manager_->CreateVoiceChannel( |
1847 media_controller_.get(), transport_controller_.get(), content->name, true, | 1847 media_controller_, transport_controller_.get(), content->name, true, |
1848 audio_options_)); | 1848 audio_options_)); |
1849 if (!voice_channel_) { | 1849 if (!voice_channel_) { |
1850 return false; | 1850 return false; |
1851 } | 1851 } |
1852 | 1852 |
1853 voice_channel_->SignalDtlsSetupFailure.connect( | 1853 voice_channel_->SignalDtlsSetupFailure.connect( |
1854 this, &WebRtcSession::OnDtlsSetupFailure); | 1854 this, &WebRtcSession::OnDtlsSetupFailure); |
1855 | 1855 |
1856 SignalVoiceChannelCreated(); | 1856 SignalVoiceChannelCreated(); |
| 1857 voice_channel_->transport_channel()->SignalSentPacket.connect( |
| 1858 this, &WebRtcSession::OnSentPacket_w); |
1857 return true; | 1859 return true; |
1858 } | 1860 } |
1859 | 1861 |
1860 bool WebRtcSession::CreateVideoChannel(const cricket::ContentInfo* content) { | 1862 bool WebRtcSession::CreateVideoChannel(const cricket::ContentInfo* content) { |
1861 video_channel_.reset(channel_manager_->CreateVideoChannel( | 1863 video_channel_.reset(channel_manager_->CreateVideoChannel( |
1862 media_controller_.get(), transport_controller_.get(), content->name, true, | 1864 media_controller_, transport_controller_.get(), content->name, true, |
1863 video_options_)); | 1865 video_options_)); |
1864 if (!video_channel_) { | 1866 if (!video_channel_) { |
1865 return false; | 1867 return false; |
1866 } | 1868 } |
1867 | 1869 |
1868 video_channel_->SignalDtlsSetupFailure.connect( | 1870 video_channel_->SignalDtlsSetupFailure.connect( |
1869 this, &WebRtcSession::OnDtlsSetupFailure); | 1871 this, &WebRtcSession::OnDtlsSetupFailure); |
1870 | 1872 |
1871 SignalVideoChannelCreated(); | 1873 SignalVideoChannelCreated(); |
| 1874 video_channel_->transport_channel()->SignalSentPacket.connect( |
| 1875 this, &WebRtcSession::OnSentPacket_w); |
1872 return true; | 1876 return true; |
1873 } | 1877 } |
1874 | 1878 |
1875 bool WebRtcSession::CreateDataChannel(const cricket::ContentInfo* content) { | 1879 bool WebRtcSession::CreateDataChannel(const cricket::ContentInfo* content) { |
1876 bool sctp = (data_channel_type_ == cricket::DCT_SCTP); | 1880 bool sctp = (data_channel_type_ == cricket::DCT_SCTP); |
1877 data_channel_.reset(channel_manager_->CreateDataChannel( | 1881 data_channel_.reset(channel_manager_->CreateDataChannel( |
1878 transport_controller_.get(), content->name, !sctp, data_channel_type_)); | 1882 transport_controller_.get(), content->name, !sctp, data_channel_type_)); |
1879 if (!data_channel_) { | 1883 if (!data_channel_) { |
1880 return false; | 1884 return false; |
1881 } | 1885 } |
1882 | 1886 |
1883 if (sctp) { | 1887 if (sctp) { |
1884 data_channel_->SignalDataReceived.connect( | 1888 data_channel_->SignalDataReceived.connect( |
1885 this, &WebRtcSession::OnDataChannelMessageReceived); | 1889 this, &WebRtcSession::OnDataChannelMessageReceived); |
1886 } | 1890 } |
1887 | 1891 |
1888 data_channel_->SignalDtlsSetupFailure.connect( | 1892 data_channel_->SignalDtlsSetupFailure.connect( |
1889 this, &WebRtcSession::OnDtlsSetupFailure); | 1893 this, &WebRtcSession::OnDtlsSetupFailure); |
1890 | 1894 |
1891 SignalDataChannelCreated(); | 1895 SignalDataChannelCreated(); |
| 1896 data_channel_->transport_channel()->SignalSentPacket.connect( |
| 1897 this, &WebRtcSession::OnSentPacket_w); |
1892 return true; | 1898 return true; |
1893 } | 1899 } |
1894 | 1900 |
1895 void WebRtcSession::OnDtlsSetupFailure(cricket::BaseChannel*, bool rtcp) { | 1901 void WebRtcSession::OnDtlsSetupFailure(cricket::BaseChannel*, bool rtcp) { |
1896 SetError(ERROR_TRANSPORT, | 1902 SetError(ERROR_TRANSPORT, |
1897 rtcp ? kDtlsSetupFailureRtcp : kDtlsSetupFailureRtp); | 1903 rtcp ? kDtlsSetupFailureRtcp : kDtlsSetupFailureRtp); |
1898 } | 1904 } |
1899 | 1905 |
1900 void WebRtcSession::OnDataChannelMessageReceived( | 1906 void WebRtcSession::OnDataChannelMessageReceived( |
1901 cricket::DataChannel* channel, | 1907 cricket::DataChannel* channel, |
(...skipping 296 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2198 | 2204 |
2199 if (!srtp_cipher.empty()) { | 2205 if (!srtp_cipher.empty()) { |
2200 metrics_observer_->IncrementSparseEnumCounter( | 2206 metrics_observer_->IncrementSparseEnumCounter( |
2201 srtp_counter_type, rtc::GetSrtpCryptoSuiteFromName(srtp_cipher)); | 2207 srtp_counter_type, rtc::GetSrtpCryptoSuiteFromName(srtp_cipher)); |
2202 } | 2208 } |
2203 if (ssl_cipher) { | 2209 if (ssl_cipher) { |
2204 metrics_observer_->IncrementSparseEnumCounter(ssl_counter_type, ssl_cipher); | 2210 metrics_observer_->IncrementSparseEnumCounter(ssl_counter_type, ssl_cipher); |
2205 } | 2211 } |
2206 } | 2212 } |
2207 | 2213 |
| 2214 void WebRtcSession::OnSentPacket_w(cricket::TransportChannel* channel, |
| 2215 const rtc::SentPacket& sent_packet) { |
| 2216 RTC_DCHECK(worker_thread()->IsCurrent()); |
| 2217 media_controller_->call_w()->OnSentPacket(sent_packet); |
| 2218 } |
| 2219 |
2208 } // namespace webrtc | 2220 } // namespace webrtc |
OLD | NEW |