| 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 499 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 510 } | 510 } |
| 511 | 511 |
| 512 void RemoveMsidFromReceivedSdp(bool remove) { remove_msid_ = remove; } | 512 void RemoveMsidFromReceivedSdp(bool remove) { remove_msid_ = remove; } |
| 513 | 513 |
| 514 void RemoveSdesCryptoFromReceivedSdp(bool remove) { remove_sdes_ = remove; } | 514 void RemoveSdesCryptoFromReceivedSdp(bool remove) { remove_sdes_ = remove; } |
| 515 | 515 |
| 516 void RemoveBundleFromReceivedSdp(bool remove) { remove_bundle_ = remove; } | 516 void RemoveBundleFromReceivedSdp(bool remove) { remove_bundle_ = remove; } |
| 517 | 517 |
| 518 void RemoveCvoFromReceivedSdp(bool remove) { remove_cvo_ = remove; } | 518 void RemoveCvoFromReceivedSdp(bool remove) { remove_cvo_ = remove; } |
| 519 | 519 |
| 520 void MakeSpecCompliantMaxBundleOfferFromReceivedSdp(bool real) { |
| 521 make_spec_compliant_max_bundle_offer_ = real; |
| 522 } |
| 523 |
| 520 bool can_receive_audio() { | 524 bool can_receive_audio() { |
| 521 bool value; | 525 bool value; |
| 522 if (prefer_constraint_apis_) { | 526 if (prefer_constraint_apis_) { |
| 523 if (webrtc::FindConstraint( | 527 if (webrtc::FindConstraint( |
| 524 &offer_answer_constraints_, | 528 &offer_answer_constraints_, |
| 525 MediaConstraintsInterface::kOfferToReceiveAudio, &value, | 529 MediaConstraintsInterface::kOfferToReceiveAudio, &value, |
| 526 nullptr)) { | 530 nullptr)) { |
| 527 return value; | 531 return value; |
| 528 } | 532 } |
| 529 return true; | 533 return true; |
| (...skipping 512 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1042 } | 1046 } |
| 1043 | 1047 |
| 1044 void HandleIncomingOffer(const std::string& msg) { | 1048 void HandleIncomingOffer(const std::string& msg) { |
| 1045 LOG(INFO) << id_ << "HandleIncomingOffer "; | 1049 LOG(INFO) << id_ << "HandleIncomingOffer "; |
| 1046 if (NumberOfLocalMediaStreams() == 0 && auto_add_stream_) { | 1050 if (NumberOfLocalMediaStreams() == 0 && auto_add_stream_) { |
| 1047 // If we are not sending any streams ourselves it is time to add some. | 1051 // If we are not sending any streams ourselves it is time to add some. |
| 1048 AddMediaStream(true, true); | 1052 AddMediaStream(true, true); |
| 1049 } | 1053 } |
| 1050 std::unique_ptr<SessionDescriptionInterface> desc( | 1054 std::unique_ptr<SessionDescriptionInterface> desc( |
| 1051 webrtc::CreateSessionDescription("offer", msg, nullptr)); | 1055 webrtc::CreateSessionDescription("offer", msg, nullptr)); |
| 1056 |
| 1057 // Do the equivalent of setting the port to 0, adding a=bundle-only, and |
| 1058 // removing a=ice-ufrag, a=ice-pwd, a=fingerprint and a=setup from all but |
| 1059 // the first m= section. |
| 1060 if (make_spec_compliant_max_bundle_offer_) { |
| 1061 bool first = true; |
| 1062 for (cricket::ContentInfo& content : desc->description()->contents()) { |
| 1063 if (first) { |
| 1064 first = false; |
| 1065 continue; |
| 1066 } |
| 1067 content.bundle_only = true; |
| 1068 } |
| 1069 first = true; |
| 1070 for (cricket::TransportInfo& transport : |
| 1071 desc->description()->transport_infos()) { |
| 1072 if (first) { |
| 1073 first = false; |
| 1074 continue; |
| 1075 } |
| 1076 transport.description.ice_ufrag.clear(); |
| 1077 transport.description.ice_pwd.clear(); |
| 1078 transport.description.connection_role = cricket::CONNECTIONROLE_NONE; |
| 1079 transport.description.identity_fingerprint.reset(nullptr); |
| 1080 } |
| 1081 } |
| 1082 |
| 1052 EXPECT_TRUE(DoSetRemoteDescription(desc.release())); | 1083 EXPECT_TRUE(DoSetRemoteDescription(desc.release())); |
| 1053 // Set the RtpReceiverObserver after receivers are created. | 1084 // Set the RtpReceiverObserver after receivers are created. |
| 1054 SetRtpReceiverObservers(); | 1085 SetRtpReceiverObservers(); |
| 1055 std::unique_ptr<SessionDescriptionInterface> answer; | 1086 std::unique_ptr<SessionDescriptionInterface> answer; |
| 1056 EXPECT_TRUE(DoCreateAnswer(&answer)); | 1087 EXPECT_TRUE(DoCreateAnswer(&answer)); |
| 1057 std::string sdp; | 1088 std::string sdp; |
| 1058 EXPECT_TRUE(answer->ToString(&sdp)); | 1089 EXPECT_TRUE(answer->ToString(&sdp)); |
| 1059 EXPECT_TRUE(DoSetLocalDescription(answer.release())); | 1090 EXPECT_TRUE(DoSetLocalDescription(answer.release())); |
| 1060 SendSdpMessage(webrtc::SessionDescriptionInterface::kAnswer, sdp); | 1091 SendSdpMessage(webrtc::SessionDescriptionInterface::kAnswer, sdp); |
| 1061 } | 1092 } |
| (...skipping 140 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1202 webrtc::FakeConstraints offer_answer_constraints_; | 1233 webrtc::FakeConstraints offer_answer_constraints_; |
| 1203 PeerConnectionInterface::RTCOfferAnswerOptions offer_answer_options_; | 1234 PeerConnectionInterface::RTCOfferAnswerOptions offer_answer_options_; |
| 1204 bool remove_msid_ = false; // True if MSID should be removed in received SDP. | 1235 bool remove_msid_ = false; // True if MSID should be removed in received SDP. |
| 1205 bool remove_bundle_ = | 1236 bool remove_bundle_ = |
| 1206 false; // True if bundle should be removed in received SDP. | 1237 false; // True if bundle should be removed in received SDP. |
| 1207 bool remove_sdes_ = | 1238 bool remove_sdes_ = |
| 1208 false; // True if a=crypto should be removed in received SDP. | 1239 false; // True if a=crypto should be removed in received SDP. |
| 1209 // |remove_cvo_| is true if extension urn:3gpp:video-orientation should be | 1240 // |remove_cvo_| is true if extension urn:3gpp:video-orientation should be |
| 1210 // removed in the received SDP. | 1241 // removed in the received SDP. |
| 1211 bool remove_cvo_ = false; | 1242 bool remove_cvo_ = false; |
| 1243 // See LocalP2PTestWithSpecCompliantMaxBundleOffer. |
| 1244 bool make_spec_compliant_max_bundle_offer_ = false; |
| 1212 | 1245 |
| 1213 rtc::scoped_refptr<DataChannelInterface> data_channel_; | 1246 rtc::scoped_refptr<DataChannelInterface> data_channel_; |
| 1214 std::unique_ptr<MockDataChannelObserver> data_observer_; | 1247 std::unique_ptr<MockDataChannelObserver> data_observer_; |
| 1215 | 1248 |
| 1216 std::vector<std::unique_ptr<MockRtpReceiverObserver>> rtp_receiver_observers_; | 1249 std::vector<std::unique_ptr<MockRtpReceiverObserver>> rtp_receiver_observers_; |
| 1217 }; | 1250 }; |
| 1218 | 1251 |
| 1219 class P2PTestConductor : public testing::Test { | 1252 class P2PTestConductor : public testing::Test { |
| 1220 public: | 1253 public: |
| 1221 P2PTestConductor() | 1254 P2PTestConductor() |
| (...skipping 620 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1842 FakeConstraints constraint; | 1875 FakeConstraints constraint; |
| 1843 constraint.SetOptionalMaxWidth(320); | 1876 constraint.SetOptionalMaxWidth(320); |
| 1844 SetVideoConstraints(constraint, constraint); | 1877 SetVideoConstraints(constraint, constraint); |
| 1845 initializing_client()->AddMediaStream(true, true); | 1878 initializing_client()->AddMediaStream(true, true); |
| 1846 initializing_client()->AddMediaStream(false, true); | 1879 initializing_client()->AddMediaStream(false, true); |
| 1847 ASSERT_EQ(2u, initializing_client()->NumberOfLocalMediaStreams()); | 1880 ASSERT_EQ(2u, initializing_client()->NumberOfLocalMediaStreams()); |
| 1848 LocalP2PTest(); | 1881 LocalP2PTest(); |
| 1849 EXPECT_EQ(2u, receiving_client()->number_of_remote_streams()); | 1882 EXPECT_EQ(2u, receiving_client()->number_of_remote_streams()); |
| 1850 } | 1883 } |
| 1851 | 1884 |
| 1885 // Test that if applying a true "max bundle" offer, which uses ports of 0, |
| 1886 // "a=bundle-only", omitting "a=fingerprint", "a=setup", "a=ice-ufrag" and |
| 1887 // "a=ice-pwd" for all but the audio "m=" section, negotiation still completes |
| 1888 // successfully and media flows. |
| 1889 // TODO(deadbeef): Update this test to also omit "a=rtcp-mux", once that works. |
| 1890 // TODO(deadbeef): Won't need this test once we start generating actual |
| 1891 // standards-compliant SDP. |
| 1892 TEST_F(P2PTestConductor, LocalP2PTestWithSpecCompliantMaxBundleOffer) { |
| 1893 ASSERT_TRUE(CreateTestClients()); |
| 1894 receiving_client()->MakeSpecCompliantMaxBundleOfferFromReceivedSdp(true); |
| 1895 LocalP2PTest(); |
| 1896 } |
| 1897 |
| 1852 // Test that we can receive the audio output level from a remote audio track. | 1898 // Test that we can receive the audio output level from a remote audio track. |
| 1853 TEST_F(P2PTestConductor, GetAudioOutputLevelStats) { | 1899 TEST_F(P2PTestConductor, GetAudioOutputLevelStats) { |
| 1854 ASSERT_TRUE(CreateTestClients()); | 1900 ASSERT_TRUE(CreateTestClients()); |
| 1855 LocalP2PTest(); | 1901 LocalP2PTest(); |
| 1856 | 1902 |
| 1857 StreamCollectionInterface* remote_streams = | 1903 StreamCollectionInterface* remote_streams = |
| 1858 initializing_client()->remote_streams(); | 1904 initializing_client()->remote_streams(); |
| 1859 ASSERT_GT(remote_streams->count(), 0u); | 1905 ASSERT_GT(remote_streams->count(), 0u); |
| 1860 ASSERT_GT(remote_streams->at(0)->GetAudioTracks().size(), 0u); | 1906 ASSERT_GT(remote_streams->at(0)->GetAudioTracks().size(), 0u); |
| 1861 MediaStreamTrackInterface* remote_audio_track = | 1907 MediaStreamTrackInterface* remote_audio_track = |
| (...skipping 959 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2821 servers.push_back(server); | 2867 servers.push_back(server); |
| 2822 EXPECT_EQ(webrtc::RTCErrorType::NONE, | 2868 EXPECT_EQ(webrtc::RTCErrorType::NONE, |
| 2823 webrtc::ParseIceServers(servers, &stun_servers_, &turn_servers_)); | 2869 webrtc::ParseIceServers(servers, &stun_servers_, &turn_servers_)); |
| 2824 EXPECT_EQ(2U, turn_servers_.size()); | 2870 EXPECT_EQ(2U, turn_servers_.size()); |
| 2825 EXPECT_NE(turn_servers_[0].priority, turn_servers_[1].priority); | 2871 EXPECT_NE(turn_servers_[0].priority, turn_servers_[1].priority); |
| 2826 } | 2872 } |
| 2827 | 2873 |
| 2828 #endif // if !defined(THREAD_SANITIZER) | 2874 #endif // if !defined(THREAD_SANITIZER) |
| 2829 | 2875 |
| 2830 } // namespace | 2876 } // namespace |
| OLD | NEW |