summaryrefslogtreecommitdiff
path: root/app
diff options
context:
space:
mode:
authormallinath@webrtc.org <mallinath@webrtc.org>2014-09-09 14:38:10 +0000
committermallinath@webrtc.org <mallinath@webrtc.org>2014-09-09 14:38:10 +0000
commit2ca56577c4c9aaedeb70024d2012a1f519dfb201 (patch)
tree091d453613802c6cb7150f9c5305b2a1950c2cc2 /app
parent3b7f619f7db88d13ba0569d312bdf3a603f6432c (diff)
downloadtalk-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.cc2
-rw-r--r--app/webrtc/webrtcsession.cc26
-rw-r--r--app/webrtc/webrtcsession.h2
-rw-r--r--app/webrtc/webrtcsession_unittest.cc61
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;