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 427 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
438 } | 438 } |
439 | 439 |
440 // Create an entry, if needed, so we can get our permissions set up correctly. | 440 // Create an entry, if needed, so we can get our permissions set up correctly. |
441 CreateEntry(address.address()); | 441 CreateEntry(address.address()); |
442 | 442 |
443 // A TURN port will have two candiates, STUN and TURN. STUN may not | 443 // A TURN port will have two candiates, STUN and TURN. STUN may not |
444 // present in all cases. If present stun candidate will be added first | 444 // present in all cases. If present stun candidate will be added first |
445 // and TURN candidate later. | 445 // and TURN candidate later. |
446 for (size_t index = 0; index < Candidates().size(); ++index) { | 446 for (size_t index = 0; index < Candidates().size(); ++index) { |
447 if (Candidates()[index].type() == RELAY_PORT_TYPE) { | 447 if (Candidates()[index].type() == RELAY_PORT_TYPE) { |
448 ProxyConnection* conn = new ProxyConnection(this, index, address); | 448 TurnConnection* conn = new TurnConnection(this, index, address); |
449 conn->SignalDestroyed.connect(this, &TurnPort::OnConnectionDestroyed); | 449 conn->SignalDestroyed.connect(this, &TurnPort::OnConnectionDestroyed); |
450 AddConnection(conn); | 450 AddConnection(conn); |
451 return conn; | 451 return conn; |
452 } | 452 } |
453 } | 453 } |
454 return NULL; | 454 return NULL; |
455 } | 455 } |
456 | 456 |
457 int TurnPort::SetOption(rtc::Socket::Option opt, int value) { | 457 int TurnPort::SetOption(rtc::Socket::Option opt, int value) { |
458 if (!socket_) { | 458 if (!socket_) { |
(...skipping 880 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
1339 port_->SignalCreatePermissionResult(port_, ext_addr_, 0); | 1339 port_->SignalCreatePermissionResult(port_, ext_addr_, 0); |
1340 } | 1340 } |
1341 | 1341 |
1342 void TurnEntry::OnCreatePermissionError(StunMessage* response, int code) { | 1342 void TurnEntry::OnCreatePermissionError(StunMessage* response, int code) { |
1343 if (code == STUN_ERROR_STALE_NONCE) { | 1343 if (code == STUN_ERROR_STALE_NONCE) { |
1344 if (port_->UpdateNonce(response)) { | 1344 if (port_->UpdateNonce(response)) { |
1345 SendCreatePermissionRequest(); | 1345 SendCreatePermissionRequest(); |
1346 } | 1346 } |
1347 } else { | 1347 } else { |
1348 // Send signal with error code. | 1348 // Send signal with error code. |
1349 port_->SignalCreatePermissionResult(port_, ext_addr_, code); | 1349 port_->SignalCreatePermissionResult(port_, ext_addr_, code); |
juberti
2015/10/26 21:27:24
Rather than using the signal, I think it would be
| |
1350 } | 1350 } |
1351 } | 1351 } |
1352 | 1352 |
1353 void TurnEntry::OnChannelBindSuccess() { | 1353 void TurnEntry::OnChannelBindSuccess() { |
1354 LOG_J(LS_INFO, port_) << "Channel bind for " << ext_addr_.ToSensitiveString() | 1354 LOG_J(LS_INFO, port_) << "Channel bind for " << ext_addr_.ToSensitiveString() |
1355 << " succeeded"; | 1355 << " succeeded"; |
1356 ASSERT(state_ == STATE_BINDING || state_ == STATE_BOUND); | 1356 ASSERT(state_ == STATE_BINDING || state_ == STATE_BOUND); |
1357 state_ = STATE_BOUND; | 1357 state_ = STATE_BOUND; |
1358 } | 1358 } |
1359 | 1359 |
1360 void TurnEntry::OnChannelBindError(StunMessage* response, int code) { | 1360 void TurnEntry::OnChannelBindError(StunMessage* response, int code) { |
1361 // TODO(mallinath) - Implement handling of error response for channel | 1361 // TODO(mallinath) - Implement handling of error response for channel |
1362 // bind request as per http://tools.ietf.org/html/rfc5766#section-11.3 | 1362 // bind request as per http://tools.ietf.org/html/rfc5766#section-11.3 |
1363 if (code == STUN_ERROR_STALE_NONCE) { | 1363 if (code == STUN_ERROR_STALE_NONCE) { |
1364 if (port_->UpdateNonce(response)) { | 1364 if (port_->UpdateNonce(response)) { |
1365 // Send channel bind request with fresh nonce. | 1365 // Send channel bind request with fresh nonce. |
1366 SendChannelBindRequest(0); | 1366 SendChannelBindRequest(0); |
1367 } | 1367 } |
1368 } | 1368 } |
1369 } | 1369 } |
1370 | 1370 |
1371 TurnConnection::TurnConnection(TurnPort* port, | |
1372 size_t index, | |
1373 const Candidate& remote_candidate) | |
1374 : ProxyConnection(port, index, remote_candidate), turn_port_(port) { | |
1375 turn_port_->SignalCreatePermissionResult.connect( | |
1376 this, &TurnConnection::OnCreatePermissionResult); | |
1377 } | |
1378 | |
1379 TurnConnection::~TurnConnection() { | |
1380 turn_port_->SignalCreatePermissionResult.disconnect(this); | |
1381 } | |
1382 | |
1383 void TurnConnection::OnCreatePermissionResult( | |
1384 TurnPort* port, | |
1385 const rtc::SocketAddress& remote_address, | |
1386 int code) { | |
1387 RTC_DCHECK(port == turn_port_); | |
1388 // If this signal is for another connection, or it's a success, ignore it. | |
1389 if (remote_address != remote_candidate_.address() || code == 0) { | |
1390 return; | |
1391 } | |
1392 LOG_J(LS_ERROR, this) << "Received TURN CreatePermission error response, " | |
1393 << "code=" << code << "; killing connection."; | |
1394 set_state(STATE_FAILED); | |
1395 Destroy(); | |
1396 } | |
1397 | |
1371 } // namespace cricket | 1398 } // namespace cricket |
OLD | NEW |