OLD | NEW |
1 /* | 1 /* |
2 * Copyright 2004 The WebRTC Project Authors. All rights reserved. | 2 * Copyright 2004 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 124 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
135 int code = 0; | 135 int code = 0; |
136 if (last_stun_msg_) { | 136 if (last_stun_msg_) { |
137 const StunErrorCodeAttribute* error_attr = last_stun_msg_->GetErrorCode(); | 137 const StunErrorCodeAttribute* error_attr = last_stun_msg_->GetErrorCode(); |
138 if (error_attr) { | 138 if (error_attr) { |
139 code = error_attr->code(); | 139 code = error_attr->code(); |
140 } | 140 } |
141 } | 141 } |
142 return code; | 142 return code; |
143 } | 143 } |
144 | 144 |
145 virtual void PrepareAddress() { | 145 void PrepareAddress() override { |
146 rtc::SocketAddress addr(ip(), min_port()); | 146 rtc::SocketAddress addr(ip(), min_port()); |
147 AddAddress(addr, addr, rtc::SocketAddress(), "udp", "", "", Type(), | 147 AddAddress(addr, addr, rtc::SocketAddress(), "udp", "", "", Type(), |
148 ICE_TYPE_PREFERENCE_HOST, 0, true); | 148 ICE_TYPE_PREFERENCE_HOST, 0, true); |
149 } | 149 } |
150 | 150 |
151 virtual bool SupportsProtocol(const std::string& protocol) const { | 151 bool SupportsProtocol(const std::string& protocol) const override { |
152 return true; | 152 return true; |
153 } | 153 } |
154 | 154 |
155 // Exposed for testing candidate building. | 155 // Exposed for testing candidate building. |
156 void AddCandidateAddress(const rtc::SocketAddress& addr) { | 156 void AddCandidateAddress(const rtc::SocketAddress& addr) { |
157 AddAddress(addr, addr, rtc::SocketAddress(), "udp", "", "", Type(), | 157 AddAddress(addr, addr, rtc::SocketAddress(), "udp", "", "", Type(), |
158 type_preference_, 0, false); | 158 type_preference_, 0, false); |
159 } | 159 } |
160 void AddCandidateAddress(const rtc::SocketAddress& addr, | 160 void AddCandidateAddress(const rtc::SocketAddress& addr, |
161 const rtc::SocketAddress& base_address, | 161 const rtc::SocketAddress& base_address, |
162 const std::string& type, | 162 const std::string& type, |
163 int type_preference, | 163 int type_preference, |
164 bool final) { | 164 bool final) { |
165 AddAddress(addr, base_address, rtc::SocketAddress(), "udp", "", "", type, | 165 AddAddress(addr, base_address, rtc::SocketAddress(), "udp", "", "", type, |
166 type_preference, 0, final); | 166 type_preference, 0, final); |
167 } | 167 } |
168 | 168 |
169 virtual Connection* CreateConnection(const Candidate& remote_candidate, | 169 Connection* CreateConnection(const Candidate& remote_candidate, |
170 CandidateOrigin origin) { | 170 CandidateOrigin origin, |
171 Connection* conn = new ProxyConnection(this, 0, remote_candidate); | 171 const IceConfig& config) override { |
| 172 Connection* conn = new ProxyConnection(this, 0, remote_candidate, config); |
172 AddOrReplaceConnection(conn); | 173 AddOrReplaceConnection(conn); |
173 // Set use-candidate attribute flag as this will add USE-CANDIDATE attribute | 174 // Set use-candidate attribute flag as this will add USE-CANDIDATE attribute |
174 // in STUN binding requests. | 175 // in STUN binding requests. |
175 conn->set_use_candidate_attr(true); | 176 conn->set_use_candidate_attr(true); |
176 return conn; | 177 return conn; |
177 } | 178 } |
178 virtual int SendTo( | 179 int SendTo(const void* data, |
179 const void* data, size_t size, const rtc::SocketAddress& addr, | 180 size_t size, |
180 const rtc::PacketOptions& options, bool payload) { | 181 const rtc::SocketAddress& addr, |
| 182 const rtc::PacketOptions& options, |
| 183 bool payload) override { |
181 if (!payload) { | 184 if (!payload) { |
182 IceMessage* msg = new IceMessage; | 185 IceMessage* msg = new IceMessage; |
183 Buffer* buf = new Buffer(static_cast<const char*>(data), size); | 186 Buffer* buf = new Buffer(static_cast<const char*>(data), size); |
184 ByteBufferReader read_buf(*buf); | 187 ByteBufferReader read_buf(*buf); |
185 if (!msg->Read(&read_buf)) { | 188 if (!msg->Read(&read_buf)) { |
186 delete msg; | 189 delete msg; |
187 delete buf; | 190 delete buf; |
188 return -1; | 191 return -1; |
189 } | 192 } |
190 last_stun_buf_.reset(buf); | 193 last_stun_buf_.reset(buf); |
191 last_stun_msg_.reset(msg); | 194 last_stun_msg_.reset(msg); |
192 } | 195 } |
193 return static_cast<int>(size); | 196 return static_cast<int>(size); |
194 } | 197 } |
195 virtual int SetOption(rtc::Socket::Option opt, int value) { | 198 int SetOption(rtc::Socket::Option opt, int value) override { return 0; } |
196 return 0; | 199 int GetOption(rtc::Socket::Option opt, int* value) override { return -1; } |
197 } | 200 int GetError() override { return 0; } |
198 virtual int GetOption(rtc::Socket::Option opt, int* value) { | |
199 return -1; | |
200 } | |
201 virtual int GetError() { | |
202 return 0; | |
203 } | |
204 void Reset() { | 201 void Reset() { |
205 last_stun_buf_.reset(); | 202 last_stun_buf_.reset(); |
206 last_stun_msg_.reset(); | 203 last_stun_msg_.reset(); |
207 } | 204 } |
208 void set_type_preference(int type_preference) { | 205 void set_type_preference(int type_preference) { |
209 type_preference_ = type_preference; | 206 type_preference_ = type_preference; |
210 } | 207 } |
211 | 208 |
212 private: | 209 private: |
213 void OnSentPacket(rtc::AsyncPacketSocket* socket, | 210 void OnSentPacket(rtc::AsyncPacketSocket* socket, |
214 const rtc::SentPacket& sent_packet) { | 211 const rtc::SentPacket& sent_packet) override { |
215 PortInterface::SignalSentPacket(sent_packet); | 212 PortInterface::SignalSentPacket(sent_packet); |
216 } | 213 } |
217 std::unique_ptr<Buffer> last_stun_buf_; | 214 std::unique_ptr<Buffer> last_stun_buf_; |
218 std::unique_ptr<IceMessage> last_stun_msg_; | 215 std::unique_ptr<IceMessage> last_stun_msg_; |
219 int type_preference_ = 0; | 216 int type_preference_ = 0; |
220 }; | 217 }; |
221 | 218 |
222 class TestChannel : public sigslot::has_slots<> { | 219 class TestChannel : public sigslot::has_slots<> { |
223 public: | 220 public: |
224 // Takes ownership of |p1| (but not |p2|). | 221 // Takes ownership of |p1| (but not |p2|). |
225 TestChannel(Port* p1) | 222 TestChannel(Port* p1) |
226 : ice_mode_(ICEMODE_FULL), | 223 : ice_mode_(ICEMODE_FULL), |
227 port_(p1), | 224 port_(p1), |
228 complete_count_(0), | 225 complete_count_(0), |
229 conn_(NULL), | 226 conn_(NULL), |
230 remote_request_(), | 227 remote_request_(), |
231 nominated_(false) { | 228 nominated_(false) { |
232 port_->SignalPortComplete.connect(this, &TestChannel::OnPortComplete); | 229 port_->SignalPortComplete.connect(this, &TestChannel::OnPortComplete); |
233 port_->SignalUnknownAddress.connect(this, &TestChannel::OnUnknownAddress); | 230 port_->SignalUnknownAddress.connect(this, &TestChannel::OnUnknownAddress); |
234 port_->SignalDestroyed.connect(this, &TestChannel::OnSrcPortDestroyed); | 231 port_->SignalDestroyed.connect(this, &TestChannel::OnSrcPortDestroyed); |
235 } | 232 } |
236 | 233 |
237 int complete_count() { return complete_count_; } | 234 int complete_count() { return complete_count_; } |
238 Connection* conn() { return conn_; } | 235 Connection* conn() { return conn_; } |
239 const SocketAddress& remote_address() { return remote_address_; } | 236 const SocketAddress& remote_address() { return remote_address_; } |
240 const std::string remote_fragment() { return remote_frag_; } | 237 const std::string remote_fragment() { return remote_frag_; } |
241 | 238 |
242 void Start() { port_->PrepareAddress(); } | 239 void Start() { port_->PrepareAddress(); } |
243 void CreateConnection(const Candidate& remote_candidate) { | 240 void CreateConnection(const Candidate& remote_candidate) { |
244 conn_ = port_->CreateConnection(remote_candidate, Port::ORIGIN_MESSAGE); | 241 conn_ = port_->CreateConnection(remote_candidate, Port::ORIGIN_MESSAGE, |
| 242 IceConfig()); |
245 IceMode remote_ice_mode = | 243 IceMode remote_ice_mode = |
246 (ice_mode_ == ICEMODE_FULL) ? ICEMODE_LITE : ICEMODE_FULL; | 244 (ice_mode_ == ICEMODE_FULL) ? ICEMODE_LITE : ICEMODE_FULL; |
247 conn_->set_remote_ice_mode(remote_ice_mode); | 245 conn_->set_remote_ice_mode(remote_ice_mode); |
248 conn_->set_use_candidate_attr(remote_ice_mode == ICEMODE_FULL); | 246 conn_->set_use_candidate_attr(remote_ice_mode == ICEMODE_FULL); |
249 conn_->SignalStateChange.connect( | 247 conn_->SignalStateChange.connect( |
250 this, &TestChannel::OnConnectionStateChange); | 248 this, &TestChannel::OnConnectionStateChange); |
251 conn_->SignalDestroyed.connect(this, &TestChannel::OnDestroyed); | 249 conn_->SignalDestroyed.connect(this, &TestChannel::OnDestroyed); |
252 conn_->SignalReadyToSend.connect(this, | 250 conn_->SignalReadyToSend.connect(this, |
253 &TestChannel::OnConnectionReadyToSend); | 251 &TestChannel::OnConnectionReadyToSend); |
254 connection_ready_to_send_ = false; | 252 connection_ready_to_send_ = false; |
255 } | 253 } |
256 void OnConnectionStateChange(Connection* conn) { | 254 void OnConnectionStateChange(Connection* conn) { |
257 if (conn->write_state() == Connection::STATE_WRITABLE) { | 255 if (conn->write_state() == Connection::STATE_WRITABLE) { |
258 conn->set_use_candidate_attr(true); | 256 conn->set_use_candidate_attr(true); |
259 nominated_ = true; | 257 nominated_ = true; |
260 } | 258 } |
261 } | 259 } |
262 void AcceptConnection(const Candidate& remote_candidate) { | 260 void AcceptConnection(const Candidate& remote_candidate) { |
263 ASSERT_TRUE(remote_request_.get() != NULL); | 261 ASSERT_TRUE(remote_request_.get() != NULL); |
264 Candidate c = remote_candidate; | 262 Candidate c = remote_candidate; |
265 c.set_address(remote_address_); | 263 c.set_address(remote_address_); |
266 conn_ = port_->CreateConnection(c, Port::ORIGIN_MESSAGE); | 264 conn_ = port_->CreateConnection(c, Port::ORIGIN_MESSAGE, IceConfig()); |
267 conn_->SignalDestroyed.connect(this, &TestChannel::OnDestroyed); | 265 conn_->SignalDestroyed.connect(this, &TestChannel::OnDestroyed); |
268 port_->SendBindingResponse(remote_request_.get(), remote_address_); | 266 port_->SendBindingResponse(remote_request_.get(), remote_address_); |
269 remote_request_.reset(); | 267 remote_request_.reset(); |
270 } | 268 } |
271 void Ping() { | 269 void Ping() { |
272 Ping(0); | 270 Ping(0); |
273 } | 271 } |
274 void Ping(int64_t now) { conn_->Ping(now); } | 272 void Ping(int64_t now) { conn_->Ping(now); } |
275 void Stop() { | 273 void Stop() { |
276 if (conn_) { | 274 if (conn_) { |
(...skipping 697 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
974 private: | 972 private: |
975 AsyncPacketSocket* next_udp_socket_; | 973 AsyncPacketSocket* next_udp_socket_; |
976 AsyncPacketSocket* next_server_tcp_socket_; | 974 AsyncPacketSocket* next_server_tcp_socket_; |
977 AsyncPacketSocket* next_client_tcp_socket_; | 975 AsyncPacketSocket* next_client_tcp_socket_; |
978 }; | 976 }; |
979 | 977 |
980 class FakeAsyncPacketSocket : public AsyncPacketSocket { | 978 class FakeAsyncPacketSocket : public AsyncPacketSocket { |
981 public: | 979 public: |
982 // Returns current local address. Address may be set to NULL if the | 980 // Returns current local address. Address may be set to NULL if the |
983 // socket is not bound yet (GetState() returns STATE_BINDING). | 981 // socket is not bound yet (GetState() returns STATE_BINDING). |
984 virtual SocketAddress GetLocalAddress() const { | 982 SocketAddress GetLocalAddress() const override { return SocketAddress(); } |
985 return SocketAddress(); | |
986 } | |
987 | 983 |
988 // Returns remote address. Returns zeroes if this is not a client TCP socket. | 984 // Returns remote address. Returns zeroes if this is not a client TCP socket. |
989 virtual SocketAddress GetRemoteAddress() const { | 985 SocketAddress GetRemoteAddress() const override { return SocketAddress(); } |
990 return SocketAddress(); | |
991 } | |
992 | 986 |
993 // Send a packet. | 987 // Send a packet. |
994 virtual int Send(const void *pv, size_t cb, | 988 int Send(const void* pv, |
995 const rtc::PacketOptions& options) { | 989 size_t cb, |
| 990 const rtc::PacketOptions& options) override { |
996 return static_cast<int>(cb); | 991 return static_cast<int>(cb); |
997 } | 992 } |
998 virtual int SendTo(const void *pv, size_t cb, const SocketAddress& addr, | 993 int SendTo(const void* pv, |
999 const rtc::PacketOptions& options) { | 994 size_t cb, |
| 995 const SocketAddress& addr, |
| 996 const rtc::PacketOptions& options) override { |
1000 return static_cast<int>(cb); | 997 return static_cast<int>(cb); |
1001 } | 998 } |
1002 virtual int Close() { | 999 int Close() override { return 0; } |
1003 return 0; | |
1004 } | |
1005 | 1000 |
1006 virtual State GetState() const { return state_; } | 1001 State GetState() const override { return state_; } |
1007 virtual int GetOption(Socket::Option opt, int* value) { return 0; } | 1002 int GetOption(Socket::Option opt, int* value) override { return 0; } |
1008 virtual int SetOption(Socket::Option opt, int value) { return 0; } | 1003 int SetOption(Socket::Option opt, int value) override { return 0; } |
1009 virtual int GetError() const { return 0; } | 1004 int GetError() const override { return 0; } |
1010 virtual void SetError(int error) { } | 1005 void SetError(int error) override {} |
1011 | 1006 |
1012 void set_state(State state) { state_ = state; } | 1007 void set_state(State state) { state_ = state; } |
1013 | 1008 |
1014 private: | 1009 private: |
1015 State state_; | 1010 State state_; |
1016 }; | 1011 }; |
1017 | 1012 |
1018 // Local -> XXXX | 1013 // Local -> XXXX |
1019 TEST_F(PortTest, TestLocalToLocal) { | 1014 TEST_F(PortTest, TestLocalToLocal) { |
1020 TestLocalToLocal(); | 1015 TestLocalToLocal(); |
(...skipping 303 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1324 // should remain equal to the request generated by the port and role of port | 1319 // should remain equal to the request generated by the port and role of port |
1325 // must be in controlling. | 1320 // must be in controlling. |
1326 TEST_F(PortTest, TestLoopbackCal) { | 1321 TEST_F(PortTest, TestLoopbackCal) { |
1327 std::unique_ptr<TestPort> lport( | 1322 std::unique_ptr<TestPort> lport( |
1328 CreateTestPort(kLocalAddr1, "lfrag", "lpass")); | 1323 CreateTestPort(kLocalAddr1, "lfrag", "lpass")); |
1329 lport->SetIceRole(cricket::ICEROLE_CONTROLLING); | 1324 lport->SetIceRole(cricket::ICEROLE_CONTROLLING); |
1330 lport->SetIceTiebreaker(kTiebreaker1); | 1325 lport->SetIceTiebreaker(kTiebreaker1); |
1331 lport->PrepareAddress(); | 1326 lport->PrepareAddress(); |
1332 ASSERT_FALSE(lport->Candidates().empty()); | 1327 ASSERT_FALSE(lport->Candidates().empty()); |
1333 Connection* conn = lport->CreateConnection(lport->Candidates()[0], | 1328 Connection* conn = lport->CreateConnection(lport->Candidates()[0], |
1334 Port::ORIGIN_MESSAGE); | 1329 Port::ORIGIN_MESSAGE, IceConfig()); |
1335 conn->Ping(0); | 1330 conn->Ping(0); |
1336 | 1331 |
1337 ASSERT_TRUE_WAIT(lport->last_stun_msg() != NULL, 1000); | 1332 ASSERT_TRUE_WAIT(lport->last_stun_msg() != NULL, 1000); |
1338 IceMessage* msg = lport->last_stun_msg(); | 1333 IceMessage* msg = lport->last_stun_msg(); |
1339 EXPECT_EQ(STUN_BINDING_REQUEST, msg->type()); | 1334 EXPECT_EQ(STUN_BINDING_REQUEST, msg->type()); |
1340 conn->OnReadPacket(lport->last_stun_buf()->data<char>(), | 1335 conn->OnReadPacket(lport->last_stun_buf()->data<char>(), |
1341 lport->last_stun_buf()->size(), | 1336 lport->last_stun_buf()->size(), |
1342 rtc::PacketTime()); | 1337 rtc::PacketTime()); |
1343 ASSERT_TRUE_WAIT(lport->last_stun_msg() != NULL, 1000); | 1338 ASSERT_TRUE_WAIT(lport->last_stun_msg() != NULL, 1000); |
1344 msg = lport->last_stun_msg(); | 1339 msg = lport->last_stun_msg(); |
1345 EXPECT_EQ(STUN_BINDING_RESPONSE, msg->type()); | 1340 EXPECT_EQ(STUN_BINDING_RESPONSE, msg->type()); |
1346 | 1341 |
1347 // If the tiebreaker value is different from port, we expect a error | 1342 // If the tiebreaker value is different from port, we expect a error |
1348 // response. | 1343 // response. |
1349 lport->Reset(); | 1344 lport->Reset(); |
1350 lport->AddCandidateAddress(kLocalAddr2); | 1345 lport->AddCandidateAddress(kLocalAddr2); |
1351 // Creating a different connection as |conn| is receiving. | 1346 // Creating a different connection as |conn| is receiving. |
1352 Connection* conn1 = lport->CreateConnection(lport->Candidates()[1], | 1347 Connection* conn1 = lport->CreateConnection( |
1353 Port::ORIGIN_MESSAGE); | 1348 lport->Candidates()[1], Port::ORIGIN_MESSAGE, IceConfig()); |
1354 conn1->Ping(0); | 1349 conn1->Ping(0); |
1355 | 1350 |
1356 ASSERT_TRUE_WAIT(lport->last_stun_msg() != NULL, 1000); | 1351 ASSERT_TRUE_WAIT(lport->last_stun_msg() != NULL, 1000); |
1357 msg = lport->last_stun_msg(); | 1352 msg = lport->last_stun_msg(); |
1358 EXPECT_EQ(STUN_BINDING_REQUEST, msg->type()); | 1353 EXPECT_EQ(STUN_BINDING_REQUEST, msg->type()); |
1359 std::unique_ptr<IceMessage> modified_req( | 1354 std::unique_ptr<IceMessage> modified_req( |
1360 CreateStunMessage(STUN_BINDING_REQUEST)); | 1355 CreateStunMessage(STUN_BINDING_REQUEST)); |
1361 const StunByteStringAttribute* username_attr = msg->GetByteString( | 1356 const StunByteStringAttribute* username_attr = msg->GetByteString( |
1362 STUN_ATTR_USERNAME); | 1357 STUN_ATTR_USERNAME); |
1363 modified_req->AddAttribute(new StunByteStringAttribute( | 1358 modified_req->AddAttribute(new StunByteStringAttribute( |
(...skipping 26 matching lines...) Expand all Loading... |
1390 lport->SetIceTiebreaker(kTiebreaker1); | 1385 lport->SetIceTiebreaker(kTiebreaker1); |
1391 std::unique_ptr<TestPort> rport( | 1386 std::unique_ptr<TestPort> rport( |
1392 CreateTestPort(kLocalAddr2, "rfrag", "rpass")); | 1387 CreateTestPort(kLocalAddr2, "rfrag", "rpass")); |
1393 rport->SetIceRole(cricket::ICEROLE_CONTROLLING); | 1388 rport->SetIceRole(cricket::ICEROLE_CONTROLLING); |
1394 rport->SetIceTiebreaker(kTiebreaker2); | 1389 rport->SetIceTiebreaker(kTiebreaker2); |
1395 | 1390 |
1396 lport->PrepareAddress(); | 1391 lport->PrepareAddress(); |
1397 rport->PrepareAddress(); | 1392 rport->PrepareAddress(); |
1398 ASSERT_FALSE(lport->Candidates().empty()); | 1393 ASSERT_FALSE(lport->Candidates().empty()); |
1399 ASSERT_FALSE(rport->Candidates().empty()); | 1394 ASSERT_FALSE(rport->Candidates().empty()); |
1400 Connection* lconn = lport->CreateConnection(rport->Candidates()[0], | 1395 Connection* lconn = lport->CreateConnection( |
1401 Port::ORIGIN_MESSAGE); | 1396 rport->Candidates()[0], Port::ORIGIN_MESSAGE, IceConfig()); |
1402 Connection* rconn = rport->CreateConnection(lport->Candidates()[0], | 1397 Connection* rconn = rport->CreateConnection( |
1403 Port::ORIGIN_MESSAGE); | 1398 lport->Candidates()[0], Port::ORIGIN_MESSAGE, IceConfig()); |
1404 rconn->Ping(0); | 1399 rconn->Ping(0); |
1405 | 1400 |
1406 ASSERT_TRUE_WAIT(rport->last_stun_msg() != NULL, 1000); | 1401 ASSERT_TRUE_WAIT(rport->last_stun_msg() != NULL, 1000); |
1407 IceMessage* msg = rport->last_stun_msg(); | 1402 IceMessage* msg = rport->last_stun_msg(); |
1408 EXPECT_EQ(STUN_BINDING_REQUEST, msg->type()); | 1403 EXPECT_EQ(STUN_BINDING_REQUEST, msg->type()); |
1409 // Send rport binding request to lport. | 1404 // Send rport binding request to lport. |
1410 lconn->OnReadPacket(rport->last_stun_buf()->data<char>(), | 1405 lconn->OnReadPacket(rport->last_stun_buf()->data<char>(), |
1411 rport->last_stun_buf()->size(), | 1406 rport->last_stun_buf()->size(), |
1412 rtc::PacketTime()); | 1407 rtc::PacketTime()); |
1413 | 1408 |
(...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1479 socket->SignalAddressReady(socket, addresses[i]); | 1474 socket->SignalAddressReady(socket, addresses[i]); |
1480 ports[i]->PrepareAddress(); | 1475 ports[i]->PrepareAddress(); |
1481 } | 1476 } |
1482 | 1477 |
1483 // IPv4 Port, connects to IPv6 candidate and then to IPv4 candidate. | 1478 // IPv4 Port, connects to IPv6 candidate and then to IPv4 candidate. |
1484 if (type == SOCK_STREAM) { | 1479 if (type == SOCK_STREAM) { |
1485 FakeAsyncPacketSocket* clientsocket = new FakeAsyncPacketSocket(); | 1480 FakeAsyncPacketSocket* clientsocket = new FakeAsyncPacketSocket(); |
1486 factory.set_next_client_tcp_socket(clientsocket); | 1481 factory.set_next_client_tcp_socket(clientsocket); |
1487 } | 1482 } |
1488 Connection* c = ports[0]->CreateConnection(GetCandidate(ports[2].get()), | 1483 Connection* c = ports[0]->CreateConnection(GetCandidate(ports[2].get()), |
1489 Port::ORIGIN_MESSAGE); | 1484 Port::ORIGIN_MESSAGE, IceConfig()); |
1490 EXPECT_TRUE(NULL == c); | 1485 EXPECT_TRUE(NULL == c); |
1491 EXPECT_EQ(0U, ports[0]->connections().size()); | 1486 EXPECT_EQ(0U, ports[0]->connections().size()); |
1492 c = ports[0]->CreateConnection(GetCandidate(ports[1].get()), | 1487 c = ports[0]->CreateConnection(GetCandidate(ports[1].get()), |
1493 Port::ORIGIN_MESSAGE); | 1488 Port::ORIGIN_MESSAGE, IceConfig()); |
1494 EXPECT_FALSE(NULL == c); | 1489 EXPECT_FALSE(NULL == c); |
1495 EXPECT_EQ(1U, ports[0]->connections().size()); | 1490 EXPECT_EQ(1U, ports[0]->connections().size()); |
1496 | 1491 |
1497 // IPv6 Port, connects to IPv4 candidate and to IPv6 candidate. | 1492 // IPv6 Port, connects to IPv4 candidate and to IPv6 candidate. |
1498 if (type == SOCK_STREAM) { | 1493 if (type == SOCK_STREAM) { |
1499 FakeAsyncPacketSocket* clientsocket = new FakeAsyncPacketSocket(); | 1494 FakeAsyncPacketSocket* clientsocket = new FakeAsyncPacketSocket(); |
1500 factory.set_next_client_tcp_socket(clientsocket); | 1495 factory.set_next_client_tcp_socket(clientsocket); |
1501 } | 1496 } |
1502 c = ports[2]->CreateConnection(GetCandidate(ports[0].get()), | 1497 c = ports[2]->CreateConnection(GetCandidate(ports[0].get()), |
1503 Port::ORIGIN_MESSAGE); | 1498 Port::ORIGIN_MESSAGE, IceConfig()); |
1504 EXPECT_TRUE(NULL == c); | 1499 EXPECT_TRUE(NULL == c); |
1505 EXPECT_EQ(0U, ports[2]->connections().size()); | 1500 EXPECT_EQ(0U, ports[2]->connections().size()); |
1506 c = ports[2]->CreateConnection(GetCandidate(ports[3].get()), | 1501 c = ports[2]->CreateConnection(GetCandidate(ports[3].get()), |
1507 Port::ORIGIN_MESSAGE); | 1502 Port::ORIGIN_MESSAGE, IceConfig()); |
1508 EXPECT_FALSE(NULL == c); | 1503 EXPECT_FALSE(NULL == c); |
1509 EXPECT_EQ(1U, ports[2]->connections().size()); | 1504 EXPECT_EQ(1U, ports[2]->connections().size()); |
1510 } | 1505 } |
1511 | 1506 |
1512 TEST_F(PortTest, TestSkipCrossFamilyTcp) { | 1507 TEST_F(PortTest, TestSkipCrossFamilyTcp) { |
1513 TestCrossFamilyPorts(SOCK_STREAM); | 1508 TestCrossFamilyPorts(SOCK_STREAM); |
1514 } | 1509 } |
1515 | 1510 |
1516 TEST_F(PortTest, TestSkipCrossFamilyUdp) { | 1511 TEST_F(PortTest, TestSkipCrossFamilyUdp) { |
1517 TestCrossFamilyPorts(SOCK_DGRAM); | 1512 TestCrossFamilyPorts(SOCK_DGRAM); |
1518 } | 1513 } |
1519 | 1514 |
1520 void PortTest::ExpectPortsCanConnect(bool can_connect, Port* p1, Port* p2) { | 1515 void PortTest::ExpectPortsCanConnect(bool can_connect, Port* p1, Port* p2) { |
1521 Connection* c = p1->CreateConnection(GetCandidate(p2), | 1516 Connection* c = |
1522 Port::ORIGIN_MESSAGE); | 1517 p1->CreateConnection(GetCandidate(p2), Port::ORIGIN_MESSAGE, IceConfig()); |
1523 if (can_connect) { | 1518 if (can_connect) { |
1524 EXPECT_FALSE(NULL == c); | 1519 EXPECT_FALSE(NULL == c); |
1525 EXPECT_EQ(1U, p1->connections().size()); | 1520 EXPECT_EQ(1U, p1->connections().size()); |
1526 } else { | 1521 } else { |
1527 EXPECT_TRUE(NULL == c); | 1522 EXPECT_TRUE(NULL == c); |
1528 EXPECT_EQ(0U, p1->connections().size()); | 1523 EXPECT_EQ(0U, p1->connections().size()); |
1529 } | 1524 } |
1530 } | 1525 } |
1531 | 1526 |
1532 TEST_F(PortTest, TestUdpV6CrossTypePorts) { | 1527 TEST_F(PortTest, TestUdpV6CrossTypePorts) { |
(...skipping 72 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1605 lport->SetIceRole(cricket::ICEROLE_CONTROLLING); | 1600 lport->SetIceRole(cricket::ICEROLE_CONTROLLING); |
1606 lport->SetIceTiebreaker(kTiebreaker1); | 1601 lport->SetIceTiebreaker(kTiebreaker1); |
1607 rport->SetIceRole(cricket::ICEROLE_CONTROLLED); | 1602 rport->SetIceRole(cricket::ICEROLE_CONTROLLED); |
1608 rport->SetIceTiebreaker(kTiebreaker2); | 1603 rport->SetIceTiebreaker(kTiebreaker2); |
1609 | 1604 |
1610 // Send a fake ping from lport to rport. | 1605 // Send a fake ping from lport to rport. |
1611 lport->PrepareAddress(); | 1606 lport->PrepareAddress(); |
1612 rport->PrepareAddress(); | 1607 rport->PrepareAddress(); |
1613 ASSERT_FALSE(rport->Candidates().empty()); | 1608 ASSERT_FALSE(rport->Candidates().empty()); |
1614 Connection* lconn = lport->CreateConnection( | 1609 Connection* lconn = lport->CreateConnection( |
1615 rport->Candidates()[0], Port::ORIGIN_MESSAGE); | 1610 rport->Candidates()[0], Port::ORIGIN_MESSAGE, IceConfig()); |
1616 Connection* rconn = rport->CreateConnection( | 1611 Connection* rconn = rport->CreateConnection( |
1617 lport->Candidates()[0], Port::ORIGIN_MESSAGE); | 1612 lport->Candidates()[0], Port::ORIGIN_MESSAGE, IceConfig()); |
1618 lconn->Ping(0); | 1613 lconn->Ping(0); |
1619 | 1614 |
1620 // Check that it's a proper BINDING-REQUEST. | 1615 // Check that it's a proper BINDING-REQUEST. |
1621 ASSERT_TRUE_WAIT(lport->last_stun_msg() != NULL, 1000); | 1616 ASSERT_TRUE_WAIT(lport->last_stun_msg() != NULL, 1000); |
1622 IceMessage* msg = lport->last_stun_msg(); | 1617 IceMessage* msg = lport->last_stun_msg(); |
1623 EXPECT_EQ(STUN_BINDING_REQUEST, msg->type()); | 1618 EXPECT_EQ(STUN_BINDING_REQUEST, msg->type()); |
1624 EXPECT_FALSE(msg->IsLegacy()); | 1619 EXPECT_FALSE(msg->IsLegacy()); |
1625 const StunByteStringAttribute* username_attr = | 1620 const StunByteStringAttribute* username_attr = |
1626 msg->GetByteString(STUN_ATTR_USERNAME); | 1621 msg->GetByteString(STUN_ATTR_USERNAME); |
1627 ASSERT_TRUE(username_attr != NULL); | 1622 ASSERT_TRUE(username_attr != NULL); |
(...skipping 142 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1770 lport->SetIceRole(cricket::ICEROLE_CONTROLLING); | 1765 lport->SetIceRole(cricket::ICEROLE_CONTROLLING); |
1771 lport->SetIceTiebreaker(kTiebreaker1); | 1766 lport->SetIceTiebreaker(kTiebreaker1); |
1772 rport->SetIceRole(cricket::ICEROLE_CONTROLLED); | 1767 rport->SetIceRole(cricket::ICEROLE_CONTROLLED); |
1773 rport->SetIceTiebreaker(kTiebreaker2); | 1768 rport->SetIceTiebreaker(kTiebreaker2); |
1774 | 1769 |
1775 // Send a fake ping from lport to rport. | 1770 // Send a fake ping from lport to rport. |
1776 lport->PrepareAddress(); | 1771 lport->PrepareAddress(); |
1777 rport->PrepareAddress(); | 1772 rport->PrepareAddress(); |
1778 ASSERT_FALSE(rport->Candidates().empty()); | 1773 ASSERT_FALSE(rport->Candidates().empty()); |
1779 Connection* lconn = lport->CreateConnection( | 1774 Connection* lconn = lport->CreateConnection( |
1780 rport->Candidates()[0], Port::ORIGIN_MESSAGE); | 1775 rport->Candidates()[0], Port::ORIGIN_MESSAGE, IceConfig()); |
1781 lconn->Ping(0); | 1776 lconn->Ping(0); |
1782 ASSERT_TRUE_WAIT(lport->last_stun_msg() != NULL, 1000); | 1777 ASSERT_TRUE_WAIT(lport->last_stun_msg() != NULL, 1000); |
1783 IceMessage* msg = lport->last_stun_msg(); | 1778 IceMessage* msg = lport->last_stun_msg(); |
1784 const StunUInt64Attribute* ice_controlling_attr = | 1779 const StunUInt64Attribute* ice_controlling_attr = |
1785 msg->GetUInt64(STUN_ATTR_ICE_CONTROLLING); | 1780 msg->GetUInt64(STUN_ATTR_ICE_CONTROLLING); |
1786 ASSERT_TRUE(ice_controlling_attr != NULL); | 1781 ASSERT_TRUE(ice_controlling_attr != NULL); |
1787 const StunByteStringAttribute* use_candidate_attr = msg->GetByteString( | 1782 const StunByteStringAttribute* use_candidate_attr = msg->GetByteString( |
1788 STUN_ATTR_USE_CANDIDATE); | 1783 STUN_ATTR_USE_CANDIDATE); |
1789 ASSERT_TRUE(use_candidate_attr != NULL); | 1784 ASSERT_TRUE(use_candidate_attr != NULL); |
1790 } | 1785 } |
(...skipping 21 matching lines...) Expand all Loading... |
1812 } | 1807 } |
1813 | 1808 |
1814 // Change the network type to wifi. | 1809 // Change the network type to wifi. |
1815 SetNetworkType(rtc::ADAPTER_TYPE_WIFI); | 1810 SetNetworkType(rtc::ADAPTER_TYPE_WIFI); |
1816 EXPECT_EQ(rtc::kNetworkCostLow, lport->network_cost()); | 1811 EXPECT_EQ(rtc::kNetworkCostLow, lport->network_cost()); |
1817 for (const cricket::Candidate& candidate : lport->Candidates()) { | 1812 for (const cricket::Candidate& candidate : lport->Candidates()) { |
1818 EXPECT_EQ(rtc::kNetworkCostLow, candidate.network_cost()); | 1813 EXPECT_EQ(rtc::kNetworkCostLow, candidate.network_cost()); |
1819 } | 1814 } |
1820 | 1815 |
1821 // Add a connection and then change the network type. | 1816 // Add a connection and then change the network type. |
1822 Connection* lconn = | 1817 Connection* lconn = lport->CreateConnection( |
1823 lport->CreateConnection(rport->Candidates()[0], Port::ORIGIN_MESSAGE); | 1818 rport->Candidates()[0], Port::ORIGIN_MESSAGE, IceConfig()); |
1824 // Change the network type to cellular. | 1819 // Change the network type to cellular. |
1825 SetNetworkType(rtc::ADAPTER_TYPE_CELLULAR); | 1820 SetNetworkType(rtc::ADAPTER_TYPE_CELLULAR); |
1826 EXPECT_EQ(rtc::kNetworkCostHigh, lport->network_cost()); | 1821 EXPECT_EQ(rtc::kNetworkCostHigh, lport->network_cost()); |
1827 for (const cricket::Candidate& candidate : lport->Candidates()) { | 1822 for (const cricket::Candidate& candidate : lport->Candidates()) { |
1828 EXPECT_EQ(rtc::kNetworkCostHigh, candidate.network_cost()); | 1823 EXPECT_EQ(rtc::kNetworkCostHigh, candidate.network_cost()); |
1829 } | 1824 } |
1830 | 1825 |
1831 SetNetworkType(rtc::ADAPTER_TYPE_WIFI); | 1826 SetNetworkType(rtc::ADAPTER_TYPE_WIFI); |
1832 Connection* rconn = | 1827 Connection* rconn = rport->CreateConnection( |
1833 rport->CreateConnection(lport->Candidates()[0], Port::ORIGIN_MESSAGE); | 1828 lport->Candidates()[0], Port::ORIGIN_MESSAGE, IceConfig()); |
1834 SetNetworkType(rtc::ADAPTER_TYPE_CELLULAR); | 1829 SetNetworkType(rtc::ADAPTER_TYPE_CELLULAR); |
1835 lconn->Ping(0); | 1830 lconn->Ping(0); |
1836 // The rconn's remote candidate cost is rtc::kNetworkCostLow, but the ping | 1831 // The rconn's remote candidate cost is rtc::kNetworkCostLow, but the ping |
1837 // contains an attribute of network cost of rtc::kNetworkCostHigh. Once the | 1832 // contains an attribute of network cost of rtc::kNetworkCostHigh. Once the |
1838 // message is handled in rconn, The rconn's remote candidate will have cost | 1833 // message is handled in rconn, The rconn's remote candidate will have cost |
1839 // rtc::kNetworkCostHigh; | 1834 // rtc::kNetworkCostHigh; |
1840 EXPECT_EQ(rtc::kNetworkCostLow, rconn->remote_candidate().network_cost()); | 1835 EXPECT_EQ(rtc::kNetworkCostLow, rconn->remote_candidate().network_cost()); |
1841 ASSERT_TRUE_WAIT(lport->last_stun_msg() != NULL, 1000); | 1836 ASSERT_TRUE_WAIT(lport->last_stun_msg() != NULL, 1000); |
1842 IceMessage* msg = lport->last_stun_msg(); | 1837 IceMessage* msg = lport->last_stun_msg(); |
1843 EXPECT_EQ(STUN_BINDING_REQUEST, msg->type()); | 1838 EXPECT_EQ(STUN_BINDING_REQUEST, msg->type()); |
(...skipping 13 matching lines...) Expand all Loading... |
1857 lport->SetIceRole(cricket::ICEROLE_CONTROLLING); | 1852 lport->SetIceRole(cricket::ICEROLE_CONTROLLING); |
1858 lport->SetIceTiebreaker(kTiebreaker1); | 1853 lport->SetIceTiebreaker(kTiebreaker1); |
1859 rport->SetIceRole(cricket::ICEROLE_CONTROLLED); | 1854 rport->SetIceRole(cricket::ICEROLE_CONTROLLED); |
1860 rport->SetIceTiebreaker(kTiebreaker2); | 1855 rport->SetIceTiebreaker(kTiebreaker2); |
1861 | 1856 |
1862 uint16_t lnetwork_id = 9; | 1857 uint16_t lnetwork_id = 9; |
1863 lport->Network()->set_id(lnetwork_id); | 1858 lport->Network()->set_id(lnetwork_id); |
1864 // Send a fake ping from lport to rport. | 1859 // Send a fake ping from lport to rport. |
1865 lport->PrepareAddress(); | 1860 lport->PrepareAddress(); |
1866 rport->PrepareAddress(); | 1861 rport->PrepareAddress(); |
1867 Connection* lconn = | 1862 Connection* lconn = lport->CreateConnection( |
1868 lport->CreateConnection(rport->Candidates()[0], Port::ORIGIN_MESSAGE); | 1863 rport->Candidates()[0], Port::ORIGIN_MESSAGE, IceConfig()); |
1869 lconn->Ping(0); | 1864 lconn->Ping(0); |
1870 ASSERT_TRUE_WAIT(lport->last_stun_msg() != NULL, 1000); | 1865 ASSERT_TRUE_WAIT(lport->last_stun_msg() != NULL, 1000); |
1871 IceMessage* msg = lport->last_stun_msg(); | 1866 IceMessage* msg = lport->last_stun_msg(); |
1872 const StunUInt32Attribute* network_info_attr = | 1867 const StunUInt32Attribute* network_info_attr = |
1873 msg->GetUInt32(STUN_ATTR_NETWORK_INFO); | 1868 msg->GetUInt32(STUN_ATTR_NETWORK_INFO); |
1874 ASSERT_TRUE(network_info_attr != NULL); | 1869 ASSERT_TRUE(network_info_attr != NULL); |
1875 uint32_t network_info = network_info_attr->value(); | 1870 uint32_t network_info = network_info_attr->value(); |
1876 EXPECT_EQ(lnetwork_id, network_info >> 16); | 1871 EXPECT_EQ(lnetwork_id, network_info >> 16); |
1877 // Default network has unknown type and cost kNetworkCostUnknown. | 1872 // Default network has unknown type and cost kNetworkCostUnknown. |
1878 EXPECT_EQ(rtc::kNetworkCostUnknown, network_info & 0xFFFF); | 1873 EXPECT_EQ(rtc::kNetworkCostUnknown, network_info & 0xFFFF); |
1879 | 1874 |
1880 // Set the network type to be cellular so its cost will be kNetworkCostHigh. | 1875 // Set the network type to be cellular so its cost will be kNetworkCostHigh. |
1881 // Send a fake ping from rport to lport. | 1876 // Send a fake ping from rport to lport. |
1882 SetNetworkType(rtc::ADAPTER_TYPE_CELLULAR); | 1877 SetNetworkType(rtc::ADAPTER_TYPE_CELLULAR); |
1883 uint16_t rnetwork_id = 8; | 1878 uint16_t rnetwork_id = 8; |
1884 rport->Network()->set_id(rnetwork_id); | 1879 rport->Network()->set_id(rnetwork_id); |
1885 Connection* rconn = | 1880 Connection* rconn = rport->CreateConnection( |
1886 rport->CreateConnection(lport->Candidates()[0], Port::ORIGIN_MESSAGE); | 1881 lport->Candidates()[0], Port::ORIGIN_MESSAGE, IceConfig()); |
1887 rconn->Ping(0); | 1882 rconn->Ping(0); |
1888 ASSERT_TRUE_WAIT(rport->last_stun_msg() != NULL, 1000); | 1883 ASSERT_TRUE_WAIT(rport->last_stun_msg() != NULL, 1000); |
1889 msg = rport->last_stun_msg(); | 1884 msg = rport->last_stun_msg(); |
1890 network_info_attr = msg->GetUInt32(STUN_ATTR_NETWORK_INFO); | 1885 network_info_attr = msg->GetUInt32(STUN_ATTR_NETWORK_INFO); |
1891 ASSERT_TRUE(network_info_attr != NULL); | 1886 ASSERT_TRUE(network_info_attr != NULL); |
1892 network_info = network_info_attr->value(); | 1887 network_info = network_info_attr->value(); |
1893 EXPECT_EQ(rnetwork_id, network_info >> 16); | 1888 EXPECT_EQ(rnetwork_id, network_info >> 16); |
1894 EXPECT_EQ(rtc::kNetworkCostHigh, network_info & 0xFFFF); | 1889 EXPECT_EQ(rtc::kNetworkCostHigh, network_info & 0xFFFF); |
1895 } | 1890 } |
1896 | 1891 |
(...skipping 247 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2144 std::unique_ptr<TestPort> rport( | 2139 std::unique_ptr<TestPort> rport( |
2145 CreateTestPort(kLocalAddr2, "rfrag", "rpass")); | 2140 CreateTestPort(kLocalAddr2, "rfrag", "rpass")); |
2146 rport->SetIceRole(cricket::ICEROLE_CONTROLLED); | 2141 rport->SetIceRole(cricket::ICEROLE_CONTROLLED); |
2147 rport->SetIceTiebreaker(kTiebreaker2); | 2142 rport->SetIceTiebreaker(kTiebreaker2); |
2148 | 2143 |
2149 lport->PrepareAddress(); | 2144 lport->PrepareAddress(); |
2150 rport->PrepareAddress(); | 2145 rport->PrepareAddress(); |
2151 ASSERT_FALSE(lport->Candidates().empty()); | 2146 ASSERT_FALSE(lport->Candidates().empty()); |
2152 ASSERT_FALSE(rport->Candidates().empty()); | 2147 ASSERT_FALSE(rport->Candidates().empty()); |
2153 | 2148 |
2154 Connection* lconn = lport->CreateConnection(rport->Candidates()[0], | 2149 Connection* lconn = lport->CreateConnection( |
2155 Port::ORIGIN_MESSAGE); | 2150 rport->Candidates()[0], Port::ORIGIN_MESSAGE, IceConfig()); |
2156 Connection* rconn = rport->CreateConnection(lport->Candidates()[0], | 2151 Connection* rconn = rport->CreateConnection( |
2157 Port::ORIGIN_MESSAGE); | 2152 lport->Candidates()[0], Port::ORIGIN_MESSAGE, IceConfig()); |
2158 rconn->Ping(0); | 2153 rconn->Ping(0); |
2159 | 2154 |
2160 ASSERT_TRUE_WAIT(rport->last_stun_msg() != NULL, 1000); | 2155 ASSERT_TRUE_WAIT(rport->last_stun_msg() != NULL, 1000); |
2161 IceMessage* msg = rport->last_stun_msg(); | 2156 IceMessage* msg = rport->last_stun_msg(); |
2162 EXPECT_EQ(STUN_BINDING_REQUEST, msg->type()); | 2157 EXPECT_EQ(STUN_BINDING_REQUEST, msg->type()); |
2163 // Send rport binding request to lport. | 2158 // Send rport binding request to lport. |
2164 lconn->OnReadPacket(rport->last_stun_buf()->data<char>(), | 2159 lconn->OnReadPacket(rport->last_stun_buf()->data<char>(), |
2165 rport->last_stun_buf()->size(), | 2160 rport->last_stun_buf()->size(), |
2166 rtc::PacketTime()); | 2161 rtc::PacketTime()); |
2167 ASSERT_TRUE_WAIT(lport->last_stun_msg() != NULL, 1000); | 2162 ASSERT_TRUE_WAIT(lport->last_stun_msg() != NULL, 1000); |
(...skipping 207 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2375 rport->AddCandidateAddress(SocketAddress("10.1.1.100", 1234)); | 2370 rport->AddCandidateAddress(SocketAddress("10.1.1.100", 1234)); |
2376 | 2371 |
2377 EXPECT_EQ(0x7E001E85U, lport->Candidates()[0].priority()); | 2372 EXPECT_EQ(0x7E001E85U, lport->Candidates()[0].priority()); |
2378 EXPECT_EQ(0x2001EE9U, rport->Candidates()[0].priority()); | 2373 EXPECT_EQ(0x2001EE9U, rport->Candidates()[0].priority()); |
2379 | 2374 |
2380 // RFC 5245 | 2375 // RFC 5245 |
2381 // pair priority = 2^32*MIN(G,D) + 2*MAX(G,D) + (G>D?1:0) | 2376 // pair priority = 2^32*MIN(G,D) + 2*MAX(G,D) + (G>D?1:0) |
2382 lport->SetIceRole(cricket::ICEROLE_CONTROLLING); | 2377 lport->SetIceRole(cricket::ICEROLE_CONTROLLING); |
2383 rport->SetIceRole(cricket::ICEROLE_CONTROLLED); | 2378 rport->SetIceRole(cricket::ICEROLE_CONTROLLED); |
2384 Connection* lconn = lport->CreateConnection( | 2379 Connection* lconn = lport->CreateConnection( |
2385 rport->Candidates()[0], Port::ORIGIN_MESSAGE); | 2380 rport->Candidates()[0], Port::ORIGIN_MESSAGE, IceConfig()); |
2386 #if defined(WEBRTC_WIN) | 2381 #if defined(WEBRTC_WIN) |
2387 EXPECT_EQ(0x2001EE9FC003D0BU, lconn->priority()); | 2382 EXPECT_EQ(0x2001EE9FC003D0BU, lconn->priority()); |
2388 #else | 2383 #else |
2389 EXPECT_EQ(0x2001EE9FC003D0BLLU, lconn->priority()); | 2384 EXPECT_EQ(0x2001EE9FC003D0BLLU, lconn->priority()); |
2390 #endif | 2385 #endif |
2391 | 2386 |
2392 lport->SetIceRole(cricket::ICEROLE_CONTROLLED); | 2387 lport->SetIceRole(cricket::ICEROLE_CONTROLLED); |
2393 rport->SetIceRole(cricket::ICEROLE_CONTROLLING); | 2388 rport->SetIceRole(cricket::ICEROLE_CONTROLLING); |
2394 Connection* rconn = rport->CreateConnection( | 2389 Connection* rconn = rport->CreateConnection( |
2395 lport->Candidates()[0], Port::ORIGIN_MESSAGE); | 2390 lport->Candidates()[0], Port::ORIGIN_MESSAGE, IceConfig()); |
2396 #if defined(WEBRTC_WIN) | 2391 #if defined(WEBRTC_WIN) |
2397 EXPECT_EQ(0x2001EE9FC003D0AU, rconn->priority()); | 2392 EXPECT_EQ(0x2001EE9FC003D0AU, rconn->priority()); |
2398 #else | 2393 #else |
2399 EXPECT_EQ(0x2001EE9FC003D0ALLU, rconn->priority()); | 2394 EXPECT_EQ(0x2001EE9FC003D0ALLU, rconn->priority()); |
2400 #endif | 2395 #endif |
2401 } | 2396 } |
2402 | 2397 |
2403 TEST_F(PortTest, TestWritableState) { | 2398 TEST_F(PortTest, TestWritableState) { |
2404 UDPPort* port1 = CreateUdpPort(kLocalAddr1); | 2399 UDPPort* port1 = CreateUdpPort(kLocalAddr1); |
2405 port1->SetIceRole(cricket::ICEROLE_CONTROLLING); | 2400 port1->SetIceRole(cricket::ICEROLE_CONTROLLING); |
(...skipping 125 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2531 // Verify stun ping is without USE_CANDIDATE_ATTR. Getting message directly | 2526 // Verify stun ping is without USE_CANDIDATE_ATTR. Getting message directly |
2532 // from port. | 2527 // from port. |
2533 ASSERT_TRUE_WAIT(ice_full_port->last_stun_msg() != NULL, 1000); | 2528 ASSERT_TRUE_WAIT(ice_full_port->last_stun_msg() != NULL, 1000); |
2534 IceMessage* msg = ice_full_port->last_stun_msg(); | 2529 IceMessage* msg = ice_full_port->last_stun_msg(); |
2535 EXPECT_TRUE(msg->GetByteString(STUN_ATTR_USE_CANDIDATE) == NULL); | 2530 EXPECT_TRUE(msg->GetByteString(STUN_ATTR_USE_CANDIDATE) == NULL); |
2536 | 2531 |
2537 // Respond with a BINDING-RESPONSE from litemode client. | 2532 // Respond with a BINDING-RESPONSE from litemode client. |
2538 // NOTE: Ideally we should't create connection at this stage from lite | 2533 // NOTE: Ideally we should't create connection at this stage from lite |
2539 // port, as it should be done only after receiving ping with USE_CANDIDATE. | 2534 // port, as it should be done only after receiving ping with USE_CANDIDATE. |
2540 // But we need a connection to send a response message. | 2535 // But we need a connection to send a response message. |
2541 ice_lite_port->CreateConnection( | 2536 ice_lite_port->CreateConnection(ice_full_port->Candidates()[0], |
2542 ice_full_port->Candidates()[0], cricket::Port::ORIGIN_MESSAGE); | 2537 cricket::Port::ORIGIN_MESSAGE, IceConfig()); |
2543 std::unique_ptr<IceMessage> request(CopyStunMessage(msg)); | 2538 std::unique_ptr<IceMessage> request(CopyStunMessage(msg)); |
2544 ice_lite_port->SendBindingResponse( | 2539 ice_lite_port->SendBindingResponse( |
2545 request.get(), ice_full_port->Candidates()[0].address()); | 2540 request.get(), ice_full_port->Candidates()[0].address()); |
2546 | 2541 |
2547 // Feeding the respone message from litemode to the full mode connection. | 2542 // Feeding the respone message from litemode to the full mode connection. |
2548 ch1.conn()->OnReadPacket(ice_lite_port->last_stun_buf()->data<char>(), | 2543 ch1.conn()->OnReadPacket(ice_lite_port->last_stun_buf()->data<char>(), |
2549 ice_lite_port->last_stun_buf()->size(), | 2544 ice_lite_port->last_stun_buf()->size(), |
2550 rtc::PacketTime()); | 2545 rtc::PacketTime()); |
2551 // Verifying full mode connection becomes writable from the response. | 2546 // Verifying full mode connection becomes writable from the response. |
2552 EXPECT_EQ_WAIT(Connection::STATE_WRITABLE, ch1.conn()->write_state(), | 2547 EXPECT_EQ_WAIT(Connection::STATE_WRITABLE, ch1.conn()->write_state(), |
(...skipping 139 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2692 } | 2687 } |
2693 | 2688 |
2694 TEST_F(PortTest, TestAddConnectionWithSameAddress) { | 2689 TEST_F(PortTest, TestAddConnectionWithSameAddress) { |
2695 std::unique_ptr<TestPort> port( | 2690 std::unique_ptr<TestPort> port( |
2696 CreateTestPort(kLocalAddr1, "ufrag1", "password1")); | 2691 CreateTestPort(kLocalAddr1, "ufrag1", "password1")); |
2697 port->PrepareAddress(); | 2692 port->PrepareAddress(); |
2698 EXPECT_EQ(1u, port->Candidates().size()); | 2693 EXPECT_EQ(1u, port->Candidates().size()); |
2699 rtc::SocketAddress address("1.1.1.1", 5000); | 2694 rtc::SocketAddress address("1.1.1.1", 5000); |
2700 cricket::Candidate candidate(1, "udp", address, 0, "", "", "relay", 0, ""); | 2695 cricket::Candidate candidate(1, "udp", address, 0, "", "", "relay", 0, ""); |
2701 cricket::Connection* conn1 = | 2696 cricket::Connection* conn1 = |
2702 port->CreateConnection(candidate, Port::ORIGIN_MESSAGE); | 2697 port->CreateConnection(candidate, Port::ORIGIN_MESSAGE, IceConfig()); |
2703 cricket::Connection* conn_in_use = port->GetConnection(address); | 2698 cricket::Connection* conn_in_use = port->GetConnection(address); |
2704 EXPECT_EQ(conn1, conn_in_use); | 2699 EXPECT_EQ(conn1, conn_in_use); |
2705 EXPECT_EQ(0u, conn_in_use->remote_candidate().generation()); | 2700 EXPECT_EQ(0u, conn_in_use->remote_candidate().generation()); |
2706 | 2701 |
2707 // Creating with a candidate with the same address again will get us a | 2702 // Creating with a candidate with the same address again will get us a |
2708 // different connection with the new candidate. | 2703 // different connection with the new candidate. |
2709 candidate.set_generation(2); | 2704 candidate.set_generation(2); |
2710 cricket::Connection* conn2 = | 2705 cricket::Connection* conn2 = |
2711 port->CreateConnection(candidate, Port::ORIGIN_MESSAGE); | 2706 port->CreateConnection(candidate, Port::ORIGIN_MESSAGE, IceConfig()); |
2712 EXPECT_NE(conn1, conn2); | 2707 EXPECT_NE(conn1, conn2); |
2713 conn_in_use = port->GetConnection(address); | 2708 conn_in_use = port->GetConnection(address); |
2714 EXPECT_EQ(conn2, conn_in_use); | 2709 EXPECT_EQ(conn2, conn_in_use); |
2715 EXPECT_EQ(2u, conn_in_use->remote_candidate().generation()); | 2710 EXPECT_EQ(2u, conn_in_use->remote_candidate().generation()); |
2716 | 2711 |
2717 // Make sure the new connection was not deleted. | 2712 // Make sure the new connection was not deleted. |
2718 rtc::Thread::Current()->ProcessMessages(300); | 2713 rtc::Thread::Current()->ProcessMessages(300); |
2719 EXPECT_TRUE(port->GetConnection(address) != nullptr); | 2714 EXPECT_TRUE(port->GetConnection(address) != nullptr); |
2720 } | 2715 } |
OLD | NEW |