Chromium Code Reviews| 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 837 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 848 | 848 |
| 849 // Setup a connection object for the local and remote candidate combination. | 849 // Setup a connection object for the local and remote candidate combination. |
| 850 // And then listen to connection object for changes. | 850 // And then listen to connection object for changes. |
| 851 bool P2PTransportChannel::CreateConnection(PortInterface* port, | 851 bool P2PTransportChannel::CreateConnection(PortInterface* port, |
| 852 const Candidate& remote_candidate, | 852 const Candidate& remote_candidate, |
| 853 PortInterface* origin_port) { | 853 PortInterface* origin_port) { |
| 854 if (!port->SupportsProtocol(remote_candidate.protocol())) { | 854 if (!port->SupportsProtocol(remote_candidate.protocol())) { |
| 855 return false; | 855 return false; |
| 856 } | 856 } |
| 857 // Look for an existing connection with this remote address. If one is not | 857 // Look for an existing connection with this remote address. If one is not |
| 858 // found, then we can create a new connection for this address. | 858 // found or it is found but the existing remote candidate has an older |
| 859 // generation, then we can create a new connection for this address. | |
| 859 Connection* connection = port->GetConnection(remote_candidate.address()); | 860 Connection* connection = port->GetConnection(remote_candidate.address()); |
| 860 if (connection != NULL) { | 861 if (connection == nullptr || |
| 861 connection->MaybeUpdatePeerReflexiveCandidate(remote_candidate); | 862 connection->remote_candidate().generation() < |
| 862 | 863 remote_candidate.generation()) { |
| 863 // It is not legal to try to change any of the parameters of an existing | 864 // Don't create a connection if this is a candidate we received in a |
| 864 // connection; however, the other side can send a duplicate candidate. | 865 // message and we are not allowed to make outgoing connections. |
| 865 if (!remote_candidate.IsEquivalent(connection->remote_candidate())) { | 866 PortInterface::CandidateOrigin origin = GetOrigin(port, origin_port); |
| 866 LOG(INFO) << "Attempt to change a remote candidate." | 867 if (origin == PortInterface::ORIGIN_MESSAGE && incoming_only_) { |
| 867 << " Existing remote candidate: " | |
| 868 << connection->remote_candidate().ToString() | |
| 869 << "New remote candidate: " | |
| 870 << remote_candidate.ToString(); | |
| 871 return false; | 868 return false; |
| 872 } | 869 } |
| 873 } else { | 870 Connection* connection = port->CreateConnection(remote_candidate, origin); |
| 874 PortInterface::CandidateOrigin origin = GetOrigin(port, origin_port); | 871 if (!connection) { |
| 875 | |
| 876 // Don't create connection if this is a candidate we received in a | |
| 877 // message and we are not allowed to make outgoing connections. | |
| 878 if (origin == PortInterface::ORIGIN_MESSAGE && incoming_only_) | |
| 879 return false; | 872 return false; |
| 880 | 873 } |
| 881 connection = port->CreateConnection(remote_candidate, origin); | |
| 882 if (!connection) | |
| 883 return false; | |
| 884 | |
| 885 AddConnection(connection); | 874 AddConnection(connection); |
|
pthatcher1
2016/05/31 20:09:29
I think this should also be AddOrReplaceConnection
honghaiz3
2016/05/31 23:25:23
It might look strange to use AddOrRepalceConnectio
pthatcher1
2016/06/01 01:57:04
Ah, you're completely right. Please keep it AddCo
honghaiz3
2016/06/01 16:37:59
Acknowledged.
| |
| 886 | |
| 887 LOG_J(LS_INFO, this) << "Created connection with origin=" << origin << ", (" | 875 LOG_J(LS_INFO, this) << "Created connection with origin=" << origin << ", (" |
| 888 << connections_.size() << " total)"; | 876 << connections_.size() << " total)"; |
| 877 return true; | |
| 889 } | 878 } |
| 890 | 879 |
| 891 return true; | 880 // No new connection was created. |
| 881 // Check if this is a peer reflexive candidate. | |
| 882 connection->MaybeUpdatePeerReflexiveCandidate(remote_candidate); | |
| 883 | |
| 884 // It is not legal to try to change any of the parameters of an existing | |
| 885 // connection; however, the other side can send a duplicate candidate. | |
| 886 if (!remote_candidate.IsEquivalent(connection->remote_candidate())) { | |
| 887 LOG(INFO) << "Attempt to change a remote candidate." | |
| 888 << " Existing remote candidate: " | |
| 889 << connection->remote_candidate().ToString() | |
| 890 << "New remote candidate: " << remote_candidate.ToString(); | |
| 891 } | |
| 892 return false; | |
| 892 } | 893 } |
| 893 | 894 |
| 894 bool P2PTransportChannel::FindConnection(Connection* connection) const { | 895 bool P2PTransportChannel::FindConnection(Connection* connection) const { |
| 895 std::vector<Connection*>::const_iterator citer = | 896 std::vector<Connection*>::const_iterator citer = |
| 896 std::find(connections_.begin(), connections_.end(), connection); | 897 std::find(connections_.begin(), connections_.end(), connection); |
| 897 return citer != connections_.end(); | 898 return citer != connections_.end(); |
| 898 } | 899 } |
| 899 | 900 |
| 900 uint32_t P2PTransportChannel::GetRemoteCandidateGeneration( | 901 uint32_t P2PTransportChannel::GetRemoteCandidateGeneration( |
| 901 const Candidate& candidate) { | 902 const Candidate& candidate) { |
| (...skipping 793 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1695 | 1696 |
| 1696 // During the initial state when nothing has been pinged yet, return the first | 1697 // During the initial state when nothing has been pinged yet, return the first |
| 1697 // one in the ordered |connections_|. | 1698 // one in the ordered |connections_|. |
| 1698 return *(std::find_if(connections_.begin(), connections_.end(), | 1699 return *(std::find_if(connections_.begin(), connections_.end(), |
| 1699 [conn1, conn2](Connection* conn) { | 1700 [conn1, conn2](Connection* conn) { |
| 1700 return conn == conn1 || conn == conn2; | 1701 return conn == conn1 || conn == conn2; |
| 1701 })); | 1702 })); |
| 1702 } | 1703 } |
| 1703 | 1704 |
| 1704 } // namespace cricket | 1705 } // namespace cricket |
| OLD | NEW |