| 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 |
| 11 #include "webrtc/p2p/base/p2ptransportchannel.h" | 11 #include "webrtc/p2p/base/p2ptransportchannel.h" |
| 12 | 12 |
| 13 #include <algorithm> | 13 #include <algorithm> |
| 14 #include <set> | 14 #include <set> |
| 15 #include "webrtc/p2p/base/common.h" | 15 |
| 16 #include "webrtc/p2p/base/relayport.h" // For RELAY_PORT_TYPE. | |
| 17 #include "webrtc/p2p/base/stunport.h" // For STUN_PORT_TYPE. | |
| 18 #include "webrtc/base/common.h" | 16 #include "webrtc/base/common.h" |
| 19 #include "webrtc/base/crc32.h" | 17 #include "webrtc/base/crc32.h" |
| 20 #include "webrtc/base/logging.h" | 18 #include "webrtc/base/logging.h" |
| 21 #include "webrtc/base/stringencode.h" | 19 #include "webrtc/base/stringencode.h" |
| 20 #include "webrtc/p2p/base/candidate.h" |
| 21 #include "webrtc/p2p/base/common.h" |
| 22 #include "webrtc/p2p/base/relayport.h" // For RELAY_PORT_TYPE. |
| 23 #include "webrtc/p2p/base/stunport.h" // For STUN_PORT_TYPE. |
| 22 #include "webrtc/system_wrappers/include/field_trial.h" | 24 #include "webrtc/system_wrappers/include/field_trial.h" |
| 23 | 25 |
| 24 namespace { | 26 namespace { |
| 25 | 27 |
| 26 // messages for queuing up work for ourselves | 28 // messages for queuing up work for ourselves |
| 27 enum { MSG_SORT = 1, MSG_CHECK_AND_PING }; | 29 enum { MSG_SORT = 1, MSG_CHECK_AND_PING }; |
| 28 | 30 |
| 29 // The minimum improvement in RTT that justifies a switch. | 31 // The minimum improvement in RTT that justifies a switch. |
| 30 static const double kMinImprovement = 10; | 32 static const double kMinImprovement = 10; |
| 31 | 33 |
| (...skipping 425 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 457 // Remember the ports and candidates, and signal that candidates are ready. | 459 // Remember the ports and candidates, and signal that candidates are ready. |
| 458 // The session will handle this, and send an initiate/accept/modify message | 460 // The session will handle this, and send an initiate/accept/modify message |
| 459 // if one is pending. | 461 // if one is pending. |
| 460 | 462 |
| 461 port->SetIceRole(ice_role_); | 463 port->SetIceRole(ice_role_); |
| 462 port->SetIceTiebreaker(tiebreaker_); | 464 port->SetIceTiebreaker(tiebreaker_); |
| 463 ports_.push_back(port); | 465 ports_.push_back(port); |
| 464 port->SignalUnknownAddress.connect( | 466 port->SignalUnknownAddress.connect( |
| 465 this, &P2PTransportChannel::OnUnknownAddress); | 467 this, &P2PTransportChannel::OnUnknownAddress); |
| 466 port->SignalDestroyed.connect(this, &P2PTransportChannel::OnPortDestroyed); | 468 port->SignalDestroyed.connect(this, &P2PTransportChannel::OnPortDestroyed); |
| 469 port->SignalNetworkInactive.connect( |
| 470 this, &P2PTransportChannel::OnPortNetworkInactive); |
| 467 port->SignalRoleConflict.connect( | 471 port->SignalRoleConflict.connect( |
| 468 this, &P2PTransportChannel::OnRoleConflict); | 472 this, &P2PTransportChannel::OnRoleConflict); |
| 469 port->SignalSentPacket.connect(this, &P2PTransportChannel::OnSentPacket); | 473 port->SignalSentPacket.connect(this, &P2PTransportChannel::OnSentPacket); |
| 470 | 474 |
| 471 // Attempt to create a connection from this new port to all of the remote | 475 // Attempt to create a connection from this new port to all of the remote |
| 472 // candidates that we were given so far. | 476 // candidates that we were given so far. |
| 473 | 477 |
| 474 std::vector<RemoteCandidate>::iterator iter; | 478 std::vector<RemoteCandidate>::iterator iter; |
| 475 for (iter = remote_candidates_.begin(); iter != remote_candidates_.end(); | 479 for (iter = remote_candidates_.begin(); iter != remote_candidates_.end(); |
| 476 ++iter) { | 480 ++iter) { |
| (...skipping 931 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1408 // Remove this port from the list (if we didn't drop it already). | 1412 // Remove this port from the list (if we didn't drop it already). |
| 1409 std::vector<PortInterface*>::iterator iter = | 1413 std::vector<PortInterface*>::iterator iter = |
| 1410 std::find(ports_.begin(), ports_.end(), port); | 1414 std::find(ports_.begin(), ports_.end(), port); |
| 1411 if (iter != ports_.end()) | 1415 if (iter != ports_.end()) |
| 1412 ports_.erase(iter); | 1416 ports_.erase(iter); |
| 1413 | 1417 |
| 1414 LOG(INFO) << "Removed port from p2p socket: " | 1418 LOG(INFO) << "Removed port from p2p socket: " |
| 1415 << static_cast<int>(ports_.size()) << " remaining"; | 1419 << static_cast<int>(ports_.size()) << " remaining"; |
| 1416 } | 1420 } |
| 1417 | 1421 |
| 1422 void P2PTransportChannel::OnPortNetworkInactive(PortInterface* port) { |
| 1423 // If it does not gather continually, the port will be removed from the list |
| 1424 // when ICE restarts. |
| 1425 if (!gather_continually_) { |
| 1426 return; |
| 1427 } |
| 1428 auto it = std::find(ports_.begin(), ports_.end(), port); |
| 1429 // Don't need to do anything if the port has been deleted from the port list. |
| 1430 if (it == ports_.end()) { |
| 1431 return; |
| 1432 } |
| 1433 ports_.erase(it); |
| 1434 LOG(INFO) << "Removed port due to inactive networks: " << ports_.size() |
| 1435 << " remaining"; |
| 1436 // TODO(honghaiz): Signal candidate removals to the remote side. |
| 1437 } |
| 1438 |
| 1418 // We data is available, let listeners know | 1439 // We data is available, let listeners know |
| 1419 void P2PTransportChannel::OnReadPacket(Connection* connection, | 1440 void P2PTransportChannel::OnReadPacket(Connection* connection, |
| 1420 const char* data, | 1441 const char* data, |
| 1421 size_t len, | 1442 size_t len, |
| 1422 const rtc::PacketTime& packet_time) { | 1443 const rtc::PacketTime& packet_time) { |
| 1423 ASSERT(worker_thread_ == rtc::Thread::Current()); | 1444 ASSERT(worker_thread_ == rtc::Thread::Current()); |
| 1424 | 1445 |
| 1425 // Do not deliver, if packet doesn't belong to the correct transport channel. | 1446 // Do not deliver, if packet doesn't belong to the correct transport channel. |
| 1426 if (!FindConnection(connection)) | 1447 if (!FindConnection(connection)) |
| 1427 return; | 1448 return; |
| (...skipping 15 matching lines...) Expand all Loading... |
| 1443 SignalSentPacket(this, sent_packet); | 1464 SignalSentPacket(this, sent_packet); |
| 1444 } | 1465 } |
| 1445 | 1466 |
| 1446 void P2PTransportChannel::OnReadyToSend(Connection* connection) { | 1467 void P2PTransportChannel::OnReadyToSend(Connection* connection) { |
| 1447 if (connection == best_connection_ && writable()) { | 1468 if (connection == best_connection_ && writable()) { |
| 1448 SignalReadyToSend(this); | 1469 SignalReadyToSend(this); |
| 1449 } | 1470 } |
| 1450 } | 1471 } |
| 1451 | 1472 |
| 1452 } // namespace cricket | 1473 } // namespace cricket |
| OLD | NEW |