| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright 2012 The WebRTC project authors. All Rights Reserved. | 2 * Copyright 2012 The WebRTC project authors. All Rights Reserved. |
| 3 * | 3 * |
| 4 * Use of this source code is governed by a BSD-style license | 4 * Use of this source code is governed by a BSD-style license |
| 5 * that can be found in the LICENSE file in the root of the source | 5 * that can be found in the LICENSE file in the root of the source |
| 6 * tree. An additional intellectual property rights grant can be found | 6 * tree. An additional intellectual property rights grant can be found |
| 7 * in the file PATENTS. All contributing project authors may | 7 * in the file PATENTS. All contributing project authors may |
| 8 * be found in the AUTHORS file in the root of the source tree. | 8 * be found in the AUTHORS file in the root of the source tree. |
| 9 */ | 9 */ |
| 10 | 10 |
| (...skipping 952 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 963 } | 963 } |
| 964 const TransportInfo* transport_info = | 964 const TransportInfo* transport_info = |
| 965 description->GetTransportInfoByName(content_name); | 965 description->GetTransportInfoByName(content_name); |
| 966 if (!transport_info) { | 966 if (!transport_info) { |
| 967 return false; | 967 return false; |
| 968 } | 968 } |
| 969 *tdesc = transport_info->description; | 969 *tdesc = transport_info->description; |
| 970 return true; | 970 return true; |
| 971 } | 971 } |
| 972 | 972 |
| 973 bool WebRtcSession::GetTransportStats(SessionStats* stats) { | 973 std::unique_ptr<SessionStats> WebRtcSession::GetStats_s() { |
| 974 ASSERT(signaling_thread()->IsCurrent()); | 974 ASSERT(signaling_thread()->IsCurrent()); |
| 975 return (GetChannelTransportStats(voice_channel(), stats) && | 975 ChannelNamePairs channel_name_pairs; |
| 976 GetChannelTransportStats(video_channel(), stats) && | 976 if (voice_channel()) { |
| 977 GetChannelTransportStats(data_channel(), stats)); | 977 channel_name_pairs.voice = rtc::Optional<ChannelNamePair>(ChannelNamePair( |
| 978 voice_channel()->content_name(), voice_channel()->transport_name())); |
| 979 } |
| 980 if (video_channel()) { |
| 981 channel_name_pairs.video = rtc::Optional<ChannelNamePair>(ChannelNamePair( |
| 982 video_channel()->content_name(), video_channel()->transport_name())); |
| 983 } |
| 984 if (data_channel()) { |
| 985 channel_name_pairs.data = rtc::Optional<ChannelNamePair>(ChannelNamePair( |
| 986 data_channel()->content_name(), data_channel()->transport_name())); |
| 987 } |
| 988 return GetStats(channel_name_pairs); |
| 978 } | 989 } |
| 979 | 990 |
| 980 bool WebRtcSession::GetChannelTransportStats(cricket::BaseChannel* ch, | 991 std::unique_ptr<SessionStats> WebRtcSession::GetStats( |
| 981 SessionStats* stats) { | 992 const ChannelNamePairs& channel_name_pairs) { |
| 982 ASSERT(signaling_thread()->IsCurrent()); | 993 if (network_thread()->IsCurrent()) { |
| 983 if (!ch) { | 994 return GetStats_n(channel_name_pairs); |
| 984 // Not using this channel. | |
| 985 return true; | |
| 986 } | 995 } |
| 987 | 996 return network_thread()->Invoke<std::unique_ptr<SessionStats>>( |
| 988 const std::string& content_name = ch->content_name(); | 997 RTC_FROM_HERE, |
| 989 const std::string& transport_name = ch->transport_name(); | 998 rtc::Bind(&WebRtcSession::GetStats_n, this, channel_name_pairs)); |
| 990 stats->proxy_to_transport[content_name] = transport_name; | |
| 991 if (stats->transport_stats.find(transport_name) != | |
| 992 stats->transport_stats.end()) { | |
| 993 // Transport stats already done for this transport. | |
| 994 return true; | |
| 995 } | |
| 996 | |
| 997 cricket::TransportStats tstats; | |
| 998 if (!transport_controller_->GetStats(transport_name, &tstats)) { | |
| 999 return false; | |
| 1000 } | |
| 1001 | |
| 1002 stats->transport_stats[transport_name] = tstats; | |
| 1003 return true; | |
| 1004 } | 999 } |
| 1005 | 1000 |
| 1006 bool WebRtcSession::GetLocalCertificate( | 1001 bool WebRtcSession::GetLocalCertificate( |
| 1007 const std::string& transport_name, | 1002 const std::string& transport_name, |
| 1008 rtc::scoped_refptr<rtc::RTCCertificate>* certificate) { | 1003 rtc::scoped_refptr<rtc::RTCCertificate>* certificate) { |
| 1009 ASSERT(signaling_thread()->IsCurrent()); | |
| 1010 return transport_controller_->GetLocalCertificate(transport_name, | 1004 return transport_controller_->GetLocalCertificate(transport_name, |
| 1011 certificate); | 1005 certificate); |
| 1012 } | 1006 } |
| 1013 | 1007 |
| 1014 std::unique_ptr<rtc::SSLCertificate> WebRtcSession::GetRemoteSSLCertificate( | 1008 std::unique_ptr<rtc::SSLCertificate> WebRtcSession::GetRemoteSSLCertificate( |
| 1015 const std::string& transport_name) { | 1009 const std::string& transport_name) { |
| 1016 ASSERT(signaling_thread()->IsCurrent()); | |
| 1017 return transport_controller_->GetRemoteSSLCertificate(transport_name); | 1010 return transport_controller_->GetRemoteSSLCertificate(transport_name); |
| 1018 } | 1011 } |
| 1019 | 1012 |
| 1020 bool WebRtcSession::EnableBundle(const cricket::ContentGroup& bundle) { | 1013 bool WebRtcSession::EnableBundle(const cricket::ContentGroup& bundle) { |
| 1021 const std::string* first_content_name = bundle.FirstContentName(); | 1014 const std::string* first_content_name = bundle.FirstContentName(); |
| 1022 if (!first_content_name) { | 1015 if (!first_content_name) { |
| 1023 LOG(LS_WARNING) << "Tried to BUNDLE with no contents."; | 1016 LOG(LS_WARNING) << "Tried to BUNDLE with no contents."; |
| 1024 return false; | 1017 return false; |
| 1025 } | 1018 } |
| 1026 const std::string& transport_name = *first_content_name; | 1019 const std::string& transport_name = *first_content_name; |
| (...skipping 682 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1709 } | 1702 } |
| 1710 | 1703 |
| 1711 data_channel_->SignalDtlsSetupFailure.connect( | 1704 data_channel_->SignalDtlsSetupFailure.connect( |
| 1712 this, &WebRtcSession::OnDtlsSetupFailure); | 1705 this, &WebRtcSession::OnDtlsSetupFailure); |
| 1713 | 1706 |
| 1714 SignalDataChannelCreated(); | 1707 SignalDataChannelCreated(); |
| 1715 data_channel_->SignalSentPacket.connect(this, &WebRtcSession::OnSentPacket_w); | 1708 data_channel_->SignalSentPacket.connect(this, &WebRtcSession::OnSentPacket_w); |
| 1716 return true; | 1709 return true; |
| 1717 } | 1710 } |
| 1718 | 1711 |
| 1712 std::unique_ptr<SessionStats> WebRtcSession::GetStats_n( |
| 1713 const ChannelNamePairs& channel_name_pairs) { |
| 1714 ASSERT(network_thread()->IsCurrent()); |
| 1715 std::unique_ptr<SessionStats> session_stats(new SessionStats()); |
| 1716 for (const auto channel_name_pair : { &channel_name_pairs.voice, |
| 1717 &channel_name_pairs.video, |
| 1718 &channel_name_pairs.data }) { |
| 1719 if (*channel_name_pair) { |
| 1720 cricket::TransportStats transport_stats; |
| 1721 if (!transport_controller_->GetStats((*channel_name_pair)->transport_name, |
| 1722 &transport_stats)) { |
| 1723 return nullptr; |
| 1724 } |
| 1725 session_stats->proxy_to_transport[(*channel_name_pair)->content_name] = |
| 1726 (*channel_name_pair)->transport_name; |
| 1727 session_stats->transport_stats[(*channel_name_pair)->transport_name] = |
| 1728 std::move(transport_stats); |
| 1729 } |
| 1730 } |
| 1731 return session_stats; |
| 1732 } |
| 1733 |
| 1719 void WebRtcSession::OnDtlsSetupFailure(cricket::BaseChannel*, bool rtcp) { | 1734 void WebRtcSession::OnDtlsSetupFailure(cricket::BaseChannel*, bool rtcp) { |
| 1720 SetError(ERROR_TRANSPORT, | 1735 SetError(ERROR_TRANSPORT, |
| 1721 rtcp ? kDtlsSetupFailureRtcp : kDtlsSetupFailureRtp); | 1736 rtcp ? kDtlsSetupFailureRtcp : kDtlsSetupFailureRtp); |
| 1722 } | 1737 } |
| 1723 | 1738 |
| 1724 void WebRtcSession::OnDataChannelMessageReceived( | 1739 void WebRtcSession::OnDataChannelMessageReceived( |
| 1725 cricket::DataChannel* channel, | 1740 cricket::DataChannel* channel, |
| 1726 const cricket::ReceiveDataParams& params, | 1741 const cricket::ReceiveDataParams& params, |
| 1727 const rtc::CopyOnWriteBuffer& payload) { | 1742 const rtc::CopyOnWriteBuffer& payload) { |
| 1728 RTC_DCHECK(data_channel_type_ == cricket::DCT_SCTP); | 1743 RTC_DCHECK(data_channel_type_ == cricket::DCT_SCTP); |
| (...skipping 330 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2059 } | 2074 } |
| 2060 | 2075 |
| 2061 void WebRtcSession::OnDtlsHandshakeError(rtc::SSLHandshakeError error) { | 2076 void WebRtcSession::OnDtlsHandshakeError(rtc::SSLHandshakeError error) { |
| 2062 if (metrics_observer_) { | 2077 if (metrics_observer_) { |
| 2063 metrics_observer_->IncrementEnumCounter( | 2078 metrics_observer_->IncrementEnumCounter( |
| 2064 webrtc::kEnumCounterDtlsHandshakeError, static_cast<int>(error), | 2079 webrtc::kEnumCounterDtlsHandshakeError, static_cast<int>(error), |
| 2065 static_cast<int>(rtc::SSLHandshakeError::MAX_VALUE)); | 2080 static_cast<int>(rtc::SSLHandshakeError::MAX_VALUE)); |
| 2066 } | 2081 } |
| 2067 } | 2082 } |
| 2068 } // namespace webrtc | 2083 } // namespace webrtc |
| OLD | NEW |