| OLD | NEW | 
|     1 /* |     1 /* | 
|     2  *  Copyright 2009 The WebRTC Project Authors. All rights reserved. |     2  *  Copyright 2009 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 15 matching lines...) Expand all  Loading... | 
|    26 #include "webrtc/base/logging.h" |    26 #include "webrtc/base/logging.h" | 
|    27 #include "webrtc/base/natserver.h" |    27 #include "webrtc/base/natserver.h" | 
|    28 #include "webrtc/base/natsocketfactory.h" |    28 #include "webrtc/base/natsocketfactory.h" | 
|    29 #include "webrtc/base/physicalsocketserver.h" |    29 #include "webrtc/base/physicalsocketserver.h" | 
|    30 #include "webrtc/base/proxyserver.h" |    30 #include "webrtc/base/proxyserver.h" | 
|    31 #include "webrtc/base/socketaddress.h" |    31 #include "webrtc/base/socketaddress.h" | 
|    32 #include "webrtc/base/ssladapter.h" |    32 #include "webrtc/base/ssladapter.h" | 
|    33 #include "webrtc/base/thread.h" |    33 #include "webrtc/base/thread.h" | 
|    34 #include "webrtc/base/virtualsocketserver.h" |    34 #include "webrtc/base/virtualsocketserver.h" | 
|    35  |    35  | 
|    36 namespace { |    36 using cricket::kDefaultPortAllocatorFlags; | 
|    37  |    37 using cricket::kMinimumStepDelay; | 
 |    38 using cricket::kDefaultStepDelay; | 
 |    39 using cricket::PORTALLOCATOR_ENABLE_SHARED_SOCKET; | 
 |    40 using cricket::ServerAddresses; | 
 |    41 using cricket::MIN_PINGS_AT_WEAK_PING_INTERVAL; | 
|    38 using rtc::SocketAddress; |    42 using rtc::SocketAddress; | 
|    39  |    43  | 
|    40 // Default timeout for tests in this file. |    44 static const int kDefaultTimeout = 1000; | 
|    41 // Should be large enough for slow buildbots to run the tests reliably. |  | 
|    42 static const int kDefaultTimeout = 10000; |  | 
|    43  |  | 
|    44 static const int kOnlyLocalPorts = cricket::PORTALLOCATOR_DISABLE_STUN | |    45 static const int kOnlyLocalPorts = cricket::PORTALLOCATOR_DISABLE_STUN | | 
|    45                                    cricket::PORTALLOCATOR_DISABLE_RELAY | |    46                                    cricket::PORTALLOCATOR_DISABLE_RELAY | | 
|    46                                    cricket::PORTALLOCATOR_DISABLE_TCP; |    47                                    cricket::PORTALLOCATOR_DISABLE_TCP; | 
|    47 static const int LOW_RTT = 20; |    48 static const int LOW_RTT = 20; | 
|    48 // Addresses on the public internet. |    49 // Addresses on the public internet. | 
|    49 static const SocketAddress kPublicAddrs[2] = |    50 static const SocketAddress kPublicAddrs[2] = | 
|    50     { SocketAddress("11.11.11.11", 0), SocketAddress("22.22.22.22", 0) }; |    51     { SocketAddress("11.11.11.11", 0), SocketAddress("22.22.22.22", 0) }; | 
|    51 // IPv6 Addresses on the public internet. |    52 // IPv6 Addresses on the public internet. | 
|    52 static const SocketAddress kIPv6PublicAddrs[2] = { |    53 static const SocketAddress kIPv6PublicAddrs[2] = { | 
|    53     SocketAddress("2400:4030:1:2c00:be30:abcd:efab:cdef", 0), |    54     SocketAddress("2400:4030:1:2c00:be30:abcd:efab:cdef", 0), | 
| (...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|    98 static const char* kIcePwd[4] = {"TESTICEPWD00000000000000", |    99 static const char* kIcePwd[4] = {"TESTICEPWD00000000000000", | 
|    99                                  "TESTICEPWD00000000000001", |   100                                  "TESTICEPWD00000000000001", | 
|   100                                  "TESTICEPWD00000000000002", |   101                                  "TESTICEPWD00000000000002", | 
|   101                                  "TESTICEPWD00000000000003"}; |   102                                  "TESTICEPWD00000000000003"}; | 
|   102  |   103  | 
|   103 static const uint64_t kTiebreaker1 = 11111; |   104 static const uint64_t kTiebreaker1 = 11111; | 
|   104 static const uint64_t kTiebreaker2 = 22222; |   105 static const uint64_t kTiebreaker2 = 22222; | 
|   105  |   106  | 
|   106 enum { MSG_ADD_CANDIDATES, MSG_REMOVE_CANDIDATES }; |   107 enum { MSG_ADD_CANDIDATES, MSG_REMOVE_CANDIDATES }; | 
|   107  |   108  | 
|   108 cricket::IceConfig CreateIceConfig(int receiving_timeout, |   109 static cricket::IceConfig CreateIceConfig(int receiving_timeout, | 
|   109                                    bool gather_continually, |   110                                           bool gather_continually, | 
|   110                                    int backup_ping_interval = -1) { |   111                                           int backup_ping_interval = -1) { | 
|   111   cricket::IceConfig config; |   112   cricket::IceConfig config; | 
|   112   config.receiving_timeout = receiving_timeout; |   113   config.receiving_timeout = receiving_timeout; | 
|   113   config.gather_continually = gather_continually; |   114   config.gather_continually = gather_continually; | 
|   114   config.backup_connection_ping_interval = backup_ping_interval; |   115   config.backup_connection_ping_interval = backup_ping_interval; | 
|   115   return config; |   116   return config; | 
|   116 } |   117 } | 
|   117  |   118  | 
|   118 cricket::Candidate CreateUdpCandidate(const std::string& type, |  | 
|   119                                       const std::string& ip, |  | 
|   120                                       int port, |  | 
|   121                                       int priority, |  | 
|   122                                       const std::string& ufrag = "") { |  | 
|   123   cricket::Candidate c; |  | 
|   124   c.set_address(rtc::SocketAddress(ip, port)); |  | 
|   125   c.set_component(cricket::ICE_CANDIDATE_COMPONENT_DEFAULT); |  | 
|   126   c.set_protocol(cricket::UDP_PROTOCOL_NAME); |  | 
|   127   c.set_priority(priority); |  | 
|   128   c.set_username(ufrag); |  | 
|   129   c.set_type(type); |  | 
|   130   return c; |  | 
|   131 } |  | 
|   132  |  | 
|   133 }  // namespace { |  | 
|   134  |  | 
|   135 namespace cricket { |  | 
|   136  |  | 
|   137 // This test simulates 2 P2P endpoints that want to establish connectivity |   119 // This test simulates 2 P2P endpoints that want to establish connectivity | 
|   138 // with each other over various network topologies and conditions, which can be |   120 // with each other over various network topologies and conditions, which can be | 
|   139 // specified in each individial test. |   121 // specified in each individial test. | 
|   140 // A virtual network (via VirtualSocketServer) along with virtual firewalls and |   122 // A virtual network (via VirtualSocketServer) along with virtual firewalls and | 
|   141 // NATs (via Firewall/NATSocketServer) are used to simulate the various network |   123 // NATs (via Firewall/NATSocketServer) are used to simulate the various network | 
|   142 // conditions. We can configure the IP addresses of the endpoints, |   124 // conditions. We can configure the IP addresses of the endpoints, | 
|   143 // block various types of connectivity, or add arbitrary levels of NAT. |   125 // block various types of connectivity, or add arbitrary levels of NAT. | 
|   144 // We also run a STUN server and a relay server on the virtual network to allow |   126 // We also run a STUN server and a relay server on the virtual network to allow | 
|   145 // our typical P2P mechanisms to do their thing. |   127 // our typical P2P mechanisms to do their thing. | 
|   146 // For each case, we expect the P2P stack to eventually settle on a specific |   128 // For each case, we expect the P2P stack to eventually settle on a specific | 
|   147 // form of connectivity to the other side. The test checks that the P2P |   129 // form of connectivity to the other side. The test checks that the P2P | 
|   148 // negotiation successfully establishes connectivity within a certain time, |   130 // negotiation successfully establishes connectivity within a certain time, | 
|   149 // and that the result is what we expect. |   131 // and that the result is what we expect. | 
|   150 // Note that this class is a base class for use by other tests, who will provide |   132 // Note that this class is a base class for use by other tests, who will provide | 
|   151 // specialized test behavior. |   133 // specialized test behavior. | 
|   152 class P2PTransportChannelTestBase : public testing::Test, |   134 class P2PTransportChannelTestBase : public testing::Test, | 
|   153                                     public rtc::MessageHandler, |   135                                     public rtc::MessageHandler, | 
|   154                                     public sigslot::has_slots<> { |   136                                     public sigslot::has_slots<> { | 
|   155  public: |   137  public: | 
|   156   P2PTransportChannelTestBase() |   138   P2PTransportChannelTestBase() | 
|   157       : main_(rtc::Thread::Current()), |   139       : main_(rtc::Thread::Current()), | 
|   158         pss_(new rtc::PhysicalSocketServer), |   140         pss_(new rtc::PhysicalSocketServer), | 
|   159         vss_(new rtc::VirtualSocketServer(pss_.get())), |   141         vss_(new rtc::VirtualSocketServer(pss_.get())), | 
|   160         nss_(new rtc::NATSocketServer(vss_.get())), |   142         nss_(new rtc::NATSocketServer(vss_.get())), | 
|   161         ss_(new rtc::FirewallSocketServer(nss_.get())), |   143         ss_(new rtc::FirewallSocketServer(nss_.get())), | 
|   162         ss_scope_(ss_.get()), |   144         ss_scope_(ss_.get()), | 
|   163         stun_server_(TestStunServer::Create(main_, kStunAddr)), |   145         stun_server_(cricket::TestStunServer::Create(main_, kStunAddr)), | 
|   164         turn_server_(main_, kTurnUdpIntAddr, kTurnUdpExtAddr), |   146         turn_server_(main_, kTurnUdpIntAddr, kTurnUdpExtAddr), | 
|   165         relay_server_(main_, |   147         relay_server_(main_, kRelayUdpIntAddr, kRelayUdpExtAddr, | 
|   166                       kRelayUdpIntAddr, |   148                       kRelayTcpIntAddr, kRelayTcpExtAddr, | 
|   167                       kRelayUdpExtAddr, |   149                       kRelaySslTcpIntAddr, kRelaySslTcpExtAddr), | 
|   168                       kRelayTcpIntAddr, |   150         socks_server1_(ss_.get(), kSocksProxyAddrs[0], | 
|   169                       kRelayTcpExtAddr, |   151                        ss_.get(), kSocksProxyAddrs[0]), | 
|   170                       kRelaySslTcpIntAddr, |   152         socks_server2_(ss_.get(), kSocksProxyAddrs[1], | 
|   171                       kRelaySslTcpExtAddr), |   153                        ss_.get(), kSocksProxyAddrs[1]), | 
|   172         socks_server1_(ss_.get(), |  | 
|   173                        kSocksProxyAddrs[0], |  | 
|   174                        ss_.get(), |  | 
|   175                        kSocksProxyAddrs[0]), |  | 
|   176         socks_server2_(ss_.get(), |  | 
|   177                        kSocksProxyAddrs[1], |  | 
|   178                        ss_.get(), |  | 
|   179                        kSocksProxyAddrs[1]), |  | 
|   180         force_relay_(false) { |   154         force_relay_(false) { | 
|   181     ep1_.role_ = ICEROLE_CONTROLLING; |   155     ep1_.role_ = cricket::ICEROLE_CONTROLLING; | 
|   182     ep2_.role_ = ICEROLE_CONTROLLED; |   156     ep2_.role_ = cricket::ICEROLE_CONTROLLED; | 
|   183  |   157  | 
|   184     ServerAddresses stun_servers; |   158     ServerAddresses stun_servers; | 
|   185     stun_servers.insert(kStunAddr); |   159     stun_servers.insert(kStunAddr); | 
|   186     ep1_.allocator_.reset(new BasicPortAllocator( |   160     ep1_.allocator_.reset(new cricket::BasicPortAllocator( | 
|   187         &ep1_.network_manager_, stun_servers, kRelayUdpIntAddr, |   161         &ep1_.network_manager_, | 
|   188         kRelayTcpIntAddr, kRelaySslTcpIntAddr)); |   162         stun_servers, kRelayUdpIntAddr, kRelayTcpIntAddr, kRelaySslTcpIntAddr)); | 
|   189     ep2_.allocator_.reset(new BasicPortAllocator( |   163     ep2_.allocator_.reset(new cricket::BasicPortAllocator( | 
|   190         &ep2_.network_manager_, stun_servers, kRelayUdpIntAddr, |   164         &ep2_.network_manager_, | 
|   191         kRelayTcpIntAddr, kRelaySslTcpIntAddr)); |   165         stun_servers, kRelayUdpIntAddr, kRelayTcpIntAddr, kRelaySslTcpIntAddr)); | 
|   192   } |   166   } | 
|   193  |   167  | 
|   194  protected: |   168  protected: | 
|   195   enum Config { |   169   enum Config { | 
|   196     OPEN,                           // Open to the Internet |   170     OPEN,                           // Open to the Internet | 
|   197     NAT_FULL_CONE,                  // NAT, no filtering |   171     NAT_FULL_CONE,                  // NAT, no filtering | 
|   198     NAT_ADDR_RESTRICTED,            // NAT, must send to an addr to recv |   172     NAT_ADDR_RESTRICTED,            // NAT, must send to an addr to recv | 
|   199     NAT_PORT_RESTRICTED,            // NAT, must send to an addr+port to recv |   173     NAT_PORT_RESTRICTED,            // NAT, must send to an addr+port to recv | 
|   200     NAT_SYMMETRIC,                  // NAT, endpoint-dependent bindings |   174     NAT_SYMMETRIC,                  // NAT, endpoint-dependent bindings | 
|   201     NAT_DOUBLE_CONE,                // Double NAT, both cone |   175     NAT_DOUBLE_CONE,                // Double NAT, both cone | 
| (...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|   235       if (!ch_packets_.empty()) { |   209       if (!ch_packets_.empty()) { | 
|   236         std::string packet =  ch_packets_.front(); |   210         std::string packet =  ch_packets_.front(); | 
|   237         ret = (packet == std::string(data, len)); |   211         ret = (packet == std::string(data, len)); | 
|   238         ch_packets_.pop_front(); |   212         ch_packets_.pop_front(); | 
|   239       } |   213       } | 
|   240       return ret; |   214       return ret; | 
|   241     } |   215     } | 
|   242  |   216  | 
|   243     std::string name_;  // TODO - Currently not used. |   217     std::string name_;  // TODO - Currently not used. | 
|   244     std::list<std::string> ch_packets_; |   218     std::list<std::string> ch_packets_; | 
|   245     std::unique_ptr<P2PTransportChannel> ch_; |   219     std::unique_ptr<cricket::P2PTransportChannel> ch_; | 
|   246   }; |   220   }; | 
|   247  |   221  | 
|   248   struct CandidatesData : public rtc::MessageData { |   222   struct CandidatesData : public rtc::MessageData { | 
|   249     CandidatesData(TransportChannel* ch, const Candidate& c) |   223     CandidatesData(cricket::TransportChannel* ch, const cricket::Candidate& c) | 
|   250         : channel(ch), candidates(1, c) {} |   224         : channel(ch), candidates(1, c) {} | 
|   251     CandidatesData(TransportChannel* ch, const std::vector<Candidate>& cc) |   225     CandidatesData(cricket::TransportChannel* ch, | 
 |   226                    const std::vector<cricket::Candidate>& cc) | 
|   252         : channel(ch), candidates(cc) {} |   227         : channel(ch), candidates(cc) {} | 
|   253     TransportChannel* channel; |   228     cricket::TransportChannel* channel; | 
|   254     Candidates candidates; |   229     cricket::Candidates candidates; | 
|   255   }; |   230   }; | 
|   256  |   231  | 
|   257   struct Endpoint { |   232   struct Endpoint { | 
|   258     Endpoint() |   233     Endpoint() | 
|   259         : role_(ICEROLE_UNKNOWN), |   234         : role_(cricket::ICEROLE_UNKNOWN), | 
|   260           tiebreaker_(0), |   235           tiebreaker_(0), | 
|   261           role_conflict_(false), |   236           role_conflict_(false), | 
|   262           save_candidates_(false) {} |   237           save_candidates_(false) {} | 
|   263     bool HasChannel(TransportChannel* ch) { |   238     bool HasChannel(cricket::TransportChannel* ch) { | 
|   264       return (ch == cd1_.ch_.get() || ch == cd2_.ch_.get()); |   239       return (ch == cd1_.ch_.get() || ch == cd2_.ch_.get()); | 
|   265     } |   240     } | 
|   266     ChannelData* GetChannelData(TransportChannel* ch) { |   241     ChannelData* GetChannelData(cricket::TransportChannel* ch) { | 
|   267       if (!HasChannel(ch)) return NULL; |   242       if (!HasChannel(ch)) return NULL; | 
|   268       if (cd1_.ch_.get() == ch) |   243       if (cd1_.ch_.get() == ch) | 
|   269         return &cd1_; |   244         return &cd1_; | 
|   270       else |   245       else | 
|   271         return &cd2_; |   246         return &cd2_; | 
|   272     } |   247     } | 
|   273  |   248  | 
|   274     void SetIceRole(IceRole role) { role_ = role; } |   249     void SetIceRole(cricket::IceRole role) { role_ = role; } | 
|   275     IceRole ice_role() { return role_; } |   250     cricket::IceRole ice_role() { return role_; } | 
|   276     void SetIceTiebreaker(uint64_t tiebreaker) { tiebreaker_ = tiebreaker; } |   251     void SetIceTiebreaker(uint64_t tiebreaker) { tiebreaker_ = tiebreaker; } | 
|   277     uint64_t GetIceTiebreaker() { return tiebreaker_; } |   252     uint64_t GetIceTiebreaker() { return tiebreaker_; } | 
|   278     void OnRoleConflict(bool role_conflict) { role_conflict_ = role_conflict; } |   253     void OnRoleConflict(bool role_conflict) { role_conflict_ = role_conflict; } | 
|   279     bool role_conflict() { return role_conflict_; } |   254     bool role_conflict() { return role_conflict_; } | 
|   280     void SetAllocationStepDelay(uint32_t delay) { |   255     void SetAllocationStepDelay(uint32_t delay) { | 
|   281       allocator_->set_step_delay(delay); |   256       allocator_->set_step_delay(delay); | 
|   282     } |   257     } | 
|   283     void SetAllowTcpListen(bool allow_tcp_listen) { |   258     void SetAllowTcpListen(bool allow_tcp_listen) { | 
|   284       allocator_->set_allow_tcp_listen(allow_tcp_listen); |   259       allocator_->set_allow_tcp_listen(allow_tcp_listen); | 
|   285     } |   260     } | 
|   286  |   261  | 
|   287     rtc::FakeNetworkManager network_manager_; |   262     rtc::FakeNetworkManager network_manager_; | 
|   288     std::unique_ptr<BasicPortAllocator> allocator_; |   263     std::unique_ptr<cricket::BasicPortAllocator> allocator_; | 
|   289     ChannelData cd1_; |   264     ChannelData cd1_; | 
|   290     ChannelData cd2_; |   265     ChannelData cd2_; | 
|   291     IceRole role_; |   266     cricket::IceRole role_; | 
|   292     uint64_t tiebreaker_; |   267     uint64_t tiebreaker_; | 
|   293     bool role_conflict_; |   268     bool role_conflict_; | 
|   294     bool save_candidates_; |   269     bool save_candidates_; | 
|   295     std::vector<CandidatesData*> saved_candidates_; |   270     std::vector<CandidatesData*> saved_candidates_; | 
|   296     bool ready_to_send_ = false; |  | 
|   297   }; |   271   }; | 
|   298  |   272  | 
|   299   ChannelData* GetChannelData(TransportChannel* channel) { |   273   ChannelData* GetChannelData(cricket::TransportChannel* channel) { | 
|   300     if (ep1_.HasChannel(channel)) |   274     if (ep1_.HasChannel(channel)) | 
|   301       return ep1_.GetChannelData(channel); |   275       return ep1_.GetChannelData(channel); | 
|   302     else |   276     else | 
|   303       return ep2_.GetChannelData(channel); |   277       return ep2_.GetChannelData(channel); | 
|   304   } |   278   } | 
|   305  |   279  | 
|   306   void CreateChannels(int num) { |   280   void CreateChannels(int num) { | 
|   307     std::string ice_ufrag_ep1_cd1_ch = kIceUfrag[0]; |   281     std::string ice_ufrag_ep1_cd1_ch = kIceUfrag[0]; | 
|   308     std::string ice_pwd_ep1_cd1_ch = kIcePwd[0]; |   282     std::string ice_pwd_ep1_cd1_ch = kIcePwd[0]; | 
|   309     std::string ice_ufrag_ep2_cd1_ch = kIceUfrag[1]; |   283     std::string ice_ufrag_ep2_cd1_ch = kIceUfrag[1]; | 
|   310     std::string ice_pwd_ep2_cd1_ch = kIcePwd[1]; |   284     std::string ice_pwd_ep2_cd1_ch = kIcePwd[1]; | 
|   311     ep1_.cd1_.ch_.reset(CreateChannel( |   285     ep1_.cd1_.ch_.reset(CreateChannel( | 
|   312         0, ICE_CANDIDATE_COMPONENT_DEFAULT, ice_ufrag_ep1_cd1_ch, |   286         0, cricket::ICE_CANDIDATE_COMPONENT_DEFAULT, | 
|   313         ice_pwd_ep1_cd1_ch, ice_ufrag_ep2_cd1_ch, ice_pwd_ep2_cd1_ch)); |   287         ice_ufrag_ep1_cd1_ch, ice_pwd_ep1_cd1_ch, | 
 |   288         ice_ufrag_ep2_cd1_ch, ice_pwd_ep2_cd1_ch)); | 
|   314     ep2_.cd1_.ch_.reset(CreateChannel( |   289     ep2_.cd1_.ch_.reset(CreateChannel( | 
|   315         1, ICE_CANDIDATE_COMPONENT_DEFAULT, ice_ufrag_ep2_cd1_ch, |   290         1, cricket::ICE_CANDIDATE_COMPONENT_DEFAULT, | 
|   316         ice_pwd_ep2_cd1_ch, ice_ufrag_ep1_cd1_ch, ice_pwd_ep1_cd1_ch)); |   291         ice_ufrag_ep2_cd1_ch, ice_pwd_ep2_cd1_ch, | 
 |   292         ice_ufrag_ep1_cd1_ch, ice_pwd_ep1_cd1_ch)); | 
|   317     ep1_.cd1_.ch_->MaybeStartGathering(); |   293     ep1_.cd1_.ch_->MaybeStartGathering(); | 
|   318     ep2_.cd1_.ch_->MaybeStartGathering(); |   294     ep2_.cd1_.ch_->MaybeStartGathering(); | 
|   319     if (num == 2) { |   295     if (num == 2) { | 
|   320       std::string ice_ufrag_ep1_cd2_ch = kIceUfrag[2]; |   296       std::string ice_ufrag_ep1_cd2_ch = kIceUfrag[2]; | 
|   321       std::string ice_pwd_ep1_cd2_ch = kIcePwd[2]; |   297       std::string ice_pwd_ep1_cd2_ch = kIcePwd[2]; | 
|   322       std::string ice_ufrag_ep2_cd2_ch = kIceUfrag[3]; |   298       std::string ice_ufrag_ep2_cd2_ch = kIceUfrag[3]; | 
|   323       std::string ice_pwd_ep2_cd2_ch = kIcePwd[3]; |   299       std::string ice_pwd_ep2_cd2_ch = kIcePwd[3]; | 
|   324       ep1_.cd2_.ch_.reset(CreateChannel( |   300       ep1_.cd2_.ch_.reset(CreateChannel( | 
|   325           0, ICE_CANDIDATE_COMPONENT_DEFAULT, ice_ufrag_ep1_cd2_ch, |   301           0, cricket::ICE_CANDIDATE_COMPONENT_DEFAULT, | 
|   326           ice_pwd_ep1_cd2_ch, ice_ufrag_ep2_cd2_ch, ice_pwd_ep2_cd2_ch)); |   302           ice_ufrag_ep1_cd2_ch, ice_pwd_ep1_cd2_ch, | 
 |   303           ice_ufrag_ep2_cd2_ch, ice_pwd_ep2_cd2_ch)); | 
|   327       ep2_.cd2_.ch_.reset(CreateChannel( |   304       ep2_.cd2_.ch_.reset(CreateChannel( | 
|   328           1, ICE_CANDIDATE_COMPONENT_DEFAULT, ice_ufrag_ep2_cd2_ch, |   305           1, cricket::ICE_CANDIDATE_COMPONENT_DEFAULT, | 
|   329           ice_pwd_ep2_cd2_ch, ice_ufrag_ep1_cd2_ch, ice_pwd_ep1_cd2_ch)); |   306           ice_ufrag_ep2_cd2_ch, ice_pwd_ep2_cd2_ch, | 
 |   307           ice_ufrag_ep1_cd2_ch, ice_pwd_ep1_cd2_ch)); | 
|   330       ep1_.cd2_.ch_->MaybeStartGathering(); |   308       ep1_.cd2_.ch_->MaybeStartGathering(); | 
|   331       ep2_.cd2_.ch_->MaybeStartGathering(); |   309       ep2_.cd2_.ch_->MaybeStartGathering(); | 
|   332     } |   310     } | 
|   333   } |   311   } | 
|   334   P2PTransportChannel* CreateChannel(int endpoint, |   312   cricket::P2PTransportChannel* CreateChannel( | 
|   335                                      int component, |   313       int endpoint, | 
|   336                                      const std::string& local_ice_ufrag, |   314       int component, | 
|   337                                      const std::string& local_ice_pwd, |   315       const std::string& local_ice_ufrag, | 
|   338                                      const std::string& remote_ice_ufrag, |   316       const std::string& local_ice_pwd, | 
|   339                                      const std::string& remote_ice_pwd) { |   317       const std::string& remote_ice_ufrag, | 
|   340     P2PTransportChannel* channel = new P2PTransportChannel( |   318       const std::string& remote_ice_pwd) { | 
 |   319     cricket::P2PTransportChannel* channel = new cricket::P2PTransportChannel( | 
|   341         "test content name", component, GetAllocator(endpoint)); |   320         "test content name", component, GetAllocator(endpoint)); | 
|   342     channel->SignalReadyToSend.connect( |  | 
|   343         this, &P2PTransportChannelTestBase::OnReadyToSend); |  | 
|   344     channel->SignalCandidateGathered.connect( |   321     channel->SignalCandidateGathered.connect( | 
|   345         this, &P2PTransportChannelTestBase::OnCandidateGathered); |   322         this, &P2PTransportChannelTestBase::OnCandidateGathered); | 
|   346     channel->SignalCandidatesRemoved.connect( |   323     channel->SignalCandidatesRemoved.connect( | 
|   347         this, &P2PTransportChannelTestBase::OnCandidatesRemoved); |   324         this, &P2PTransportChannelTestBase::OnCandidatesRemoved); | 
|   348     channel->SignalReadPacket.connect( |   325     channel->SignalReadPacket.connect( | 
|   349         this, &P2PTransportChannelTestBase::OnReadPacket); |   326         this, &P2PTransportChannelTestBase::OnReadPacket); | 
|   350     channel->SignalRoleConflict.connect( |   327     channel->SignalRoleConflict.connect( | 
|   351         this, &P2PTransportChannelTestBase::OnRoleConflict); |   328         this, &P2PTransportChannelTestBase::OnRoleConflict); | 
|   352     channel->SetIceCredentials(local_ice_ufrag, local_ice_pwd); |   329     channel->SetIceCredentials(local_ice_ufrag, local_ice_pwd); | 
|   353     if (remote_ice_credential_source_ == FROM_SETICECREDENTIALS) { |   330     if (remote_ice_credential_source_ == FROM_SETICECREDENTIALS) { | 
|   354       channel->SetRemoteIceCredentials(remote_ice_ufrag, remote_ice_pwd); |   331       channel->SetRemoteIceCredentials(remote_ice_ufrag, remote_ice_pwd); | 
|   355     } |   332     } | 
|   356     channel->SetIceRole(GetEndpoint(endpoint)->ice_role()); |   333     channel->SetIceRole(GetEndpoint(endpoint)->ice_role()); | 
|   357     channel->SetIceTiebreaker(GetEndpoint(endpoint)->GetIceTiebreaker()); |   334     channel->SetIceTiebreaker(GetEndpoint(endpoint)->GetIceTiebreaker()); | 
|   358     channel->Connect(); |   335     channel->Connect(); | 
|   359     return channel; |   336     return channel; | 
|   360   } |   337   } | 
|   361   void DestroyChannels() { |   338   void DestroyChannels() { | 
|   362     ep1_.cd1_.ch_.reset(); |   339     ep1_.cd1_.ch_.reset(); | 
|   363     ep2_.cd1_.ch_.reset(); |   340     ep2_.cd1_.ch_.reset(); | 
|   364     ep1_.cd2_.ch_.reset(); |   341     ep1_.cd2_.ch_.reset(); | 
|   365     ep2_.cd2_.ch_.reset(); |   342     ep2_.cd2_.ch_.reset(); | 
|   366   } |   343   } | 
|   367   P2PTransportChannel* ep1_ch1() { return ep1_.cd1_.ch_.get(); } |   344   cricket::P2PTransportChannel* ep1_ch1() { return ep1_.cd1_.ch_.get(); } | 
|   368   P2PTransportChannel* ep1_ch2() { return ep1_.cd2_.ch_.get(); } |   345   cricket::P2PTransportChannel* ep1_ch2() { return ep1_.cd2_.ch_.get(); } | 
|   369   P2PTransportChannel* ep2_ch1() { return ep2_.cd1_.ch_.get(); } |   346   cricket::P2PTransportChannel* ep2_ch1() { return ep2_.cd1_.ch_.get(); } | 
|   370   P2PTransportChannel* ep2_ch2() { return ep2_.cd2_.ch_.get(); } |   347   cricket::P2PTransportChannel* ep2_ch2() { return ep2_.cd2_.ch_.get(); } | 
|   371  |   348  | 
|   372   // Common results. |   349   // Common results. | 
|   373   static const Result kLocalUdpToLocalUdp; |   350   static const Result kLocalUdpToLocalUdp; | 
|   374   static const Result kLocalUdpToStunUdp; |   351   static const Result kLocalUdpToStunUdp; | 
|   375   static const Result kLocalUdpToPrflxUdp; |   352   static const Result kLocalUdpToPrflxUdp; | 
|   376   static const Result kPrflxUdpToLocalUdp; |   353   static const Result kPrflxUdpToLocalUdp; | 
|   377   static const Result kStunUdpToLocalUdp; |   354   static const Result kStunUdpToLocalUdp; | 
|   378   static const Result kStunUdpToStunUdp; |   355   static const Result kStunUdpToStunUdp; | 
|   379   static const Result kPrflxUdpToStunUdp; |   356   static const Result kPrflxUdpToStunUdp; | 
|   380   static const Result kLocalUdpToRelayUdp; |   357   static const Result kLocalUdpToRelayUdp; | 
|   381   static const Result kPrflxUdpToRelayUdp; |   358   static const Result kPrflxUdpToRelayUdp; | 
|   382   static const Result kLocalTcpToLocalTcp; |   359   static const Result kLocalTcpToLocalTcp; | 
|   383   static const Result kLocalTcpToPrflxTcp; |   360   static const Result kLocalTcpToPrflxTcp; | 
|   384   static const Result kPrflxTcpToLocalTcp; |   361   static const Result kPrflxTcpToLocalTcp; | 
|   385  |   362  | 
|   386   rtc::NATSocketServer* nat() { return nss_.get(); } |   363   rtc::NATSocketServer* nat() { return nss_.get(); } | 
|   387   rtc::FirewallSocketServer* fw() { return ss_.get(); } |   364   rtc::FirewallSocketServer* fw() { return ss_.get(); } | 
|   388  |   365  | 
|   389   Endpoint* GetEndpoint(int endpoint) { |   366   Endpoint* GetEndpoint(int endpoint) { | 
|   390     if (endpoint == 0) { |   367     if (endpoint == 0) { | 
|   391       return &ep1_; |   368       return &ep1_; | 
|   392     } else if (endpoint == 1) { |   369     } else if (endpoint == 1) { | 
|   393       return &ep2_; |   370       return &ep2_; | 
|   394     } else { |   371     } else { | 
|   395       return NULL; |   372       return NULL; | 
|   396     } |   373     } | 
|   397   } |   374   } | 
|   398   PortAllocator* GetAllocator(int endpoint) { |   375   cricket::PortAllocator* GetAllocator(int endpoint) { | 
|   399     return GetEndpoint(endpoint)->allocator_.get(); |   376     return GetEndpoint(endpoint)->allocator_.get(); | 
|   400   } |   377   } | 
|   401   void AddAddress(int endpoint, const SocketAddress& addr) { |   378   void AddAddress(int endpoint, const SocketAddress& addr) { | 
|   402     GetEndpoint(endpoint)->network_manager_.AddInterface(addr); |   379     GetEndpoint(endpoint)->network_manager_.AddInterface(addr); | 
|   403   } |   380   } | 
|   404   void AddAddress(int endpoint, |   381   void AddAddress(int endpoint, | 
|   405                   const SocketAddress& addr, |   382                   const SocketAddress& addr, | 
|   406                   const std::string& ifname, |   383                   const std::string& ifname, | 
|   407                   rtc::AdapterType adapter_type) { |   384                   rtc::AdapterType adapter_type) { | 
|   408     GetEndpoint(endpoint)->network_manager_.AddInterface(addr, ifname, |   385     GetEndpoint(endpoint)->network_manager_.AddInterface(addr, ifname, | 
|   409                                                          adapter_type); |   386                                                          adapter_type); | 
|   410   } |   387   } | 
|   411   void RemoveAddress(int endpoint, const SocketAddress& addr) { |   388   void RemoveAddress(int endpoint, const SocketAddress& addr) { | 
|   412     GetEndpoint(endpoint)->network_manager_.RemoveInterface(addr); |   389     GetEndpoint(endpoint)->network_manager_.RemoveInterface(addr); | 
|   413   } |   390   } | 
|   414   void SetProxy(int endpoint, rtc::ProxyType type) { |   391   void SetProxy(int endpoint, rtc::ProxyType type) { | 
|   415     rtc::ProxyInfo info; |   392     rtc::ProxyInfo info; | 
|   416     info.type = type; |   393     info.type = type; | 
|   417     info.address = (type == rtc::PROXY_HTTPS) ? |   394     info.address = (type == rtc::PROXY_HTTPS) ? | 
|   418         kHttpsProxyAddrs[endpoint] : kSocksProxyAddrs[endpoint]; |   395         kHttpsProxyAddrs[endpoint] : kSocksProxyAddrs[endpoint]; | 
|   419     GetAllocator(endpoint)->set_proxy("unittest/1.0", info); |   396     GetAllocator(endpoint)->set_proxy("unittest/1.0", info); | 
|   420   } |   397   } | 
|   421   void SetAllocatorFlags(int endpoint, int flags) { |   398   void SetAllocatorFlags(int endpoint, int flags) { | 
|   422     GetAllocator(endpoint)->set_flags(flags); |   399     GetAllocator(endpoint)->set_flags(flags); | 
|   423   } |   400   } | 
|   424   void SetIceRole(int endpoint, IceRole role) { |   401   void SetIceRole(int endpoint, cricket::IceRole role) { | 
|   425     GetEndpoint(endpoint)->SetIceRole(role); |   402     GetEndpoint(endpoint)->SetIceRole(role); | 
|   426   } |   403   } | 
|   427   void SetIceTiebreaker(int endpoint, uint64_t tiebreaker) { |   404   void SetIceTiebreaker(int endpoint, uint64_t tiebreaker) { | 
|   428     GetEndpoint(endpoint)->SetIceTiebreaker(tiebreaker); |   405     GetEndpoint(endpoint)->SetIceTiebreaker(tiebreaker); | 
|   429   } |   406   } | 
|   430   bool GetRoleConflict(int endpoint) { |   407   bool GetRoleConflict(int endpoint) { | 
|   431     return GetEndpoint(endpoint)->role_conflict(); |   408     return GetEndpoint(endpoint)->role_conflict(); | 
|   432   } |   409   } | 
|   433   void SetAllocationStepDelay(int endpoint, uint32_t delay) { |   410   void SetAllocationStepDelay(int endpoint, uint32_t delay) { | 
|   434     return GetEndpoint(endpoint)->SetAllocationStepDelay(delay); |   411     return GetEndpoint(endpoint)->SetAllocationStepDelay(delay); | 
| (...skipping 171 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|   606   // restart the ice gathering. Finally it waits for the transport to select a |   583   // restart the ice gathering. Finally it waits for the transport to select a | 
|   607   // new connection using the newly generated ice candidates. |   584   // new connection using the newly generated ice candidates. | 
|   608   // Before calling this function the end points must be configured. |   585   // Before calling this function the end points must be configured. | 
|   609   void TestHandleIceUfragPasswordChanged() { |   586   void TestHandleIceUfragPasswordChanged() { | 
|   610     ep1_ch1()->SetRemoteIceCredentials(kIceUfrag[1], kIcePwd[1]); |   587     ep1_ch1()->SetRemoteIceCredentials(kIceUfrag[1], kIcePwd[1]); | 
|   611     ep2_ch1()->SetRemoteIceCredentials(kIceUfrag[0], kIcePwd[0]); |   588     ep2_ch1()->SetRemoteIceCredentials(kIceUfrag[0], kIcePwd[0]); | 
|   612     EXPECT_TRUE_WAIT_MARGIN(ep1_ch1()->receiving() && ep1_ch1()->writable() && |   589     EXPECT_TRUE_WAIT_MARGIN(ep1_ch1()->receiving() && ep1_ch1()->writable() && | 
|   613                             ep2_ch1()->receiving() && ep2_ch1()->writable(), |   590                             ep2_ch1()->receiving() && ep2_ch1()->writable(), | 
|   614                             1000, 1000); |   591                             1000, 1000); | 
|   615  |   592  | 
|   616     const Candidate* old_local_candidate1 = LocalCandidate(ep1_ch1()); |   593     const cricket::Candidate* old_local_candidate1 = LocalCandidate(ep1_ch1()); | 
|   617     const Candidate* old_local_candidate2 = LocalCandidate(ep2_ch1()); |   594     const cricket::Candidate* old_local_candidate2 = LocalCandidate(ep2_ch1()); | 
|   618     const Candidate* old_remote_candidate1 = RemoteCandidate(ep1_ch1()); |   595     const cricket::Candidate* old_remote_candidate1 = | 
|   619     const Candidate* old_remote_candidate2 = RemoteCandidate(ep2_ch1()); |   596         RemoteCandidate(ep1_ch1()); | 
 |   597     const cricket::Candidate* old_remote_candidate2 = | 
 |   598         RemoteCandidate(ep2_ch1()); | 
|   620  |   599  | 
|   621     ep1_ch1()->SetIceCredentials(kIceUfrag[2], kIcePwd[2]); |   600     ep1_ch1()->SetIceCredentials(kIceUfrag[2], kIcePwd[2]); | 
|   622     ep1_ch1()->SetRemoteIceCredentials(kIceUfrag[3], kIcePwd[3]); |   601     ep1_ch1()->SetRemoteIceCredentials(kIceUfrag[3], kIcePwd[3]); | 
|   623     ep1_ch1()->MaybeStartGathering(); |   602     ep1_ch1()->MaybeStartGathering(); | 
|   624     ep2_ch1()->SetIceCredentials(kIceUfrag[3], kIcePwd[3]); |   603     ep2_ch1()->SetIceCredentials(kIceUfrag[3], kIcePwd[3]); | 
|   625     ep2_ch1()->SetRemoteIceCredentials(kIceUfrag[2], kIcePwd[2]); |   604     ep2_ch1()->SetRemoteIceCredentials(kIceUfrag[2], kIcePwd[2]); | 
|   626     ep2_ch1()->MaybeStartGathering(); |   605     ep2_ch1()->MaybeStartGathering(); | 
|   627  |   606  | 
|   628     EXPECT_TRUE_WAIT_MARGIN(LocalCandidate(ep1_ch1())->generation() != |   607     EXPECT_TRUE_WAIT_MARGIN(LocalCandidate(ep1_ch1())->generation() != | 
|   629                             old_local_candidate1->generation(), |   608                             old_local_candidate1->generation(), | 
|   630                             1000, 1000); |   609                             1000, 1000); | 
|   631     EXPECT_TRUE_WAIT_MARGIN(LocalCandidate(ep2_ch1())->generation() != |   610     EXPECT_TRUE_WAIT_MARGIN(LocalCandidate(ep2_ch1())->generation() != | 
|   632                             old_local_candidate2->generation(), |   611                             old_local_candidate2->generation(), | 
|   633                             1000, 1000); |   612                             1000, 1000); | 
|   634     EXPECT_TRUE_WAIT_MARGIN(RemoteCandidate(ep1_ch1())->generation() != |   613     EXPECT_TRUE_WAIT_MARGIN(RemoteCandidate(ep1_ch1())->generation() != | 
|   635                             old_remote_candidate1->generation(), |   614                             old_remote_candidate1->generation(), | 
|   636                             1000, 1000); |   615                             1000, 1000); | 
|   637     EXPECT_TRUE_WAIT_MARGIN(RemoteCandidate(ep2_ch1())->generation() != |   616     EXPECT_TRUE_WAIT_MARGIN(RemoteCandidate(ep2_ch1())->generation() != | 
|   638                             old_remote_candidate2->generation(), |   617                             old_remote_candidate2->generation(), | 
|   639                             1000, 1000); |   618                             1000, 1000); | 
|   640     EXPECT_EQ(1u, RemoteCandidate(ep2_ch1())->generation()); |   619     EXPECT_EQ(1u, RemoteCandidate(ep2_ch1())->generation()); | 
|   641     EXPECT_EQ(1u, RemoteCandidate(ep1_ch1())->generation()); |   620     EXPECT_EQ(1u, RemoteCandidate(ep1_ch1())->generation()); | 
|   642   } |   621   } | 
|   643  |   622  | 
|   644   void TestSignalRoleConflict() { |   623   void TestSignalRoleConflict() { | 
|   645     SetIceTiebreaker(0, kTiebreaker1);  // Default EP1 is in controlling state. |   624     SetIceTiebreaker(0, kTiebreaker1);  // Default EP1 is in controlling state. | 
|   646  |   625  | 
|   647     SetIceRole(1, ICEROLE_CONTROLLING); |   626     SetIceRole(1, cricket::ICEROLE_CONTROLLING); | 
|   648     SetIceTiebreaker(1, kTiebreaker2); |   627     SetIceTiebreaker(1, kTiebreaker2); | 
|   649  |   628  | 
|   650     // Creating channels with both channels role set to CONTROLLING. |   629     // Creating channels with both channels role set to CONTROLLING. | 
|   651     CreateChannels(1); |   630     CreateChannels(1); | 
|   652     // Since both the channels initiated with controlling state and channel2 |   631     // Since both the channels initiated with controlling state and channel2 | 
|   653     // has higher tiebreaker value, channel1 should receive SignalRoleConflict. |   632     // has higher tiebreaker value, channel1 should receive SignalRoleConflict. | 
|   654     EXPECT_TRUE_WAIT(GetRoleConflict(0), 1000); |   633     EXPECT_TRUE_WAIT(GetRoleConflict(0), 1000); | 
|   655     EXPECT_FALSE(GetRoleConflict(1)); |   634     EXPECT_FALSE(GetRoleConflict(1)); | 
|   656  |   635  | 
|   657     EXPECT_TRUE_WAIT(ep1_ch1()->receiving() && |   636     EXPECT_TRUE_WAIT(ep1_ch1()->receiving() && | 
|   658                      ep1_ch1()->writable() && |   637                      ep1_ch1()->writable() && | 
|   659                      ep2_ch1()->receiving() && |   638                      ep2_ch1()->receiving() && | 
|   660                      ep2_ch1()->writable(), |   639                      ep2_ch1()->writable(), | 
|   661                      1000); |   640                      1000); | 
|   662  |   641  | 
|   663     EXPECT_TRUE(ep1_ch1()->best_connection() && |   642     EXPECT_TRUE(ep1_ch1()->best_connection() && | 
|   664                 ep2_ch1()->best_connection()); |   643                 ep2_ch1()->best_connection()); | 
|   665  |   644  | 
|   666     TestSendRecv(1); |   645     TestSendRecv(1); | 
|   667   } |   646   } | 
|   668  |   647  | 
|   669   void OnReadyToSend(TransportChannel* ch) { |  | 
|   670     GetEndpoint(ch)->ready_to_send_ = true; |  | 
|   671   } |  | 
|   672  |  | 
|   673   // We pass the candidates directly to the other side. |   648   // We pass the candidates directly to the other side. | 
|   674   void OnCandidateGathered(TransportChannelImpl* ch, const Candidate& c) { |   649   void OnCandidateGathered(cricket::TransportChannelImpl* ch, | 
|   675     if (force_relay_ && c.type() != RELAY_PORT_TYPE) |   650                            const cricket::Candidate& c) { | 
 |   651     if (force_relay_ && c.type() != cricket::RELAY_PORT_TYPE) | 
|   676       return; |   652       return; | 
|   677  |   653  | 
|   678     if (GetEndpoint(ch)->save_candidates_) { |   654     if (GetEndpoint(ch)->save_candidates_) { | 
|   679       GetEndpoint(ch)->saved_candidates_.push_back(new CandidatesData(ch, c)); |   655       GetEndpoint(ch)->saved_candidates_.push_back(new CandidatesData(ch, c)); | 
|   680     } else { |   656     } else { | 
|   681       main_->Post(RTC_FROM_HERE, this, MSG_ADD_CANDIDATES, |   657       main_->Post(RTC_FROM_HERE, this, MSG_ADD_CANDIDATES, | 
|   682                   new CandidatesData(ch, c)); |   658                   new CandidatesData(ch, c)); | 
|   683     } |   659     } | 
|   684   } |   660   } | 
|   685  |   661  | 
|   686   void PauseCandidates(int endpoint) { |   662   void PauseCandidates(int endpoint) { | 
|   687     GetEndpoint(endpoint)->save_candidates_ = true; |   663     GetEndpoint(endpoint)->save_candidates_ = true; | 
|   688   } |   664   } | 
|   689  |   665  | 
|   690   void OnCandidatesRemoved(TransportChannelImpl* ch, |   666   void OnCandidatesRemoved(cricket::TransportChannelImpl* ch, | 
|   691                            const std::vector<Candidate>& candidates) { |   667                            const std::vector<cricket::Candidate>& candidates) { | 
|   692     // Candidate removals are not paused. |   668     // Candidate removals are not paused. | 
|   693     CandidatesData* candidates_data = new CandidatesData(ch, candidates); |   669     CandidatesData* candidates_data = new CandidatesData(ch, candidates); | 
|   694     main_->Post(RTC_FROM_HERE, this, MSG_REMOVE_CANDIDATES, candidates_data); |   670     main_->Post(RTC_FROM_HERE, this, MSG_REMOVE_CANDIDATES, candidates_data); | 
|   695   } |   671   } | 
|   696  |   672  | 
|   697   // Tcp candidate verification has to be done when they are generated. |   673   // Tcp candidate verification has to be done when they are generated. | 
|   698   void VerifySavedTcpCandidates(int endpoint, const std::string& tcptype) { |   674   void VerifySavedTcpCandidates(int endpoint, const std::string& tcptype) { | 
|   699     for (auto& data : GetEndpoint(endpoint)->saved_candidates_) { |   675     for (auto& data : GetEndpoint(endpoint)->saved_candidates_) { | 
|   700       for (auto& candidate : data->candidates) { |   676       for (auto& candidate : data->candidates) { | 
|   701         EXPECT_EQ(candidate.protocol(), TCP_PROTOCOL_NAME); |   677         EXPECT_EQ(candidate.protocol(), cricket::TCP_PROTOCOL_NAME); | 
|   702         EXPECT_EQ(candidate.tcptype(), tcptype); |   678         EXPECT_EQ(candidate.tcptype(), tcptype); | 
|   703         if (candidate.tcptype() == TCPTYPE_ACTIVE_STR) { |   679         if (candidate.tcptype() == cricket::TCPTYPE_ACTIVE_STR) { | 
|   704           EXPECT_EQ(candidate.address().port(), DISCARD_PORT); |   680           EXPECT_EQ(candidate.address().port(), cricket::DISCARD_PORT); | 
|   705         } else if (candidate.tcptype() == TCPTYPE_PASSIVE_STR) { |   681         } else if (candidate.tcptype() == cricket::TCPTYPE_PASSIVE_STR) { | 
|   706           EXPECT_NE(candidate.address().port(), DISCARD_PORT); |   682           EXPECT_NE(candidate.address().port(), cricket::DISCARD_PORT); | 
|   707         } else { |   683         } else { | 
|   708           FAIL() << "Unknown tcptype: " << candidate.tcptype(); |   684           FAIL() << "Unknown tcptype: " << candidate.tcptype(); | 
|   709         } |   685         } | 
|   710       } |   686       } | 
|   711     } |   687     } | 
|   712   } |   688   } | 
|   713  |   689  | 
|   714   void ResumeCandidates(int endpoint) { |   690   void ResumeCandidates(int endpoint) { | 
|   715     Endpoint* ed = GetEndpoint(endpoint); |   691     Endpoint* ed = GetEndpoint(endpoint); | 
|   716     std::vector<CandidatesData*>::iterator it = ed->saved_candidates_.begin(); |   692     std::vector<CandidatesData*>::iterator it = ed->saved_candidates_.begin(); | 
|   717     for (; it != ed->saved_candidates_.end(); ++it) { |   693     for (; it != ed->saved_candidates_.end(); ++it) { | 
|   718       main_->Post(RTC_FROM_HERE, this, MSG_ADD_CANDIDATES, *it); |   694       main_->Post(RTC_FROM_HERE, this, MSG_ADD_CANDIDATES, *it); | 
|   719     } |   695     } | 
|   720     ed->saved_candidates_.clear(); |   696     ed->saved_candidates_.clear(); | 
|   721     ed->save_candidates_ = false; |   697     ed->save_candidates_ = false; | 
|   722   } |   698   } | 
|   723  |   699  | 
|   724   void OnMessage(rtc::Message* msg) { |   700   void OnMessage(rtc::Message* msg) { | 
|   725     switch (msg->message_id) { |   701     switch (msg->message_id) { | 
|   726       case MSG_ADD_CANDIDATES: { |   702       case MSG_ADD_CANDIDATES: { | 
|   727         std::unique_ptr<CandidatesData> data( |   703         std::unique_ptr<CandidatesData> data( | 
|   728             static_cast<CandidatesData*>(msg->pdata)); |   704             static_cast<CandidatesData*>(msg->pdata)); | 
|   729         P2PTransportChannel* rch = GetRemoteChannel(data->channel); |   705         cricket::P2PTransportChannel* rch = GetRemoteChannel(data->channel); | 
|   730         if (!rch) { |  | 
|   731           return; |  | 
|   732         } |  | 
|   733         for (auto& c : data->candidates) { |   706         for (auto& c : data->candidates) { | 
|   734           if (remote_ice_credential_source_ != FROM_CANDIDATE) { |   707           if (remote_ice_credential_source_ != FROM_CANDIDATE) { | 
|   735             c.set_username(""); |   708             c.set_username(""); | 
|   736             c.set_password(""); |   709             c.set_password(""); | 
|   737           } |   710           } | 
|   738           LOG(LS_INFO) << "Candidate(" << data->channel->component() << "->" |   711           LOG(LS_INFO) << "Candidate(" << data->channel->component() << "->" | 
|   739                        << rch->component() << "): " << c.ToString(); |   712                        << rch->component() << "): " << c.ToString(); | 
|   740           rch->AddRemoteCandidate(c); |   713           rch->AddRemoteCandidate(c); | 
|   741         } |   714         } | 
|   742         break; |   715         break; | 
|   743       } |   716       } | 
|   744       case MSG_REMOVE_CANDIDATES: { |   717       case MSG_REMOVE_CANDIDATES: { | 
|   745         std::unique_ptr<CandidatesData> data( |   718         std::unique_ptr<CandidatesData> data( | 
|   746             static_cast<CandidatesData*>(msg->pdata)); |   719             static_cast<CandidatesData*>(msg->pdata)); | 
|   747         P2PTransportChannel* rch = GetRemoteChannel(data->channel); |   720         cricket::P2PTransportChannel* rch = GetRemoteChannel(data->channel); | 
|   748         if (!rch) { |   721         for (cricket::Candidate& c : data->candidates) { | 
|   749           return; |  | 
|   750         } |  | 
|   751         for (Candidate& c : data->candidates) { |  | 
|   752           LOG(LS_INFO) << "Removed remote candidate " << c.ToString(); |   722           LOG(LS_INFO) << "Removed remote candidate " << c.ToString(); | 
|   753           rch->RemoveRemoteCandidate(c); |   723           rch->RemoveRemoteCandidate(c); | 
|   754         } |   724         } | 
|   755         break; |   725         break; | 
|   756       } |   726       } | 
|   757     } |   727     } | 
|   758   } |   728   } | 
|   759   void OnReadPacket(TransportChannel* channel, |   729   void OnReadPacket(cricket::TransportChannel* channel, const char* data, | 
|   760                     const char* data, |   730                     size_t len, const rtc::PacketTime& packet_time, | 
|   761                     size_t len, |  | 
|   762                     const rtc::PacketTime& packet_time, |  | 
|   763                     int flags) { |   731                     int flags) { | 
|   764     std::list<std::string>& packets = GetPacketList(channel); |   732     std::list<std::string>& packets = GetPacketList(channel); | 
|   765     packets.push_front(std::string(data, len)); |   733     packets.push_front(std::string(data, len)); | 
|   766   } |   734   } | 
|   767   void OnRoleConflict(TransportChannelImpl* channel) { |   735   void OnRoleConflict(cricket::TransportChannelImpl* channel) { | 
|   768     GetEndpoint(channel)->OnRoleConflict(true); |   736     GetEndpoint(channel)->OnRoleConflict(true); | 
|   769     IceRole new_role = GetEndpoint(channel)->ice_role() == ICEROLE_CONTROLLING |   737     cricket::IceRole new_role = | 
|   770                            ? ICEROLE_CONTROLLED |   738         GetEndpoint(channel)->ice_role() == cricket::ICEROLE_CONTROLLING ? | 
|   771                            : ICEROLE_CONTROLLING; |   739             cricket::ICEROLE_CONTROLLED : cricket::ICEROLE_CONTROLLING; | 
|   772     channel->SetIceRole(new_role); |   740     channel->SetIceRole(new_role); | 
|   773   } |   741   } | 
|   774  |   742  | 
|   775   int SendData(TransportChannel* channel, const char* data, size_t len) { |   743   int SendData(cricket::TransportChannel* channel, | 
 |   744                const char* data, size_t len) { | 
|   776     rtc::PacketOptions options; |   745     rtc::PacketOptions options; | 
|   777     return channel->SendPacket(data, len, options, 0); |   746     return channel->SendPacket(data, len, options, 0); | 
|   778   } |   747   } | 
|   779   bool CheckDataOnChannel(TransportChannel* channel, |   748   bool CheckDataOnChannel(cricket::TransportChannel* channel, | 
|   780                           const char* data, |   749                           const char* data, int len) { | 
|   781                           int len) { |  | 
|   782     return GetChannelData(channel)->CheckData(data, len); |   750     return GetChannelData(channel)->CheckData(data, len); | 
|   783   } |   751   } | 
|   784   static const Candidate* LocalCandidate(P2PTransportChannel* ch) { |   752   static const cricket::Candidate* LocalCandidate( | 
 |   753       cricket::P2PTransportChannel* ch) { | 
|   785     return (ch && ch->best_connection()) ? |   754     return (ch && ch->best_connection()) ? | 
|   786         &ch->best_connection()->local_candidate() : NULL; |   755         &ch->best_connection()->local_candidate() : NULL; | 
|   787   } |   756   } | 
|   788   static const Candidate* RemoteCandidate(P2PTransportChannel* ch) { |   757   static const cricket::Candidate* RemoteCandidate( | 
 |   758       cricket::P2PTransportChannel* ch) { | 
|   789     return (ch && ch->best_connection()) ? |   759     return (ch && ch->best_connection()) ? | 
|   790         &ch->best_connection()->remote_candidate() : NULL; |   760         &ch->best_connection()->remote_candidate() : NULL; | 
|   791   } |   761   } | 
|   792   Endpoint* GetEndpoint(TransportChannel* ch) { |   762   Endpoint* GetEndpoint(cricket::TransportChannel* ch) { | 
|   793     if (ep1_.HasChannel(ch)) { |   763     if (ep1_.HasChannel(ch)) { | 
|   794       return &ep1_; |   764       return &ep1_; | 
|   795     } else if (ep2_.HasChannel(ch)) { |   765     } else if (ep2_.HasChannel(ch)) { | 
|   796       return &ep2_; |   766       return &ep2_; | 
|   797     } else { |   767     } else { | 
|   798       return NULL; |   768       return NULL; | 
|   799     } |   769     } | 
|   800   } |   770   } | 
|   801   P2PTransportChannel* GetRemoteChannel(TransportChannel* ch) { |   771   cricket::P2PTransportChannel* GetRemoteChannel( | 
 |   772       cricket::TransportChannel* ch) { | 
|   802     if (ch == ep1_ch1()) |   773     if (ch == ep1_ch1()) | 
|   803       return ep2_ch1(); |   774       return ep2_ch1(); | 
|   804     else if (ch == ep1_ch2()) |   775     else if (ch == ep1_ch2()) | 
|   805       return ep2_ch2(); |   776       return ep2_ch2(); | 
|   806     else if (ch == ep2_ch1()) |   777     else if (ch == ep2_ch1()) | 
|   807       return ep1_ch1(); |   778       return ep1_ch1(); | 
|   808     else if (ch == ep2_ch2()) |   779     else if (ch == ep2_ch2()) | 
|   809       return ep1_ch2(); |   780       return ep1_ch2(); | 
|   810     else |   781     else | 
|   811       return NULL; |   782       return NULL; | 
|   812   } |   783   } | 
|   813   std::list<std::string>& GetPacketList(TransportChannel* ch) { |   784   std::list<std::string>& GetPacketList(cricket::TransportChannel* ch) { | 
|   814     return GetChannelData(ch)->ch_packets_; |   785     return GetChannelData(ch)->ch_packets_; | 
|   815   } |   786   } | 
|   816  |   787  | 
|   817   enum RemoteIceCredentialSource { FROM_CANDIDATE, FROM_SETICECREDENTIALS }; |   788   enum RemoteIceCredentialSource { FROM_CANDIDATE, FROM_SETICECREDENTIALS }; | 
|   818  |   789  | 
|   819   // How does the test pass ICE credentials to the P2PTransportChannel? |   790   // How does the test pass ICE credentials to the P2PTransportChannel? | 
|   820   // On the candidate itself, or through SetIceCredentials? |   791   // On the candidate itself, or through SetIceCredentials? | 
|   821   // Goes through the candidate itself by default. |   792   // Goes through the candidate itself by default. | 
|   822   void set_remote_ice_credential_source(RemoteIceCredentialSource source) { |   793   void set_remote_ice_credential_source(RemoteIceCredentialSource source) { | 
|   823     remote_ice_credential_source_ = source; |   794     remote_ice_credential_source_ = source; | 
|   824   } |   795   } | 
|   825  |   796  | 
|   826   void set_force_relay(bool relay) { |   797   void set_force_relay(bool relay) { | 
|   827     force_relay_ = relay; |   798     force_relay_ = relay; | 
|   828   } |   799   } | 
|   829  |   800  | 
|   830  private: |   801  private: | 
|   831   rtc::Thread* main_; |   802   rtc::Thread* main_; | 
|   832   std::unique_ptr<rtc::PhysicalSocketServer> pss_; |   803   std::unique_ptr<rtc::PhysicalSocketServer> pss_; | 
|   833   std::unique_ptr<rtc::VirtualSocketServer> vss_; |   804   std::unique_ptr<rtc::VirtualSocketServer> vss_; | 
|   834   std::unique_ptr<rtc::NATSocketServer> nss_; |   805   std::unique_ptr<rtc::NATSocketServer> nss_; | 
|   835   std::unique_ptr<rtc::FirewallSocketServer> ss_; |   806   std::unique_ptr<rtc::FirewallSocketServer> ss_; | 
|   836   rtc::SocketServerScope ss_scope_; |   807   rtc::SocketServerScope ss_scope_; | 
|   837   std::unique_ptr<TestStunServer> stun_server_; |   808   std::unique_ptr<cricket::TestStunServer> stun_server_; | 
|   838   TestTurnServer turn_server_; |   809   cricket::TestTurnServer turn_server_; | 
|   839   TestRelayServer relay_server_; |   810   cricket::TestRelayServer relay_server_; | 
|   840   rtc::SocksProxyServer socks_server1_; |   811   rtc::SocksProxyServer socks_server1_; | 
|   841   rtc::SocksProxyServer socks_server2_; |   812   rtc::SocksProxyServer socks_server2_; | 
|   842   Endpoint ep1_; |   813   Endpoint ep1_; | 
|   843   Endpoint ep2_; |   814   Endpoint ep2_; | 
|   844   RemoteIceCredentialSource remote_ice_credential_source_ = FROM_CANDIDATE; |   815   RemoteIceCredentialSource remote_ice_credential_source_ = FROM_CANDIDATE; | 
|   845   bool force_relay_; |   816   bool force_relay_; | 
|   846 }; |   817 }; | 
|   847  |   818  | 
|   848 // The tests have only a few outcomes, which we predefine. |   819 // The tests have only a few outcomes, which we predefine. | 
|   849 const P2PTransportChannelTestBase::Result P2PTransportChannelTestBase:: |   820 const P2PTransportChannelTestBase::Result P2PTransportChannelTestBase:: | 
| (...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|   887 // Just test every combination of the configs in the Config enum. |   858 // Just test every combination of the configs in the Config enum. | 
|   888 class P2PTransportChannelTest : public P2PTransportChannelTestBase { |   859 class P2PTransportChannelTest : public P2PTransportChannelTestBase { | 
|   889  protected: |   860  protected: | 
|   890   static const Result* kMatrix[NUM_CONFIGS][NUM_CONFIGS]; |   861   static const Result* kMatrix[NUM_CONFIGS][NUM_CONFIGS]; | 
|   891   void ConfigureEndpoints(Config config1, |   862   void ConfigureEndpoints(Config config1, | 
|   892                           Config config2, |   863                           Config config2, | 
|   893                           int allocator_flags1, |   864                           int allocator_flags1, | 
|   894                           int allocator_flags2) { |   865                           int allocator_flags2) { | 
|   895     ServerAddresses stun_servers; |   866     ServerAddresses stun_servers; | 
|   896     stun_servers.insert(kStunAddr); |   867     stun_servers.insert(kStunAddr); | 
|   897     GetEndpoint(0)->allocator_.reset(new BasicPortAllocator( |   868     GetEndpoint(0)->allocator_.reset( | 
|   898         &(GetEndpoint(0)->network_manager_), stun_servers, rtc::SocketAddress(), |   869         new cricket::BasicPortAllocator(&(GetEndpoint(0)->network_manager_), | 
|   899         rtc::SocketAddress(), rtc::SocketAddress())); |   870         stun_servers, | 
|   900     GetEndpoint(1)->allocator_.reset(new BasicPortAllocator( |   871         rtc::SocketAddress(), rtc::SocketAddress(), | 
|   901         &(GetEndpoint(1)->network_manager_), stun_servers, rtc::SocketAddress(), |   872         rtc::SocketAddress())); | 
|   902         rtc::SocketAddress(), rtc::SocketAddress())); |   873     GetEndpoint(1)->allocator_.reset( | 
 |   874         new cricket::BasicPortAllocator(&(GetEndpoint(1)->network_manager_), | 
 |   875         stun_servers, | 
 |   876         rtc::SocketAddress(), rtc::SocketAddress(), | 
 |   877         rtc::SocketAddress())); | 
|   903  |   878  | 
|   904     RelayServerConfig turn_server(RELAY_TURN); |   879     cricket::RelayServerConfig turn_server(cricket::RELAY_TURN); | 
|   905     turn_server.credentials = kRelayCredentials; |   880     turn_server.credentials = kRelayCredentials; | 
|   906     turn_server.ports.push_back( |   881     turn_server.ports.push_back( | 
|   907         ProtocolAddress(kTurnUdpIntAddr, PROTO_UDP, false)); |   882         cricket::ProtocolAddress(kTurnUdpIntAddr, cricket::PROTO_UDP, false)); | 
|   908     GetEndpoint(0)->allocator_->AddTurnServer(turn_server); |   883     GetEndpoint(0)->allocator_->AddTurnServer(turn_server); | 
|   909     GetEndpoint(1)->allocator_->AddTurnServer(turn_server); |   884     GetEndpoint(1)->allocator_->AddTurnServer(turn_server); | 
|   910  |   885  | 
|   911     int delay = kMinimumStepDelay; |   886     int delay = kMinimumStepDelay; | 
|   912     ConfigureEndpoint(0, config1); |   887     ConfigureEndpoint(0, config1); | 
|   913     SetAllocatorFlags(0, allocator_flags1); |   888     SetAllocatorFlags(0, allocator_flags1); | 
|   914     SetAllocationStepDelay(0, delay); |   889     SetAllocationStepDelay(0, delay); | 
|   915     ConfigureEndpoint(1, config2); |   890     ConfigureEndpoint(1, config2); | 
|   916     SetAllocatorFlags(1, allocator_flags2); |   891     SetAllocatorFlags(1, allocator_flags2); | 
|   917     SetAllocationStepDelay(1, delay); |   892     SetAllocationStepDelay(1, delay); | 
| (...skipping 190 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|  1108  |  1083  | 
|  1109 // Test the operation of GetStats. |  1084 // Test the operation of GetStats. | 
|  1110 TEST_F(P2PTransportChannelTest, GetStats) { |  1085 TEST_F(P2PTransportChannelTest, GetStats) { | 
|  1111   ConfigureEndpoints(OPEN, OPEN, kDefaultPortAllocatorFlags, |  1086   ConfigureEndpoints(OPEN, OPEN, kDefaultPortAllocatorFlags, | 
|  1112                      kDefaultPortAllocatorFlags); |  1087                      kDefaultPortAllocatorFlags); | 
|  1113   CreateChannels(1); |  1088   CreateChannels(1); | 
|  1114   EXPECT_TRUE_WAIT_MARGIN(ep1_ch1()->receiving() && ep1_ch1()->writable() && |  1089   EXPECT_TRUE_WAIT_MARGIN(ep1_ch1()->receiving() && ep1_ch1()->writable() && | 
|  1115                           ep2_ch1()->receiving() && ep2_ch1()->writable(), |  1090                           ep2_ch1()->receiving() && ep2_ch1()->writable(), | 
|  1116                           1000, 1000); |  1091                           1000, 1000); | 
|  1117   TestSendRecv(1); |  1092   TestSendRecv(1); | 
|  1118   ConnectionInfos infos; |  1093   cricket::ConnectionInfos infos; | 
|  1119   ASSERT_TRUE(ep1_ch1()->GetStats(&infos)); |  1094   ASSERT_TRUE(ep1_ch1()->GetStats(&infos)); | 
|  1120   ASSERT_TRUE(infos.size() >= 1); |  1095   ASSERT_TRUE(infos.size() >= 1); | 
|  1121   ConnectionInfo* best_conn_info = nullptr; |  1096   cricket::ConnectionInfo* best_conn_info = nullptr; | 
|  1122   for (ConnectionInfo& info : infos) { |  1097   for (cricket::ConnectionInfo& info : infos) { | 
|  1123     if (info.best_connection) { |  1098     if (info.best_connection) { | 
|  1124       best_conn_info = &info; |  1099       best_conn_info = &info; | 
|  1125       break; |  1100       break; | 
|  1126     } |  1101     } | 
|  1127   } |  1102   } | 
|  1128   ASSERT_TRUE(best_conn_info != nullptr); |  1103   ASSERT_TRUE(best_conn_info != nullptr); | 
|  1129   EXPECT_TRUE(best_conn_info->new_connection); |  1104   EXPECT_TRUE(best_conn_info->new_connection); | 
|  1130   EXPECT_TRUE(best_conn_info->receiving); |  1105   EXPECT_TRUE(best_conn_info->receiving); | 
|  1131   EXPECT_TRUE(best_conn_info->writable); |  1106   EXPECT_TRUE(best_conn_info->writable); | 
|  1132   EXPECT_FALSE(best_conn_info->timeout); |  1107   EXPECT_FALSE(best_conn_info->timeout); | 
| (...skipping 15 matching lines...) Expand all  Loading... | 
|  1148   CreateChannels(1); |  1123   CreateChannels(1); | 
|  1149   // Only have remote credentials come in for ep2, not ep1. |  1124   // Only have remote credentials come in for ep2, not ep1. | 
|  1150   ep2_ch1()->SetRemoteIceCredentials(kIceUfrag[0], kIcePwd[0]); |  1125   ep2_ch1()->SetRemoteIceCredentials(kIceUfrag[0], kIcePwd[0]); | 
|  1151  |  1126  | 
|  1152   // Pause sending ep2's candidates to ep1 until ep1 receives the peer reflexive |  1127   // Pause sending ep2's candidates to ep1 until ep1 receives the peer reflexive | 
|  1153   // candidate. |  1128   // candidate. | 
|  1154   PauseCandidates(1); |  1129   PauseCandidates(1); | 
|  1155  |  1130  | 
|  1156   // The caller should have the best connection connected to the peer reflexive |  1131   // The caller should have the best connection connected to the peer reflexive | 
|  1157   // candidate. |  1132   // candidate. | 
|  1158   const Connection* best_connection = NULL; |  1133   const cricket::Connection* best_connection = NULL; | 
|  1159   WAIT((best_connection = ep1_ch1()->best_connection()) != NULL, 2000); |  1134   WAIT((best_connection = ep1_ch1()->best_connection()) != NULL, 2000); | 
|  1160   EXPECT_EQ("prflx", ep1_ch1()->best_connection()->remote_candidate().type()); |  1135   EXPECT_EQ("prflx", ep1_ch1()->best_connection()->remote_candidate().type()); | 
|  1161  |  1136  | 
|  1162   // Because we don't have a remote pwd, we don't ping yet. |  1137   // Because we don't have a remote pwd, we don't ping yet. | 
|  1163   EXPECT_EQ(kIceUfrag[1], |  1138   EXPECT_EQ(kIceUfrag[1], | 
|  1164             ep1_ch1()->best_connection()->remote_candidate().username()); |  1139             ep1_ch1()->best_connection()->remote_candidate().username()); | 
|  1165   EXPECT_EQ("", ep1_ch1()->best_connection()->remote_candidate().password()); |  1140   EXPECT_EQ("", ep1_ch1()->best_connection()->remote_candidate().password()); | 
|  1166   // Because we don't have ICE credentials yet, we don't know the generation. |  1141   // Because we don't have ICE credentials yet, we don't know the generation. | 
|  1167   EXPECT_EQ(0u, ep1_ch1()->best_connection()->remote_candidate().generation()); |  1142   EXPECT_EQ(0u, ep1_ch1()->best_connection()->remote_candidate().generation()); | 
|  1168   EXPECT_TRUE(nullptr == ep1_ch1()->FindNextPingableConnection()); |  1143   EXPECT_TRUE(nullptr == ep1_ch1()->FindNextPingableConnection()); | 
| (...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|  1222   ep1_ch1()->SetRemoteIceCredentials(kIceUfrag[3], kIcePwd[3]); |  1197   ep1_ch1()->SetRemoteIceCredentials(kIceUfrag[3], kIcePwd[3]); | 
|  1223   ep1_ch1()->SetRemoteIceCredentials(kIceUfrag[1], kIcePwd[1]); |  1198   ep1_ch1()->SetRemoteIceCredentials(kIceUfrag[1], kIcePwd[1]); | 
|  1224   // After setting the remote ICE credentials, the password and generation |  1199   // After setting the remote ICE credentials, the password and generation | 
|  1225   // of the peer reflexive candidate should be updated. |  1200   // of the peer reflexive candidate should be updated. | 
|  1226   EXPECT_EQ(kIcePwd[1], |  1201   EXPECT_EQ(kIcePwd[1], | 
|  1227             ep1_ch1()->best_connection()->remote_candidate().password()); |  1202             ep1_ch1()->best_connection()->remote_candidate().password()); | 
|  1228   EXPECT_EQ(1u, ep1_ch1()->best_connection()->remote_candidate().generation()); |  1203   EXPECT_EQ(1u, ep1_ch1()->best_connection()->remote_candidate().generation()); | 
|  1229  |  1204  | 
|  1230   ResumeCandidates(1); |  1205   ResumeCandidates(1); | 
|  1231  |  1206  | 
|  1232   const Connection* best_connection = NULL; |  1207   const cricket::Connection* best_connection = NULL; | 
|  1233   WAIT((best_connection = ep2_ch1()->best_connection()) != NULL, 2000); |  1208   WAIT((best_connection = ep2_ch1()->best_connection()) != NULL, 2000); | 
|  1234  |  1209  | 
|  1235   // Wait to verify the connection is not culled. |  1210   // Wait to verify the connection is not culled. | 
|  1236   WAIT(ep1_ch1()->writable(), 2000); |  1211   WAIT(ep1_ch1()->writable(), 2000); | 
|  1237   EXPECT_EQ(ep2_ch1()->best_connection(), best_connection); |  1212   EXPECT_EQ(ep2_ch1()->best_connection(), best_connection); | 
|  1238   EXPECT_EQ("prflx", ep1_ch1()->best_connection()->remote_candidate().type()); |  1213   EXPECT_EQ("prflx", ep1_ch1()->best_connection()->remote_candidate().type()); | 
|  1239   DestroyChannels(); |  1214   DestroyChannels(); | 
|  1240 } |  1215 } | 
|  1241  |  1216  | 
|  1242 // Test that we properly create a connection on a STUN ping from unknown address |  1217 // Test that we properly create a connection on a STUN ping from unknown address | 
|  1243 // when the signaling is slow, even if the new candidate is created due to the |  1218 // when the signaling is slow, even if the new candidate is created due to the | 
|  1244 // remote peer doing an ICE restart, pairing this candidate across generations. |  1219 // remote peer doing an ICE restart, pairing this candidate across generations. | 
|  1245 // |  1220 // | 
|  1246 // Previously this wasn't working due to a bug where the peer reflexive |  1221 // Previously this wasn't working due to a bug where the peer reflexive | 
|  1247 // candidate was only updated for the newest generation candidate pairs, and |  1222 // candidate was only updated for the newest generation candidate pairs, and | 
|  1248 // not older-generation candidate pairs created by pairing candidates across |  1223 // not older-generation candidate pairs created by pairing candidates across | 
|  1249 // generations. This resulted in the old-generation prflx candidate being |  1224 // generations. This resulted in the old-generation prflx candidate being | 
|  1250 // prioritized above new-generation candidate pairs. |  1225 // prioritized above new-generation candidate pairs. | 
|  1251 TEST_F(P2PTransportChannelTest, |  1226 TEST_F(P2PTransportChannelTest, | 
|  1252        PeerReflexiveCandidateBeforeSignalingWithIceRestart) { |  1227        PeerReflexiveCandidateBeforeSignalingWithIceRestart) { | 
|  1253   ConfigureEndpoints(OPEN, OPEN, kDefaultPortAllocatorFlags, |  1228   ConfigureEndpoints(OPEN, OPEN, kDefaultPortAllocatorFlags, | 
|  1254                      kDefaultPortAllocatorFlags); |  1229                      kDefaultPortAllocatorFlags); | 
|  1255   // Only gather relay candidates, so that when the prflx candidate arrives |  1230   // Only gather relay candidates, so that when the prflx candidate arrives | 
|  1256   // it's prioritized above the current candidate pair. |  1231   // it's prioritized above the current candidate pair. | 
|  1257   GetEndpoint(0)->allocator_->set_candidate_filter(CF_RELAY); |  1232   GetEndpoint(0)->allocator_->set_candidate_filter(cricket::CF_RELAY); | 
|  1258   GetEndpoint(1)->allocator_->set_candidate_filter(CF_RELAY); |  1233   GetEndpoint(1)->allocator_->set_candidate_filter(cricket::CF_RELAY); | 
|  1259   // Setting this allows us to control when SetRemoteIceCredentials is called. |  1234   // Setting this allows us to control when SetRemoteIceCredentials is called. | 
|  1260   set_remote_ice_credential_source(FROM_CANDIDATE); |  1235   set_remote_ice_credential_source(FROM_CANDIDATE); | 
|  1261   CreateChannels(1); |  1236   CreateChannels(1); | 
|  1262   // Wait for the initial connection to be made. |  1237   // Wait for the initial connection to be made. | 
|  1263   ep1_ch1()->SetRemoteIceCredentials(kIceUfrag[1], kIcePwd[1]); |  1238   ep1_ch1()->SetRemoteIceCredentials(kIceUfrag[1], kIcePwd[1]); | 
|  1264   ep2_ch1()->SetRemoteIceCredentials(kIceUfrag[0], kIcePwd[0]); |  1239   ep2_ch1()->SetRemoteIceCredentials(kIceUfrag[0], kIcePwd[0]); | 
|  1265   EXPECT_TRUE_WAIT(ep1_ch1()->receiving() && ep1_ch1()->writable() && |  1240   EXPECT_TRUE_WAIT(ep1_ch1()->receiving() && ep1_ch1()->writable() && | 
|  1266                        ep2_ch1()->receiving() && ep2_ch1()->writable(), |  1241                        ep2_ch1()->receiving() && ep2_ch1()->writable(), | 
|  1267                    kDefaultTimeout); |  1242                    kDefaultTimeout); | 
|  1268  |  1243  | 
|  1269   // Simulate an ICE restart on ep2, but don't signal the candidate or new |  1244   // Simulate an ICE restart on ep2, but don't signal the candidate or new | 
|  1270   // ICE credentials until after a prflx connection has been made. |  1245   // ICE credentials until after a prflx connection has been made. | 
|  1271   PauseCandidates(1); |  1246   PauseCandidates(1); | 
|  1272   ep2_ch1()->SetIceCredentials(kIceUfrag[3], kIcePwd[3]); |  1247   ep2_ch1()->SetIceCredentials(kIceUfrag[3], kIcePwd[3]); | 
|  1273   ep1_ch1()->SetRemoteIceCredentials(kIceUfrag[3], kIcePwd[3]); |  1248   ep1_ch1()->SetRemoteIceCredentials(kIceUfrag[3], kIcePwd[3]); | 
|  1274   ep2_ch1()->MaybeStartGathering(); |  1249   ep2_ch1()->MaybeStartGathering(); | 
|  1275  |  1250  | 
|  1276   // The caller should have the best connection connected to the peer reflexive |  1251   // The caller should have the best connection connected to the peer reflexive | 
|  1277   // candidate. |  1252   // candidate. | 
|  1278   EXPECT_EQ_WAIT("prflx", |  1253   EXPECT_EQ_WAIT("prflx", | 
|  1279                  ep1_ch1()->best_connection()->remote_candidate().type(), |  1254                  ep1_ch1()->best_connection()->remote_candidate().type(), | 
|  1280                  kDefaultTimeout); |  1255                  kDefaultTimeout); | 
|  1281   const Connection* prflx_best_connection = ep1_ch1()->best_connection(); |  1256   const cricket::Connection* prflx_best_connection = | 
 |  1257       ep1_ch1()->best_connection(); | 
|  1282  |  1258  | 
|  1283   // Now simulate the ICE restart on ep1. |  1259   // Now simulate the ICE restart on ep1. | 
|  1284   ep1_ch1()->SetIceCredentials(kIceUfrag[2], kIcePwd[2]); |  1260   ep1_ch1()->SetIceCredentials(kIceUfrag[2], kIcePwd[2]); | 
|  1285   ep2_ch1()->SetRemoteIceCredentials(kIceUfrag[2], kIcePwd[2]); |  1261   ep2_ch1()->SetRemoteIceCredentials(kIceUfrag[2], kIcePwd[2]); | 
|  1286   ep1_ch1()->MaybeStartGathering(); |  1262   ep1_ch1()->MaybeStartGathering(); | 
|  1287  |  1263  | 
|  1288   // Finally send the candidates from ep2's ICE restart and verify that ep1 uses |  1264   // Finally send the candidates from ep2's ICE restart and verify that ep1 uses | 
|  1289   // their information to update the peer reflexive candidate. |  1265   // their information to update the peer reflexive candidate. | 
|  1290   ResumeCandidates(1); |  1266   ResumeCandidates(1); | 
|  1291  |  1267  | 
|  1292   EXPECT_EQ_WAIT("relay", |  1268   EXPECT_EQ_WAIT("relay", | 
|  1293                  ep1_ch1()->best_connection()->remote_candidate().type(), |  1269                  ep1_ch1()->best_connection()->remote_candidate().type(), | 
|  1294                  kDefaultTimeout); |  1270                  kDefaultTimeout); | 
|  1295   EXPECT_EQ(prflx_best_connection, ep1_ch1()->best_connection()); |  1271   EXPECT_EQ(prflx_best_connection, ep1_ch1()->best_connection()); | 
|  1296   DestroyChannels(); |  1272   DestroyChannels(); | 
|  1297 } |  1273 } | 
|  1298  |  1274  | 
|  1299 // Test that if remote candidates don't have ufrag and pwd, we still work. |  1275 // Test that if remote candidates don't have ufrag and pwd, we still work. | 
|  1300 TEST_F(P2PTransportChannelTest, RemoteCandidatesWithoutUfragPwd) { |  1276 TEST_F(P2PTransportChannelTest, RemoteCandidatesWithoutUfragPwd) { | 
|  1301   set_remote_ice_credential_source(FROM_SETICECREDENTIALS); |  1277   set_remote_ice_credential_source(FROM_SETICECREDENTIALS); | 
|  1302   ConfigureEndpoints(OPEN, OPEN, kDefaultPortAllocatorFlags, |  1278   ConfigureEndpoints(OPEN, OPEN, kDefaultPortAllocatorFlags, | 
|  1303                      kDefaultPortAllocatorFlags); |  1279                      kDefaultPortAllocatorFlags); | 
|  1304   CreateChannels(1); |  1280   CreateChannels(1); | 
|  1305   const Connection* best_connection = NULL; |  1281   const cricket::Connection* best_connection = NULL; | 
|  1306   // Wait until the callee's connections are created. |  1282   // Wait until the callee's connections are created. | 
|  1307   WAIT((best_connection = ep2_ch1()->best_connection()) != NULL, 1000); |  1283   WAIT((best_connection = ep2_ch1()->best_connection()) != NULL, 1000); | 
|  1308   // Wait to see if they get culled; they shouldn't. |  1284   // Wait to see if they get culled; they shouldn't. | 
|  1309   WAIT(ep2_ch1()->best_connection() != best_connection, 1000); |  1285   WAIT(ep2_ch1()->best_connection() != best_connection, 1000); | 
|  1310   EXPECT_TRUE(ep2_ch1()->best_connection() == best_connection); |  1286   EXPECT_TRUE(ep2_ch1()->best_connection() == best_connection); | 
|  1311   DestroyChannels(); |  1287   DestroyChannels(); | 
|  1312 } |  1288 } | 
|  1313  |  1289  | 
|  1314 // Test that a host behind NAT cannot be reached when incoming_only |  1290 // Test that a host behind NAT cannot be reached when incoming_only | 
|  1315 // is set to true. |  1291 // is set to true. | 
| (...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|  1350   DestroyChannels(); |  1326   DestroyChannels(); | 
|  1351 } |  1327 } | 
|  1352  |  1328  | 
|  1353 TEST_F(P2PTransportChannelTest, TestTcpConnectionsFromActiveToPassive) { |  1329 TEST_F(P2PTransportChannelTest, TestTcpConnectionsFromActiveToPassive) { | 
|  1354   AddAddress(0, kPublicAddrs[0]); |  1330   AddAddress(0, kPublicAddrs[0]); | 
|  1355   AddAddress(1, kPublicAddrs[1]); |  1331   AddAddress(1, kPublicAddrs[1]); | 
|  1356  |  1332  | 
|  1357   SetAllocationStepDelay(0, kMinimumStepDelay); |  1333   SetAllocationStepDelay(0, kMinimumStepDelay); | 
|  1358   SetAllocationStepDelay(1, kMinimumStepDelay); |  1334   SetAllocationStepDelay(1, kMinimumStepDelay); | 
|  1359  |  1335  | 
|  1360   int kOnlyLocalTcpPorts = PORTALLOCATOR_DISABLE_UDP | |  1336   int kOnlyLocalTcpPorts = cricket::PORTALLOCATOR_DISABLE_UDP | | 
|  1361                            PORTALLOCATOR_DISABLE_STUN | |  1337                            cricket::PORTALLOCATOR_DISABLE_STUN | | 
|  1362                            PORTALLOCATOR_DISABLE_RELAY; |  1338                            cricket::PORTALLOCATOR_DISABLE_RELAY; | 
|  1363   // Disable all protocols except TCP. |  1339   // Disable all protocols except TCP. | 
|  1364   SetAllocatorFlags(0, kOnlyLocalTcpPorts); |  1340   SetAllocatorFlags(0, kOnlyLocalTcpPorts); | 
|  1365   SetAllocatorFlags(1, kOnlyLocalTcpPorts); |  1341   SetAllocatorFlags(1, kOnlyLocalTcpPorts); | 
|  1366  |  1342  | 
|  1367   SetAllowTcpListen(0, true);   // actpass. |  1343   SetAllowTcpListen(0, true);   // actpass. | 
|  1368   SetAllowTcpListen(1, false);  // active. |  1344   SetAllowTcpListen(1, false);  // active. | 
|  1369  |  1345  | 
|  1370   // We want SetRemoteIceCredentials to be called as it normally would. |  1346   // We want SetRemoteIceCredentials to be called as it normally would. | 
|  1371   // Otherwise we won't know what credentials to use for the expected |  1347   // Otherwise we won't know what credentials to use for the expected | 
|  1372   // prflx TCP candidates. |  1348   // prflx TCP candidates. | 
|  1373   set_remote_ice_credential_source(FROM_SETICECREDENTIALS); |  1349   set_remote_ice_credential_source(FROM_SETICECREDENTIALS); | 
|  1374  |  1350  | 
|  1375   // Pause candidate so we could verify the candidate properties. |  1351   // Pause candidate so we could verify the candidate properties. | 
|  1376   PauseCandidates(0); |  1352   PauseCandidates(0); | 
|  1377   PauseCandidates(1); |  1353   PauseCandidates(1); | 
|  1378   CreateChannels(1); |  1354   CreateChannels(1); | 
|  1379  |  1355  | 
|  1380   // Verify tcp candidates. |  1356   // Verify tcp candidates. | 
|  1381   VerifySavedTcpCandidates(0, TCPTYPE_PASSIVE_STR); |  1357   VerifySavedTcpCandidates(0, cricket::TCPTYPE_PASSIVE_STR); | 
|  1382   VerifySavedTcpCandidates(1, TCPTYPE_ACTIVE_STR); |  1358   VerifySavedTcpCandidates(1, cricket::TCPTYPE_ACTIVE_STR); | 
|  1383  |  1359  | 
|  1384   // Resume candidates. |  1360   // Resume candidates. | 
|  1385   ResumeCandidates(0); |  1361   ResumeCandidates(0); | 
|  1386   ResumeCandidates(1); |  1362   ResumeCandidates(1); | 
|  1387  |  1363  | 
|  1388   EXPECT_TRUE_WAIT(ep1_ch1()->receiving() && ep1_ch1()->writable() && |  1364   EXPECT_TRUE_WAIT(ep1_ch1()->receiving() && ep1_ch1()->writable() && | 
|  1389                    ep2_ch1()->receiving() && ep2_ch1()->writable(), |  1365                    ep2_ch1()->receiving() && ep2_ch1()->writable(), | 
|  1390                    1000); |  1366                    1000); | 
|  1391   EXPECT_TRUE( |  1367   EXPECT_TRUE( | 
|  1392       ep1_ch1()->best_connection() && ep2_ch1()->best_connection() && |  1368       ep1_ch1()->best_connection() && ep2_ch1()->best_connection() && | 
|  1393       LocalCandidate(ep1_ch1())->address().EqualIPs(kPublicAddrs[0]) && |  1369       LocalCandidate(ep1_ch1())->address().EqualIPs(kPublicAddrs[0]) && | 
|  1394       RemoteCandidate(ep1_ch1())->address().EqualIPs(kPublicAddrs[1])); |  1370       RemoteCandidate(ep1_ch1())->address().EqualIPs(kPublicAddrs[1])); | 
|  1395  |  1371  | 
|  1396   TestSendRecv(1); |  1372   TestSendRecv(1); | 
|  1397   DestroyChannels(); |  1373   DestroyChannels(); | 
|  1398 } |  1374 } | 
|  1399  |  1375  | 
|  1400 TEST_F(P2PTransportChannelTest, TestIceRoleConflict) { |  1376 TEST_F(P2PTransportChannelTest, TestIceRoleConflict) { | 
|  1401   AddAddress(0, kPublicAddrs[0]); |  1377   AddAddress(0, kPublicAddrs[0]); | 
|  1402   AddAddress(1, kPublicAddrs[1]); |  1378   AddAddress(1, kPublicAddrs[1]); | 
|  1403   TestSignalRoleConflict(); |  1379   TestSignalRoleConflict(); | 
|  1404 } |  1380 } | 
|  1405  |  1381  | 
|  1406 // Tests that the ice configs (protocol, tiebreaker and role) can be passed |  1382 // Tests that the ice configs (protocol, tiebreaker and role) can be passed | 
|  1407 // down to ports. |  1383 // down to ports. | 
|  1408 // Disable on Windows because it is flaky. |  1384 // Disable on Windows because it is flaky. | 
|  1409 // https://bugs.chromium.org/p/webrtc/issues/detail?id=6019 |  1385 // https://bugs.chromium.org/p/webrtc/issues/detail?id=6019 | 
|  1410 #if defined(WEBRTC_WIN) |  1386 #if defined(WEBRTC_WIN) | 
|  1411 #define MAYBE_TestIceConfigWillPassDownToPort \ |  1387 #define MAYBE_TestIceConfigWillPassDownToPort DISABLED_TestIceConfigWillPassDown
      ToPort | 
|  1412   DISABLED_TestIceConfigWillPassDownToPort |  | 
|  1413 #else |  1388 #else | 
|  1414 #define MAYBE_TestIceConfigWillPassDownToPort TestIceConfigWillPassDownToPort |  1389 #define MAYBE_TestIceConfigWillPassDownToPort TestIceConfigWillPassDownToPort | 
|  1415 #endif |  1390 #endif | 
|  1416 TEST_F(P2PTransportChannelTest, MAYBE_TestIceConfigWillPassDownToPort) { |  1391 TEST_F(P2PTransportChannelTest, MAYBE_TestIceConfigWillPassDownToPort) { | 
|  1417   AddAddress(0, kPublicAddrs[0]); |  1392   AddAddress(0, kPublicAddrs[0]); | 
|  1418   AddAddress(1, kPublicAddrs[1]); |  1393   AddAddress(1, kPublicAddrs[1]); | 
|  1419  |  1394  | 
|  1420   SetIceRole(0, ICEROLE_CONTROLLING); |  1395   SetIceRole(0, cricket::ICEROLE_CONTROLLING); | 
|  1421   SetIceTiebreaker(0, kTiebreaker1); |  1396   SetIceTiebreaker(0, kTiebreaker1); | 
|  1422   SetIceRole(1, ICEROLE_CONTROLLING); |  1397   SetIceRole(1, cricket::ICEROLE_CONTROLLING); | 
|  1423   SetIceTiebreaker(1, kTiebreaker2); |  1398   SetIceTiebreaker(1, kTiebreaker2); | 
|  1424  |  1399  | 
|  1425   CreateChannels(1); |  1400   CreateChannels(1); | 
|  1426  |  1401  | 
|  1427   EXPECT_EQ_WAIT(2u, ep1_ch1()->ports().size(), 1000); |  1402   EXPECT_EQ_WAIT(2u, ep1_ch1()->ports().size(), 1000); | 
|  1428  |  1403  | 
|  1429   const std::vector<PortInterface*> ports_before = ep1_ch1()->ports(); |  1404   const std::vector<cricket::PortInterface *> ports_before = ep1_ch1()->ports(); | 
|  1430   for (size_t i = 0; i < ports_before.size(); ++i) { |  1405   for (size_t i = 0; i < ports_before.size(); ++i) { | 
|  1431     EXPECT_EQ(ICEROLE_CONTROLLING, ports_before[i]->GetIceRole()); |  1406     EXPECT_EQ(cricket::ICEROLE_CONTROLLING, ports_before[i]->GetIceRole()); | 
|  1432     EXPECT_EQ(kTiebreaker1, ports_before[i]->IceTiebreaker()); |  1407     EXPECT_EQ(kTiebreaker1, ports_before[i]->IceTiebreaker()); | 
|  1433   } |  1408   } | 
|  1434  |  1409  | 
|  1435   ep1_ch1()->SetIceRole(ICEROLE_CONTROLLED); |  1410   ep1_ch1()->SetIceRole(cricket::ICEROLE_CONTROLLED); | 
|  1436   ep1_ch1()->SetIceTiebreaker(kTiebreaker2); |  1411   ep1_ch1()->SetIceTiebreaker(kTiebreaker2); | 
|  1437  |  1412  | 
|  1438   const std::vector<PortInterface*> ports_after = ep1_ch1()->ports(); |  1413   const std::vector<cricket::PortInterface *> ports_after = ep1_ch1()->ports(); | 
|  1439   for (size_t i = 0; i < ports_after.size(); ++i) { |  1414   for (size_t i = 0; i < ports_after.size(); ++i) { | 
|  1440     EXPECT_EQ(ICEROLE_CONTROLLED, ports_before[i]->GetIceRole()); |  1415     EXPECT_EQ(cricket::ICEROLE_CONTROLLED, ports_before[i]->GetIceRole()); | 
|  1441     // SetIceTiebreaker after Connect() has been called will fail. So expect the |  1416     // SetIceTiebreaker after Connect() has been called will fail. So expect the | 
|  1442     // original value. |  1417     // original value. | 
|  1443     EXPECT_EQ(kTiebreaker1, ports_before[i]->IceTiebreaker()); |  1418     EXPECT_EQ(kTiebreaker1, ports_before[i]->IceTiebreaker()); | 
|  1444   } |  1419   } | 
|  1445  |  1420  | 
|  1446   EXPECT_TRUE_WAIT(ep1_ch1()->receiving() && |  1421   EXPECT_TRUE_WAIT(ep1_ch1()->receiving() && | 
|  1447                    ep1_ch1()->writable() && |  1422                    ep1_ch1()->writable() && | 
|  1448                    ep2_ch1()->receiving() && |  1423                    ep2_ch1()->receiving() && | 
|  1449                    ep2_ch1()->writable(), |  1424                    ep2_ch1()->writable(), | 
|  1450                    1000); |  1425                    1000); | 
| (...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|  1488 TEST_F(P2PTransportChannelTest, TestIPv6Connections) { |  1463 TEST_F(P2PTransportChannelTest, TestIPv6Connections) { | 
|  1489   AddAddress(0, kIPv6PublicAddrs[0]); |  1464   AddAddress(0, kIPv6PublicAddrs[0]); | 
|  1490   AddAddress(0, kPublicAddrs[0]); |  1465   AddAddress(0, kPublicAddrs[0]); | 
|  1491   AddAddress(1, kIPv6PublicAddrs[1]); |  1466   AddAddress(1, kIPv6PublicAddrs[1]); | 
|  1492   AddAddress(1, kPublicAddrs[1]); |  1467   AddAddress(1, kPublicAddrs[1]); | 
|  1493  |  1468  | 
|  1494   SetAllocationStepDelay(0, kMinimumStepDelay); |  1469   SetAllocationStepDelay(0, kMinimumStepDelay); | 
|  1495   SetAllocationStepDelay(1, kMinimumStepDelay); |  1470   SetAllocationStepDelay(1, kMinimumStepDelay); | 
|  1496  |  1471  | 
|  1497   // Enable IPv6 |  1472   // Enable IPv6 | 
|  1498   SetAllocatorFlags(0, PORTALLOCATOR_ENABLE_IPV6); |  1473   SetAllocatorFlags(0, cricket::PORTALLOCATOR_ENABLE_IPV6); | 
|  1499   SetAllocatorFlags(1, PORTALLOCATOR_ENABLE_IPV6); |  1474   SetAllocatorFlags(1, cricket::PORTALLOCATOR_ENABLE_IPV6); | 
|  1500  |  1475  | 
|  1501   CreateChannels(1); |  1476   CreateChannels(1); | 
|  1502  |  1477  | 
|  1503   EXPECT_TRUE_WAIT(ep1_ch1()->receiving() && ep1_ch1()->writable() && |  1478   EXPECT_TRUE_WAIT(ep1_ch1()->receiving() && ep1_ch1()->writable() && | 
|  1504                    ep2_ch1()->receiving() && ep2_ch1()->writable(), |  1479                    ep2_ch1()->receiving() && ep2_ch1()->writable(), | 
|  1505                    1000); |  1480                    1000); | 
|  1506   EXPECT_TRUE( |  1481   EXPECT_TRUE( | 
|  1507       ep1_ch1()->best_connection() && ep2_ch1()->best_connection() && |  1482       ep1_ch1()->best_connection() && ep2_ch1()->best_connection() && | 
|  1508       LocalCandidate(ep1_ch1())->address().EqualIPs(kIPv6PublicAddrs[0]) && |  1483       LocalCandidate(ep1_ch1())->address().EqualIPs(kIPv6PublicAddrs[0]) && | 
|  1509       RemoteCandidate(ep1_ch1())->address().EqualIPs(kIPv6PublicAddrs[1])); |  1484       RemoteCandidate(ep1_ch1())->address().EqualIPs(kIPv6PublicAddrs[1])); | 
|  1510  |  1485  | 
|  1511   TestSendRecv(1); |  1486   TestSendRecv(1); | 
|  1512   DestroyChannels(); |  1487   DestroyChannels(); | 
|  1513 } |  1488 } | 
|  1514  |  1489  | 
|  1515 // Testing forceful TURN connections. |  1490 // Testing forceful TURN connections. | 
|  1516 TEST_F(P2PTransportChannelTest, TestForceTurn) { |  1491 TEST_F(P2PTransportChannelTest, TestForceTurn) { | 
|  1517   ConfigureEndpoints( |  1492   ConfigureEndpoints( | 
|  1518       NAT_PORT_RESTRICTED, NAT_SYMMETRIC, |  1493       NAT_PORT_RESTRICTED, NAT_SYMMETRIC, | 
|  1519       kDefaultPortAllocatorFlags | PORTALLOCATOR_ENABLE_SHARED_SOCKET, |  1494       kDefaultPortAllocatorFlags | cricket::PORTALLOCATOR_ENABLE_SHARED_SOCKET, | 
|  1520       kDefaultPortAllocatorFlags | PORTALLOCATOR_ENABLE_SHARED_SOCKET); |  1495       kDefaultPortAllocatorFlags | cricket::PORTALLOCATOR_ENABLE_SHARED_SOCKET); | 
|  1521   set_force_relay(true); |  1496   set_force_relay(true); | 
|  1522  |  1497  | 
|  1523   SetAllocationStepDelay(0, kMinimumStepDelay); |  1498   SetAllocationStepDelay(0, kMinimumStepDelay); | 
|  1524   SetAllocationStepDelay(1, kMinimumStepDelay); |  1499   SetAllocationStepDelay(1, kMinimumStepDelay); | 
|  1525  |  1500  | 
|  1526   CreateChannels(1); |  1501   CreateChannels(1); | 
|  1527  |  1502  | 
|  1528   EXPECT_TRUE_WAIT(ep1_ch1()->receiving() && ep1_ch1()->writable() && |  1503   EXPECT_TRUE_WAIT(ep1_ch1()->receiving() && ep1_ch1()->writable() && | 
|  1529                        ep2_ch1()->receiving() && ep2_ch1()->writable(), |  1504                        ep2_ch1()->receiving() && ep2_ch1()->writable(), | 
|  1530                    2000); |  1505                    2000); | 
| (...skipping 11 matching lines...) Expand all  Loading... | 
|  1542 } |  1517 } | 
|  1543  |  1518  | 
|  1544 // Test that if continual gathering is set to true, ICE gathering state will |  1519 // Test that if continual gathering is set to true, ICE gathering state will | 
|  1545 // not change to "Complete", and vice versa. |  1520 // not change to "Complete", and vice versa. | 
|  1546 TEST_F(P2PTransportChannelTest, TestContinualGathering) { |  1521 TEST_F(P2PTransportChannelTest, TestContinualGathering) { | 
|  1547   ConfigureEndpoints(OPEN, OPEN, kDefaultPortAllocatorFlags, |  1522   ConfigureEndpoints(OPEN, OPEN, kDefaultPortAllocatorFlags, | 
|  1548                      kDefaultPortAllocatorFlags); |  1523                      kDefaultPortAllocatorFlags); | 
|  1549   SetAllocationStepDelay(0, kDefaultStepDelay); |  1524   SetAllocationStepDelay(0, kDefaultStepDelay); | 
|  1550   SetAllocationStepDelay(1, kDefaultStepDelay); |  1525   SetAllocationStepDelay(1, kDefaultStepDelay); | 
|  1551   CreateChannels(1); |  1526   CreateChannels(1); | 
|  1552   IceConfig config = CreateIceConfig(1000, true); |  1527   cricket::IceConfig config = CreateIceConfig(1000, true); | 
|  1553   ep1_ch1()->SetIceConfig(config); |  1528   ep1_ch1()->SetIceConfig(config); | 
|  1554   // By default, ep2 does not gather continually. |  1529   // By default, ep2 does not gather continually. | 
|  1555  |  1530  | 
|  1556   EXPECT_TRUE_WAIT_MARGIN(ep1_ch1() != NULL && ep2_ch1() != NULL && |  1531   EXPECT_TRUE_WAIT_MARGIN(ep1_ch1() != NULL && ep2_ch1() != NULL && | 
|  1557                               ep1_ch1()->receiving() && ep1_ch1()->writable() && |  1532                               ep1_ch1()->receiving() && ep1_ch1()->writable() && | 
|  1558                               ep2_ch1()->receiving() && ep2_ch1()->writable(), |  1533                               ep2_ch1()->receiving() && ep2_ch1()->writable(), | 
|  1559                           1000, 1000); |  1534                           1000, 1000); | 
|  1560   WAIT(IceGatheringState::kIceGatheringComplete == ep1_ch1()->gathering_state(), |  1535   WAIT(cricket::IceGatheringState::kIceGatheringComplete == | 
 |  1536            ep1_ch1()->gathering_state(), | 
|  1561        1000); |  1537        1000); | 
|  1562   EXPECT_EQ(IceGatheringState::kIceGatheringGathering, |  1538   EXPECT_EQ(cricket::IceGatheringState::kIceGatheringGathering, | 
|  1563             ep1_ch1()->gathering_state()); |  1539             ep1_ch1()->gathering_state()); | 
|  1564   // By now, ep2 should have completed gathering. |  1540   // By now, ep2 should have completed gathering. | 
|  1565   EXPECT_EQ(IceGatheringState::kIceGatheringComplete, |  1541   EXPECT_EQ(cricket::IceGatheringState::kIceGatheringComplete, | 
|  1566             ep2_ch1()->gathering_state()); |  1542             ep2_ch1()->gathering_state()); | 
|  1567  |  1543  | 
|  1568   DestroyChannels(); |  1544   DestroyChannels(); | 
|  1569 } |  1545 } | 
|  1570  |  1546  | 
|  1571 // Test that a connection succeeds when the P2PTransportChannel uses a pooled |  1547 // Test that a connection succeeds when the P2PTransportChannel uses a pooled | 
|  1572 // PortAllocatorSession that has not yet finished gathering candidates. |  1548 // PortAllocatorSession that has not yet finished gathering candidates. | 
|  1573 TEST_F(P2PTransportChannelTest, TestUsingPooledSessionBeforeDoneGathering) { |  1549 TEST_F(P2PTransportChannelTest, TestUsingPooledSessionBeforeDoneGathering) { | 
|  1574   ConfigureEndpoints(OPEN, OPEN, kDefaultPortAllocatorFlags, |  1550   ConfigureEndpoints(OPEN, OPEN, kDefaultPortAllocatorFlags, | 
|  1575                      kDefaultPortAllocatorFlags); |  1551                      kDefaultPortAllocatorFlags); | 
|  1576   // First create a pooled session for each endpoint. |  1552   // First create a pooled session for each endpoint. | 
|  1577   auto& allocator_1 = GetEndpoint(0)->allocator_; |  1553   auto& allocator_1 = GetEndpoint(0)->allocator_; | 
|  1578   auto& allocator_2 = GetEndpoint(1)->allocator_; |  1554   auto& allocator_2 = GetEndpoint(1)->allocator_; | 
|  1579   int pool_size = 1; |  1555   int pool_size = 1; | 
|  1580   allocator_1->SetConfiguration(allocator_1->stun_servers(), |  1556   allocator_1->SetConfiguration(allocator_1->stun_servers(), | 
|  1581                                 allocator_1->turn_servers(), pool_size); |  1557                                 allocator_1->turn_servers(), pool_size); | 
|  1582   allocator_2->SetConfiguration(allocator_2->stun_servers(), |  1558   allocator_2->SetConfiguration(allocator_2->stun_servers(), | 
|  1583                                 allocator_2->turn_servers(), pool_size); |  1559                                 allocator_2->turn_servers(), pool_size); | 
|  1584   const PortAllocatorSession* pooled_session_1 = |  1560   const cricket::PortAllocatorSession* pooled_session_1 = | 
|  1585       allocator_1->GetPooledSession(); |  1561       allocator_1->GetPooledSession(); | 
|  1586   const PortAllocatorSession* pooled_session_2 = |  1562   const cricket::PortAllocatorSession* pooled_session_2 = | 
|  1587       allocator_2->GetPooledSession(); |  1563       allocator_2->GetPooledSession(); | 
|  1588   ASSERT_NE(nullptr, pooled_session_1); |  1564   ASSERT_NE(nullptr, pooled_session_1); | 
|  1589   ASSERT_NE(nullptr, pooled_session_2); |  1565   ASSERT_NE(nullptr, pooled_session_2); | 
|  1590   // Sanity check that pooled sessions haven't gathered anything yet. |  1566   // Sanity check that pooled sessions haven't gathered anything yet. | 
|  1591   EXPECT_TRUE(pooled_session_1->ReadyPorts().empty()); |  1567   EXPECT_TRUE(pooled_session_1->ReadyPorts().empty()); | 
|  1592   EXPECT_TRUE(pooled_session_1->ReadyCandidates().empty()); |  1568   EXPECT_TRUE(pooled_session_1->ReadyCandidates().empty()); | 
|  1593   EXPECT_TRUE(pooled_session_2->ReadyPorts().empty()); |  1569   EXPECT_TRUE(pooled_session_2->ReadyPorts().empty()); | 
|  1594   EXPECT_TRUE(pooled_session_2->ReadyCandidates().empty()); |  1570   EXPECT_TRUE(pooled_session_2->ReadyCandidates().empty()); | 
|  1595   // Now let the endpoints connect and try exchanging some data. |  1571   // Now let the endpoints connect and try exchanging some data. | 
|  1596   CreateChannels(1); |  1572   CreateChannels(1); | 
| (...skipping 20 matching lines...) Expand all  Loading... | 
|  1617   ConfigureEndpoints(OPEN, OPEN, kDefaultPortAllocatorFlags, |  1593   ConfigureEndpoints(OPEN, OPEN, kDefaultPortAllocatorFlags, | 
|  1618                      kDefaultPortAllocatorFlags); |  1594                      kDefaultPortAllocatorFlags); | 
|  1619   // First create a pooled session for each endpoint. |  1595   // First create a pooled session for each endpoint. | 
|  1620   auto& allocator_1 = GetEndpoint(0)->allocator_; |  1596   auto& allocator_1 = GetEndpoint(0)->allocator_; | 
|  1621   auto& allocator_2 = GetEndpoint(1)->allocator_; |  1597   auto& allocator_2 = GetEndpoint(1)->allocator_; | 
|  1622   int pool_size = 1; |  1598   int pool_size = 1; | 
|  1623   allocator_1->SetConfiguration(allocator_1->stun_servers(), |  1599   allocator_1->SetConfiguration(allocator_1->stun_servers(), | 
|  1624                                 allocator_1->turn_servers(), pool_size); |  1600                                 allocator_1->turn_servers(), pool_size); | 
|  1625   allocator_2->SetConfiguration(allocator_2->stun_servers(), |  1601   allocator_2->SetConfiguration(allocator_2->stun_servers(), | 
|  1626                                 allocator_2->turn_servers(), pool_size); |  1602                                 allocator_2->turn_servers(), pool_size); | 
|  1627   const PortAllocatorSession* pooled_session_1 = |  1603   const cricket::PortAllocatorSession* pooled_session_1 = | 
|  1628       allocator_1->GetPooledSession(); |  1604       allocator_1->GetPooledSession(); | 
|  1629   const PortAllocatorSession* pooled_session_2 = |  1605   const cricket::PortAllocatorSession* pooled_session_2 = | 
|  1630       allocator_2->GetPooledSession(); |  1606       allocator_2->GetPooledSession(); | 
|  1631   ASSERT_NE(nullptr, pooled_session_1); |  1607   ASSERT_NE(nullptr, pooled_session_1); | 
|  1632   ASSERT_NE(nullptr, pooled_session_2); |  1608   ASSERT_NE(nullptr, pooled_session_2); | 
|  1633   // Wait for the pooled sessions to finish gathering before the |  1609   // Wait for the pooled sessions to finish gathering before the | 
|  1634   // P2PTransportChannels try to use them. |  1610   // P2PTransportChannels try to use them. | 
|  1635   EXPECT_TRUE_WAIT(pooled_session_1->CandidatesAllocationDone() && |  1611   EXPECT_TRUE_WAIT(pooled_session_1->CandidatesAllocationDone() && | 
|  1636                        pooled_session_2->CandidatesAllocationDone(), |  1612                        pooled_session_2->CandidatesAllocationDone(), | 
|  1637                    kDefaultTimeout); |  1613                    kDefaultTimeout); | 
|  1638   // Now let the endpoints connect and try exchanging some data. |  1614   // Now let the endpoints connect and try exchanging some data. | 
|  1639   CreateChannels(1); |  1615   CreateChannels(1); | 
|  1640   EXPECT_TRUE_WAIT_MARGIN(ep1_ch1() != NULL && ep2_ch1() != NULL && |  1616   EXPECT_TRUE_WAIT_MARGIN(ep1_ch1() != NULL && ep2_ch1() != NULL && | 
|  1641                               ep1_ch1()->receiving() && ep1_ch1()->writable() && |  1617                               ep1_ch1()->receiving() && ep1_ch1()->writable() && | 
|  1642                               ep2_ch1()->receiving() && ep2_ch1()->writable(), |  1618                               ep2_ch1()->receiving() && ep2_ch1()->writable(), | 
|  1643                           1000, 1000); |  1619                           1000, 1000); | 
|  1644   TestSendRecv(1); |  1620   TestSendRecv(1); | 
|  1645   // Make sure the P2PTransportChannels are actually using ports from the |  1621   // Make sure the P2PTransportChannels are actually using ports from the | 
|  1646   // pooled sessions. |  1622   // pooled sessions. | 
|  1647   auto pooled_ports_1 = pooled_session_1->ReadyPorts(); |  1623   auto pooled_ports_1 = pooled_session_1->ReadyPorts(); | 
|  1648   auto pooled_ports_2 = pooled_session_2->ReadyPorts(); |  1624   auto pooled_ports_2 = pooled_session_2->ReadyPorts(); | 
|  1649   EXPECT_NE(pooled_ports_1.end(), |  1625   EXPECT_NE(pooled_ports_1.end(), | 
|  1650             std::find(pooled_ports_1.begin(), pooled_ports_1.end(), |  1626             std::find(pooled_ports_1.begin(), pooled_ports_1.end(), | 
|  1651                       ep1_ch1()->best_connection()->port())); |  1627                       ep1_ch1()->best_connection()->port())); | 
|  1652   EXPECT_NE(pooled_ports_2.end(), |  1628   EXPECT_NE(pooled_ports_2.end(), | 
|  1653             std::find(pooled_ports_2.begin(), pooled_ports_2.end(), |  1629             std::find(pooled_ports_2.begin(), pooled_ports_2.end(), | 
|  1654                       ep2_ch1()->best_connection()->port())); |  1630                       ep2_ch1()->best_connection()->port())); | 
|  1655 } |  1631 } | 
|  1656  |  1632  | 
|  1657 // Test that when the "presume_writable_when_fully_relayed" flag is set to |  | 
|  1658 // false and there's a TURN-TURN candidate pair, it's presume to be writable |  | 
|  1659 // as soon as it's created. |  | 
|  1660 TEST_F(P2PTransportChannelTest, TurnToTurnPresumedWritable) { |  | 
|  1661   ConfigureEndpoints(OPEN, OPEN, kDefaultPortAllocatorFlags, |  | 
|  1662                      kDefaultPortAllocatorFlags); |  | 
|  1663   // Only configure one channel so we can control when the remote candidate |  | 
|  1664   // is added. |  | 
|  1665   GetEndpoint(0)->cd1_.ch_.reset( |  | 
|  1666       CreateChannel(0, ICE_CANDIDATE_COMPONENT_DEFAULT, kIceUfrag[0], |  | 
|  1667                     kIcePwd[0], kIceUfrag[1], kIcePwd[1])); |  | 
|  1668   IceConfig config; |  | 
|  1669   config.presume_writable_when_fully_relayed = true; |  | 
|  1670   ep1_ch1()->SetIceConfig(config); |  | 
|  1671   ep1_ch1()->MaybeStartGathering(); |  | 
|  1672   EXPECT_EQ_WAIT(IceGatheringState::kIceGatheringComplete, |  | 
|  1673                  ep1_ch1()->gathering_state(), kDefaultTimeout); |  | 
|  1674   // Add two remote candidates; a host candidate (with higher priority) |  | 
|  1675   // and TURN candidate. |  | 
|  1676   ep1_ch1()->AddRemoteCandidate( |  | 
|  1677       CreateUdpCandidate(LOCAL_PORT_TYPE, "1.1.1.1", 1, 100)); |  | 
|  1678   ep1_ch1()->AddRemoteCandidate( |  | 
|  1679       CreateUdpCandidate(RELAY_PORT_TYPE, "2.2.2.2", 2, 0)); |  | 
|  1680   // Expect that the TURN-TURN candidate pair will be prioritized since it's |  | 
|  1681   // "probably writable". |  | 
|  1682   EXPECT_TRUE(ep1_ch1()->best_connection() != nullptr); |  | 
|  1683   EXPECT_EQ(RELAY_PORT_TYPE, LocalCandidate(ep1_ch1())->type()); |  | 
|  1684   EXPECT_EQ(RELAY_PORT_TYPE, RemoteCandidate(ep1_ch1())->type()); |  | 
|  1685   // Also expect that the channel instantly indicates that it's writable since |  | 
|  1686   // it has a TURN-TURN pair. |  | 
|  1687   EXPECT_TRUE(ep1_ch1()->writable()); |  | 
|  1688   EXPECT_TRUE(GetEndpoint(0)->ready_to_send_); |  | 
|  1689 } |  | 
|  1690  |  | 
|  1691 // Test that a presumed-writable TURN<->TURN connection is preferred above an |  | 
|  1692 // unreliable connection (one that has failed to be pinged for some time). |  | 
|  1693 TEST_F(P2PTransportChannelTest, PresumedWritablePreferredOverUnreliable) { |  | 
|  1694   rtc::ScopedFakeClock fake_clock; |  | 
|  1695  |  | 
|  1696   ConfigureEndpoints(NAT_SYMMETRIC, NAT_SYMMETRIC, kDefaultPortAllocatorFlags, |  | 
|  1697                      kDefaultPortAllocatorFlags); |  | 
|  1698   IceConfig config; |  | 
|  1699   config.presume_writable_when_fully_relayed = true; |  | 
|  1700   GetEndpoint(0)->cd1_.ch_.reset( |  | 
|  1701       CreateChannel(0, ICE_CANDIDATE_COMPONENT_DEFAULT, kIceUfrag[0], |  | 
|  1702                     kIcePwd[0], kIceUfrag[1], kIcePwd[1])); |  | 
|  1703   GetEndpoint(1)->cd1_.ch_.reset( |  | 
|  1704       CreateChannel(1, ICE_CANDIDATE_COMPONENT_DEFAULT, kIceUfrag[1], |  | 
|  1705                     kIcePwd[1], kIceUfrag[0], kIcePwd[0])); |  | 
|  1706   ep1_ch1()->SetIceConfig(config); |  | 
|  1707   ep2_ch1()->SetIceConfig(config); |  | 
|  1708   ep1_ch1()->MaybeStartGathering(); |  | 
|  1709   ep2_ch1()->MaybeStartGathering(); |  | 
|  1710   // Wait for initial connection as usual. |  | 
|  1711   EXPECT_TRUE_SIMULATED_WAIT( |  | 
|  1712       ep1_ch1()->receiving() && ep1_ch1()->writable() && |  | 
|  1713           ep1_ch1()->best_connection()->writable() && ep2_ch1()->receiving() && |  | 
|  1714           ep2_ch1()->writable() && ep2_ch1()->best_connection()->writable(), |  | 
|  1715       1000, fake_clock); |  | 
|  1716   const Connection* old_best_connection = ep1_ch1()->best_connection(); |  | 
|  1717   // Destroy the second channel and wait for the current connection on the |  | 
|  1718   // first channel to become "unreliable", making it no longer writable. |  | 
|  1719   GetEndpoint(1)->cd1_.ch_.reset(); |  | 
|  1720   EXPECT_TRUE_SIMULATED_WAIT(!ep1_ch1()->writable(), 10000, fake_clock); |  | 
|  1721   EXPECT_NE(nullptr, ep1_ch1()->best_connection()); |  | 
|  1722   // Add a remote TURN candidate. The first channel should still have a TURN |  | 
|  1723   // port available to make a TURN<->TURN pair that's presumed writable. |  | 
|  1724   ep1_ch1()->AddRemoteCandidate( |  | 
|  1725       CreateUdpCandidate(RELAY_PORT_TYPE, "2.2.2.2", 2, 0)); |  | 
|  1726   EXPECT_EQ(RELAY_PORT_TYPE, LocalCandidate(ep1_ch1())->type()); |  | 
|  1727   EXPECT_EQ(RELAY_PORT_TYPE, RemoteCandidate(ep1_ch1())->type()); |  | 
|  1728   EXPECT_TRUE(ep1_ch1()->writable()); |  | 
|  1729   EXPECT_TRUE(GetEndpoint(0)->ready_to_send_); |  | 
|  1730   EXPECT_NE(old_best_connection, ep1_ch1()->best_connection()); |  | 
|  1731   // Explitly destroy channels, before fake clock is destroyed. |  | 
|  1732   DestroyChannels(); |  | 
|  1733 } |  | 
|  1734  |  | 
|  1735 // Test what happens when we have 2 users behind the same NAT. This can lead |  1633 // Test what happens when we have 2 users behind the same NAT. This can lead | 
|  1736 // to interesting behavior because the STUN server will only give out the |  1634 // to interesting behavior because the STUN server will only give out the | 
|  1737 // address of the outermost NAT. |  1635 // address of the outermost NAT. | 
|  1738 class P2PTransportChannelSameNatTest : public P2PTransportChannelTestBase { |  1636 class P2PTransportChannelSameNatTest : public P2PTransportChannelTestBase { | 
|  1739  protected: |  1637  protected: | 
|  1740   void ConfigureEndpoints(Config nat_type, Config config1, Config config2) { |  1638   void ConfigureEndpoints(Config nat_type, Config config1, Config config2) { | 
|  1741     ASSERT(nat_type >= NAT_FULL_CONE && nat_type <= NAT_SYMMETRIC); |  1639     ASSERT(nat_type >= NAT_FULL_CONE && nat_type <= NAT_SYMMETRIC); | 
|  1742     rtc::NATSocketServer::Translator* outer_nat = |  1640     rtc::NATSocketServer::Translator* outer_nat = | 
|  1743         nat()->AddTranslator(kPublicAddrs[0], kNatAddrs[0], |  1641         nat()->AddTranslator(kPublicAddrs[0], kNatAddrs[0], | 
|  1744             static_cast<rtc::NATType>(nat_type - NAT_FULL_CONE)); |  1642             static_cast<rtc::NATType>(nat_type - NAT_FULL_CONE)); | 
| (...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|  1800  |  1698  | 
|  1801   EXPECT_TRUE_WAIT_MARGIN(ep1_ch1()->receiving() && ep1_ch1()->writable() && |  1699   EXPECT_TRUE_WAIT_MARGIN(ep1_ch1()->receiving() && ep1_ch1()->writable() && | 
|  1802                               ep2_ch1()->receiving() && ep2_ch1()->writable(), |  1700                               ep2_ch1()->receiving() && ep2_ch1()->writable(), | 
|  1803                           1000, 1000); |  1701                           1000, 1000); | 
|  1804   EXPECT_TRUE( |  1702   EXPECT_TRUE( | 
|  1805       ep1_ch1()->best_connection() && ep2_ch1()->best_connection() && |  1703       ep1_ch1()->best_connection() && ep2_ch1()->best_connection() && | 
|  1806       LocalCandidate(ep1_ch1())->address().EqualIPs(kPublicAddrs[0]) && |  1704       LocalCandidate(ep1_ch1())->address().EqualIPs(kPublicAddrs[0]) && | 
|  1807       RemoteCandidate(ep1_ch1())->address().EqualIPs(kPublicAddrs[1])); |  1705       RemoteCandidate(ep1_ch1())->address().EqualIPs(kPublicAddrs[1])); | 
|  1808  |  1706  | 
|  1809   // Make the receiving timeout shorter for testing. |  1707   // Make the receiving timeout shorter for testing. | 
|  1810   IceConfig config = CreateIceConfig(1000, false); |  1708   cricket::IceConfig config = CreateIceConfig(1000, false); | 
|  1811   ep1_ch1()->SetIceConfig(config); |  1709   ep1_ch1()->SetIceConfig(config); | 
|  1812   ep2_ch1()->SetIceConfig(config); |  1710   ep2_ch1()->SetIceConfig(config); | 
|  1813  |  1711  | 
|  1814   // Blackhole any traffic to or from the public addrs. |  1712   // Blackhole any traffic to or from the public addrs. | 
|  1815   LOG(LS_INFO) << "Failing over..."; |  1713   LOG(LS_INFO) << "Failing over..."; | 
|  1816   fw()->AddRule(false, rtc::FP_ANY, rtc::FD_ANY, kPublicAddrs[1]); |  1714   fw()->AddRule(false, rtc::FP_ANY, rtc::FD_ANY, kPublicAddrs[1]); | 
|  1817   // The best connections will switch, so keep references to them. |  1715   // The best connections will switch, so keep references to them. | 
|  1818   const Connection* best_connection1 = ep1_ch1()->best_connection(); |  1716   const cricket::Connection* best_connection1 = ep1_ch1()->best_connection(); | 
|  1819   const Connection* best_connection2 = ep2_ch1()->best_connection(); |  1717   const cricket::Connection* best_connection2 = ep2_ch1()->best_connection(); | 
|  1820   // We should detect loss of receiving within 1 second or so. |  1718   // We should detect loss of receiving within 1 second or so. | 
|  1821   EXPECT_TRUE_WAIT( |  1719   EXPECT_TRUE_WAIT( | 
|  1822       !best_connection1->receiving() && !best_connection2->receiving(), 3000); |  1720       !best_connection1->receiving() && !best_connection2->receiving(), 3000); | 
|  1823  |  1721  | 
|  1824   // We should switch over to use the alternate addr immediately on both sides |  1722   // We should switch over to use the alternate addr immediately on both sides | 
|  1825   // when we are not receiving. |  1723   // when we are not receiving. | 
|  1826   EXPECT_TRUE_WAIT( |  1724   EXPECT_TRUE_WAIT( | 
|  1827       ep1_ch1()->best_connection()->receiving() && |  1725       ep1_ch1()->best_connection()->receiving() && | 
|  1828       ep2_ch1()->best_connection()->receiving(), 1000); |  1726       ep2_ch1()->best_connection()->receiving(), 1000); | 
|  1829   EXPECT_TRUE(LocalCandidate(ep1_ch1())->address().EqualIPs(kPublicAddrs[0])); |  1727   EXPECT_TRUE(LocalCandidate(ep1_ch1())->address().EqualIPs(kPublicAddrs[0])); | 
| (...skipping 22 matching lines...) Expand all  Loading... | 
|  1852   CreateChannels(1); |  1750   CreateChannels(1); | 
|  1853   EXPECT_TRUE_WAIT_MARGIN(ep1_ch1()->receiving() && ep1_ch1()->writable() && |  1751   EXPECT_TRUE_WAIT_MARGIN(ep1_ch1()->receiving() && ep1_ch1()->writable() && | 
|  1854                               ep2_ch1()->receiving() && ep2_ch1()->writable(), |  1752                               ep2_ch1()->receiving() && ep2_ch1()->writable(), | 
|  1855                           1000, 1000); |  1753                           1000, 1000); | 
|  1856   EXPECT_TRUE( |  1754   EXPECT_TRUE( | 
|  1857       ep1_ch1()->best_connection() && ep2_ch1()->best_connection() && |  1755       ep1_ch1()->best_connection() && ep2_ch1()->best_connection() && | 
|  1858       LocalCandidate(ep1_ch1())->address().EqualIPs(kPublicAddrs[0]) && |  1756       LocalCandidate(ep1_ch1())->address().EqualIPs(kPublicAddrs[0]) && | 
|  1859       RemoteCandidate(ep1_ch1())->address().EqualIPs(kPublicAddrs[1])); |  1757       RemoteCandidate(ep1_ch1())->address().EqualIPs(kPublicAddrs[1])); | 
|  1860  |  1758  | 
|  1861   // Make the receiving timeout shorter for testing. |  1759   // Make the receiving timeout shorter for testing. | 
|  1862   IceConfig config = CreateIceConfig(1000, false); |  1760   cricket::IceConfig config = CreateIceConfig(1000, false); | 
|  1863   ep1_ch1()->SetIceConfig(config); |  1761   ep1_ch1()->SetIceConfig(config); | 
|  1864   ep2_ch1()->SetIceConfig(config); |  1762   ep2_ch1()->SetIceConfig(config); | 
|  1865  |  1763  | 
|  1866   // Blackhole any traffic to or from the public addrs. |  1764   // Blackhole any traffic to or from the public addrs. | 
|  1867   LOG(LS_INFO) << "Failing over..."; |  1765   LOG(LS_INFO) << "Failing over..."; | 
|  1868   fw()->AddRule(false, rtc::FP_ANY, rtc::FD_ANY, kPublicAddrs[0]); |  1766   fw()->AddRule(false, rtc::FP_ANY, rtc::FD_ANY, kPublicAddrs[0]); | 
|  1869   // The best connections will switch, so keep references to them. |  1767   // The best connections will switch, so keep references to them. | 
|  1870   const Connection* best_connection1 = ep1_ch1()->best_connection(); |  1768   const cricket::Connection* best_connection1 = ep1_ch1()->best_connection(); | 
|  1871   const Connection* best_connection2 = ep2_ch1()->best_connection(); |  1769   const cricket::Connection* best_connection2 = ep2_ch1()->best_connection(); | 
|  1872   // We should detect loss of receiving within 1 second or so. |  1770   // We should detect loss of receiving within 1 second or so. | 
|  1873   EXPECT_TRUE_WAIT( |  1771   EXPECT_TRUE_WAIT( | 
|  1874       !best_connection1->receiving() && !best_connection2->receiving(), 3000); |  1772       !best_connection1->receiving() && !best_connection2->receiving(), 3000); | 
|  1875  |  1773  | 
|  1876   // We should switch over to use the alternate addr immediately on both sides |  1774   // We should switch over to use the alternate addr immediately on both sides | 
|  1877   // when we are not receiving. |  1775   // when we are not receiving. | 
|  1878   EXPECT_TRUE_WAIT( |  1776   EXPECT_TRUE_WAIT( | 
|  1879       ep1_ch1()->best_connection()->receiving() && |  1777       ep1_ch1()->best_connection()->receiving() && | 
|  1880       ep2_ch1()->best_connection()->receiving(), 1000); |  1778       ep2_ch1()->best_connection()->receiving(), 1000); | 
|  1881   EXPECT_TRUE( |  1779   EXPECT_TRUE( | 
| (...skipping 82 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|  1964  |  1862  | 
|  1965   // Create channels and let them go writable, as usual. |  1863   // Create channels and let them go writable, as usual. | 
|  1966   CreateChannels(1); |  1864   CreateChannels(1); | 
|  1967   EXPECT_TRUE_WAIT_MARGIN(ep1_ch1()->receiving() && ep1_ch1()->writable() && |  1865   EXPECT_TRUE_WAIT_MARGIN(ep1_ch1()->receiving() && ep1_ch1()->writable() && | 
|  1968                               ep2_ch1()->receiving() && ep2_ch1()->writable(), |  1866                               ep2_ch1()->receiving() && ep2_ch1()->writable(), | 
|  1969                           1000, 1000); |  1867                           1000, 1000); | 
|  1970   int backup_ping_interval = 2000; |  1868   int backup_ping_interval = 2000; | 
|  1971   ep2_ch1()->SetIceConfig(CreateIceConfig(2000, false, backup_ping_interval)); |  1869   ep2_ch1()->SetIceConfig(CreateIceConfig(2000, false, backup_ping_interval)); | 
|  1972   // After the state becomes COMPLETED, the backup connection will be pinged |  1870   // After the state becomes COMPLETED, the backup connection will be pinged | 
|  1973   // once every |backup_ping_interval| milliseconds. |  1871   // once every |backup_ping_interval| milliseconds. | 
|  1974   ASSERT_TRUE_WAIT(ep2_ch1()->GetState() == STATE_COMPLETED, 1000); |  1872   ASSERT_TRUE_WAIT(ep2_ch1()->GetState() == cricket::STATE_COMPLETED, 1000); | 
|  1975   const std::vector<Connection*>& connections = ep2_ch1()->connections(); |  1873   const std::vector<cricket::Connection*>& connections = | 
 |  1874       ep2_ch1()->connections(); | 
|  1976   ASSERT_EQ(2U, connections.size()); |  1875   ASSERT_EQ(2U, connections.size()); | 
|  1977   Connection* backup_conn = connections[1]; |  1876   cricket::Connection* backup_conn = connections[1]; | 
|  1978   EXPECT_TRUE_WAIT(backup_conn->writable(), 3000); |  1877   EXPECT_TRUE_WAIT(backup_conn->writable(), 3000); | 
|  1979   int64_t last_ping_response_ms = backup_conn->last_ping_response_received(); |  1878   int64_t last_ping_response_ms = backup_conn->last_ping_response_received(); | 
|  1980   EXPECT_TRUE_WAIT( |  1879   EXPECT_TRUE_WAIT( | 
|  1981       last_ping_response_ms < backup_conn->last_ping_response_received(), 5000); |  1880       last_ping_response_ms < backup_conn->last_ping_response_received(), 5000); | 
|  1982   int time_elapsed = |  1881   int time_elapsed = | 
|  1983       backup_conn->last_ping_response_received() - last_ping_response_ms; |  1882       backup_conn->last_ping_response_received() - last_ping_response_ms; | 
|  1984   LOG(LS_INFO) << "Time elapsed: " << time_elapsed; |  1883   LOG(LS_INFO) << "Time elapsed: " << time_elapsed; | 
|  1985   EXPECT_GE(time_elapsed, backup_ping_interval); |  1884   EXPECT_GE(time_elapsed, backup_ping_interval); | 
|  1986 } |  1885 } | 
|  1987  |  1886  | 
|  1988 TEST_F(P2PTransportChannelMultihomedTest, TestGetState) { |  1887 TEST_F(P2PTransportChannelMultihomedTest, TestGetState) { | 
|  1989   AddAddress(0, kAlternateAddrs[0]); |  1888   AddAddress(0, kAlternateAddrs[0]); | 
|  1990   AddAddress(0, kPublicAddrs[0]); |  1889   AddAddress(0, kPublicAddrs[0]); | 
|  1991   AddAddress(1, kPublicAddrs[1]); |  1890   AddAddress(1, kPublicAddrs[1]); | 
|  1992   // Create channels and let them go writable, as usual. |  1891   // Create channels and let them go writable, as usual. | 
|  1993   CreateChannels(1); |  1892   CreateChannels(1); | 
|  1994  |  1893  | 
|  1995   // Both transport channels will reach STATE_COMPLETED quickly. |  1894   // Both transport channels will reach STATE_COMPLETED quickly. | 
|  1996   EXPECT_EQ_WAIT(TransportChannelState::STATE_COMPLETED, ep1_ch1()->GetState(), |  1895   EXPECT_EQ_WAIT(cricket::TransportChannelState::STATE_COMPLETED, | 
|  1997                  1000); |  1896                  ep1_ch1()->GetState(), 1000); | 
|  1998   EXPECT_EQ_WAIT(TransportChannelState::STATE_COMPLETED, ep2_ch1()->GetState(), |  1897   EXPECT_EQ_WAIT(cricket::TransportChannelState::STATE_COMPLETED, | 
|  1999                  1000); |  1898                  ep2_ch1()->GetState(), 1000); | 
|  2000 } |  1899 } | 
|  2001  |  1900  | 
|  2002 // Tests that when a network interface becomes inactive, if and only if |  1901 // Tests that when a network interface becomes inactive, if and only if | 
|  2003 // Continual Gathering is enabled, the ports associated with that network |  1902 // Continual Gathering is enabled, the ports associated with that network | 
|  2004 // will be removed from the port list of the channel, and the respective |  1903 // will be removed from the port list of the channel, and the respective | 
|  2005 // remote candidates on the other participant will be removed eventually. |  1904 // remote candidates on the other participant will be removed eventually. | 
|  2006 TEST_F(P2PTransportChannelMultihomedTest, TestNetworkBecomesInactive) { |  1905 TEST_F(P2PTransportChannelMultihomedTest, TestNetworkBecomesInactive) { | 
|  2007   AddAddress(0, kPublicAddrs[0]); |  1906   AddAddress(0, kPublicAddrs[0]); | 
|  2008   AddAddress(1, kPublicAddrs[1]); |  1907   AddAddress(1, kPublicAddrs[1]); | 
|  2009   // Create channels and let them go writable, as usual. |  1908   // Create channels and let them go writable, as usual. | 
| (...skipping 78 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|  2088 // pings. |  1987 // pings. | 
|  2089 class P2PTransportChannelPingTest : public testing::Test, |  1988 class P2PTransportChannelPingTest : public testing::Test, | 
|  2090                                     public sigslot::has_slots<> { |  1989                                     public sigslot::has_slots<> { | 
|  2091  public: |  1990  public: | 
|  2092   P2PTransportChannelPingTest() |  1991   P2PTransportChannelPingTest() | 
|  2093       : pss_(new rtc::PhysicalSocketServer), |  1992       : pss_(new rtc::PhysicalSocketServer), | 
|  2094         vss_(new rtc::VirtualSocketServer(pss_.get())), |  1993         vss_(new rtc::VirtualSocketServer(pss_.get())), | 
|  2095         ss_scope_(vss_.get()) {} |  1994         ss_scope_(vss_.get()) {} | 
|  2096  |  1995  | 
|  2097  protected: |  1996  protected: | 
|  2098   void PrepareChannel(P2PTransportChannel* ch) { |  1997   void PrepareChannel(cricket::P2PTransportChannel* ch) { | 
|  2099     ch->SetIceRole(ICEROLE_CONTROLLING); |  1998     ch->SetIceRole(cricket::ICEROLE_CONTROLLING); | 
|  2100     ch->SetIceCredentials(kIceUfrag[0], kIcePwd[0]); |  1999     ch->SetIceCredentials(kIceUfrag[0], kIcePwd[0]); | 
|  2101     ch->SetRemoteIceCredentials(kIceUfrag[1], kIcePwd[1]); |  2000     ch->SetRemoteIceCredentials(kIceUfrag[1], kIcePwd[1]); | 
|  2102     ch->SignalSelectedCandidatePairChanged.connect( |  2001     ch->SignalSelectedCandidatePairChanged.connect( | 
|  2103         this, &P2PTransportChannelPingTest::OnSelectedCandidatePairChanged); |  2002         this, &P2PTransportChannelPingTest::OnSelectedCandidatePairChanged); | 
|  2104     ch->SignalReadyToSend.connect(this, |  2003     ch->SignalReadyToSend.connect(this, | 
|  2105                                   &P2PTransportChannelPingTest::OnReadyToSend); |  2004                                   &P2PTransportChannelPingTest::OnReadyToSend); | 
|  2106     ch->SignalStateChanged.connect( |  2005     ch->SignalStateChanged.connect( | 
|  2107         this, &P2PTransportChannelPingTest::OnChannelStateChanged); |  2006         this, &P2PTransportChannelPingTest::OnChannelStateChanged); | 
|  2108   } |  2007   } | 
|  2109  |  2008  | 
|  2110   Connection* WaitForConnectionTo(P2PTransportChannel* ch, |  2009   cricket::Candidate CreateHostCandidate(const std::string& ip, | 
|  2111                                   const std::string& ip, |  2010                                          int port, | 
|  2112                                   int port_num) { |  2011                                          int priority, | 
 |  2012                                          const std::string& ufrag = "") { | 
 |  2013     cricket::Candidate c; | 
 |  2014     c.set_address(rtc::SocketAddress(ip, port)); | 
 |  2015     c.set_component(1); | 
 |  2016     c.set_protocol(cricket::UDP_PROTOCOL_NAME); | 
 |  2017     c.set_priority(priority); | 
 |  2018     c.set_username(ufrag); | 
 |  2019     c.set_type(cricket::LOCAL_PORT_TYPE); | 
 |  2020     return c; | 
 |  2021   } | 
 |  2022  | 
 |  2023   cricket::Connection* WaitForConnectionTo(cricket::P2PTransportChannel* ch, | 
 |  2024                                            const std::string& ip, | 
 |  2025                                            int port_num) { | 
|  2113     EXPECT_TRUE_WAIT(GetConnectionTo(ch, ip, port_num) != nullptr, 3000); |  2026     EXPECT_TRUE_WAIT(GetConnectionTo(ch, ip, port_num) != nullptr, 3000); | 
|  2114     return GetConnectionTo(ch, ip, port_num); |  2027     return GetConnectionTo(ch, ip, port_num); | 
|  2115   } |  2028   } | 
|  2116  |  2029  | 
|  2117   Port* GetPort(P2PTransportChannel* ch) { |  2030   cricket::Port* GetPort(cricket::P2PTransportChannel* ch) { | 
|  2118     if (ch->ports().empty()) { |  2031     if (ch->ports().empty()) { | 
|  2119       return nullptr; |  2032       return nullptr; | 
|  2120     } |  2033     } | 
|  2121     return static_cast<Port*>(ch->ports()[0]); |  2034     return static_cast<cricket::Port*>(ch->ports()[0]); | 
|  2122   } |  2035   } | 
|  2123  |  2036  | 
|  2124   Connection* GetConnectionTo(P2PTransportChannel* ch, |  2037   cricket::Connection* GetConnectionTo(cricket::P2PTransportChannel* ch, | 
|  2125                               const std::string& ip, |  2038                                        const std::string& ip, | 
|  2126                               int port_num) { |  2039                                        int port_num) { | 
|  2127     Port* port = GetPort(ch); |  2040     cricket::Port* port = GetPort(ch); | 
|  2128     if (!port) { |  2041     if (!port) { | 
|  2129       return nullptr; |  2042       return nullptr; | 
|  2130     } |  2043     } | 
|  2131     return port->GetConnection(rtc::SocketAddress(ip, port_num)); |  2044     return port->GetConnection(rtc::SocketAddress(ip, port_num)); | 
|  2132   } |  2045   } | 
|  2133  |  2046  | 
|  2134   Connection* FindNextPingableConnectionAndPingIt(P2PTransportChannel* ch) { |  2047   cricket::Connection* FindNextPingableConnectionAndPingIt( | 
|  2135     Connection* conn = ch->FindNextPingableConnection(); |  2048       cricket::P2PTransportChannel* ch) { | 
 |  2049     cricket::Connection* conn = ch->FindNextPingableConnection(); | 
|  2136     if (conn) { |  2050     if (conn) { | 
|  2137       ch->MarkConnectionPinged(conn); |  2051       ch->MarkConnectionPinged(conn); | 
|  2138     } |  2052     } | 
|  2139     return conn; |  2053     return conn; | 
|  2140   } |  2054   } | 
|  2141  |  2055  | 
|  2142   int SendData(TransportChannel& channel, |  2056   int SendData(cricket::TransportChannel& channel, | 
|  2143                const char* data, |  2057                const char* data, | 
|  2144                size_t len, |  2058                size_t len, | 
|  2145                int packet_id) { |  2059                int packet_id) { | 
|  2146     rtc::PacketOptions options; |  2060     rtc::PacketOptions options; | 
|  2147     options.packet_id = packet_id; |  2061     options.packet_id = packet_id; | 
|  2148     return channel.SendPacket(data, len, options, 0); |  2062     return channel.SendPacket(data, len, options, 0); | 
|  2149   } |  2063   } | 
|  2150  |  2064  | 
|  2151   void OnSelectedCandidatePairChanged( |  2065   void OnSelectedCandidatePairChanged( | 
|  2152       TransportChannel* transport_channel, |  2066       cricket::TransportChannel* transport_channel, | 
|  2153       CandidatePairInterface* selected_candidate_pair, |  2067       cricket::CandidatePairInterface* selected_candidate_pair, | 
|  2154       int last_sent_packet_id) { |  2068       int last_sent_packet_id) { | 
|  2155     last_selected_candidate_pair_ = selected_candidate_pair; |  2069     last_selected_candidate_pair_ = selected_candidate_pair; | 
|  2156     last_sent_packet_id_ = last_sent_packet_id; |  2070     last_sent_packet_id_ = last_sent_packet_id; | 
|  2157   } |  2071   } | 
|  2158  |  2072  | 
|  2159   void ReceivePingOnConnection(Connection* conn, |  2073   void ReceivePingOnConnection(cricket::Connection* conn, | 
|  2160                                const std::string& remote_ufrag, |  2074                                const std::string& remote_ufrag, | 
|  2161                                int priority) { |  2075                                int priority) { | 
|  2162     IceMessage msg; |  2076     cricket::IceMessage msg; | 
|  2163     msg.SetType(STUN_BINDING_REQUEST); |  2077     msg.SetType(cricket::STUN_BINDING_REQUEST); | 
|  2164     msg.AddAttribute(new StunByteStringAttribute( |  2078     msg.AddAttribute(new cricket::StunByteStringAttribute( | 
|  2165         STUN_ATTR_USERNAME, |  2079         cricket::STUN_ATTR_USERNAME, | 
|  2166         conn->local_candidate().username() + ":" + remote_ufrag)); |  2080         conn->local_candidate().username() + ":" + remote_ufrag)); | 
|  2167     msg.AddAttribute(new StunUInt32Attribute(STUN_ATTR_PRIORITY, priority)); |  2081     msg.AddAttribute(new cricket::StunUInt32Attribute( | 
|  2168     msg.SetTransactionID(rtc::CreateRandomString(kStunTransactionIdLength)); |  2082         cricket::STUN_ATTR_PRIORITY, priority)); | 
 |  2083     msg.SetTransactionID( | 
 |  2084         rtc::CreateRandomString(cricket::kStunTransactionIdLength)); | 
|  2169     msg.AddMessageIntegrity(conn->local_candidate().password()); |  2085     msg.AddMessageIntegrity(conn->local_candidate().password()); | 
|  2170     msg.AddFingerprint(); |  2086     msg.AddFingerprint(); | 
|  2171     rtc::ByteBufferWriter buf; |  2087     rtc::ByteBufferWriter buf; | 
|  2172     msg.Write(&buf); |  2088     msg.Write(&buf); | 
|  2173     conn->OnReadPacket(buf.Data(), buf.Length(), rtc::CreatePacketTime(0)); |  2089     conn->OnReadPacket(buf.Data(), buf.Length(), rtc::CreatePacketTime(0)); | 
|  2174   } |  2090   } | 
|  2175  |  2091  | 
|  2176   void OnReadyToSend(TransportChannel* channel) { |  2092   void OnReadyToSend(cricket::TransportChannel* channel) { | 
|  2177     channel_ready_to_send_ = true; |  2093     channel_ready_to_send_ = true; | 
|  2178   } |  2094   } | 
|  2179   void OnChannelStateChanged(TransportChannelImpl* channel) { |  2095   void OnChannelStateChanged(cricket::TransportChannelImpl* channel) { | 
|  2180     channel_state_ = channel->GetState(); |  2096     channel_state_ = channel->GetState(); | 
|  2181   } |  2097   } | 
|  2182  |  2098  | 
|  2183   CandidatePairInterface* last_selected_candidate_pair() { |  2099   cricket::CandidatePairInterface* last_selected_candidate_pair() { | 
|  2184     return last_selected_candidate_pair_; |  2100     return last_selected_candidate_pair_; | 
|  2185   } |  2101   } | 
|  2186   int last_sent_packet_id() { return last_sent_packet_id_; } |  2102   int last_sent_packet_id() { return last_sent_packet_id_; } | 
|  2187   bool channel_ready_to_send() { return channel_ready_to_send_; } |  2103   bool channel_ready_to_send() { return channel_ready_to_send_; } | 
|  2188   void reset_channel_ready_to_send() { channel_ready_to_send_ = false; } |  2104   void reset_channel_ready_to_send() { channel_ready_to_send_ = false; } | 
|  2189   TransportChannelState channel_state() { return channel_state_; } |  2105   cricket::TransportChannelState channel_state() { return channel_state_; } | 
|  2190  |  2106  | 
|  2191  private: |  2107  private: | 
|  2192   std::unique_ptr<rtc::PhysicalSocketServer> pss_; |  2108   std::unique_ptr<rtc::PhysicalSocketServer> pss_; | 
|  2193   std::unique_ptr<rtc::VirtualSocketServer> vss_; |  2109   std::unique_ptr<rtc::VirtualSocketServer> vss_; | 
|  2194   rtc::SocketServerScope ss_scope_; |  2110   rtc::SocketServerScope ss_scope_; | 
|  2195   CandidatePairInterface* last_selected_candidate_pair_ = nullptr; |  2111   cricket::CandidatePairInterface* last_selected_candidate_pair_ = nullptr; | 
|  2196   int last_sent_packet_id_ = -1; |  2112   int last_sent_packet_id_ = -1; | 
|  2197   bool channel_ready_to_send_ = false; |  2113   bool channel_ready_to_send_ = false; | 
|  2198   TransportChannelState channel_state_ = STATE_INIT; |  2114   cricket::TransportChannelState channel_state_ = cricket::STATE_INIT; | 
|  2199 }; |  2115 }; | 
|  2200  |  2116  | 
|  2201 TEST_F(P2PTransportChannelPingTest, TestTriggeredChecks) { |  2117 TEST_F(P2PTransportChannelPingTest, TestTriggeredChecks) { | 
|  2202   FakePortAllocator pa(rtc::Thread::Current(), nullptr); |  2118   cricket::FakePortAllocator pa(rtc::Thread::Current(), nullptr); | 
|  2203   P2PTransportChannel ch("trigger checks", 1, &pa); |  2119   cricket::P2PTransportChannel ch("trigger checks", 1, &pa); | 
|  2204   PrepareChannel(&ch); |  2120   PrepareChannel(&ch); | 
|  2205   ch.Connect(); |  2121   ch.Connect(); | 
|  2206   ch.MaybeStartGathering(); |  2122   ch.MaybeStartGathering(); | 
|  2207   ch.AddRemoteCandidate(CreateUdpCandidate(LOCAL_PORT_TYPE, "1.1.1.1", 1, 1)); |  2123   ch.AddRemoteCandidate(CreateHostCandidate("1.1.1.1", 1, 1)); | 
|  2208   ch.AddRemoteCandidate(CreateUdpCandidate(LOCAL_PORT_TYPE, "2.2.2.2", 2, 2)); |  2124   ch.AddRemoteCandidate(CreateHostCandidate("2.2.2.2", 2, 2)); | 
|  2209  |  2125  | 
|  2210   Connection* conn1 = WaitForConnectionTo(&ch, "1.1.1.1", 1); |  2126   cricket::Connection* conn1 = WaitForConnectionTo(&ch, "1.1.1.1", 1); | 
|  2211   Connection* conn2 = WaitForConnectionTo(&ch, "2.2.2.2", 2); |  2127   cricket::Connection* conn2 = WaitForConnectionTo(&ch, "2.2.2.2", 2); | 
|  2212   ASSERT_TRUE(conn1 != nullptr); |  2128   ASSERT_TRUE(conn1 != nullptr); | 
|  2213   ASSERT_TRUE(conn2 != nullptr); |  2129   ASSERT_TRUE(conn2 != nullptr); | 
|  2214  |  2130  | 
|  2215   // Before a triggered check, the first connection to ping is the |  2131   // Before a triggered check, the first connection to ping is the | 
|  2216   // highest priority one. |  2132   // highest priority one. | 
|  2217   EXPECT_EQ(conn2, FindNextPingableConnectionAndPingIt(&ch)); |  2133   EXPECT_EQ(conn2, FindNextPingableConnectionAndPingIt(&ch)); | 
|  2218  |  2134  | 
|  2219   // Receiving a ping causes a triggered check which should make conn1 |  2135   // Receiving a ping causes a triggered check which should make conn1 | 
|  2220   // be pinged first instead of conn2, even though conn2 has a higher |  2136   // be pinged first instead of conn2, even though conn2 has a higher | 
|  2221   // priority. |  2137   // priority. | 
|  2222   conn1->ReceivedPing(); |  2138   conn1->ReceivedPing(); | 
|  2223   EXPECT_EQ(conn1, FindNextPingableConnectionAndPingIt(&ch)); |  2139   EXPECT_EQ(conn1, FindNextPingableConnectionAndPingIt(&ch)); | 
|  2224 } |  2140 } | 
|  2225  |  2141  | 
|  2226 TEST_F(P2PTransportChannelPingTest, TestAllConnectionsPingedSufficiently) { |  2142 TEST_F(P2PTransportChannelPingTest, TestAllConnectionsPingedSufficiently) { | 
|  2227   FakePortAllocator pa(rtc::Thread::Current(), nullptr); |  2143   cricket::FakePortAllocator pa(rtc::Thread::Current(), nullptr); | 
|  2228   P2PTransportChannel ch("ping sufficiently", 1, &pa); |  2144   cricket::P2PTransportChannel ch("ping sufficiently", 1, &pa); | 
|  2229   PrepareChannel(&ch); |  2145   PrepareChannel(&ch); | 
|  2230   ch.Connect(); |  2146   ch.Connect(); | 
|  2231   ch.MaybeStartGathering(); |  2147   ch.MaybeStartGathering(); | 
|  2232   ch.AddRemoteCandidate(CreateUdpCandidate(LOCAL_PORT_TYPE, "1.1.1.1", 1, 1)); |  2148   ch.AddRemoteCandidate(CreateHostCandidate("1.1.1.1", 1, 1)); | 
|  2233   ch.AddRemoteCandidate(CreateUdpCandidate(LOCAL_PORT_TYPE, "2.2.2.2", 2, 2)); |  2149   ch.AddRemoteCandidate(CreateHostCandidate("2.2.2.2", 2, 2)); | 
|  2234  |  2150  | 
|  2235   Connection* conn1 = WaitForConnectionTo(&ch, "1.1.1.1", 1); |  2151   cricket::Connection* conn1 = WaitForConnectionTo(&ch, "1.1.1.1", 1); | 
|  2236   Connection* conn2 = WaitForConnectionTo(&ch, "2.2.2.2", 2); |  2152   cricket::Connection* conn2 = WaitForConnectionTo(&ch, "2.2.2.2", 2); | 
|  2237   ASSERT_TRUE(conn1 != nullptr); |  2153   ASSERT_TRUE(conn1 != nullptr); | 
|  2238   ASSERT_TRUE(conn2 != nullptr); |  2154   ASSERT_TRUE(conn2 != nullptr); | 
|  2239  |  2155  | 
|  2240   // Low-priority connection becomes writable so that the other connection |  2156   // Low-priority connection becomes writable so that the other connection | 
|  2241   // is not pruned. |  2157   // is not pruned. | 
|  2242   conn1->ReceivedPingResponse(LOW_RTT); |  2158   conn1->ReceivedPingResponse(LOW_RTT); | 
|  2243   EXPECT_TRUE_WAIT( |  2159   EXPECT_TRUE_WAIT( | 
|  2244       conn1->num_pings_sent() >= MIN_PINGS_AT_WEAK_PING_INTERVAL && |  2160       conn1->num_pings_sent() >= MIN_PINGS_AT_WEAK_PING_INTERVAL && | 
|  2245           conn2->num_pings_sent() >= MIN_PINGS_AT_WEAK_PING_INTERVAL, |  2161           conn2->num_pings_sent() >= MIN_PINGS_AT_WEAK_PING_INTERVAL, | 
|  2246       kDefaultTimeout); |  2162       kDefaultTimeout); | 
|  2247 } |  2163 } | 
|  2248  |  2164  | 
|  2249 // Verify that the connections are pinged at the right time. |  2165 // Verify that the connections are pinged at the right time. | 
|  2250 TEST_F(P2PTransportChannelPingTest, TestStunPingIntervals) { |  2166 TEST_F(P2PTransportChannelPingTest, TestStunPingIntervals) { | 
|  2251   rtc::ScopedFakeClock clock; |  2167   rtc::ScopedFakeClock clock; | 
|  2252   int RTT_RATIO = 4; |  2168   int RTT_RATIO = 4; | 
|  2253   int SCHEDULING_RANGE = 200; |  2169   int SCHEDULING_RANGE = 200; | 
|  2254   int RTT_RANGE = 10; |  2170   int RTT_RANGE = 10; | 
|  2255  |  2171  | 
|  2256   FakePortAllocator pa(rtc::Thread::Current(), nullptr); |  2172   cricket::FakePortAllocator pa(rtc::Thread::Current(), nullptr); | 
|  2257   P2PTransportChannel ch("TestChannel", 1, &pa); |  2173   cricket::P2PTransportChannel ch("TestChannel", 1, &pa); | 
|  2258   PrepareChannel(&ch); |  2174   PrepareChannel(&ch); | 
|  2259   ch.Connect(); |  2175   ch.Connect(); | 
|  2260   ch.MaybeStartGathering(); |  2176   ch.MaybeStartGathering(); | 
|  2261   ch.AddRemoteCandidate(CreateUdpCandidate(LOCAL_PORT_TYPE, "1.1.1.1", 1, 1)); |  2177   ch.AddRemoteCandidate(CreateHostCandidate("1.1.1.1", 1, 1)); | 
|  2262   Connection* conn = WaitForConnectionTo(&ch, "1.1.1.1", 1); |  2178   cricket::Connection* conn = WaitForConnectionTo(&ch, "1.1.1.1", 1); | 
|  2263  |  2179  | 
|  2264   ASSERT_TRUE(conn != nullptr); |  2180   ASSERT_TRUE(conn != nullptr); | 
|  2265   SIMULATED_WAIT(conn->num_pings_sent() == 1, kDefaultTimeout, clock); |  2181   SIMULATED_WAIT(conn->num_pings_sent() == 1, kDefaultTimeout, clock); | 
|  2266  |  2182  | 
|  2267   // Initializing. |  2183   // Initializing. | 
|  2268  |  2184  | 
|  2269   int64_t start = clock.TimeNanos(); |  2185   int64_t start = clock.TimeNanos(); | 
|  2270   SIMULATED_WAIT(conn->num_pings_sent() >= MIN_PINGS_AT_WEAK_PING_INTERVAL, |  2186   SIMULATED_WAIT(conn->num_pings_sent() >= MIN_PINGS_AT_WEAK_PING_INTERVAL, | 
|  2271                  kDefaultTimeout, clock); |  2187                  kDefaultTimeout, clock); | 
|  2272   int64_t ping_interval_ms = (clock.TimeNanos() - start) / |  2188   int64_t ping_interval_ms = (clock.TimeNanos() - start) / | 
|  2273                              rtc::kNumNanosecsPerMillisec / |  2189                              rtc::kNumNanosecsPerMillisec / | 
|  2274                              (MIN_PINGS_AT_WEAK_PING_INTERVAL - 1); |  2190                              (MIN_PINGS_AT_WEAK_PING_INTERVAL - 1); | 
|  2275   EXPECT_EQ(ping_interval_ms, WEAK_PING_INTERVAL); |  2191   EXPECT_EQ(ping_interval_ms, cricket::WEAK_PING_INTERVAL); | 
|  2276  |  2192  | 
|  2277   // Stabilizing. |  2193   // Stabilizing. | 
|  2278  |  2194  | 
|  2279   conn->ReceivedPingResponse(LOW_RTT); |  2195   conn->ReceivedPingResponse(LOW_RTT); | 
|  2280   int ping_sent_before = conn->num_pings_sent(); |  2196   int ping_sent_before = conn->num_pings_sent(); | 
|  2281   start = clock.TimeNanos(); |  2197   start = clock.TimeNanos(); | 
|  2282   // The connection becomes strong but not stable because we haven't been able |  2198   // The connection becomes strong but not stable because we haven't been able | 
|  2283   // to converge the RTT. |  2199   // to converge the RTT. | 
|  2284   SIMULATED_WAIT(conn->num_pings_sent() == ping_sent_before + 1, 3000, clock); |  2200   SIMULATED_WAIT(conn->num_pings_sent() == ping_sent_before + 1, 3000, clock); | 
|  2285   ping_interval_ms = (clock.TimeNanos() - start) / rtc::kNumNanosecsPerMillisec; |  2201   ping_interval_ms = (clock.TimeNanos() - start) / rtc::kNumNanosecsPerMillisec; | 
|  2286   EXPECT_GE(ping_interval_ms, STABILIZING_WRITABLE_CONNECTION_PING_INTERVAL); |  2202   EXPECT_GE(ping_interval_ms, | 
 |  2203             cricket::STABILIZING_WRITABLE_CONNECTION_PING_INTERVAL); | 
|  2287   EXPECT_LE(ping_interval_ms, |  2204   EXPECT_LE(ping_interval_ms, | 
|  2288             STABILIZING_WRITABLE_CONNECTION_PING_INTERVAL + SCHEDULING_RANGE); |  2205             cricket::STABILIZING_WRITABLE_CONNECTION_PING_INTERVAL + | 
 |  2206                 SCHEDULING_RANGE); | 
|  2289  |  2207  | 
|  2290   // Stabilized. |  2208   // Stabilized. | 
|  2291  |  2209  | 
|  2292   // The connection becomes stable after receiving more than RTT_RATIO rtt |  2210   // The connection becomes stable after receiving more than RTT_RATIO rtt | 
|  2293   // samples. |  2211   // samples. | 
|  2294   for (int i = 0; i < RTT_RATIO; i++) { |  2212   for (int i = 0; i < RTT_RATIO; i++) { | 
|  2295     conn->ReceivedPingResponse(LOW_RTT); |  2213     conn->ReceivedPingResponse(LOW_RTT); | 
|  2296   } |  2214   } | 
|  2297   ping_sent_before = conn->num_pings_sent(); |  2215   ping_sent_before = conn->num_pings_sent(); | 
|  2298   start = clock.TimeNanos(); |  2216   start = clock.TimeNanos(); | 
|  2299   SIMULATED_WAIT(conn->num_pings_sent() == ping_sent_before + 1, 3000, clock); |  2217   SIMULATED_WAIT(conn->num_pings_sent() == ping_sent_before + 1, 3000, clock); | 
|  2300   ping_interval_ms = (clock.TimeNanos() - start) / rtc::kNumNanosecsPerMillisec; |  2218   ping_interval_ms = (clock.TimeNanos() - start) / rtc::kNumNanosecsPerMillisec; | 
|  2301   EXPECT_GE(ping_interval_ms, STABLE_WRITABLE_CONNECTION_PING_INTERVAL); |  2219   EXPECT_GE(ping_interval_ms, | 
|  2302   EXPECT_LE(ping_interval_ms, |  2220             cricket::STABLE_WRITABLE_CONNECTION_PING_INTERVAL); | 
|  2303             STABLE_WRITABLE_CONNECTION_PING_INTERVAL + SCHEDULING_RANGE); |  2221   EXPECT_LE( | 
 |  2222       ping_interval_ms, | 
 |  2223       cricket::STABLE_WRITABLE_CONNECTION_PING_INTERVAL + SCHEDULING_RANGE); | 
|  2304  |  2224  | 
|  2305   // Destabilized. |  2225   // Destabilized. | 
|  2306  |  2226  | 
|  2307   conn->ReceivedPingResponse(LOW_RTT); |  2227   conn->ReceivedPingResponse(LOW_RTT); | 
|  2308   // Create a in-flight ping. |  2228   // Create a in-flight ping. | 
|  2309   conn->Ping(clock.TimeNanos() / rtc::kNumNanosecsPerMillisec); |  2229   conn->Ping(clock.TimeNanos() / rtc::kNumNanosecsPerMillisec); | 
|  2310   start = clock.TimeNanos(); |  2230   start = clock.TimeNanos(); | 
|  2311   // In-flight ping timeout and the connection will be unstable. |  2231   // In-flight ping timeout and the connection will be unstable. | 
|  2312   SIMULATED_WAIT( |  2232   SIMULATED_WAIT( | 
|  2313       !conn->stable(clock.TimeNanos() / rtc::kNumNanosecsPerMillisec), 3000, |  2233       !conn->stable(clock.TimeNanos() / rtc::kNumNanosecsPerMillisec), 3000, | 
|  2314       clock); |  2234       clock); | 
|  2315   int64_t duration_ms = |  2235   int64_t duration_ms = | 
|  2316       (clock.TimeNanos() - start) / rtc::kNumNanosecsPerMillisec; |  2236       (clock.TimeNanos() - start) / rtc::kNumNanosecsPerMillisec; | 
|  2317   EXPECT_GE(duration_ms, 2 * conn->rtt() - RTT_RANGE); |  2237   EXPECT_GE(duration_ms, 2 * conn->rtt() - RTT_RANGE); | 
|  2318   EXPECT_LE(duration_ms, 2 * conn->rtt() + RTT_RANGE); |  2238   EXPECT_LE(duration_ms, 2 * conn->rtt() + RTT_RANGE); | 
|  2319   // The connection become unstable due to not receiving ping responses. |  2239   // The connection become unstable due to not receiving ping responses. | 
|  2320   ping_sent_before = conn->num_pings_sent(); |  2240   ping_sent_before = conn->num_pings_sent(); | 
|  2321   SIMULATED_WAIT(conn->num_pings_sent() == ping_sent_before + 1, 3000, clock); |  2241   SIMULATED_WAIT(conn->num_pings_sent() == ping_sent_before + 1, 3000, clock); | 
|  2322   // The interval is expected to be |  2242   // The interval is expected to be | 
|  2323   // STABILIZING_WRITABLE_CONNECTION_PING_INTERVAL. |  2243   // STABILIZING_WRITABLE_CONNECTION_PING_INTERVAL. | 
|  2324   start = clock.TimeNanos(); |  2244   start = clock.TimeNanos(); | 
|  2325   ping_sent_before = conn->num_pings_sent(); |  2245   ping_sent_before = conn->num_pings_sent(); | 
|  2326   SIMULATED_WAIT(conn->num_pings_sent() == ping_sent_before + 1, 3000, clock); |  2246   SIMULATED_WAIT(conn->num_pings_sent() == ping_sent_before + 1, 3000, clock); | 
|  2327   ping_interval_ms = (clock.TimeNanos() - start) / rtc::kNumNanosecsPerMillisec; |  2247   ping_interval_ms = (clock.TimeNanos() - start) / rtc::kNumNanosecsPerMillisec; | 
|  2328   EXPECT_GE(ping_interval_ms, STABILIZING_WRITABLE_CONNECTION_PING_INTERVAL); |  2248   EXPECT_GE(ping_interval_ms, | 
 |  2249             cricket::STABILIZING_WRITABLE_CONNECTION_PING_INTERVAL); | 
|  2329   EXPECT_LE(ping_interval_ms, |  2250   EXPECT_LE(ping_interval_ms, | 
|  2330             STABILIZING_WRITABLE_CONNECTION_PING_INTERVAL + SCHEDULING_RANGE); |  2251             cricket::STABILIZING_WRITABLE_CONNECTION_PING_INTERVAL + | 
 |  2252                 SCHEDULING_RANGE); | 
|  2331 } |  2253 } | 
|  2332  |  2254  | 
|  2333 TEST_F(P2PTransportChannelPingTest, TestNoTriggeredChecksWhenWritable) { |  2255 TEST_F(P2PTransportChannelPingTest, TestNoTriggeredChecksWhenWritable) { | 
|  2334   FakePortAllocator pa(rtc::Thread::Current(), nullptr); |  2256   cricket::FakePortAllocator pa(rtc::Thread::Current(), nullptr); | 
|  2335   P2PTransportChannel ch("trigger checks", 1, &pa); |  2257   cricket::P2PTransportChannel ch("trigger checks", 1, &pa); | 
|  2336   PrepareChannel(&ch); |  2258   PrepareChannel(&ch); | 
|  2337   ch.Connect(); |  2259   ch.Connect(); | 
|  2338   ch.MaybeStartGathering(); |  2260   ch.MaybeStartGathering(); | 
|  2339   ch.AddRemoteCandidate(CreateUdpCandidate(LOCAL_PORT_TYPE, "1.1.1.1", 1, 1)); |  2261   ch.AddRemoteCandidate(CreateHostCandidate("1.1.1.1", 1, 1)); | 
|  2340   ch.AddRemoteCandidate(CreateUdpCandidate(LOCAL_PORT_TYPE, "2.2.2.2", 2, 2)); |  2262   ch.AddRemoteCandidate(CreateHostCandidate("2.2.2.2", 2, 2)); | 
|  2341  |  2263  | 
|  2342   Connection* conn1 = WaitForConnectionTo(&ch, "1.1.1.1", 1); |  2264   cricket::Connection* conn1 = WaitForConnectionTo(&ch, "1.1.1.1", 1); | 
|  2343   Connection* conn2 = WaitForConnectionTo(&ch, "2.2.2.2", 2); |  2265   cricket::Connection* conn2 = WaitForConnectionTo(&ch, "2.2.2.2", 2); | 
|  2344   ASSERT_TRUE(conn1 != nullptr); |  2266   ASSERT_TRUE(conn1 != nullptr); | 
|  2345   ASSERT_TRUE(conn2 != nullptr); |  2267   ASSERT_TRUE(conn2 != nullptr); | 
|  2346  |  2268  | 
|  2347   EXPECT_EQ(conn2, FindNextPingableConnectionAndPingIt(&ch)); |  2269   EXPECT_EQ(conn2, FindNextPingableConnectionAndPingIt(&ch)); | 
|  2348   EXPECT_EQ(conn1, FindNextPingableConnectionAndPingIt(&ch)); |  2270   EXPECT_EQ(conn1, FindNextPingableConnectionAndPingIt(&ch)); | 
|  2349   conn1->ReceivedPingResponse(LOW_RTT); |  2271   conn1->ReceivedPingResponse(LOW_RTT); | 
|  2350   ASSERT_TRUE(conn1->writable()); |  2272   ASSERT_TRUE(conn1->writable()); | 
|  2351   conn1->ReceivedPing(); |  2273   conn1->ReceivedPing(); | 
|  2352  |  2274  | 
|  2353   // Ping received, but the connection is already writable, so no |  2275   // Ping received, but the connection is already writable, so no | 
|  2354   // "triggered check" and conn2 is pinged before conn1 because it has |  2276   // "triggered check" and conn2 is pinged before conn1 because it has | 
|  2355   // a higher priority. |  2277   // a higher priority. | 
|  2356   EXPECT_EQ(conn2, FindNextPingableConnectionAndPingIt(&ch)); |  2278   EXPECT_EQ(conn2, FindNextPingableConnectionAndPingIt(&ch)); | 
|  2357 } |  2279 } | 
|  2358  |  2280  | 
|  2359 TEST_F(P2PTransportChannelPingTest, TestSignalStateChanged) { |  2281 TEST_F(P2PTransportChannelPingTest, TestSignalStateChanged) { | 
|  2360   FakePortAllocator pa(rtc::Thread::Current(), nullptr); |  2282   cricket::FakePortAllocator pa(rtc::Thread::Current(), nullptr); | 
|  2361   P2PTransportChannel ch("state change", 1, &pa); |  2283   cricket::P2PTransportChannel ch("state change", 1, &pa); | 
|  2362   PrepareChannel(&ch); |  2284   PrepareChannel(&ch); | 
|  2363   ch.Connect(); |  2285   ch.Connect(); | 
|  2364   ch.MaybeStartGathering(); |  2286   ch.MaybeStartGathering(); | 
|  2365   ch.AddRemoteCandidate(CreateUdpCandidate(LOCAL_PORT_TYPE, "1.1.1.1", 1, 1)); |  2287   ch.AddRemoteCandidate(CreateHostCandidate("1.1.1.1", 1, 1)); | 
|  2366   Connection* conn1 = WaitForConnectionTo(&ch, "1.1.1.1", 1); |  2288   cricket::Connection* conn1 = WaitForConnectionTo(&ch, "1.1.1.1", 1); | 
|  2367   ASSERT_TRUE(conn1 != nullptr); |  2289   ASSERT_TRUE(conn1 != nullptr); | 
|  2368   // Pruning the connection reduces the set of active connections and changes |  2290   // Pruning the connection reduces the set of active connections and changes | 
|  2369   // the channel state. |  2291   // the channel state. | 
|  2370   conn1->Prune(); |  2292   conn1->Prune(); | 
|  2371   EXPECT_EQ_WAIT(STATE_FAILED, channel_state(), kDefaultTimeout); |  2293   EXPECT_EQ_WAIT(cricket::STATE_FAILED, channel_state(), kDefaultTimeout); | 
|  2372 } |  2294 } | 
|  2373  |  2295  | 
|  2374 // Test adding remote candidates with different ufrags. If a remote candidate |  2296 // Test adding remote candidates with different ufrags. If a remote candidate | 
|  2375 // is added with an old ufrag, it will be discarded. If it is added with a |  2297 // is added with an old ufrag, it will be discarded. If it is added with a | 
|  2376 // ufrag that was not seen before, it will be used to create connections |  2298 // ufrag that was not seen before, it will be used to create connections | 
|  2377 // although the ICE pwd in the remote candidate will be set when the ICE |  2299 // although the ICE pwd in the remote candidate will be set when the ICE | 
|  2378 // credentials arrive. If a remote candidate is added with the current ICE |  2300 // credentials arrive. If a remote candidate is added with the current ICE | 
|  2379 // ufrag, its pwd and generation will be set properly. |  2301 // ufrag, its pwd and generation will be set properly. | 
|  2380 TEST_F(P2PTransportChannelPingTest, TestAddRemoteCandidateWithVariousUfrags) { |  2302 TEST_F(P2PTransportChannelPingTest, TestAddRemoteCandidateWithVariousUfrags) { | 
|  2381   FakePortAllocator pa(rtc::Thread::Current(), nullptr); |  2303   cricket::FakePortAllocator pa(rtc::Thread::Current(), nullptr); | 
|  2382   P2PTransportChannel ch("add candidate", 1, &pa); |  2304   cricket::P2PTransportChannel ch("add candidate", 1, &pa); | 
|  2383   PrepareChannel(&ch); |  2305   PrepareChannel(&ch); | 
|  2384   ch.Connect(); |  2306   ch.Connect(); | 
|  2385   ch.MaybeStartGathering(); |  2307   ch.MaybeStartGathering(); | 
|  2386   // Add a candidate with a future ufrag. |  2308   // Add a candidate with a future ufrag. | 
|  2387   ch.AddRemoteCandidate( |  2309   ch.AddRemoteCandidate(CreateHostCandidate("1.1.1.1", 1, 1, kIceUfrag[2])); | 
|  2388       CreateUdpCandidate(LOCAL_PORT_TYPE, "1.1.1.1", 1, 1, kIceUfrag[2])); |  2310   cricket::Connection* conn1 = WaitForConnectionTo(&ch, "1.1.1.1", 1); | 
|  2389   Connection* conn1 = WaitForConnectionTo(&ch, "1.1.1.1", 1); |  | 
|  2390   ASSERT_TRUE(conn1 != nullptr); |  2311   ASSERT_TRUE(conn1 != nullptr); | 
|  2391   const Candidate& candidate = conn1->remote_candidate(); |  2312   const cricket::Candidate& candidate = conn1->remote_candidate(); | 
|  2392   EXPECT_EQ(kIceUfrag[2], candidate.username()); |  2313   EXPECT_EQ(kIceUfrag[2], candidate.username()); | 
|  2393   EXPECT_TRUE(candidate.password().empty()); |  2314   EXPECT_TRUE(candidate.password().empty()); | 
|  2394   EXPECT_TRUE(FindNextPingableConnectionAndPingIt(&ch) == nullptr); |  2315   EXPECT_TRUE(FindNextPingableConnectionAndPingIt(&ch) == nullptr); | 
|  2395  |  2316  | 
|  2396   // Set the remote credentials with the "future" ufrag. |  2317   // Set the remote credentials with the "future" ufrag. | 
|  2397   // This should set the ICE pwd in the remote candidate of |conn1|, making |  2318   // This should set the ICE pwd in the remote candidate of |conn1|, making | 
|  2398   // it pingable. |  2319   // it pingable. | 
|  2399   ch.SetRemoteIceCredentials(kIceUfrag[2], kIcePwd[2]); |  2320   ch.SetRemoteIceCredentials(kIceUfrag[2], kIcePwd[2]); | 
|  2400   EXPECT_EQ(kIceUfrag[2], candidate.username()); |  2321   EXPECT_EQ(kIceUfrag[2], candidate.username()); | 
|  2401   EXPECT_EQ(kIcePwd[2], candidate.password()); |  2322   EXPECT_EQ(kIcePwd[2], candidate.password()); | 
|  2402   EXPECT_EQ(conn1, FindNextPingableConnectionAndPingIt(&ch)); |  2323   EXPECT_EQ(conn1, FindNextPingableConnectionAndPingIt(&ch)); | 
|  2403  |  2324  | 
|  2404   // Add a candidate with an old ufrag. No connection will be created. |  2325   // Add a candidate with an old ufrag. No connection will be created. | 
|  2405   ch.AddRemoteCandidate( |  2326   ch.AddRemoteCandidate(CreateHostCandidate("2.2.2.2", 2, 2, kIceUfrag[1])); | 
|  2406       CreateUdpCandidate(LOCAL_PORT_TYPE, "2.2.2.2", 2, 2, kIceUfrag[1])); |  | 
|  2407   rtc::Thread::Current()->ProcessMessages(500); |  2327   rtc::Thread::Current()->ProcessMessages(500); | 
|  2408   EXPECT_TRUE(GetConnectionTo(&ch, "2.2.2.2", 2) == nullptr); |  2328   EXPECT_TRUE(GetConnectionTo(&ch, "2.2.2.2", 2) == nullptr); | 
|  2409  |  2329  | 
|  2410   // Add a candidate with the current ufrag, its pwd and generation will be |  2330   // Add a candidate with the current ufrag, its pwd and generation will be | 
|  2411   // assigned, even if the generation is not set. |  2331   // assigned, even if the generation is not set. | 
|  2412   ch.AddRemoteCandidate( |  2332   ch.AddRemoteCandidate(CreateHostCandidate("3.3.3.3", 3, 0, kIceUfrag[2])); | 
|  2413       CreateUdpCandidate(LOCAL_PORT_TYPE, "3.3.3.3", 3, 0, kIceUfrag[2])); |  2333   cricket::Connection* conn3 = nullptr; | 
|  2414   Connection* conn3 = nullptr; |  | 
|  2415   ASSERT_TRUE_WAIT((conn3 = GetConnectionTo(&ch, "3.3.3.3", 3)) != nullptr, |  2334   ASSERT_TRUE_WAIT((conn3 = GetConnectionTo(&ch, "3.3.3.3", 3)) != nullptr, | 
|  2416                    3000); |  2335                    3000); | 
|  2417   const Candidate& new_candidate = conn3->remote_candidate(); |  2336   const cricket::Candidate& new_candidate = conn3->remote_candidate(); | 
|  2418   EXPECT_EQ(kIcePwd[2], new_candidate.password()); |  2337   EXPECT_EQ(kIcePwd[2], new_candidate.password()); | 
|  2419   EXPECT_EQ(1U, new_candidate.generation()); |  2338   EXPECT_EQ(1U, new_candidate.generation()); | 
|  2420  |  2339  | 
|  2421   // Check that the pwd of all remote candidates are properly assigned. |  2340   // Check that the pwd of all remote candidates are properly assigned. | 
|  2422   for (const RemoteCandidate& candidate : ch.remote_candidates()) { |  2341   for (const cricket::RemoteCandidate& candidate : ch.remote_candidates()) { | 
|  2423     EXPECT_TRUE(candidate.username() == kIceUfrag[1] || |  2342     EXPECT_TRUE(candidate.username() == kIceUfrag[1] || | 
|  2424                 candidate.username() == kIceUfrag[2]); |  2343                 candidate.username() == kIceUfrag[2]); | 
|  2425     if (candidate.username() == kIceUfrag[1]) { |  2344     if (candidate.username() == kIceUfrag[1]) { | 
|  2426       EXPECT_EQ(kIcePwd[1], candidate.password()); |  2345       EXPECT_EQ(kIcePwd[1], candidate.password()); | 
|  2427     } else if (candidate.username() == kIceUfrag[2]) { |  2346     } else if (candidate.username() == kIceUfrag[2]) { | 
|  2428       EXPECT_EQ(kIcePwd[2], candidate.password()); |  2347       EXPECT_EQ(kIcePwd[2], candidate.password()); | 
|  2429     } |  2348     } | 
|  2430   } |  2349   } | 
|  2431 } |  2350 } | 
|  2432  |  2351  | 
|  2433 TEST_F(P2PTransportChannelPingTest, ConnectionResurrection) { |  2352 TEST_F(P2PTransportChannelPingTest, ConnectionResurrection) { | 
|  2434   FakePortAllocator pa(rtc::Thread::Current(), nullptr); |  2353   cricket::FakePortAllocator pa(rtc::Thread::Current(), nullptr); | 
|  2435   P2PTransportChannel ch("connection resurrection", 1, &pa); |  2354   cricket::P2PTransportChannel ch("connection resurrection", 1, &pa); | 
|  2436   PrepareChannel(&ch); |  2355   PrepareChannel(&ch); | 
|  2437   ch.Connect(); |  2356   ch.Connect(); | 
|  2438   ch.MaybeStartGathering(); |  2357   ch.MaybeStartGathering(); | 
|  2439  |  2358  | 
|  2440   // Create conn1 and keep track of original candidate priority. |  2359   // Create conn1 and keep track of original candidate priority. | 
|  2441   ch.AddRemoteCandidate(CreateUdpCandidate(LOCAL_PORT_TYPE, "1.1.1.1", 1, 1)); |  2360   ch.AddRemoteCandidate(CreateHostCandidate("1.1.1.1", 1, 1)); | 
|  2442   Connection* conn1 = WaitForConnectionTo(&ch, "1.1.1.1", 1); |  2361   cricket::Connection* conn1 = WaitForConnectionTo(&ch, "1.1.1.1", 1); | 
|  2443   ASSERT_TRUE(conn1 != nullptr); |  2362   ASSERT_TRUE(conn1 != nullptr); | 
|  2444   uint32_t remote_priority = conn1->remote_candidate().priority(); |  2363   uint32_t remote_priority = conn1->remote_candidate().priority(); | 
|  2445  |  2364  | 
|  2446   // Create a higher priority candidate and make the connection |  2365   // Create a higher priority candidate and make the connection | 
|  2447   // receiving/writable. This will prune conn1. |  2366   // receiving/writable. This will prune conn1. | 
|  2448   ch.AddRemoteCandidate(CreateUdpCandidate(LOCAL_PORT_TYPE, "2.2.2.2", 2, 2)); |  2367   ch.AddRemoteCandidate(CreateHostCandidate("2.2.2.2", 2, 2)); | 
|  2449   Connection* conn2 = WaitForConnectionTo(&ch, "2.2.2.2", 2); |  2368   cricket::Connection* conn2 = WaitForConnectionTo(&ch, "2.2.2.2", 2); | 
|  2450   ASSERT_TRUE(conn2 != nullptr); |  2369   ASSERT_TRUE(conn2 != nullptr); | 
|  2451   conn2->ReceivedPing(); |  2370   conn2->ReceivedPing(); | 
|  2452   conn2->ReceivedPingResponse(LOW_RTT); |  2371   conn2->ReceivedPingResponse(LOW_RTT); | 
|  2453  |  2372  | 
|  2454   // Wait for conn1 to be pruned. |  2373   // Wait for conn1 to be pruned. | 
|  2455   EXPECT_TRUE_WAIT(conn1->pruned(), 3000); |  2374   EXPECT_TRUE_WAIT(conn1->pruned(), 3000); | 
|  2456   // Destroy the connection to test SignalUnknownAddress. |  2375   // Destroy the connection to test SignalUnknownAddress. | 
|  2457   conn1->Destroy(); |  2376   conn1->Destroy(); | 
|  2458   EXPECT_TRUE_WAIT(GetConnectionTo(&ch, "1.1.1.1", 1) == nullptr, 1000); |  2377   EXPECT_TRUE_WAIT(GetConnectionTo(&ch, "1.1.1.1", 1) == nullptr, 1000); | 
|  2459  |  2378  | 
|  2460   // Create a minimal STUN message with prflx priority. |  2379   // Create a minimal STUN message with prflx priority. | 
|  2461   IceMessage request; |  2380   cricket::IceMessage request; | 
|  2462   request.SetType(STUN_BINDING_REQUEST); |  2381   request.SetType(cricket::STUN_BINDING_REQUEST); | 
|  2463   request.AddAttribute( |  2382   request.AddAttribute(new cricket::StunByteStringAttribute( | 
|  2464       new StunByteStringAttribute(STUN_ATTR_USERNAME, kIceUfrag[1])); |  2383       cricket::STUN_ATTR_USERNAME, kIceUfrag[1])); | 
|  2465   uint32_t prflx_priority = ICE_TYPE_PREFERENCE_PRFLX << 24; |  2384   uint32_t prflx_priority = cricket::ICE_TYPE_PREFERENCE_PRFLX << 24; | 
|  2466   request.AddAttribute( |  2385   request.AddAttribute(new cricket::StunUInt32Attribute( | 
|  2467       new StunUInt32Attribute(STUN_ATTR_PRIORITY, prflx_priority)); |  2386       cricket::STUN_ATTR_PRIORITY, prflx_priority)); | 
|  2468   EXPECT_NE(prflx_priority, remote_priority); |  2387   EXPECT_NE(prflx_priority, remote_priority); | 
|  2469  |  2388  | 
|  2470   Port* port = GetPort(&ch); |  2389   cricket::Port* port = GetPort(&ch); | 
|  2471   // conn1 should be resurrected with original priority. |  2390   // conn1 should be resurrected with original priority. | 
|  2472   port->SignalUnknownAddress(port, rtc::SocketAddress("1.1.1.1", 1), PROTO_UDP, |  2391   port->SignalUnknownAddress(port, rtc::SocketAddress("1.1.1.1", 1), | 
|  2473                              &request, kIceUfrag[1], false); |  2392                              cricket::PROTO_UDP, &request, kIceUfrag[1], false); | 
|  2474   conn1 = WaitForConnectionTo(&ch, "1.1.1.1", 1); |  2393   conn1 = WaitForConnectionTo(&ch, "1.1.1.1", 1); | 
|  2475   ASSERT_TRUE(conn1 != nullptr); |  2394   ASSERT_TRUE(conn1 != nullptr); | 
|  2476   EXPECT_EQ(conn1->remote_candidate().priority(), remote_priority); |  2395   EXPECT_EQ(conn1->remote_candidate().priority(), remote_priority); | 
|  2477  |  2396  | 
|  2478   // conn3, a real prflx connection, should have prflx priority. |  2397   // conn3, a real prflx connection, should have prflx priority. | 
|  2479   port->SignalUnknownAddress(port, rtc::SocketAddress("3.3.3.3", 1), PROTO_UDP, |  2398   port->SignalUnknownAddress(port, rtc::SocketAddress("3.3.3.3", 1), | 
|  2480                              &request, kIceUfrag[1], false); |  2399                              cricket::PROTO_UDP, &request, kIceUfrag[1], false); | 
|  2481   Connection* conn3 = WaitForConnectionTo(&ch, "3.3.3.3", 1); |  2400   cricket::Connection* conn3 = WaitForConnectionTo(&ch, "3.3.3.3", 1); | 
|  2482   ASSERT_TRUE(conn3 != nullptr); |  2401   ASSERT_TRUE(conn3 != nullptr); | 
|  2483   EXPECT_EQ(conn3->remote_candidate().priority(), prflx_priority); |  2402   EXPECT_EQ(conn3->remote_candidate().priority(), prflx_priority); | 
|  2484 } |  2403 } | 
|  2485  |  2404  | 
|  2486 TEST_F(P2PTransportChannelPingTest, TestReceivingStateChange) { |  2405 TEST_F(P2PTransportChannelPingTest, TestReceivingStateChange) { | 
|  2487   FakePortAllocator pa(rtc::Thread::Current(), nullptr); |  2406   cricket::FakePortAllocator pa(rtc::Thread::Current(), nullptr); | 
|  2488   P2PTransportChannel ch("receiving state change", 1, &pa); |  2407   cricket::P2PTransportChannel ch("receiving state change", 1, &pa); | 
|  2489   PrepareChannel(&ch); |  2408   PrepareChannel(&ch); | 
|  2490   // Default receiving timeout and checking receiving interval should not be too |  2409   // Default receiving timeout and checking receiving interval should not be too | 
|  2491   // small. |  2410   // small. | 
|  2492   EXPECT_LE(1000, ch.receiving_timeout()); |  2411   EXPECT_LE(1000, ch.receiving_timeout()); | 
|  2493   EXPECT_LE(200, ch.check_receiving_interval()); |  2412   EXPECT_LE(200, ch.check_receiving_interval()); | 
|  2494   ch.SetIceConfig(CreateIceConfig(500, false)); |  2413   ch.SetIceConfig(CreateIceConfig(500, false)); | 
|  2495   EXPECT_EQ(500, ch.receiving_timeout()); |  2414   EXPECT_EQ(500, ch.receiving_timeout()); | 
|  2496   EXPECT_EQ(50, ch.check_receiving_interval()); |  2415   EXPECT_EQ(50, ch.check_receiving_interval()); | 
|  2497   ch.Connect(); |  2416   ch.Connect(); | 
|  2498   ch.MaybeStartGathering(); |  2417   ch.MaybeStartGathering(); | 
|  2499   ch.AddRemoteCandidate(CreateUdpCandidate(LOCAL_PORT_TYPE, "1.1.1.1", 1, 1)); |  2418   ch.AddRemoteCandidate(CreateHostCandidate("1.1.1.1", 1, 1)); | 
|  2500   Connection* conn1 = WaitForConnectionTo(&ch, "1.1.1.1", 1); |  2419   cricket::Connection* conn1 = WaitForConnectionTo(&ch, "1.1.1.1", 1); | 
|  2501   ASSERT_TRUE(conn1 != nullptr); |  2420   ASSERT_TRUE(conn1 != nullptr); | 
|  2502  |  2421  | 
|  2503   conn1->ReceivedPing(); |  2422   conn1->ReceivedPing(); | 
|  2504   conn1->OnReadPacket("ABC", 3, rtc::CreatePacketTime(0)); |  2423   conn1->OnReadPacket("ABC", 3, rtc::CreatePacketTime(0)); | 
|  2505   EXPECT_TRUE_WAIT(ch.best_connection() != nullptr, 1000); |  2424   EXPECT_TRUE_WAIT(ch.best_connection() != nullptr, 1000); | 
|  2506   EXPECT_TRUE_WAIT(ch.receiving(), 1000); |  2425   EXPECT_TRUE_WAIT(ch.receiving(), 1000); | 
|  2507   EXPECT_TRUE_WAIT(!ch.receiving(), 1000); |  2426   EXPECT_TRUE_WAIT(!ch.receiving(), 1000); | 
|  2508 } |  2427 } | 
|  2509  |  2428  | 
|  2510 // The controlled side will select a connection as the "best connection" based |  2429 // The controlled side will select a connection as the "best connection" based | 
|  2511 // on priority until the controlling side nominates a connection, at which |  2430 // on priority until the controlling side nominates a connection, at which | 
|  2512 // point the controlled side will select that connection as the |  2431 // point the controlled side will select that connection as the | 
|  2513 // "best connection". Plus, SignalSelectedCandidatePair will be fired if the |  2432 // "best connection". Plus, SignalSelectedCandidatePair will be fired if the | 
|  2514 // best connection changes and SignalReadyToSend will be fired if the new best |  2433 // best connection changes and SignalReadyToSend will be fired if the new best | 
|  2515 // connection is writable. |  2434 // connection is writable. | 
|  2516 TEST_F(P2PTransportChannelPingTest, TestSelectConnectionBeforeNomination) { |  2435 TEST_F(P2PTransportChannelPingTest, TestSelectConnectionBeforeNomination) { | 
|  2517   FakePortAllocator pa(rtc::Thread::Current(), nullptr); |  2436   cricket::FakePortAllocator pa(rtc::Thread::Current(), nullptr); | 
|  2518   P2PTransportChannel ch("receiving state change", 1, &pa); |  2437   cricket::P2PTransportChannel ch("receiving state change", 1, &pa); | 
|  2519   PrepareChannel(&ch); |  2438   PrepareChannel(&ch); | 
|  2520   ch.SetIceRole(ICEROLE_CONTROLLED); |  2439   ch.SetIceRole(cricket::ICEROLE_CONTROLLED); | 
|  2521   ch.Connect(); |  2440   ch.Connect(); | 
|  2522   ch.MaybeStartGathering(); |  2441   ch.MaybeStartGathering(); | 
|  2523   ch.AddRemoteCandidate(CreateUdpCandidate(LOCAL_PORT_TYPE, "1.1.1.1", 1, 1)); |  2442   ch.AddRemoteCandidate(CreateHostCandidate("1.1.1.1", 1, 1)); | 
|  2524   Connection* conn1 = WaitForConnectionTo(&ch, "1.1.1.1", 1); |  2443   cricket::Connection* conn1 = WaitForConnectionTo(&ch, "1.1.1.1", 1); | 
|  2525   ASSERT_TRUE(conn1 != nullptr); |  2444   ASSERT_TRUE(conn1 != nullptr); | 
|  2526   EXPECT_EQ(conn1, ch.best_connection()); |  2445   EXPECT_EQ(conn1, ch.best_connection()); | 
|  2527   EXPECT_EQ(conn1, last_selected_candidate_pair()); |  2446   EXPECT_EQ(conn1, last_selected_candidate_pair()); | 
|  2528   EXPECT_EQ(-1, last_sent_packet_id()); |  2447   EXPECT_EQ(-1, last_sent_packet_id()); | 
|  2529   // Channel is not ready to send because it is not writable. |  2448   // Channel is not ready to send because it is not writable. | 
|  2530   EXPECT_FALSE(channel_ready_to_send()); |  2449   EXPECT_FALSE(channel_ready_to_send()); | 
|  2531  |  2450  | 
|  2532   int last_packet_id = 0; |  2451   int last_packet_id = 0; | 
|  2533   const char* data = "ABCDEFGH"; |  2452   const char* data = "ABCDEFGH"; | 
|  2534   int len = static_cast<int>(strlen(data)); |  2453   int len = static_cast<int>(strlen(data)); | 
|  2535   SendData(ch, data, len, ++last_packet_id); |  2454   SendData(ch, data, len, ++last_packet_id); | 
|  2536   // When a higher priority candidate comes in, the new connection is chosen |  2455   // When a higher priority candidate comes in, the new connection is chosen | 
|  2537   // as the best connection. |  2456   // as the best connection. | 
|  2538   ch.AddRemoteCandidate(CreateUdpCandidate(LOCAL_PORT_TYPE, "2.2.2.2", 2, 10)); |  2457   ch.AddRemoteCandidate(CreateHostCandidate("2.2.2.2", 2, 10)); | 
|  2539   Connection* conn2 = WaitForConnectionTo(&ch, "2.2.2.2", 2); |  2458   cricket::Connection* conn2 = WaitForConnectionTo(&ch, "2.2.2.2", 2); | 
|  2540   ASSERT_TRUE(conn2 != nullptr); |  2459   ASSERT_TRUE(conn2 != nullptr); | 
|  2541   EXPECT_EQ(conn2, ch.best_connection()); |  2460   EXPECT_EQ(conn2, ch.best_connection()); | 
|  2542   EXPECT_EQ(conn2, last_selected_candidate_pair()); |  2461   EXPECT_EQ(conn2, last_selected_candidate_pair()); | 
|  2543   EXPECT_EQ(last_packet_id, last_sent_packet_id()); |  2462   EXPECT_EQ(last_packet_id, last_sent_packet_id()); | 
|  2544   EXPECT_FALSE(channel_ready_to_send()); |  2463   EXPECT_FALSE(channel_ready_to_send()); | 
|  2545  |  2464  | 
|  2546   // If a stun request with use-candidate attribute arrives, the receiving |  2465   // If a stun request with use-candidate attribute arrives, the receiving | 
|  2547   // connection will be set as the best connection, even though |  2466   // connection will be set as the best connection, even though | 
|  2548   // its priority is lower. |  2467   // its priority is lower. | 
|  2549   SendData(ch, data, len, ++last_packet_id); |  2468   SendData(ch, data, len, ++last_packet_id); | 
|  2550   ch.AddRemoteCandidate(CreateUdpCandidate(LOCAL_PORT_TYPE, "3.3.3.3", 3, 1)); |  2469   ch.AddRemoteCandidate(CreateHostCandidate("3.3.3.3", 3, 1)); | 
|  2551   Connection* conn3 = WaitForConnectionTo(&ch, "3.3.3.3", 3); |  2470   cricket::Connection* conn3 = WaitForConnectionTo(&ch, "3.3.3.3", 3); | 
|  2552   ASSERT_TRUE(conn3 != nullptr); |  2471   ASSERT_TRUE(conn3 != nullptr); | 
|  2553   // Because it has a lower priority, the best connection is still conn2. |  2472   // Because it has a lower priority, the best connection is still conn2. | 
|  2554   EXPECT_EQ(conn2, ch.best_connection()); |  2473   EXPECT_EQ(conn2, ch.best_connection()); | 
|  2555   conn3->ReceivedPingResponse(LOW_RTT);  // Become writable. |  2474   conn3->ReceivedPingResponse(LOW_RTT);  // Become writable. | 
|  2556   // But if it is nominated via use_candidate, it is chosen as the best |  2475   // But if it is nominated via use_candidate, it is chosen as the best | 
|  2557   // connection. |  2476   // connection. | 
|  2558   conn3->set_nominated(true); |  2477   conn3->set_nominated(true); | 
|  2559   conn3->SignalNominated(conn3); |  2478   conn3->SignalNominated(conn3); | 
|  2560   EXPECT_EQ(conn3, ch.best_connection()); |  2479   EXPECT_EQ(conn3, ch.best_connection()); | 
|  2561   EXPECT_EQ(conn3, last_selected_candidate_pair()); |  2480   EXPECT_EQ(conn3, last_selected_candidate_pair()); | 
|  2562   EXPECT_EQ(last_packet_id, last_sent_packet_id()); |  2481   EXPECT_EQ(last_packet_id, last_sent_packet_id()); | 
|  2563   EXPECT_TRUE(channel_ready_to_send()); |  2482   EXPECT_TRUE(channel_ready_to_send()); | 
|  2564  |  2483  | 
|  2565   // Even if another higher priority candidate arrives, |  2484   // Even if another higher priority candidate arrives, | 
|  2566   // it will not be set as the best connection because the best connection |  2485   // it will not be set as the best connection because the best connection | 
|  2567   // is nominated by the controlling side. |  2486   // is nominated by the controlling side. | 
|  2568   SendData(ch, data, len, ++last_packet_id); |  2487   SendData(ch, data, len, ++last_packet_id); | 
|  2569   ch.AddRemoteCandidate(CreateUdpCandidate(LOCAL_PORT_TYPE, "4.4.4.4", 4, 100)); |  2488   ch.AddRemoteCandidate(CreateHostCandidate("4.4.4.4", 4, 100)); | 
|  2570   Connection* conn4 = WaitForConnectionTo(&ch, "4.4.4.4", 4); |  2489   cricket::Connection* conn4 = WaitForConnectionTo(&ch, "4.4.4.4", 4); | 
|  2571   ASSERT_TRUE(conn4 != nullptr); |  2490   ASSERT_TRUE(conn4 != nullptr); | 
|  2572   EXPECT_EQ(conn3, ch.best_connection()); |  2491   EXPECT_EQ(conn3, ch.best_connection()); | 
|  2573   // But if it is nominated via use_candidate and writable, it will be set as |  2492   // But if it is nominated via use_candidate and writable, it will be set as | 
|  2574   // the best connection. |  2493   // the best connection. | 
|  2575   conn4->set_nominated(true); |  2494   conn4->set_nominated(true); | 
|  2576   conn4->SignalNominated(conn4); |  2495   conn4->SignalNominated(conn4); | 
|  2577   // Not switched yet because conn4 is not writable. |  2496   // Not switched yet because conn4 is not writable. | 
|  2578   EXPECT_EQ(conn3, ch.best_connection()); |  2497   EXPECT_EQ(conn3, ch.best_connection()); | 
|  2579   reset_channel_ready_to_send(); |  2498   reset_channel_ready_to_send(); | 
|  2580   // The best connection switches after conn4 becomes writable. |  2499   // The best connection switches after conn4 becomes writable. | 
|  2581   conn4->ReceivedPingResponse(LOW_RTT); |  2500   conn4->ReceivedPingResponse(LOW_RTT); | 
|  2582   EXPECT_EQ(conn4, ch.best_connection()); |  2501   EXPECT_EQ(conn4, ch.best_connection()); | 
|  2583   EXPECT_EQ(conn4, last_selected_candidate_pair()); |  2502   EXPECT_EQ(conn4, last_selected_candidate_pair()); | 
|  2584   EXPECT_EQ(last_packet_id, last_sent_packet_id()); |  2503   EXPECT_EQ(last_packet_id, last_sent_packet_id()); | 
|  2585   // SignalReadyToSend is fired again because conn4 is writable. |  2504   // SignalReadyToSend is fired again because conn4 is writable. | 
|  2586   EXPECT_TRUE(channel_ready_to_send()); |  2505   EXPECT_TRUE(channel_ready_to_send()); | 
|  2587 } |  2506 } | 
|  2588  |  2507  | 
|  2589 // The controlled side will select a connection as the "best connection" based |  2508 // The controlled side will select a connection as the "best connection" based | 
|  2590 // on requests from an unknown address before the controlling side nominates |  2509 // on requests from an unknown address before the controlling side nominates | 
|  2591 // a connection, and will nominate a connection from an unknown address if the |  2510 // a connection, and will nominate a connection from an unknown address if the | 
|  2592 // request contains the use_candidate attribute. Plus, it will also sends back |  2511 // request contains the use_candidate attribute. Plus, it will also sends back | 
|  2593 // a ping response and set the ICE pwd in the remote candidate appropriately. |  2512 // a ping response and set the ICE pwd in the remote candidate appropriately. | 
|  2594 TEST_F(P2PTransportChannelPingTest, TestSelectConnectionFromUnknownAddress) { |  2513 TEST_F(P2PTransportChannelPingTest, TestSelectConnectionFromUnknownAddress) { | 
|  2595   FakePortAllocator pa(rtc::Thread::Current(), nullptr); |  2514   cricket::FakePortAllocator pa(rtc::Thread::Current(), nullptr); | 
|  2596   P2PTransportChannel ch("receiving state change", 1, &pa); |  2515   cricket::P2PTransportChannel ch("receiving state change", 1, &pa); | 
|  2597   PrepareChannel(&ch); |  2516   PrepareChannel(&ch); | 
|  2598   ch.SetIceRole(ICEROLE_CONTROLLED); |  2517   ch.SetIceRole(cricket::ICEROLE_CONTROLLED); | 
|  2599   ch.Connect(); |  2518   ch.Connect(); | 
|  2600   ch.MaybeStartGathering(); |  2519   ch.MaybeStartGathering(); | 
|  2601   // A minimal STUN message with prflx priority. |  2520   // A minimal STUN message with prflx priority. | 
|  2602   IceMessage request; |  2521   cricket::IceMessage request; | 
|  2603   request.SetType(STUN_BINDING_REQUEST); |  2522   request.SetType(cricket::STUN_BINDING_REQUEST); | 
|  2604   request.AddAttribute( |  2523   request.AddAttribute(new cricket::StunByteStringAttribute( | 
|  2605       new StunByteStringAttribute(STUN_ATTR_USERNAME, kIceUfrag[1])); |  2524       cricket::STUN_ATTR_USERNAME, kIceUfrag[1])); | 
|  2606   uint32_t prflx_priority = ICE_TYPE_PREFERENCE_PRFLX << 24; |  2525   uint32_t prflx_priority = cricket::ICE_TYPE_PREFERENCE_PRFLX << 24; | 
|  2607   request.AddAttribute( |  2526   request.AddAttribute(new cricket::StunUInt32Attribute( | 
|  2608       new StunUInt32Attribute(STUN_ATTR_PRIORITY, prflx_priority)); |  2527       cricket::STUN_ATTR_PRIORITY, prflx_priority)); | 
|  2609   TestUDPPort* port = static_cast<TestUDPPort*>(GetPort(&ch)); |  2528   cricket::TestUDPPort* port = static_cast<cricket::TestUDPPort*>(GetPort(&ch)); | 
|  2610   port->SignalUnknownAddress(port, rtc::SocketAddress("1.1.1.1", 1), PROTO_UDP, |  2529   port->SignalUnknownAddress(port, rtc::SocketAddress("1.1.1.1", 1), | 
|  2611                              &request, kIceUfrag[1], false); |  2530                              cricket::PROTO_UDP, &request, kIceUfrag[1], false); | 
|  2612   Connection* conn1 = WaitForConnectionTo(&ch, "1.1.1.1", 1); |  2531   cricket::Connection* conn1 = WaitForConnectionTo(&ch, "1.1.1.1", 1); | 
|  2613   ASSERT_TRUE(conn1 != nullptr); |  2532   ASSERT_TRUE(conn1 != nullptr); | 
|  2614   EXPECT_TRUE(port->sent_binding_response()); |  2533   EXPECT_TRUE(port->sent_binding_response()); | 
|  2615   EXPECT_EQ(conn1, ch.best_connection()); |  2534   EXPECT_EQ(conn1, ch.best_connection()); | 
|  2616   conn1->ReceivedPingResponse(LOW_RTT); |  2535   conn1->ReceivedPingResponse(LOW_RTT); | 
|  2617   EXPECT_EQ(conn1, ch.best_connection()); |  2536   EXPECT_EQ(conn1, ch.best_connection()); | 
|  2618   port->set_sent_binding_response(false); |  2537   port->set_sent_binding_response(false); | 
|  2619  |  2538  | 
|  2620   // Another connection is nominated via use_candidate. |  2539   // Another connection is nominated via use_candidate. | 
|  2621   ch.AddRemoteCandidate(CreateUdpCandidate(LOCAL_PORT_TYPE, "2.2.2.2", 2, 1)); |  2540   ch.AddRemoteCandidate(CreateHostCandidate("2.2.2.2", 2, 1)); | 
|  2622   Connection* conn2 = WaitForConnectionTo(&ch, "2.2.2.2", 2); |  2541   cricket::Connection* conn2 = WaitForConnectionTo(&ch, "2.2.2.2", 2); | 
|  2623   ASSERT_TRUE(conn2 != nullptr); |  2542   ASSERT_TRUE(conn2 != nullptr); | 
|  2624   // Because it has a lower priority, the best connection is still conn1. |  2543   // Because it has a lower priority, the best connection is still conn1. | 
|  2625   EXPECT_EQ(conn1, ch.best_connection()); |  2544   EXPECT_EQ(conn1, ch.best_connection()); | 
|  2626   // When it is nominated via use_candidate and writable, it is chosen as the |  2545   // When it is nominated via use_candidate and writable, it is chosen as the | 
|  2627   // best connection. |  2546   // best connection. | 
|  2628   conn2->ReceivedPingResponse(LOW_RTT);  // Become writable. |  2547   conn2->ReceivedPingResponse(LOW_RTT);  // Become writable. | 
|  2629   conn2->set_nominated(true); |  2548   conn2->set_nominated(true); | 
|  2630   conn2->SignalNominated(conn2); |  2549   conn2->SignalNominated(conn2); | 
|  2631   EXPECT_EQ(conn2, ch.best_connection()); |  2550   EXPECT_EQ(conn2, ch.best_connection()); | 
|  2632  |  2551  | 
|  2633   // Another request with unknown address, it will not be set as the best |  2552   // Another request with unknown address, it will not be set as the best | 
|  2634   // connection because the best connection was nominated by the controlling |  2553   // connection because the best connection was nominated by the controlling | 
|  2635   // side. |  2554   // side. | 
|  2636   port->SignalUnknownAddress(port, rtc::SocketAddress("3.3.3.3", 3), PROTO_UDP, |  2555   port->SignalUnknownAddress(port, rtc::SocketAddress("3.3.3.3", 3), | 
|  2637                              &request, kIceUfrag[1], false); |  2556                              cricket::PROTO_UDP, &request, kIceUfrag[1], false); | 
|  2638   Connection* conn3 = WaitForConnectionTo(&ch, "3.3.3.3", 3); |  2557   cricket::Connection* conn3 = WaitForConnectionTo(&ch, "3.3.3.3", 3); | 
|  2639   ASSERT_TRUE(conn3 != nullptr); |  2558   ASSERT_TRUE(conn3 != nullptr); | 
|  2640   EXPECT_TRUE(port->sent_binding_response()); |  2559   EXPECT_TRUE(port->sent_binding_response()); | 
|  2641   conn3->ReceivedPingResponse(LOW_RTT);  // Become writable. |  2560   conn3->ReceivedPingResponse(LOW_RTT);  // Become writable. | 
|  2642   EXPECT_EQ(conn2, ch.best_connection()); |  2561   EXPECT_EQ(conn2, ch.best_connection()); | 
|  2643   port->set_sent_binding_response(false); |  2562   port->set_sent_binding_response(false); | 
|  2644  |  2563  | 
|  2645   // However if the request contains use_candidate attribute, it will be |  2564   // However if the request contains use_candidate attribute, it will be | 
|  2646   // selected as the best connection. |  2565   // selected as the best connection. | 
|  2647   request.AddAttribute(new StunByteStringAttribute(STUN_ATTR_USE_CANDIDATE)); |  2566   request.AddAttribute( | 
|  2648   port->SignalUnknownAddress(port, rtc::SocketAddress("4.4.4.4", 4), PROTO_UDP, |  2567       new cricket::StunByteStringAttribute(cricket::STUN_ATTR_USE_CANDIDATE)); | 
|  2649                              &request, kIceUfrag[1], false); |  2568   port->SignalUnknownAddress(port, rtc::SocketAddress("4.4.4.4", 4), | 
|  2650   Connection* conn4 = WaitForConnectionTo(&ch, "4.4.4.4", 4); |  2569                              cricket::PROTO_UDP, &request, kIceUfrag[1], false); | 
 |  2570   cricket::Connection* conn4 = WaitForConnectionTo(&ch, "4.4.4.4", 4); | 
|  2651   ASSERT_TRUE(conn4 != nullptr); |  2571   ASSERT_TRUE(conn4 != nullptr); | 
|  2652   EXPECT_TRUE(port->sent_binding_response()); |  2572   EXPECT_TRUE(port->sent_binding_response()); | 
|  2653   // conn4 is not the best connection yet because it is not writable. |  2573   // conn4 is not the best connection yet because it is not writable. | 
|  2654   EXPECT_EQ(conn2, ch.best_connection()); |  2574   EXPECT_EQ(conn2, ch.best_connection()); | 
|  2655   conn4->ReceivedPingResponse(LOW_RTT);  // Become writable. |  2575   conn4->ReceivedPingResponse(LOW_RTT);  // Become writable. | 
|  2656   EXPECT_EQ(conn4, ch.best_connection()); |  2576   EXPECT_EQ(conn4, ch.best_connection()); | 
|  2657  |  2577  | 
|  2658   // Test that the request from an unknown address contains a ufrag from an old |  2578   // Test that the request from an unknown address contains a ufrag from an old | 
|  2659   // generation. |  2579   // generation. | 
|  2660   port->set_sent_binding_response(false); |  2580   port->set_sent_binding_response(false); | 
|  2661   ch.SetRemoteIceCredentials(kIceUfrag[2], kIcePwd[2]); |  2581   ch.SetRemoteIceCredentials(kIceUfrag[2], kIcePwd[2]); | 
|  2662   ch.SetRemoteIceCredentials(kIceUfrag[3], kIcePwd[3]); |  2582   ch.SetRemoteIceCredentials(kIceUfrag[3], kIcePwd[3]); | 
|  2663   port->SignalUnknownAddress(port, rtc::SocketAddress("5.5.5.5", 5), PROTO_UDP, |  2583   port->SignalUnknownAddress(port, rtc::SocketAddress("5.5.5.5", 5), | 
|  2664                              &request, kIceUfrag[2], false); |  2584                              cricket::PROTO_UDP, &request, kIceUfrag[2], false); | 
|  2665   Connection* conn5 = WaitForConnectionTo(&ch, "5.5.5.5", 5); |  2585   cricket::Connection* conn5 = WaitForConnectionTo(&ch, "5.5.5.5", 5); | 
|  2666   ASSERT_TRUE(conn5 != nullptr); |  2586   ASSERT_TRUE(conn5 != nullptr); | 
|  2667   EXPECT_TRUE(port->sent_binding_response()); |  2587   EXPECT_TRUE(port->sent_binding_response()); | 
|  2668   EXPECT_EQ(kIcePwd[2], conn5->remote_candidate().password()); |  2588   EXPECT_EQ(kIcePwd[2], conn5->remote_candidate().password()); | 
|  2669 } |  2589 } | 
|  2670  |  2590  | 
|  2671 // The controlled side will select a connection as the "best connection" |  2591 // The controlled side will select a connection as the "best connection" | 
|  2672 // based on media received until the controlling side nominates a connection, |  2592 // based on media received until the controlling side nominates a connection, | 
|  2673 // at which point the controlled side will select that connection as |  2593 // at which point the controlled side will select that connection as | 
|  2674 // the "best connection". |  2594 // the "best connection". | 
|  2675 TEST_F(P2PTransportChannelPingTest, TestSelectConnectionBasedOnMediaReceived) { |  2595 TEST_F(P2PTransportChannelPingTest, TestSelectConnectionBasedOnMediaReceived) { | 
|  2676   FakePortAllocator pa(rtc::Thread::Current(), nullptr); |  2596   cricket::FakePortAllocator pa(rtc::Thread::Current(), nullptr); | 
|  2677   P2PTransportChannel ch("receiving state change", 1, &pa); |  2597   cricket::P2PTransportChannel ch("receiving state change", 1, &pa); | 
|  2678   PrepareChannel(&ch); |  2598   PrepareChannel(&ch); | 
|  2679   ch.SetIceRole(ICEROLE_CONTROLLED); |  2599   ch.SetIceRole(cricket::ICEROLE_CONTROLLED); | 
|  2680   ch.Connect(); |  2600   ch.Connect(); | 
|  2681   ch.MaybeStartGathering(); |  2601   ch.MaybeStartGathering(); | 
|  2682   ch.AddRemoteCandidate(CreateUdpCandidate(LOCAL_PORT_TYPE, "1.1.1.1", 1, 10)); |  2602   ch.AddRemoteCandidate(CreateHostCandidate("1.1.1.1", 1, 10)); | 
|  2683   Connection* conn1 = WaitForConnectionTo(&ch, "1.1.1.1", 1); |  2603   cricket::Connection* conn1 = WaitForConnectionTo(&ch, "1.1.1.1", 1); | 
|  2684   ASSERT_TRUE(conn1 != nullptr); |  2604   ASSERT_TRUE(conn1 != nullptr); | 
|  2685   EXPECT_EQ(conn1, ch.best_connection()); |  2605   EXPECT_EQ(conn1, ch.best_connection()); | 
|  2686  |  2606  | 
|  2687   // If a data packet is received on conn2, the best connection should |  2607   // If a data packet is received on conn2, the best connection should | 
|  2688   // switch to conn2 because the controlled side must mirror the media path |  2608   // switch to conn2 because the controlled side must mirror the media path | 
|  2689   // chosen by the controlling side. |  2609   // chosen by the controlling side. | 
|  2690   ch.AddRemoteCandidate(CreateUdpCandidate(LOCAL_PORT_TYPE, "2.2.2.2", 2, 1)); |  2610   ch.AddRemoteCandidate(CreateHostCandidate("2.2.2.2", 2, 1)); | 
|  2691   Connection* conn2 = WaitForConnectionTo(&ch, "2.2.2.2", 2); |  2611   cricket::Connection* conn2 = WaitForConnectionTo(&ch, "2.2.2.2", 2); | 
|  2692   ASSERT_TRUE(conn2 != nullptr); |  2612   ASSERT_TRUE(conn2 != nullptr); | 
|  2693   conn2->ReceivedPing();  // Start receiving. |  2613   conn2->ReceivedPing();  // Start receiving. | 
|  2694   // Do not switch because it is not writable. |  2614   // Do not switch because it is not writable. | 
|  2695   conn2->OnReadPacket("ABC", 3, rtc::CreatePacketTime(0)); |  2615   conn2->OnReadPacket("ABC", 3, rtc::CreatePacketTime(0)); | 
|  2696   EXPECT_EQ(conn1, ch.best_connection()); |  2616   EXPECT_EQ(conn1, ch.best_connection()); | 
|  2697  |  2617  | 
|  2698   conn2->ReceivedPingResponse(LOW_RTT);  // Become writable. |  2618   conn2->ReceivedPingResponse(LOW_RTT);  // Become writable. | 
|  2699   // Switch because it is writable. |  2619   // Switch because it is writable. | 
|  2700   conn2->OnReadPacket("DEF", 3, rtc::CreatePacketTime(0)); |  2620   conn2->OnReadPacket("DEF", 3, rtc::CreatePacketTime(0)); | 
|  2701   EXPECT_EQ(conn2, ch.best_connection()); |  2621   EXPECT_EQ(conn2, ch.best_connection()); | 
|  2702  |  2622  | 
|  2703   // Now another STUN message with an unknown address and use_candidate will |  2623   // Now another STUN message with an unknown address and use_candidate will | 
|  2704   // nominate the best connection. |  2624   // nominate the best connection. | 
|  2705   IceMessage request; |  2625   cricket::IceMessage request; | 
|  2706   request.SetType(STUN_BINDING_REQUEST); |  2626   request.SetType(cricket::STUN_BINDING_REQUEST); | 
 |  2627   request.AddAttribute(new cricket::StunByteStringAttribute( | 
 |  2628       cricket::STUN_ATTR_USERNAME, kIceUfrag[1])); | 
 |  2629   uint32_t prflx_priority = cricket::ICE_TYPE_PREFERENCE_PRFLX << 24; | 
 |  2630   request.AddAttribute(new cricket::StunUInt32Attribute( | 
 |  2631       cricket::STUN_ATTR_PRIORITY, prflx_priority)); | 
|  2707   request.AddAttribute( |  2632   request.AddAttribute( | 
|  2708       new StunByteStringAttribute(STUN_ATTR_USERNAME, kIceUfrag[1])); |  2633       new cricket::StunByteStringAttribute(cricket::STUN_ATTR_USE_CANDIDATE)); | 
|  2709   uint32_t prflx_priority = ICE_TYPE_PREFERENCE_PRFLX << 24; |  2634   cricket::Port* port = GetPort(&ch); | 
|  2710   request.AddAttribute( |  2635   port->SignalUnknownAddress(port, rtc::SocketAddress("3.3.3.3", 3), | 
|  2711       new StunUInt32Attribute(STUN_ATTR_PRIORITY, prflx_priority)); |  2636                              cricket::PROTO_UDP, &request, kIceUfrag[1], false); | 
|  2712   request.AddAttribute(new StunByteStringAttribute(STUN_ATTR_USE_CANDIDATE)); |  2637   cricket::Connection* conn3 = WaitForConnectionTo(&ch, "3.3.3.3", 3); | 
|  2713   Port* port = GetPort(&ch); |  | 
|  2714   port->SignalUnknownAddress(port, rtc::SocketAddress("3.3.3.3", 3), PROTO_UDP, |  | 
|  2715                              &request, kIceUfrag[1], false); |  | 
|  2716   Connection* conn3 = WaitForConnectionTo(&ch, "3.3.3.3", 3); |  | 
|  2717   ASSERT_TRUE(conn3 != nullptr); |  2638   ASSERT_TRUE(conn3 != nullptr); | 
|  2718   EXPECT_EQ(conn2, ch.best_connection());  // Not writable yet. |  2639   EXPECT_EQ(conn2, ch.best_connection());  // Not writable yet. | 
|  2719   conn3->ReceivedPingResponse(LOW_RTT);    // Become writable. |  2640   conn3->ReceivedPingResponse(LOW_RTT);    // Become writable. | 
|  2720   EXPECT_EQ(conn3, ch.best_connection()); |  2641   EXPECT_EQ(conn3, ch.best_connection()); | 
|  2721  |  2642  | 
|  2722   // Now another data packet will not switch the best connection because the |  2643   // Now another data packet will not switch the best connection because the | 
|  2723   // best connection was nominated by the controlling side. |  2644   // best connection was nominated by the controlling side. | 
|  2724   conn2->ReceivedPing(); |  2645   conn2->ReceivedPing(); | 
|  2725   conn2->ReceivedPingResponse(LOW_RTT); |  2646   conn2->ReceivedPingResponse(LOW_RTT); | 
|  2726   conn2->OnReadPacket("XYZ", 3, rtc::CreatePacketTime(0)); |  2647   conn2->OnReadPacket("XYZ", 3, rtc::CreatePacketTime(0)); | 
|  2727   EXPECT_EQ(conn3, ch.best_connection()); |  2648   EXPECT_EQ(conn3, ch.best_connection()); | 
|  2728 } |  2649 } | 
|  2729  |  2650  | 
|  2730 // Test that if a new remote candidate has the same address and port with |  2651 // Test that if a new remote candidate has the same address and port with | 
|  2731 // an old one, it will be used to create a new connection. |  2652 // an old one, it will be used to create a new connection. | 
|  2732 TEST_F(P2PTransportChannelPingTest, TestAddRemoteCandidateWithAddressReuse) { |  2653 TEST_F(P2PTransportChannelPingTest, TestAddRemoteCandidateWithAddressReuse) { | 
|  2733   FakePortAllocator pa(rtc::Thread::Current(), nullptr); |  2654   cricket::FakePortAllocator pa(rtc::Thread::Current(), nullptr); | 
|  2734   P2PTransportChannel ch("candidate reuse", 1, &pa); |  2655   cricket::P2PTransportChannel ch("candidate reuse", 1, &pa); | 
|  2735   PrepareChannel(&ch); |  2656   PrepareChannel(&ch); | 
|  2736   ch.Connect(); |  2657   ch.Connect(); | 
|  2737   ch.MaybeStartGathering(); |  2658   ch.MaybeStartGathering(); | 
|  2738   const std::string host_address = "1.1.1.1"; |  2659   const std::string host_address = "1.1.1.1"; | 
|  2739   const int port_num = 1; |  2660   const int port_num = 1; | 
|  2740  |  2661  | 
|  2741   // kIceUfrag[1] is the current generation ufrag. |  2662   // kIceUfrag[1] is the current generation ufrag. | 
|  2742   Candidate candidate = CreateUdpCandidate(LOCAL_PORT_TYPE, host_address, |  2663   cricket::Candidate candidate = | 
|  2743                                            port_num, 1, kIceUfrag[1]); |  2664       CreateHostCandidate(host_address, port_num, 1, kIceUfrag[1]); | 
|  2744   ch.AddRemoteCandidate(candidate); |  2665   ch.AddRemoteCandidate(candidate); | 
|  2745   Connection* conn1 = WaitForConnectionTo(&ch, host_address, port_num); |  2666   cricket::Connection* conn1 = WaitForConnectionTo(&ch, host_address, port_num); | 
|  2746   ASSERT_TRUE(conn1 != nullptr); |  2667   ASSERT_TRUE(conn1 != nullptr); | 
|  2747   EXPECT_EQ(0u, conn1->remote_candidate().generation()); |  2668   EXPECT_EQ(0u, conn1->remote_candidate().generation()); | 
|  2748  |  2669  | 
|  2749   // Simply adding the same candidate again won't create a new connection. |  2670   // Simply adding the same candidate again won't create a new connection. | 
|  2750   ch.AddRemoteCandidate(candidate); |  2671   ch.AddRemoteCandidate(candidate); | 
|  2751   Connection* conn2 = GetConnectionTo(&ch, host_address, port_num); |  2672   cricket::Connection* conn2 = GetConnectionTo(&ch, host_address, port_num); | 
|  2752   EXPECT_EQ(conn1, conn2); |  2673   EXPECT_EQ(conn1, conn2); | 
|  2753  |  2674  | 
|  2754   // Update the ufrag of the candidate and add it again. |  2675   // Update the ufrag of the candidate and add it again. | 
|  2755   candidate.set_username(kIceUfrag[2]); |  2676   candidate.set_username(kIceUfrag[2]); | 
|  2756   ch.AddRemoteCandidate(candidate); |  2677   ch.AddRemoteCandidate(candidate); | 
|  2757   conn2 = GetConnectionTo(&ch, host_address, port_num); |  2678   conn2 = GetConnectionTo(&ch, host_address, port_num); | 
|  2758   EXPECT_NE(conn1, conn2); |  2679   EXPECT_NE(conn1, conn2); | 
|  2759   EXPECT_EQ(kIceUfrag[2], conn2->remote_candidate().username()); |  2680   EXPECT_EQ(kIceUfrag[2], conn2->remote_candidate().username()); | 
|  2760   EXPECT_EQ(1u, conn2->remote_candidate().generation()); |  2681   EXPECT_EQ(1u, conn2->remote_candidate().generation()); | 
|  2761  |  2682  | 
|  2762   // Verify that a ping with the new ufrag can be received on the new |  2683   // Verify that a ping with the new ufrag can be received on the new | 
|  2763   // connection. |  2684   // connection. | 
|  2764   EXPECT_EQ(0, conn2->last_ping_received()); |  2685   EXPECT_EQ(0, conn2->last_ping_received()); | 
|  2765   ReceivePingOnConnection(conn2, kIceUfrag[2], 1 /* priority */); |  2686   ReceivePingOnConnection(conn2, kIceUfrag[2], 1 /* priority */); | 
|  2766   EXPECT_TRUE(conn2->last_ping_received() > 0); |  2687   EXPECT_TRUE(conn2->last_ping_received() > 0); | 
|  2767 } |  2688 } | 
|  2768  |  2689  | 
|  2769 // When the current best connection is strong, lower-priority connections will |  2690 // When the current best connection is strong, lower-priority connections will | 
|  2770 // be pruned. Otherwise, lower-priority connections are kept. |  2691 // be pruned. Otherwise, lower-priority connections are kept. | 
|  2771 TEST_F(P2PTransportChannelPingTest, TestDontPruneWhenWeak) { |  2692 TEST_F(P2PTransportChannelPingTest, TestDontPruneWhenWeak) { | 
|  2772   FakePortAllocator pa(rtc::Thread::Current(), nullptr); |  2693   cricket::FakePortAllocator pa(rtc::Thread::Current(), nullptr); | 
|  2773   P2PTransportChannel ch("test channel", 1, &pa); |  2694   cricket::P2PTransportChannel ch("test channel", 1, &pa); | 
|  2774   PrepareChannel(&ch); |  2695   PrepareChannel(&ch); | 
|  2775   ch.SetIceRole(ICEROLE_CONTROLLED); |  2696   ch.SetIceRole(cricket::ICEROLE_CONTROLLED); | 
|  2776   ch.Connect(); |  2697   ch.Connect(); | 
|  2777   ch.MaybeStartGathering(); |  2698   ch.MaybeStartGathering(); | 
|  2778   ch.AddRemoteCandidate(CreateUdpCandidate(LOCAL_PORT_TYPE, "1.1.1.1", 1, 1)); |  2699   ch.AddRemoteCandidate(CreateHostCandidate("1.1.1.1", 1, 1)); | 
|  2779   Connection* conn1 = WaitForConnectionTo(&ch, "1.1.1.1", 1); |  2700   cricket::Connection* conn1 = WaitForConnectionTo(&ch, "1.1.1.1", 1); | 
|  2780   ASSERT_TRUE(conn1 != nullptr); |  2701   ASSERT_TRUE(conn1 != nullptr); | 
|  2781   EXPECT_EQ(conn1, ch.best_connection()); |  2702   EXPECT_EQ(conn1, ch.best_connection()); | 
|  2782   conn1->ReceivedPingResponse(LOW_RTT);  // Becomes writable and receiving |  2703   conn1->ReceivedPingResponse(LOW_RTT);  // Becomes writable and receiving | 
|  2783  |  2704  | 
|  2784   // When a higher-priority, nominated candidate comes in, the connections with |  2705   // When a higher-priority, nominated candidate comes in, the connections with | 
|  2785   // lower-priority are pruned. |  2706   // lower-priority are pruned. | 
|  2786   ch.AddRemoteCandidate(CreateUdpCandidate(LOCAL_PORT_TYPE, "2.2.2.2", 2, 10)); |  2707   ch.AddRemoteCandidate(CreateHostCandidate("2.2.2.2", 2, 10)); | 
|  2787   Connection* conn2 = WaitForConnectionTo(&ch, "2.2.2.2", 2); |  2708   cricket::Connection* conn2 = WaitForConnectionTo(&ch, "2.2.2.2", 2); | 
|  2788   ASSERT_TRUE(conn2 != nullptr); |  2709   ASSERT_TRUE(conn2 != nullptr); | 
|  2789   conn2->ReceivedPingResponse(LOW_RTT);  // Becomes writable and receiving |  2710   conn2->ReceivedPingResponse(LOW_RTT);  // Becomes writable and receiving | 
|  2790   conn2->set_nominated(true); |  2711   conn2->set_nominated(true); | 
|  2791   conn2->SignalNominated(conn2); |  2712   conn2->SignalNominated(conn2); | 
|  2792   EXPECT_TRUE_WAIT(conn1->pruned(), 3000); |  2713   EXPECT_TRUE_WAIT(conn1->pruned(), 3000); | 
|  2793  |  2714  | 
|  2794   ch.SetIceConfig(CreateIceConfig(500, false)); |  2715   ch.SetIceConfig(CreateIceConfig(500, false)); | 
|  2795   // Wait until conn2 becomes not receiving. |  2716   // Wait until conn2 becomes not receiving. | 
|  2796   EXPECT_TRUE_WAIT(!conn2->receiving(), 3000); |  2717   EXPECT_TRUE_WAIT(!conn2->receiving(), 3000); | 
|  2797  |  2718  | 
|  2798   ch.AddRemoteCandidate(CreateUdpCandidate(LOCAL_PORT_TYPE, "3.3.3.3", 3, 1)); |  2719   ch.AddRemoteCandidate(CreateHostCandidate("3.3.3.3", 3, 1)); | 
|  2799   Connection* conn3 = WaitForConnectionTo(&ch, "3.3.3.3", 3); |  2720   cricket::Connection* conn3 = WaitForConnectionTo(&ch, "3.3.3.3", 3); | 
|  2800   ASSERT_TRUE(conn3 != nullptr); |  2721   ASSERT_TRUE(conn3 != nullptr); | 
|  2801   // The best connection should still be conn2. Even through conn3 has lower |  2722   // The best connection should still be conn2. Even through conn3 has lower | 
|  2802   // priority and is not receiving/writable, it is not pruned because the best |  2723   // priority and is not receiving/writable, it is not pruned because the best | 
|  2803   // connection is not receiving. |  2724   // connection is not receiving. | 
|  2804   WAIT(conn3->pruned(), 1000); |  2725   WAIT(conn3->pruned(), 1000); | 
|  2805   EXPECT_FALSE(conn3->pruned()); |  2726   EXPECT_FALSE(conn3->pruned()); | 
|  2806 } |  2727 } | 
|  2807  |  2728  | 
|  2808 // Test that GetState returns the state correctly. |  2729 // Test that GetState returns the state correctly. | 
|  2809 TEST_F(P2PTransportChannelPingTest, TestGetState) { |  2730 TEST_F(P2PTransportChannelPingTest, TestGetState) { | 
|  2810   FakePortAllocator pa(rtc::Thread::Current(), nullptr); |  2731   cricket::FakePortAllocator pa(rtc::Thread::Current(), nullptr); | 
|  2811   P2PTransportChannel ch("test channel", 1, &pa); |  2732   cricket::P2PTransportChannel ch("test channel", 1, &pa); | 
|  2812   PrepareChannel(&ch); |  2733   PrepareChannel(&ch); | 
|  2813   ch.Connect(); |  2734   ch.Connect(); | 
|  2814   ch.MaybeStartGathering(); |  2735   ch.MaybeStartGathering(); | 
|  2815   EXPECT_EQ(TransportChannelState::STATE_INIT, ch.GetState()); |  2736   EXPECT_EQ(cricket::TransportChannelState::STATE_INIT, ch.GetState()); | 
|  2816   ch.AddRemoteCandidate(CreateUdpCandidate(LOCAL_PORT_TYPE, "1.1.1.1", 1, 100)); |  2737   ch.AddRemoteCandidate(CreateHostCandidate("1.1.1.1", 1, 100)); | 
|  2817   ch.AddRemoteCandidate(CreateUdpCandidate(LOCAL_PORT_TYPE, "2.2.2.2", 2, 1)); |  2738   ch.AddRemoteCandidate(CreateHostCandidate("2.2.2.2", 2, 1)); | 
|  2818   Connection* conn1 = WaitForConnectionTo(&ch, "1.1.1.1", 1); |  2739   cricket::Connection* conn1 = WaitForConnectionTo(&ch, "1.1.1.1", 1); | 
|  2819   Connection* conn2 = WaitForConnectionTo(&ch, "2.2.2.2", 2); |  2740   cricket::Connection* conn2 = WaitForConnectionTo(&ch, "2.2.2.2", 2); | 
|  2820   ASSERT_TRUE(conn1 != nullptr); |  2741   ASSERT_TRUE(conn1 != nullptr); | 
|  2821   ASSERT_TRUE(conn2 != nullptr); |  2742   ASSERT_TRUE(conn2 != nullptr); | 
|  2822   // Now there are two connections, so the transport channel is connecting. |  2743   // Now there are two connections, so the transport channel is connecting. | 
|  2823   EXPECT_EQ(TransportChannelState::STATE_CONNECTING, ch.GetState()); |  2744   EXPECT_EQ(cricket::TransportChannelState::STATE_CONNECTING, ch.GetState()); | 
|  2824   // |conn1| becomes writable and receiving; it then should prune |conn2|. |  2745   // |conn1| becomes writable and receiving; it then should prune |conn2|. | 
|  2825   conn1->ReceivedPingResponse(LOW_RTT); |  2746   conn1->ReceivedPingResponse(LOW_RTT); | 
|  2826   EXPECT_TRUE_WAIT(conn2->pruned(), 1000); |  2747   EXPECT_TRUE_WAIT(conn2->pruned(), 1000); | 
|  2827   EXPECT_EQ(TransportChannelState::STATE_COMPLETED, ch.GetState()); |  2748   EXPECT_EQ(cricket::TransportChannelState::STATE_COMPLETED, ch.GetState()); | 
|  2828   conn1->Prune();  // All connections are pruned. |  2749   conn1->Prune();  // All connections are pruned. | 
|  2829   // Need to wait until the channel state is updated. |  2750   // Need to wait until the channel state is updated. | 
|  2830   EXPECT_EQ_WAIT(TransportChannelState::STATE_FAILED, ch.GetState(), 1000); |  2751   EXPECT_EQ_WAIT(cricket::TransportChannelState::STATE_FAILED, ch.GetState(), | 
 |  2752                  1000); | 
|  2831 } |  2753 } | 
|  2832  |  2754  | 
|  2833 // Test that when a low-priority connection is pruned, it is not deleted |  2755 // Test that when a low-priority connection is pruned, it is not deleted | 
|  2834 // right away, and it can become active and be pruned again. |  2756 // right away, and it can become active and be pruned again. | 
|  2835 TEST_F(P2PTransportChannelPingTest, TestConnectionPrunedAgain) { |  2757 TEST_F(P2PTransportChannelPingTest, TestConnectionPrunedAgain) { | 
|  2836   FakePortAllocator pa(rtc::Thread::Current(), nullptr); |  2758   cricket::FakePortAllocator pa(rtc::Thread::Current(), nullptr); | 
|  2837   P2PTransportChannel ch("test channel", 1, &pa); |  2759   cricket::P2PTransportChannel ch("test channel", 1, &pa); | 
|  2838   PrepareChannel(&ch); |  2760   PrepareChannel(&ch); | 
|  2839   ch.SetIceConfig(CreateIceConfig(1000, false)); |  2761   ch.SetIceConfig(CreateIceConfig(1000, false)); | 
|  2840   ch.Connect(); |  2762   ch.Connect(); | 
|  2841   ch.MaybeStartGathering(); |  2763   ch.MaybeStartGathering(); | 
|  2842   ch.AddRemoteCandidate(CreateUdpCandidate(LOCAL_PORT_TYPE, "1.1.1.1", 1, 100)); |  2764   ch.AddRemoteCandidate(CreateHostCandidate("1.1.1.1", 1, 100)); | 
|  2843   Connection* conn1 = WaitForConnectionTo(&ch, "1.1.1.1", 1); |  2765   cricket::Connection* conn1 = WaitForConnectionTo(&ch, "1.1.1.1", 1); | 
|  2844   ASSERT_TRUE(conn1 != nullptr); |  2766   ASSERT_TRUE(conn1 != nullptr); | 
|  2845   EXPECT_EQ(conn1, ch.best_connection()); |  2767   EXPECT_EQ(conn1, ch.best_connection()); | 
|  2846   conn1->ReceivedPingResponse(LOW_RTT);  // Becomes writable and receiving |  2768   conn1->ReceivedPingResponse(LOW_RTT);  // Becomes writable and receiving | 
|  2847  |  2769  | 
|  2848   // Add a low-priority connection |conn2|, which will be pruned, but it will |  2770   // Add a low-priority connection |conn2|, which will be pruned, but it will | 
|  2849   // not be deleted right away. Once the current best connection becomes not |  2771   // not be deleted right away. Once the current best connection becomes not | 
|  2850   // receiving, |conn2| will start to ping and upon receiving the ping response, |  2772   // receiving, |conn2| will start to ping and upon receiving the ping response, | 
|  2851   // it will become the best connection. |  2773   // it will become the best connection. | 
|  2852   ch.AddRemoteCandidate(CreateUdpCandidate(LOCAL_PORT_TYPE, "2.2.2.2", 2, 1)); |  2774   ch.AddRemoteCandidate(CreateHostCandidate("2.2.2.2", 2, 1)); | 
|  2853   Connection* conn2 = WaitForConnectionTo(&ch, "2.2.2.2", 2); |  2775   cricket::Connection* conn2 = WaitForConnectionTo(&ch, "2.2.2.2", 2); | 
|  2854   ASSERT_TRUE(conn2 != nullptr); |  2776   ASSERT_TRUE(conn2 != nullptr); | 
|  2855   EXPECT_TRUE_WAIT(!conn2->active(), 1000); |  2777   EXPECT_TRUE_WAIT(!conn2->active(), 1000); | 
|  2856   // |conn2| should not send a ping yet. |  2778   // |conn2| should not send a ping yet. | 
|  2857   EXPECT_EQ(Connection::STATE_WAITING, conn2->state()); |  2779   EXPECT_EQ(cricket::Connection::STATE_WAITING, conn2->state()); | 
|  2858   EXPECT_EQ(TransportChannelState::STATE_COMPLETED, ch.GetState()); |  2780   EXPECT_EQ(cricket::TransportChannelState::STATE_COMPLETED, ch.GetState()); | 
|  2859   // Wait for |conn1| becoming not receiving. |  2781   // Wait for |conn1| becoming not receiving. | 
|  2860   EXPECT_TRUE_WAIT(!conn1->receiving(), 3000); |  2782   EXPECT_TRUE_WAIT(!conn1->receiving(), 3000); | 
|  2861   // Make sure conn2 is not deleted. |  2783   // Make sure conn2 is not deleted. | 
|  2862   conn2 = WaitForConnectionTo(&ch, "2.2.2.2", 2); |  2784   conn2 = WaitForConnectionTo(&ch, "2.2.2.2", 2); | 
|  2863   ASSERT_TRUE(conn2 != nullptr); |  2785   ASSERT_TRUE(conn2 != nullptr); | 
|  2864   EXPECT_EQ_WAIT(Connection::STATE_INPROGRESS, conn2->state(), 1000); |  2786   EXPECT_EQ_WAIT(cricket::Connection::STATE_INPROGRESS, conn2->state(), 1000); | 
|  2865   conn2->ReceivedPingResponse(LOW_RTT); |  2787   conn2->ReceivedPingResponse(LOW_RTT); | 
|  2866   EXPECT_EQ_WAIT(conn2, ch.best_connection(), 1000); |  2788   EXPECT_EQ_WAIT(conn2, ch.best_connection(), 1000); | 
|  2867   EXPECT_EQ(TransportChannelState::STATE_CONNECTING, ch.GetState()); |  2789   EXPECT_EQ(cricket::TransportChannelState::STATE_CONNECTING, ch.GetState()); | 
|  2868  |  2790  | 
|  2869   // When |conn1| comes back again, |conn2| will be pruned again. |  2791   // When |conn1| comes back again, |conn2| will be pruned again. | 
|  2870   conn1->ReceivedPingResponse(LOW_RTT); |  2792   conn1->ReceivedPingResponse(LOW_RTT); | 
|  2871   EXPECT_EQ_WAIT(conn1, ch.best_connection(), 1000); |  2793   EXPECT_EQ_WAIT(conn1, ch.best_connection(), 1000); | 
|  2872   EXPECT_TRUE_WAIT(!conn2->active(), 1000); |  2794   EXPECT_TRUE_WAIT(!conn2->active(), 1000); | 
|  2873   EXPECT_EQ(TransportChannelState::STATE_COMPLETED, ch.GetState()); |  2795   EXPECT_EQ(cricket::TransportChannelState::STATE_COMPLETED, ch.GetState()); | 
|  2874 } |  2796 } | 
|  2875  |  2797  | 
|  2876 // Test that if all connections in a channel has timed out on writing, they |  2798 // Test that if all connections in a channel has timed out on writing, they | 
|  2877 // will all be deleted. We use Prune to simulate write_time_out. |  2799 // will all be deleted. We use Prune to simulate write_time_out. | 
|  2878 TEST_F(P2PTransportChannelPingTest, TestDeleteConnectionsIfAllWriteTimedout) { |  2800 TEST_F(P2PTransportChannelPingTest, TestDeleteConnectionsIfAllWriteTimedout) { | 
|  2879   FakePortAllocator pa(rtc::Thread::Current(), nullptr); |  2801   cricket::FakePortAllocator pa(rtc::Thread::Current(), nullptr); | 
|  2880   P2PTransportChannel ch("test channel", 1, &pa); |  2802   cricket::P2PTransportChannel ch("test channel", 1, &pa); | 
|  2881   PrepareChannel(&ch); |  2803   PrepareChannel(&ch); | 
|  2882   ch.Connect(); |  2804   ch.Connect(); | 
|  2883   ch.MaybeStartGathering(); |  2805   ch.MaybeStartGathering(); | 
|  2884   // Have one connection only but later becomes write-time-out. |  2806   // Have one connection only but later becomes write-time-out. | 
|  2885   ch.AddRemoteCandidate(CreateUdpCandidate(LOCAL_PORT_TYPE, "1.1.1.1", 1, 100)); |  2807   ch.AddRemoteCandidate(CreateHostCandidate("1.1.1.1", 1, 100)); | 
|  2886   Connection* conn1 = WaitForConnectionTo(&ch, "1.1.1.1", 1); |  2808   cricket::Connection* conn1 = WaitForConnectionTo(&ch, "1.1.1.1", 1); | 
|  2887   ASSERT_TRUE(conn1 != nullptr); |  2809   ASSERT_TRUE(conn1 != nullptr); | 
|  2888   conn1->ReceivedPing();  // Becomes receiving |  2810   conn1->ReceivedPing();  // Becomes receiving | 
|  2889   conn1->Prune(); |  2811   conn1->Prune(); | 
|  2890   EXPECT_TRUE_WAIT(ch.connections().empty(), 1000); |  2812   EXPECT_TRUE_WAIT(ch.connections().empty(), 1000); | 
|  2891  |  2813  | 
|  2892   // Have two connections but both become write-time-out later. |  2814   // Have two connections but both become write-time-out later. | 
|  2893   ch.AddRemoteCandidate(CreateUdpCandidate(LOCAL_PORT_TYPE, "2.2.2.2", 2, 1)); |  2815   ch.AddRemoteCandidate(CreateHostCandidate("2.2.2.2", 2, 1)); | 
|  2894   Connection* conn2 = WaitForConnectionTo(&ch, "2.2.2.2", 2); |  2816   cricket::Connection* conn2 = WaitForConnectionTo(&ch, "2.2.2.2", 2); | 
|  2895   ASSERT_TRUE(conn2 != nullptr); |  2817   ASSERT_TRUE(conn2 != nullptr); | 
|  2896   conn2->ReceivedPing();  // Becomes receiving |  2818   conn2->ReceivedPing();  // Becomes receiving | 
|  2897   ch.AddRemoteCandidate(CreateUdpCandidate(LOCAL_PORT_TYPE, "3.3.3.3", 3, 2)); |  2819   ch.AddRemoteCandidate(CreateHostCandidate("3.3.3.3", 3, 2)); | 
|  2898   Connection* conn3 = WaitForConnectionTo(&ch, "3.3.3.3", 3); |  2820   cricket::Connection* conn3 = WaitForConnectionTo(&ch, "3.3.3.3", 3); | 
|  2899   ASSERT_TRUE(conn3 != nullptr); |  2821   ASSERT_TRUE(conn3 != nullptr); | 
|  2900   conn3->ReceivedPing();  // Becomes receiving |  2822   conn3->ReceivedPing();  // Becomes receiving | 
|  2901   // Now prune both conn2 and conn3; they will be deleted soon. |  2823   // Now prune both conn2 and conn3; they will be deleted soon. | 
|  2902   conn2->Prune(); |  2824   conn2->Prune(); | 
|  2903   conn3->Prune(); |  2825   conn3->Prune(); | 
|  2904   EXPECT_TRUE_WAIT(ch.connections().empty(), 1000); |  2826   EXPECT_TRUE_WAIT(ch.connections().empty(), 1000); | 
|  2905 } |  2827 } | 
|  2906  |  2828  | 
|  2907 // Tests that after a port allocator session is started, it will be stopped |  2829 // Tests that after a port allocator session is started, it will be stopped | 
|  2908 // when a new connection becomes writable and receiving. Also tests that if a |  2830 // when a new connection becomes writable and receiving. Also tests that if a | 
|  2909 // connection belonging to an old session becomes writable, it won't stop |  2831 // connection belonging to an old session becomes writable, it won't stop | 
|  2910 // the current port allocator session. |  2832 // the current port allocator session. | 
|  2911 TEST_F(P2PTransportChannelPingTest, TestStopPortAllocatorSessions) { |  2833 TEST_F(P2PTransportChannelPingTest, TestStopPortAllocatorSessions) { | 
|  2912   FakePortAllocator pa(rtc::Thread::Current(), nullptr); |  2834   cricket::FakePortAllocator pa(rtc::Thread::Current(), nullptr); | 
|  2913   P2PTransportChannel ch("test channel", 1, &pa); |  2835   cricket::P2PTransportChannel ch("test channel", 1, &pa); | 
|  2914   PrepareChannel(&ch); |  2836   PrepareChannel(&ch); | 
|  2915   ch.SetIceConfig(CreateIceConfig(2000, false)); |  2837   ch.SetIceConfig(CreateIceConfig(2000, false)); | 
|  2916   ch.Connect(); |  2838   ch.Connect(); | 
|  2917   ch.MaybeStartGathering(); |  2839   ch.MaybeStartGathering(); | 
|  2918   ch.AddRemoteCandidate(CreateUdpCandidate(LOCAL_PORT_TYPE, "1.1.1.1", 1, 100)); |  2840   ch.AddRemoteCandidate(CreateHostCandidate("1.1.1.1", 1, 100)); | 
|  2919   Connection* conn1 = WaitForConnectionTo(&ch, "1.1.1.1", 1); |  2841   cricket::Connection* conn1 = WaitForConnectionTo(&ch, "1.1.1.1", 1); | 
|  2920   ASSERT_TRUE(conn1 != nullptr); |  2842   ASSERT_TRUE(conn1 != nullptr); | 
|  2921   conn1->ReceivedPingResponse(LOW_RTT);  // Becomes writable and receiving |  2843   conn1->ReceivedPingResponse(LOW_RTT);  // Becomes writable and receiving | 
|  2922   EXPECT_TRUE(!ch.allocator_session()->IsGettingPorts()); |  2844   EXPECT_TRUE(!ch.allocator_session()->IsGettingPorts()); | 
|  2923  |  2845  | 
|  2924   // Start a new session. Even though conn1, which belongs to an older |  2846   // Start a new session. Even though conn1, which belongs to an older | 
|  2925   // session, becomes unwritable and writable again, it should not stop the |  2847   // session, becomes unwritable and writable again, it should not stop the | 
|  2926   // current session. |  2848   // current session. | 
|  2927   ch.SetIceCredentials(kIceUfrag[1], kIcePwd[1]); |  2849   ch.SetIceCredentials(kIceUfrag[1], kIcePwd[1]); | 
|  2928   ch.MaybeStartGathering(); |  2850   ch.MaybeStartGathering(); | 
|  2929   conn1->Prune(); |  2851   conn1->Prune(); | 
|  2930   conn1->ReceivedPingResponse(LOW_RTT); |  2852   conn1->ReceivedPingResponse(LOW_RTT); | 
|  2931   EXPECT_TRUE(ch.allocator_session()->IsGettingPorts()); |  2853   EXPECT_TRUE(ch.allocator_session()->IsGettingPorts()); | 
|  2932  |  2854  | 
|  2933   // But if a new connection created from the new session becomes writable, |  2855   // But if a new connection created from the new session becomes writable, | 
|  2934   // it will stop the current session. |  2856   // it will stop the current session. | 
|  2935   ch.AddRemoteCandidate(CreateUdpCandidate(LOCAL_PORT_TYPE, "2.2.2.2", 2, 100)); |  2857   ch.AddRemoteCandidate(CreateHostCandidate("2.2.2.2", 2, 100)); | 
|  2936   Connection* conn2 = WaitForConnectionTo(&ch, "2.2.2.2", 2); |  2858   cricket::Connection* conn2 = WaitForConnectionTo(&ch, "2.2.2.2", 2); | 
|  2937   ASSERT_TRUE(conn2 != nullptr); |  2859   ASSERT_TRUE(conn2 != nullptr); | 
|  2938   conn2->ReceivedPingResponse(LOW_RTT);  // Becomes writable and receiving |  2860   conn2->ReceivedPingResponse(LOW_RTT);  // Becomes writable and receiving | 
|  2939   EXPECT_TRUE(!ch.allocator_session()->IsGettingPorts()); |  2861   EXPECT_TRUE(!ch.allocator_session()->IsGettingPorts()); | 
|  2940 } |  2862 } | 
|  2941  |  2863  | 
|  2942 // Test that the ICE role is updated even on ports with inactive networks when |  2864 // Test that the ICE role is updated even on ports with inactive networks when | 
|  2943 // doing continual gathering. These ports may still have connections that need |  2865 // doing continual gathering. These ports may still have connections that need | 
|  2944 // a correct role, in case the network becomes active before the connection is |  2866 // a correct role, in case the network becomes active before the connection is | 
|  2945 // destroyed. |  2867 // destroyed. | 
|  2946 TEST_F(P2PTransportChannelPingTest, |  2868 TEST_F(P2PTransportChannelPingTest, | 
|  2947        TestIceRoleUpdatedOnPortAfterSignalNetworkInactive) { |  2869        TestIceRoleUpdatedOnPortAfterSignalNetworkInactive) { | 
|  2948   FakePortAllocator pa(rtc::Thread::Current(), nullptr); |  2870   cricket::FakePortAllocator pa(rtc::Thread::Current(), nullptr); | 
|  2949   P2PTransportChannel ch("test channel", ICE_CANDIDATE_COMPONENT_DEFAULT, &pa); |  2871   cricket::P2PTransportChannel ch( | 
 |  2872       "test channel", cricket::ICE_CANDIDATE_COMPONENT_DEFAULT, &pa); | 
|  2950   // Starts with ICEROLE_CONTROLLING. |  2873   // Starts with ICEROLE_CONTROLLING. | 
|  2951   PrepareChannel(&ch); |  2874   PrepareChannel(&ch); | 
|  2952   IceConfig config = CreateIceConfig(1000, true); |  2875   cricket::IceConfig config = CreateIceConfig(1000, true); | 
|  2953   ch.SetIceConfig(config); |  2876   ch.SetIceConfig(config); | 
|  2954   ch.Connect(); |  2877   ch.Connect(); | 
|  2955   ch.MaybeStartGathering(); |  2878   ch.MaybeStartGathering(); | 
|  2956   ch.AddRemoteCandidate(CreateUdpCandidate(LOCAL_PORT_TYPE, "1.1.1.1", 1, 1)); |  2879   ch.AddRemoteCandidate(CreateHostCandidate("1.1.1.1", 1, 1)); | 
|  2957  |  2880  | 
|  2958   Connection* conn = WaitForConnectionTo(&ch, "1.1.1.1", 1); |  2881   cricket::Connection* conn = WaitForConnectionTo(&ch, "1.1.1.1", 1); | 
|  2959   ASSERT_TRUE(conn != nullptr); |  2882   ASSERT_TRUE(conn != nullptr); | 
|  2960  |  2883  | 
|  2961   // Make the fake port signal that its network is inactive, then change the |  2884   // Make the fake port signal that its network is inactive, then change the | 
|  2962   // ICE role and expect it to be updated. |  2885   // ICE role and expect it to be updated. | 
|  2963   conn->port()->SignalNetworkInactive(conn->port()); |  2886   conn->port()->SignalNetworkInactive(conn->port()); | 
|  2964   ch.SetIceRole(ICEROLE_CONTROLLED); |  2887   ch.SetIceRole(cricket::ICEROLE_CONTROLLED); | 
|  2965   EXPECT_EQ(ICEROLE_CONTROLLED, conn->port()->GetIceRole()); |  2888   EXPECT_EQ(cricket::ICEROLE_CONTROLLED, conn->port()->GetIceRole()); | 
|  2966 } |  2889 } | 
|  2967  |  2890  | 
|  2968 // Test that the ICE role is updated even on ports with inactive networks. |  2891 // Test that the ICE role is updated even on ports with inactive networks. | 
|  2969 // These ports may still have connections that need a correct role, for the |  2892 // These ports may still have connections that need a correct role, for the | 
|  2970 // pings sent by those connections until they're replaced by newer-generation |  2893 // pings sent by those connections until they're replaced by newer-generation | 
|  2971 // connections. |  2894 // connections. | 
|  2972 TEST_F(P2PTransportChannelPingTest, TestIceRoleUpdatedOnPortAfterIceRestart) { |  2895 TEST_F(P2PTransportChannelPingTest, TestIceRoleUpdatedOnPortAfterIceRestart) { | 
|  2973   FakePortAllocator pa(rtc::Thread::Current(), nullptr); |  2896   cricket::FakePortAllocator pa(rtc::Thread::Current(), nullptr); | 
|  2974   P2PTransportChannel ch("test channel", ICE_CANDIDATE_COMPONENT_DEFAULT, &pa); |  2897   cricket::P2PTransportChannel ch( | 
 |  2898       "test channel", cricket::ICE_CANDIDATE_COMPONENT_DEFAULT, &pa); | 
|  2975   // Starts with ICEROLE_CONTROLLING. |  2899   // Starts with ICEROLE_CONTROLLING. | 
|  2976   PrepareChannel(&ch); |  2900   PrepareChannel(&ch); | 
|  2977   ch.Connect(); |  2901   ch.Connect(); | 
|  2978   ch.MaybeStartGathering(); |  2902   ch.MaybeStartGathering(); | 
|  2979   ch.AddRemoteCandidate(CreateUdpCandidate(LOCAL_PORT_TYPE, "1.1.1.1", 1, 1)); |  2903   ch.AddRemoteCandidate(CreateHostCandidate("1.1.1.1", 1, 1)); | 
|  2980  |  2904  | 
|  2981   Connection* conn = WaitForConnectionTo(&ch, "1.1.1.1", 1); |  2905   cricket::Connection* conn = WaitForConnectionTo(&ch, "1.1.1.1", 1); | 
|  2982   ASSERT_TRUE(conn != nullptr); |  2906   ASSERT_TRUE(conn != nullptr); | 
|  2983  |  2907  | 
|  2984   // Do an ICE restart, change the role, and expect the old port to have its |  2908   // Do an ICE restart, change the role, and expect the old port to have its | 
|  2985   // role updated. |  2909   // role updated. | 
|  2986   ch.SetIceCredentials(kIceUfrag[1], kIcePwd[1]); |  2910   ch.SetIceCredentials(kIceUfrag[1], kIcePwd[1]); | 
|  2987   ch.MaybeStartGathering(); |  2911   ch.MaybeStartGathering(); | 
|  2988   ch.SetIceRole(ICEROLE_CONTROLLED); |  2912   ch.SetIceRole(cricket::ICEROLE_CONTROLLED); | 
|  2989   EXPECT_EQ(ICEROLE_CONTROLLED, conn->port()->GetIceRole()); |  2913   EXPECT_EQ(cricket::ICEROLE_CONTROLLED, conn->port()->GetIceRole()); | 
|  2990 } |  2914 } | 
|  2991  |  2915  | 
|  2992 // Test that after some amount of time without receiving data, the connection |  2916 // Test that after some amount of time without receiving data, the connection | 
|  2993 // and port are destroyed. |  2917 // and port are destroyed. | 
|  2994 TEST_F(P2PTransportChannelPingTest, TestPortDestroyedAfterTimeout) { |  2918 TEST_F(P2PTransportChannelPingTest, TestPortDestroyedAfterTimeout) { | 
|  2995   rtc::ScopedFakeClock fake_clock; |  2919   rtc::ScopedFakeClock fake_clock; | 
|  2996  |  2920  | 
|  2997   FakePortAllocator pa(rtc::Thread::Current(), nullptr); |  2921   cricket::FakePortAllocator pa(rtc::Thread::Current(), nullptr); | 
|  2998   P2PTransportChannel ch("test channel", ICE_CANDIDATE_COMPONENT_DEFAULT, &pa); |  2922   cricket::P2PTransportChannel ch( | 
 |  2923       "test channel", cricket::ICE_CANDIDATE_COMPONENT_DEFAULT, &pa); | 
|  2999   PrepareChannel(&ch); |  2924   PrepareChannel(&ch); | 
|  3000   // Only a controlled channel should expect its ports to be destroyed. |  2925   // Only a controlled channel should expect its ports to be destroyed. | 
|  3001   ch.SetIceRole(ICEROLE_CONTROLLED); |  2926   ch.SetIceRole(cricket::ICEROLE_CONTROLLED); | 
|  3002   ch.Connect(); |  2927   ch.Connect(); | 
|  3003   ch.MaybeStartGathering(); |  2928   ch.MaybeStartGathering(); | 
|  3004   ch.AddRemoteCandidate(CreateUdpCandidate(LOCAL_PORT_TYPE, "1.1.1.1", 1, 1)); |  2929   ch.AddRemoteCandidate(CreateHostCandidate("1.1.1.1", 1, 1)); | 
|  3005  |  2930  | 
|  3006   Connection* conn = WaitForConnectionTo(&ch, "1.1.1.1", 1); |  2931   cricket::Connection* conn = WaitForConnectionTo(&ch, "1.1.1.1", 1); | 
|  3007   ASSERT_TRUE(conn != nullptr); |  2932   ASSERT_TRUE(conn != nullptr); | 
|  3008  |  2933  | 
|  3009   // Simulate 2 minutes going by. This should be enough time for the port to |  2934   // Simulate 2 minutes going by. This should be enough time for the port to | 
|  3010   // time out. |  2935   // time out. | 
|  3011   for (int second = 0; second < 120; ++second) { |  2936   for (int second = 0; second < 120; ++second) { | 
|  3012     fake_clock.AdvanceTime(rtc::TimeDelta::FromSeconds(1)); |  2937     fake_clock.AdvanceTime(rtc::TimeDelta::FromSeconds(1)); | 
|  3013   } |  2938   } | 
|  3014   EXPECT_EQ(nullptr, GetConnectionTo(&ch, "1.1.1.1", 1)); |  2939   EXPECT_EQ(nullptr, GetConnectionTo(&ch, "1.1.1.1", 1)); | 
|  3015   EXPECT_EQ(nullptr, GetPort(&ch)); |  2940   EXPECT_EQ(nullptr, GetPort(&ch)); | 
|  3016 } |  2941 } | 
|  3017  |  2942  | 
|  3018 class P2PTransportChannelMostLikelyToWorkFirstTest |  2943 class P2PTransportChannelMostLikelyToWorkFirstTest | 
|  3019     : public P2PTransportChannelPingTest { |  2944     : public P2PTransportChannelPingTest { | 
|  3020  public: |  2945  public: | 
|  3021   P2PTransportChannelMostLikelyToWorkFirstTest() |  2946   P2PTransportChannelMostLikelyToWorkFirstTest() | 
|  3022       : turn_server_(rtc::Thread::Current(), kTurnUdpIntAddr, kTurnUdpExtAddr) { |  2947       : turn_server_(rtc::Thread::Current(), kTurnUdpIntAddr, kTurnUdpExtAddr) { | 
|  3023     network_manager_.AddInterface(kPublicAddrs[0]); |  2948     network_manager_.AddInterface(kPublicAddrs[0]); | 
|  3024     allocator_.reset(new BasicPortAllocator( |  2949     allocator_.reset(new cricket::BasicPortAllocator( | 
|  3025         &network_manager_, ServerAddresses(), rtc::SocketAddress(), |  2950         &network_manager_, ServerAddresses(), rtc::SocketAddress(), | 
|  3026         rtc::SocketAddress(), rtc::SocketAddress())); |  2951         rtc::SocketAddress(), rtc::SocketAddress())); | 
|  3027     allocator_->set_flags(allocator_->flags() | PORTALLOCATOR_DISABLE_STUN | |  2952     allocator_->set_flags(allocator_->flags() | | 
|  3028                           PORTALLOCATOR_DISABLE_TCP); |  2953                           cricket::PORTALLOCATOR_DISABLE_STUN | | 
|  3029     RelayServerConfig config(RELAY_TURN); |  2954                           cricket::PORTALLOCATOR_DISABLE_TCP); | 
 |  2955     cricket::RelayServerConfig config(cricket::RELAY_TURN); | 
|  3030     config.credentials = kRelayCredentials; |  2956     config.credentials = kRelayCredentials; | 
|  3031     config.ports.push_back(ProtocolAddress(kTurnUdpIntAddr, PROTO_UDP, false)); |  2957     config.ports.push_back( | 
 |  2958         cricket::ProtocolAddress(kTurnUdpIntAddr, cricket::PROTO_UDP, false)); | 
|  3032     allocator_->AddTurnServer(config); |  2959     allocator_->AddTurnServer(config); | 
|  3033     allocator_->set_step_delay(kMinimumStepDelay); |  2960     allocator_->set_step_delay(kMinimumStepDelay); | 
|  3034   } |  2961   } | 
|  3035  |  2962  | 
|  3036   P2PTransportChannel& StartTransportChannel( |  2963   cricket::P2PTransportChannel& StartTransportChannel( | 
|  3037       bool prioritize_most_likely_to_work, |  2964       bool prioritize_most_likely_to_work, | 
|  3038       int stable_writable_connection_ping_interval) { |  2965       int stable_writable_connection_ping_interval) { | 
|  3039     channel_.reset(new P2PTransportChannel("checks", 1, nullptr, allocator())); |  2966     channel_.reset( | 
|  3040     IceConfig config = channel_->config(); |  2967         new cricket::P2PTransportChannel("checks", 1, nullptr, allocator())); | 
 |  2968     cricket::IceConfig config = channel_->config(); | 
|  3041     config.prioritize_most_likely_candidate_pairs = |  2969     config.prioritize_most_likely_candidate_pairs = | 
|  3042         prioritize_most_likely_to_work; |  2970         prioritize_most_likely_to_work; | 
|  3043     config.stable_writable_connection_ping_interval = |  2971     config.stable_writable_connection_ping_interval = | 
|  3044         stable_writable_connection_ping_interval; |  2972         stable_writable_connection_ping_interval; | 
|  3045     channel_->SetIceConfig(config); |  2973     channel_->SetIceConfig(config); | 
|  3046     PrepareChannel(channel_.get()); |  2974     PrepareChannel(channel_.get()); | 
|  3047     channel_->Connect(); |  2975     channel_->Connect(); | 
|  3048     channel_->MaybeStartGathering(); |  2976     channel_->MaybeStartGathering(); | 
|  3049     return *channel_.get(); |  2977     return *channel_.get(); | 
|  3050   } |  2978   } | 
|  3051  |  2979  | 
|  3052   BasicPortAllocator* allocator() { return allocator_.get(); } |  2980   cricket::BasicPortAllocator* allocator() { return allocator_.get(); } | 
|  3053   TestTurnServer* turn_server() { return &turn_server_; } |  2981   cricket::TestTurnServer* turn_server() { return &turn_server_; } | 
|  3054  |  2982  | 
|  3055   // This verifies the next pingable connection has the expected candidates' |  2983   // This verifies the next pingable connection has the expected candidates' | 
|  3056   // types and, for relay local candidate, the expected relay protocol and ping |  2984   // types and, for relay local candidate, the expected relay protocol and ping | 
|  3057   // it. |  2985   // it. | 
|  3058   void VerifyNextPingableConnection( |  2986   void VerifyNextPingableConnection( | 
|  3059       const std::string& local_candidate_type, |  2987       const std::string& local_candidate_type, | 
|  3060       const std::string& remote_candidate_type, |  2988       const std::string& remote_candidate_type, | 
|  3061       const std::string& relay_protocol_type = UDP_PROTOCOL_NAME) { |  2989       const std::string& relay_protocol_type = cricket::UDP_PROTOCOL_NAME) { | 
|  3062     Connection* conn = FindNextPingableConnectionAndPingIt(channel_.get()); |  2990     cricket::Connection* conn = | 
 |  2991         FindNextPingableConnectionAndPingIt(channel_.get()); | 
|  3063     EXPECT_EQ(conn->local_candidate().type(), local_candidate_type); |  2992     EXPECT_EQ(conn->local_candidate().type(), local_candidate_type); | 
|  3064     if (conn->local_candidate().type() == RELAY_PORT_TYPE) { |  2993     if (conn->local_candidate().type() == cricket::RELAY_PORT_TYPE) { | 
|  3065       EXPECT_EQ(conn->local_candidate().relay_protocol(), relay_protocol_type); |  2994       EXPECT_EQ(conn->local_candidate().relay_protocol(), relay_protocol_type); | 
|  3066     } |  2995     } | 
|  3067     EXPECT_EQ(conn->remote_candidate().type(), remote_candidate_type); |  2996     EXPECT_EQ(conn->remote_candidate().type(), remote_candidate_type); | 
|  3068   } |  2997   } | 
|  3069  |  2998  | 
 |  2999   cricket::Candidate CreateRelayCandidate(const std::string& ip, | 
 |  3000                                           int port, | 
 |  3001                                           int priority, | 
 |  3002                                           const std::string& ufrag = "") { | 
 |  3003     cricket::Candidate c = CreateHostCandidate(ip, port, priority, ufrag); | 
 |  3004     c.set_type(cricket::RELAY_PORT_TYPE); | 
 |  3005     return c; | 
 |  3006   } | 
 |  3007  | 
|  3070  private: |  3008  private: | 
|  3071   std::unique_ptr<BasicPortAllocator> allocator_; |  3009   std::unique_ptr<cricket::BasicPortAllocator> allocator_; | 
|  3072   rtc::FakeNetworkManager network_manager_; |  3010   rtc::FakeNetworkManager network_manager_; | 
|  3073   TestTurnServer turn_server_; |  3011   cricket::TestTurnServer turn_server_; | 
|  3074   std::unique_ptr<P2PTransportChannel> channel_; |  3012   std::unique_ptr<cricket::P2PTransportChannel> channel_; | 
|  3075 }; |  3013 }; | 
|  3076  |  3014  | 
|  3077 // Test that Relay/Relay connections will be pinged first when no other |  3015 // Test that Relay/Relay connections will be pinged first when no other | 
|  3078 // connections have been pinged yet, unless we need to ping a trigger check or |  3016 // connections have been pinged yet, unless we need to ping a trigger check or | 
|  3079 // we have a best connection. |  3017 // we have a best connection. | 
|  3080 TEST_F(P2PTransportChannelMostLikelyToWorkFirstTest, |  3018 TEST_F(P2PTransportChannelMostLikelyToWorkFirstTest, | 
|  3081        TestRelayRelayFirstWhenNothingPingedYet) { |  3019        TestRelayRelayFirstWhenNothingPingedYet) { | 
|  3082   const int max_strong_interval = 100; |  3020   const int max_strong_interval = 100; | 
|  3083   P2PTransportChannel& ch = StartTransportChannel(true, max_strong_interval); |  3021   cricket::P2PTransportChannel& ch = | 
 |  3022       StartTransportChannel(true, max_strong_interval); | 
|  3084   EXPECT_TRUE_WAIT(ch.ports().size() == 2, 5000); |  3023   EXPECT_TRUE_WAIT(ch.ports().size() == 2, 5000); | 
|  3085   EXPECT_EQ(ch.ports()[0]->Type(), LOCAL_PORT_TYPE); |  3024   EXPECT_EQ(ch.ports()[0]->Type(), cricket::LOCAL_PORT_TYPE); | 
|  3086   EXPECT_EQ(ch.ports()[1]->Type(), RELAY_PORT_TYPE); |  3025   EXPECT_EQ(ch.ports()[1]->Type(), cricket::RELAY_PORT_TYPE); | 
|  3087  |  3026  | 
|  3088   ch.AddRemoteCandidate(CreateUdpCandidate(RELAY_PORT_TYPE, "1.1.1.1", 1, 1)); |  3027   ch.AddRemoteCandidate(CreateRelayCandidate("1.1.1.1", 1, 1)); | 
|  3089   ch.AddRemoteCandidate(CreateUdpCandidate(LOCAL_PORT_TYPE, "2.2.2.2", 2, 2)); |  3028   ch.AddRemoteCandidate(CreateHostCandidate("2.2.2.2", 2, 2)); | 
|  3090  |  3029  | 
|  3091   EXPECT_TRUE_WAIT(ch.connections().size() == 4, 5000); |  3030   EXPECT_TRUE_WAIT(ch.connections().size() == 4, 5000); | 
|  3092  |  3031  | 
|  3093   // Relay/Relay should be the first pingable connection. |  3032   // Relay/Relay should be the first pingable connection. | 
|  3094   Connection* conn = FindNextPingableConnectionAndPingIt(&ch); |  3033   cricket::Connection* conn = FindNextPingableConnectionAndPingIt(&ch); | 
|  3095   EXPECT_EQ(conn->local_candidate().type(), RELAY_PORT_TYPE); |  3034   EXPECT_EQ(conn->local_candidate().type(), cricket::RELAY_PORT_TYPE); | 
|  3096   EXPECT_EQ(conn->remote_candidate().type(), RELAY_PORT_TYPE); |  3035   EXPECT_EQ(conn->remote_candidate().type(), cricket::RELAY_PORT_TYPE); | 
|  3097  |  3036  | 
|  3098   // Unless that we have a trigger check waiting to be pinged. |  3037   // Unless that we have a trigger check waiting to be pinged. | 
|  3099   Connection* conn2 = WaitForConnectionTo(&ch, "2.2.2.2", 2); |  3038   cricket::Connection* conn2 = WaitForConnectionTo(&ch, "2.2.2.2", 2); | 
|  3100   EXPECT_EQ(conn2->local_candidate().type(), LOCAL_PORT_TYPE); |  3039   EXPECT_EQ(conn2->local_candidate().type(), cricket::LOCAL_PORT_TYPE); | 
|  3101   EXPECT_EQ(conn2->remote_candidate().type(), LOCAL_PORT_TYPE); |  3040   EXPECT_EQ(conn2->remote_candidate().type(), cricket::LOCAL_PORT_TYPE); | 
|  3102   conn2->ReceivedPing(); |  3041   conn2->ReceivedPing(); | 
|  3103   EXPECT_EQ(conn2, FindNextPingableConnectionAndPingIt(&ch)); |  3042   EXPECT_EQ(conn2, FindNextPingableConnectionAndPingIt(&ch)); | 
|  3104  |  3043  | 
|  3105   // Make conn3 the best connection. |  3044   // Make conn3 the best connection. | 
|  3106   Connection* conn3 = WaitForConnectionTo(&ch, "1.1.1.1", 1); |  3045   cricket::Connection* conn3 = WaitForConnectionTo(&ch, "1.1.1.1", 1); | 
|  3107   EXPECT_EQ(conn3->local_candidate().type(), LOCAL_PORT_TYPE); |  3046   EXPECT_EQ(conn3->local_candidate().type(), cricket::LOCAL_PORT_TYPE); | 
|  3108   EXPECT_EQ(conn3->remote_candidate().type(), RELAY_PORT_TYPE); |  3047   EXPECT_EQ(conn3->remote_candidate().type(), cricket::RELAY_PORT_TYPE); | 
|  3109   conn3->ReceivedPingResponse(LOW_RTT); |  3048   conn3->ReceivedPingResponse(LOW_RTT); | 
|  3110   ASSERT_TRUE(conn3->writable()); |  3049   ASSERT_TRUE(conn3->writable()); | 
|  3111   conn3->ReceivedPing(); |  3050   conn3->ReceivedPing(); | 
|  3112  |  3051  | 
|  3113   /* |  3052   /* | 
|  3114  |  3053  | 
|  3115   TODO(honghaiz): Re-enable this once we use fake clock for this test to fix |  3054   TODO(honghaiz): Re-enable this once we use fake clock for this test to fix | 
|  3116   the flakiness. The following test becomes flaky because we now ping the |  3055   the flakiness. The following test becomes flaky because we now ping the | 
|  3117   connections with fast rates until every connection is pinged at least three |  3056   connections with fast rates until every connection is pinged at least three | 
|  3118   times. The best connection may have been pinged before |max_strong_interval|, |  3057   times. The best connection may have been pinged before |max_strong_interval|, | 
|  3119   so it may not be the next connection to be pinged as expected in the test. |  3058   so it may not be the next connection to be pinged as expected in the test. | 
|  3120  |  3059  | 
|  3121   // Verify that conn3 will be the "best connection" since it is readable and |  3060   // Verify that conn3 will be the "best connection" since it is readable and | 
|  3122   // writable. After |MAX_CURRENT_STRONG_INTERVAL|, it should be the next |  3061   // writable. After |MAX_CURRENT_STRONG_INTERVAL|, it should be the next | 
|  3123   // pingable connection. |  3062   // pingable connection. | 
|  3124   EXPECT_TRUE_WAIT(conn3 == ch.best_connection(), 5000); |  3063   EXPECT_TRUE_WAIT(conn3 == ch.best_connection(), 5000); | 
|  3125   WAIT(false, max_strong_interval + 100); |  3064   WAIT(false, max_strong_interval + 100); | 
|  3126   conn3->ReceivedPingResponse(LOW_RTT); |  3065   conn3->ReceivedPingResponse(LOW_RTT); | 
|  3127   ASSERT_TRUE(conn3->writable()); |  3066   ASSERT_TRUE(conn3->writable()); | 
|  3128   EXPECT_EQ(conn3, FindNextPingableConnectionAndPingIt(&ch)); |  3067   EXPECT_EQ(conn3, FindNextPingableConnectionAndPingIt(&ch)); | 
|  3129  |  3068  | 
|  3130   */ |  3069   */ | 
|  3131 } |  3070 } | 
|  3132  |  3071  | 
|  3133 // Test that Relay/Relay connections will be pinged first when everything has |  3072 // Test that Relay/Relay connections will be pinged first when everything has | 
|  3134 // been pinged even if the Relay/Relay connection wasn't the first to be pinged |  3073 // been pinged even if the Relay/Relay connection wasn't the first to be pinged | 
|  3135 // in the first round. |  3074 // in the first round. | 
|  3136 TEST_F(P2PTransportChannelMostLikelyToWorkFirstTest, |  3075 TEST_F(P2PTransportChannelMostLikelyToWorkFirstTest, | 
|  3137        TestRelayRelayFirstWhenEverythingPinged) { |  3076        TestRelayRelayFirstWhenEverythingPinged) { | 
|  3138   P2PTransportChannel& ch = StartTransportChannel(true, 100); |  3077   cricket::P2PTransportChannel& ch = StartTransportChannel(true, 100); | 
|  3139   EXPECT_TRUE_WAIT(ch.ports().size() == 2, 5000); |  3078   EXPECT_TRUE_WAIT(ch.ports().size() == 2, 5000); | 
|  3140   EXPECT_EQ(ch.ports()[0]->Type(), LOCAL_PORT_TYPE); |  3079   EXPECT_EQ(ch.ports()[0]->Type(), cricket::LOCAL_PORT_TYPE); | 
|  3141   EXPECT_EQ(ch.ports()[1]->Type(), RELAY_PORT_TYPE); |  3080   EXPECT_EQ(ch.ports()[1]->Type(), cricket::RELAY_PORT_TYPE); | 
|  3142  |  3081  | 
|  3143   ch.AddRemoteCandidate(CreateUdpCandidate(LOCAL_PORT_TYPE, "1.1.1.1", 1, 1)); |  3082   ch.AddRemoteCandidate(CreateHostCandidate("1.1.1.1", 1, 1)); | 
|  3144   EXPECT_TRUE_WAIT(ch.connections().size() == 2, 5000); |  3083   EXPECT_TRUE_WAIT(ch.connections().size() == 2, 5000); | 
|  3145  |  3084  | 
|  3146   // Initially, only have Local/Local and Local/Relay. |  3085   // Initially, only have Local/Local and Local/Relay. | 
|  3147   VerifyNextPingableConnection(LOCAL_PORT_TYPE, LOCAL_PORT_TYPE); |  3086   VerifyNextPingableConnection(cricket::LOCAL_PORT_TYPE, | 
|  3148   VerifyNextPingableConnection(RELAY_PORT_TYPE, LOCAL_PORT_TYPE); |  3087                                cricket::LOCAL_PORT_TYPE); | 
 |  3088   VerifyNextPingableConnection(cricket::RELAY_PORT_TYPE, | 
 |  3089                                cricket::LOCAL_PORT_TYPE); | 
|  3149  |  3090  | 
|  3150   // Remote Relay candidate arrives. |  3091   // Remote Relay candidate arrives. | 
|  3151   ch.AddRemoteCandidate(CreateUdpCandidate(RELAY_PORT_TYPE, "2.2.2.2", 2, 2)); |  3092   ch.AddRemoteCandidate(CreateRelayCandidate("2.2.2.2", 2, 2)); | 
|  3152   EXPECT_TRUE_WAIT(ch.connections().size() == 4, 5000); |  3093   EXPECT_TRUE_WAIT(ch.connections().size() == 4, 5000); | 
|  3153  |  3094  | 
|  3154   // Relay/Relay should be the first since it hasn't been pinged before. |  3095   // Relay/Relay should be the first since it hasn't been pinged before. | 
|  3155   VerifyNextPingableConnection(RELAY_PORT_TYPE, RELAY_PORT_TYPE); |  3096   VerifyNextPingableConnection(cricket::RELAY_PORT_TYPE, | 
 |  3097                                cricket::RELAY_PORT_TYPE); | 
|  3156  |  3098  | 
|  3157   // Local/Relay is the final one. |  3099   // Local/Relay is the final one. | 
|  3158   VerifyNextPingableConnection(LOCAL_PORT_TYPE, RELAY_PORT_TYPE); |  3100   VerifyNextPingableConnection(cricket::LOCAL_PORT_TYPE, | 
 |  3101                                cricket::RELAY_PORT_TYPE); | 
|  3159  |  3102  | 
|  3160   // Now, every connection has been pinged once. The next one should be |  3103   // Now, every connection has been pinged once. The next one should be | 
|  3161   // Relay/Relay. |  3104   // Relay/Relay. | 
|  3162   VerifyNextPingableConnection(RELAY_PORT_TYPE, RELAY_PORT_TYPE); |  3105   VerifyNextPingableConnection(cricket::RELAY_PORT_TYPE, | 
 |  3106                                cricket::RELAY_PORT_TYPE); | 
|  3163 } |  3107 } | 
|  3164  |  3108  | 
|  3165 // Test that when we receive a new remote candidate, they will be tried first |  3109 // Test that when we receive a new remote candidate, they will be tried first | 
|  3166 // before we re-ping Relay/Relay connections again. |  3110 // before we re-ping Relay/Relay connections again. | 
|  3167 TEST_F(P2PTransportChannelMostLikelyToWorkFirstTest, |  3111 TEST_F(P2PTransportChannelMostLikelyToWorkFirstTest, | 
|  3168        TestNoStarvationOnNonRelayConnection) { |  3112        TestNoStarvationOnNonRelayConnection) { | 
|  3169   P2PTransportChannel& ch = StartTransportChannel(true, 100); |  3113   cricket::P2PTransportChannel& ch = StartTransportChannel(true, 100); | 
|  3170   EXPECT_TRUE_WAIT(ch.ports().size() == 2, 5000); |  3114   EXPECT_TRUE_WAIT(ch.ports().size() == 2, 5000); | 
|  3171   EXPECT_EQ(ch.ports()[0]->Type(), LOCAL_PORT_TYPE); |  3115   EXPECT_EQ(ch.ports()[0]->Type(), cricket::LOCAL_PORT_TYPE); | 
|  3172   EXPECT_EQ(ch.ports()[1]->Type(), RELAY_PORT_TYPE); |  3116   EXPECT_EQ(ch.ports()[1]->Type(), cricket::RELAY_PORT_TYPE); | 
|  3173  |  3117  | 
|  3174   ch.AddRemoteCandidate(CreateUdpCandidate(RELAY_PORT_TYPE, "1.1.1.1", 1, 1)); |  3118   ch.AddRemoteCandidate(CreateRelayCandidate("1.1.1.1", 1, 1)); | 
|  3175   EXPECT_TRUE_WAIT(ch.connections().size() == 2, 5000); |  3119   EXPECT_TRUE_WAIT(ch.connections().size() == 2, 5000); | 
|  3176  |  3120  | 
|  3177   // Initially, only have Relay/Relay and Local/Relay. Ping Relay/Relay first. |  3121   // Initially, only have Relay/Relay and Local/Relay. Ping Relay/Relay first. | 
|  3178   VerifyNextPingableConnection(RELAY_PORT_TYPE, RELAY_PORT_TYPE); |  3122   VerifyNextPingableConnection(cricket::RELAY_PORT_TYPE, | 
 |  3123                                cricket::RELAY_PORT_TYPE); | 
|  3179  |  3124  | 
|  3180   // Next, ping Local/Relay. |  3125   // Next, ping Local/Relay. | 
|  3181   VerifyNextPingableConnection(LOCAL_PORT_TYPE, RELAY_PORT_TYPE); |  3126   VerifyNextPingableConnection(cricket::LOCAL_PORT_TYPE, | 
 |  3127                                cricket::RELAY_PORT_TYPE); | 
|  3182  |  3128  | 
|  3183   // Remote Local candidate arrives. |  3129   // Remote Local candidate arrives. | 
|  3184   ch.AddRemoteCandidate(CreateUdpCandidate(LOCAL_PORT_TYPE, "2.2.2.2", 2, 2)); |  3130   ch.AddRemoteCandidate(CreateHostCandidate("2.2.2.2", 2, 2)); | 
|  3185   EXPECT_TRUE_WAIT(ch.connections().size() == 4, 5000); |  3131   EXPECT_TRUE_WAIT(ch.connections().size() == 4, 5000); | 
|  3186  |  3132  | 
|  3187   // Local/Local should be the first since it hasn't been pinged before. |  3133   // Local/Local should be the first since it hasn't been pinged before. | 
|  3188   VerifyNextPingableConnection(LOCAL_PORT_TYPE, LOCAL_PORT_TYPE); |  3134   VerifyNextPingableConnection(cricket::LOCAL_PORT_TYPE, | 
 |  3135                                cricket::LOCAL_PORT_TYPE); | 
|  3189  |  3136  | 
|  3190   // Relay/Local is the final one. |  3137   // Relay/Local is the final one. | 
|  3191   VerifyNextPingableConnection(RELAY_PORT_TYPE, LOCAL_PORT_TYPE); |  3138   VerifyNextPingableConnection(cricket::RELAY_PORT_TYPE, | 
 |  3139                                cricket::LOCAL_PORT_TYPE); | 
|  3192  |  3140  | 
|  3193   // Now, every connection has been pinged once. The next one should be |  3141   // Now, every connection has been pinged once. The next one should be | 
|  3194   // Relay/Relay. |  3142   // Relay/Relay. | 
|  3195   VerifyNextPingableConnection(RELAY_PORT_TYPE, RELAY_PORT_TYPE); |  3143   VerifyNextPingableConnection(cricket::RELAY_PORT_TYPE, | 
 |  3144                                cricket::RELAY_PORT_TYPE); | 
|  3196 } |  3145 } | 
|  3197  |  3146  | 
|  3198 // Test the ping sequence is UDP Relay/Relay followed by TCP Relay/Relay, |  3147 // Test the ping sequence is UDP Relay/Relay followed by TCP Relay/Relay, | 
|  3199 // followed by the rest. |  3148 // followed by the rest. | 
|  3200 TEST_F(P2PTransportChannelMostLikelyToWorkFirstTest, TestTcpTurn) { |  3149 TEST_F(P2PTransportChannelMostLikelyToWorkFirstTest, TestTcpTurn) { | 
|  3201   // Add a Tcp Turn server. |  3150   // Add a Tcp Turn server. | 
|  3202   turn_server()->AddInternalSocket(kTurnTcpIntAddr, PROTO_TCP); |  3151   turn_server()->AddInternalSocket(kTurnTcpIntAddr, cricket::PROTO_TCP); | 
|  3203   RelayServerConfig config(RELAY_TURN); |  3152   cricket::RelayServerConfig config(cricket::RELAY_TURN); | 
|  3204   config.credentials = kRelayCredentials; |  3153   config.credentials = kRelayCredentials; | 
|  3205   config.ports.push_back(ProtocolAddress(kTurnTcpIntAddr, PROTO_TCP, false)); |  3154   config.ports.push_back( | 
 |  3155       cricket::ProtocolAddress(kTurnTcpIntAddr, cricket::PROTO_TCP, false)); | 
|  3206   allocator()->AddTurnServer(config); |  3156   allocator()->AddTurnServer(config); | 
|  3207  |  3157  | 
|  3208   P2PTransportChannel& ch = StartTransportChannel(true, 100); |  3158   cricket::P2PTransportChannel& ch = StartTransportChannel(true, 100); | 
|  3209   EXPECT_TRUE_WAIT(ch.ports().size() == 3, 5000); |  3159   EXPECT_TRUE_WAIT(ch.ports().size() == 3, 5000); | 
|  3210   EXPECT_EQ(ch.ports()[0]->Type(), LOCAL_PORT_TYPE); |  3160   EXPECT_EQ(ch.ports()[0]->Type(), cricket::LOCAL_PORT_TYPE); | 
|  3211   EXPECT_EQ(ch.ports()[1]->Type(), RELAY_PORT_TYPE); |  3161   EXPECT_EQ(ch.ports()[1]->Type(), cricket::RELAY_PORT_TYPE); | 
|  3212   EXPECT_EQ(ch.ports()[2]->Type(), RELAY_PORT_TYPE); |  3162   EXPECT_EQ(ch.ports()[2]->Type(), cricket::RELAY_PORT_TYPE); | 
|  3213  |  3163  | 
|  3214   // Remote Relay candidate arrives. |  3164   // Remote Relay candidate arrives. | 
|  3215   ch.AddRemoteCandidate(CreateUdpCandidate(RELAY_PORT_TYPE, "1.1.1.1", 1, 1)); |  3165   ch.AddRemoteCandidate(CreateRelayCandidate("1.1.1.1", 1, 1)); | 
|  3216   EXPECT_TRUE_WAIT(ch.connections().size() == 3, 5000); |  3166   EXPECT_TRUE_WAIT(ch.connections().size() == 3, 5000); | 
|  3217  |  3167  | 
|  3218   // UDP Relay/Relay should be pinged first. |  3168   // UDP Relay/Relay should be pinged first. | 
|  3219   VerifyNextPingableConnection(RELAY_PORT_TYPE, RELAY_PORT_TYPE); |  3169   VerifyNextPingableConnection(cricket::RELAY_PORT_TYPE, | 
 |  3170                                cricket::RELAY_PORT_TYPE); | 
|  3220  |  3171  | 
|  3221   // TCP Relay/Relay is the next. |  3172   // TCP Relay/Relay is the next. | 
|  3222   VerifyNextPingableConnection(RELAY_PORT_TYPE, RELAY_PORT_TYPE, |  3173   VerifyNextPingableConnection(cricket::RELAY_PORT_TYPE, | 
|  3223                                TCP_PROTOCOL_NAME); |  3174                                cricket::RELAY_PORT_TYPE, | 
 |  3175                                cricket::TCP_PROTOCOL_NAME); | 
|  3224  |  3176  | 
|  3225   // Finally, Local/Relay will be pinged. |  3177   // Finally, Local/Relay will be pinged. | 
|  3226   VerifyNextPingableConnection(LOCAL_PORT_TYPE, RELAY_PORT_TYPE); |  3178   VerifyNextPingableConnection(cricket::LOCAL_PORT_TYPE, | 
 |  3179                                cricket::RELAY_PORT_TYPE); | 
|  3227 } |  3180 } | 
|  3228  |  | 
|  3229 }  // namespace cricket { |  | 
| OLD | NEW |