diff options
author | mallinath@webrtc.org <mallinath@webrtc.org> | 2014-09-09 14:38:10 +0000 |
---|---|---|
committer | mallinath@webrtc.org <mallinath@webrtc.org> | 2014-09-09 14:38:10 +0000 |
commit | 2ca56577c4c9aaedeb70024d2012a1f519dfb201 (patch) | |
tree | 091d453613802c6cb7150f9c5305b2a1950c2cc2 /app | |
parent | 3b7f619f7db88d13ba0569d312bdf3a603f6432c (diff) | |
download | talk-2ca56577c4c9aaedeb70024d2012a1f519dfb201.tar.gz |
Relanding https://code.google.com/p/webrtc/source/detail?r=7093, after it got
reverted due to some internal compile failures.
In this CL changes are done in portallocator_unittest.cc, in particular to EXPECT_EQ checking in new tests.
Original patch committed in https://code.google.com/p/webrtc/source/detail?r=7093
TBR=juberti@webrtc.org
BUG=1179
Review URL: https://webrtc-codereview.appspot.com/22329004
git-svn-id: http://webrtc.googlecode.com/svn/trunk/talk@7118 4adac7df-926f-26a2-2b94-8c16560cd09d
Diffstat (limited to 'app')
-rw-r--r-- | app/webrtc/peerconnection.cc | 2 | ||||
-rw-r--r-- | app/webrtc/webrtcsession.cc | 26 | ||||
-rw-r--r-- | app/webrtc/webrtcsession.h | 2 | ||||
-rw-r--r-- | app/webrtc/webrtcsession_unittest.cc | 61 |
4 files changed, 86 insertions, 5 deletions
diff --git a/app/webrtc/peerconnection.cc b/app/webrtc/peerconnection.cc index 201269a..3fba862 100644 --- a/app/webrtc/peerconnection.cc +++ b/app/webrtc/peerconnection.cc @@ -672,7 +672,7 @@ bool PeerConnection::UpdateIce(const RTCConfiguration& config) { } } } - return session_->UpdateIce(config.type); + return session_->SetIceTransports(config.type); } bool PeerConnection::AddIceCandidate( diff --git a/app/webrtc/webrtcsession.cc b/app/webrtc/webrtcsession.cc index ae81f24..13e2128 100644 --- a/app/webrtc/webrtcsession.cc +++ b/app/webrtc/webrtcsession.cc @@ -387,6 +387,22 @@ static void SetOptionFromOptionalConstraint( } } +uint32 ConvertIceTransportTypeToCandidateFilter( + PeerConnectionInterface::IceTransportsType type) { + switch (type) { + case PeerConnectionInterface::kNone: + return cricket::CF_NONE; + case PeerConnectionInterface::kRelay: + return cricket::CF_RELAY; + case PeerConnectionInterface::kNoHost: + return (cricket::CF_ALL & ~cricket::CF_HOST); + case PeerConnectionInterface::kAll: + return cricket::CF_ALL; + default: ASSERT(false); + } + return cricket::CF_NONE; +} + // Help class used to remember if a a remote peer has requested ice restart by // by sending a description with new ice ufrag and password. class IceRestartAnswerLatch { @@ -640,7 +656,8 @@ bool WebRtcSession::Initialize( if (options.disable_encryption) { webrtc_session_desc_factory_->SetSdesPolicy(cricket::SEC_DISABLED); } - + port_allocator()->set_candidate_filter( + ConvertIceTransportTypeToCandidateFilter(ice_transport)); return true; } @@ -746,6 +763,7 @@ bool WebRtcSession::SetLocalDescription(SessionDescriptionInterface* desc, if (!UpdateSessionState(action, cricket::CS_LOCAL, err_desc)) { return false; } + // Kick starting the ice candidates allocation. StartCandidatesAllocation(); @@ -907,8 +925,10 @@ bool WebRtcSession::ProcessIceMessage(const IceCandidateInterface* candidate) { return UseCandidate(candidate); } -bool WebRtcSession::UpdateIce(PeerConnectionInterface::IceTransportsType type) { - return false; +bool WebRtcSession::SetIceTransports( + PeerConnectionInterface::IceTransportsType type) { + return port_allocator()->set_candidate_filter( + ConvertIceTransportTypeToCandidateFilter(type)); } bool WebRtcSession::GetLocalTrackIdBySsrc(uint32 ssrc, std::string* track_id) { diff --git a/app/webrtc/webrtcsession.h b/app/webrtc/webrtcsession.h index d1e5645..86ae435 100644 --- a/app/webrtc/webrtcsession.h +++ b/app/webrtc/webrtcsession.h @@ -160,7 +160,7 @@ class WebRtcSession : public cricket::BaseSession, std::string* err_desc); bool ProcessIceMessage(const IceCandidateInterface* ice_candidate); - bool UpdateIce(PeerConnectionInterface::IceTransportsType type); + bool SetIceTransports(PeerConnectionInterface::IceTransportsType type); const SessionDescriptionInterface* local_description() const { return local_desc_.get(); diff --git a/app/webrtc/webrtcsession_unittest.cc b/app/webrtc/webrtcsession_unittest.cc index 2f731a9..2cf422b 100644 --- a/app/webrtc/webrtcsession_unittest.cc +++ b/app/webrtc/webrtcsession_unittest.cc @@ -108,6 +108,8 @@ static const char kClientAddrHost2[] = "22.22.22.22"; static const char kStunAddrHost[] = "99.99.99.1"; static const SocketAddress kTurnUdpIntAddr("99.99.99.4", 3478); static const SocketAddress kTurnUdpExtAddr("99.99.99.6", 0); +static const char kTurnUsername[] = "test"; +static const char kTurnPassword[] = "test"; static const char kSessionVersion[] = "1"; @@ -1083,6 +1085,18 @@ class WebRtcSessionTest : public testing::Test { } } + void ConfigureAllocatorWithTurn() { + cricket::RelayServerConfig relay_server(cricket::RELAY_TURN); + cricket::RelayCredentials credentials(kTurnUsername, kTurnPassword); + relay_server.credentials = credentials; + relay_server.ports.push_back(cricket::ProtocolAddress( + kTurnUdpIntAddr, cricket::PROTO_UDP, false)); + allocator_->AddRelay(relay_server); + allocator_->set_step_delay(cricket::kMinimumStepDelay); + allocator_->set_flags(cricket::PORTALLOCATOR_DISABLE_TCP | + cricket::PORTALLOCATOR_ENABLE_BUNDLE); + } + cricket::FakeMediaEngine* media_engine_; cricket::FakeDataEngine* data_engine_; cricket::FakeDeviceManager* device_manager_; @@ -1162,6 +1176,53 @@ TEST_F(WebRtcSessionTest, TestStunError) { EXPECT_EQ(6u, observer_.mline_1_candidates_.size()); } +// Test session delivers no candidates gathered when constraint set to "none". +TEST_F(WebRtcSessionTest, TestIceTransportsNone) { + AddInterface(rtc::SocketAddress(kClientAddrHost1, kClientAddrPort)); + SetIceTransportType(PeerConnectionInterface::kNone); + Init(NULL); + mediastream_signaling_.SendAudioVideoStream1(); + InitiateCall(); + EXPECT_TRUE_WAIT(observer_.oncandidatesready_, kIceCandidatesTimeout); + EXPECT_EQ(0u, observer_.mline_0_candidates_.size()); + EXPECT_EQ(0u, observer_.mline_1_candidates_.size()); +} + +// Test session delivers only relay candidates gathered when constaint set to +// "relay". +TEST_F(WebRtcSessionTest, TestIceTransportsRelay) { + AddInterface(rtc::SocketAddress(kClientAddrHost1, kClientAddrPort)); + ConfigureAllocatorWithTurn(); + SetIceTransportType(PeerConnectionInterface::kRelay); + Init(NULL); + mediastream_signaling_.SendAudioVideoStream1(); + InitiateCall(); + EXPECT_TRUE_WAIT(observer_.oncandidatesready_, kIceCandidatesTimeout); + EXPECT_EQ(2u, observer_.mline_0_candidates_.size()); + EXPECT_EQ(2u, observer_.mline_1_candidates_.size()); + for (size_t i = 0; i < observer_.mline_0_candidates_.size(); ++i) { + EXPECT_EQ(cricket::RELAY_PORT_TYPE, + observer_.mline_0_candidates_[i].type()); + } + for (size_t i = 0; i < observer_.mline_1_candidates_.size(); ++i) { + EXPECT_EQ(cricket::RELAY_PORT_TYPE, + observer_.mline_1_candidates_[i].type()); + } +} + +// Test session delivers all candidates gathered when constaint set to "all". +TEST_F(WebRtcSessionTest, TestIceTransportsAll) { + AddInterface(rtc::SocketAddress(kClientAddrHost1, kClientAddrPort)); + SetIceTransportType(PeerConnectionInterface::kAll); + Init(NULL); + mediastream_signaling_.SendAudioVideoStream1(); + InitiateCall(); + EXPECT_TRUE_WAIT(observer_.oncandidatesready_, kIceCandidatesTimeout); + // Host + STUN. By default allocator is disabled to gather relay candidates. + EXPECT_EQ(4u, observer_.mline_0_candidates_.size()); + EXPECT_EQ(4u, observer_.mline_1_candidates_.size()); +} + TEST_F(WebRtcSessionTest, SetSdpFailedOnInvalidSdp) { Init(NULL); SessionDescriptionInterface* offer = NULL; |