| OLD | NEW | 
|---|
| 1 /* | 1 /* | 
| 2  *  Copyright 2011 The WebRTC Project Authors. All rights reserved. | 2  *  Copyright 2011 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 70 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 81     ASSERT(certificate_); | 81     ASSERT(certificate_); | 
| 82     use_dtls_srtp_ = true; | 82     use_dtls_srtp_ = true; | 
| 83   } | 83   } | 
| 84   void SetupMaxProtocolVersion(rtc::SSLProtocolVersion version) { | 84   void SetupMaxProtocolVersion(rtc::SSLProtocolVersion version) { | 
| 85     ssl_max_version_ = version; | 85     ssl_max_version_ = version; | 
| 86   } | 86   } | 
| 87   void SetupChannels(int count, cricket::IceRole role, int async_delay_ms = 0) { | 87   void SetupChannels(int count, cricket::IceRole role, int async_delay_ms = 0) { | 
| 88     transport_.reset( | 88     transport_.reset( | 
| 89         new cricket::JsepTransport("dtls content name", certificate_)); | 89         new cricket::JsepTransport("dtls content name", certificate_)); | 
| 90     for (int i = 0; i < count; ++i) { | 90     for (int i = 0; i < count; ++i) { | 
| 91       cricket::FakeIceTransport* fake_ice_channel = | 91       cricket::FakeTransportChannel* fake_ice_channel = | 
| 92           new cricket::FakeIceTransport(transport_->mid(), i); | 92           new cricket::FakeTransportChannel(transport_->mid(), i); | 
| 93       fake_ice_channel->SetAsync(true); | 93       fake_ice_channel->SetAsync(true); | 
| 94       fake_ice_channel->SetAsyncDelay(async_delay_ms); | 94       fake_ice_channel->SetAsyncDelay(async_delay_ms); | 
| 95       // Hook the raw packets so that we can verify they are encrypted. | 95       // Hook the raw packets so that we can verify they are encrypted. | 
| 96       fake_ice_channel->SignalReadPacket.connect( | 96       fake_ice_channel->SignalReadPacket.connect( | 
| 97           this, &DtlsTestClient::OnFakeTransportChannelReadPacket); | 97           this, &DtlsTestClient::OnFakeTransportChannelReadPacket); | 
| 98 | 98 | 
| 99       cricket::DtlsTransportChannelWrapper* channel = | 99       cricket::DtlsTransportChannelWrapper* channel = | 
| 100           new cricket::DtlsTransportChannelWrapper(fake_ice_channel); | 100           new cricket::DtlsTransportChannelWrapper(fake_ice_channel); | 
| 101       channel->SetLocalCertificate(certificate_); | 101       channel->SetLocalCertificate(certificate_); | 
| 102       channel->SetIceRole(role); | 102       channel->SetIceRole(role); | 
| 103       channel->SetIceTiebreaker((role == cricket::ICEROLE_CONTROLLING) ? 1 : 2); | 103       channel->SetIceTiebreaker((role == cricket::ICEROLE_CONTROLLING) ? 1 : 2); | 
| 104       channel->SetSslMaxProtocolVersion(ssl_max_version_); | 104       channel->SetSslMaxProtocolVersion(ssl_max_version_); | 
| 105       channel->SignalWritableState.connect(this, | 105       channel->SignalWritableState.connect(this, | 
| 106         &DtlsTestClient::OnTransportChannelWritableState); | 106         &DtlsTestClient::OnTransportChannelWritableState); | 
| 107       channel->SignalReadPacket.connect(this, | 107       channel->SignalReadPacket.connect(this, | 
| 108         &DtlsTestClient::OnTransportChannelReadPacket); | 108         &DtlsTestClient::OnTransportChannelReadPacket); | 
| 109       channel->SignalSentPacket.connect( | 109       channel->SignalSentPacket.connect( | 
| 110           this, &DtlsTestClient::OnTransportChannelSentPacket); | 110           this, &DtlsTestClient::OnTransportChannelSentPacket); | 
| 111       channels_.push_back( | 111       channels_.push_back( | 
| 112           std::unique_ptr<cricket::DtlsTransportChannelWrapper>(channel)); | 112           std::unique_ptr<cricket::DtlsTransportChannelWrapper>(channel)); | 
| 113       fake_channels_.push_back( | 113       fake_channels_.push_back( | 
| 114           std::unique_ptr<cricket::FakeIceTransport>(fake_ice_channel)); | 114           std::unique_ptr<cricket::FakeTransportChannel>(fake_ice_channel)); | 
| 115       transport_->AddChannel(channel, i); | 115       transport_->AddChannel(channel, i); | 
| 116     } | 116     } | 
| 117   } | 117   } | 
| 118 | 118 | 
| 119   cricket::JsepTransport* transport() { return transport_.get(); } | 119   cricket::JsepTransport* transport() { return transport_.get(); } | 
| 120 | 120 | 
| 121   cricket::FakeIceTransport* GetFakeChannel(int component) { | 121   cricket::FakeTransportChannel* GetFakeChannel(int component) { | 
| 122     for (const auto& ch : fake_channels_) { | 122     for (const auto& ch : fake_channels_) { | 
| 123       if (ch->component() == component) { | 123       if (ch->component() == component) { | 
| 124         return ch.get(); | 124         return ch.get(); | 
| 125       } | 125       } | 
| 126     } | 126     } | 
| 127     return nullptr; | 127     return nullptr; | 
| 128   } | 128   } | 
| 129 | 129 | 
| 130   cricket::DtlsTransportChannelWrapper* GetDtlsChannel(int component) { | 130   cricket::DtlsTransportChannelWrapper* GetDtlsChannel(int component) { | 
| 131     for (const auto& ch : channels_) { | 131     for (const auto& ch : channels_) { | 
| (...skipping 295 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 427         ASSERT_TRUE(VerifyEncryptedPacket(data, size)); | 427         ASSERT_TRUE(VerifyEncryptedPacket(data, size)); | 
| 428       } else if (IsRtpLeadByte(data[0])) { | 428       } else if (IsRtpLeadByte(data[0])) { | 
| 429         ASSERT_TRUE(VerifyPacket(data, size, NULL)); | 429         ASSERT_TRUE(VerifyPacket(data, size, NULL)); | 
| 430       } | 430       } | 
| 431     } | 431     } | 
| 432   } | 432   } | 
| 433 | 433 | 
| 434  private: | 434  private: | 
| 435   std::string name_; | 435   std::string name_; | 
| 436   rtc::scoped_refptr<rtc::RTCCertificate> certificate_; | 436   rtc::scoped_refptr<rtc::RTCCertificate> certificate_; | 
| 437   std::vector<std::unique_ptr<cricket::FakeIceTransport>> fake_channels_; | 437   std::vector<std::unique_ptr<cricket::FakeTransportChannel>> fake_channels_; | 
| 438   std::vector<std::unique_ptr<cricket::DtlsTransportChannelWrapper>> channels_; | 438   std::vector<std::unique_ptr<cricket::DtlsTransportChannelWrapper>> channels_; | 
| 439   std::unique_ptr<cricket::JsepTransport> transport_; | 439   std::unique_ptr<cricket::JsepTransport> transport_; | 
| 440   size_t packet_size_ = 0u; | 440   size_t packet_size_ = 0u; | 
| 441   std::set<int> received_; | 441   std::set<int> received_; | 
| 442   bool use_dtls_srtp_ = false; | 442   bool use_dtls_srtp_ = false; | 
| 443   rtc::SSLProtocolVersion ssl_max_version_ = rtc::SSL_PROTOCOL_DTLS_12; | 443   rtc::SSLProtocolVersion ssl_max_version_ = rtc::SSL_PROTOCOL_DTLS_12; | 
| 444   int received_dtls_client_hellos_ = 0; | 444   int received_dtls_client_hellos_ = 0; | 
| 445   int received_dtls_server_hellos_ = 0; | 445   int received_dtls_server_hellos_ = 0; | 
| 446   rtc::SentPacket sent_packet_; | 446   rtc::SentPacket sent_packet_; | 
| 447 }; | 447 }; | 
| (...skipping 184 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 632   bool use_dtls_srtp_; | 632   bool use_dtls_srtp_; | 
| 633   rtc::SSLProtocolVersion ssl_expected_version_; | 633   rtc::SSLProtocolVersion ssl_expected_version_; | 
| 634 }; | 634 }; | 
| 635 | 635 | 
| 636 class DtlsTransportChannelTest : public DtlsTransportChannelTestBase, | 636 class DtlsTransportChannelTest : public DtlsTransportChannelTestBase, | 
| 637                                  public ::testing::Test {}; | 637                                  public ::testing::Test {}; | 
| 638 | 638 | 
| 639 // Test that transport negotiation of ICE, no DTLS works properly. | 639 // Test that transport negotiation of ICE, no DTLS works properly. | 
| 640 TEST_F(DtlsTransportChannelTest, TestChannelSetupIce) { | 640 TEST_F(DtlsTransportChannelTest, TestChannelSetupIce) { | 
| 641   Negotiate(); | 641   Negotiate(); | 
| 642   cricket::FakeIceTransport* channel1 = client1_.GetFakeChannel(0); | 642   cricket::FakeTransportChannel* channel1 = client1_.GetFakeChannel(0); | 
| 643   cricket::FakeIceTransport* channel2 = client2_.GetFakeChannel(0); | 643   cricket::FakeTransportChannel* channel2 = client2_.GetFakeChannel(0); | 
| 644   ASSERT_TRUE(channel1 != NULL); | 644   ASSERT_TRUE(channel1 != NULL); | 
| 645   ASSERT_TRUE(channel2 != NULL); | 645   ASSERT_TRUE(channel2 != NULL); | 
| 646   EXPECT_EQ(cricket::ICEROLE_CONTROLLING, channel1->GetIceRole()); | 646   EXPECT_EQ(cricket::ICEROLE_CONTROLLING, channel1->GetIceRole()); | 
| 647   EXPECT_EQ(1U, channel1->IceTiebreaker()); | 647   EXPECT_EQ(1U, channel1->IceTiebreaker()); | 
| 648   EXPECT_EQ(kIceUfrag1, channel1->ice_ufrag()); | 648   EXPECT_EQ(kIceUfrag1, channel1->ice_ufrag()); | 
| 649   EXPECT_EQ(kIcePwd1, channel1->ice_pwd()); | 649   EXPECT_EQ(kIcePwd1, channel1->ice_pwd()); | 
| 650   EXPECT_EQ(cricket::ICEROLE_CONTROLLED, channel2->GetIceRole()); | 650   EXPECT_EQ(cricket::ICEROLE_CONTROLLED, channel2->GetIceRole()); | 
| 651   EXPECT_EQ(2U, channel2->IceTiebreaker()); | 651   EXPECT_EQ(2U, channel2->IceTiebreaker()); | 
| 652 } | 652 } | 
| 653 | 653 | 
| (...skipping 529 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 1183             std::vector<DtlsTransportEvent>{ | 1183             std::vector<DtlsTransportEvent>{ | 
| 1184                 CALLER_RECEIVES_CLIENTHELLO, CALLER_RECEIVES_FINGERPRINT, | 1184                 CALLER_RECEIVES_CLIENTHELLO, CALLER_RECEIVES_FINGERPRINT, | 
| 1185                 CALLER_WRITABLE, HANDSHAKE_FINISHES}, | 1185                 CALLER_WRITABLE, HANDSHAKE_FINISHES}, | 
| 1186             std::vector<DtlsTransportEvent>{ | 1186             std::vector<DtlsTransportEvent>{ | 
| 1187                 CALLER_RECEIVES_CLIENTHELLO, CALLER_WRITABLE, | 1187                 CALLER_RECEIVES_CLIENTHELLO, CALLER_WRITABLE, | 
| 1188                 CALLER_RECEIVES_FINGERPRINT, HANDSHAKE_FINISHES}, | 1188                 CALLER_RECEIVES_FINGERPRINT, HANDSHAKE_FINISHES}, | 
| 1189             std::vector<DtlsTransportEvent>{CALLER_RECEIVES_CLIENTHELLO, | 1189             std::vector<DtlsTransportEvent>{CALLER_RECEIVES_CLIENTHELLO, | 
| 1190                                             CALLER_WRITABLE, HANDSHAKE_FINISHES, | 1190                                             CALLER_WRITABLE, HANDSHAKE_FINISHES, | 
| 1191                                             CALLER_RECEIVES_FINGERPRINT}), | 1191                                             CALLER_RECEIVES_FINGERPRINT}), | 
| 1192         ::testing::Bool())); | 1192         ::testing::Bool())); | 
| OLD | NEW | 
|---|