OLD | NEW |
1 /* | 1 /* |
2 * Copyright 2010 The WebRTC Project Authors. All rights reserved. | 2 * Copyright 2010 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 71 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
82 | 82 |
83 bool sent_binding_response_ = false; | 83 bool sent_binding_response_ = false; |
84 }; | 84 }; |
85 | 85 |
86 // A FakePortAllocatorSession can be used with either a real or fake socket | 86 // A FakePortAllocatorSession can be used with either a real or fake socket |
87 // factory. It gathers a single loopback port, using IPv6 if available and | 87 // factory. It gathers a single loopback port, using IPv6 if available and |
88 // not disabled. | 88 // not disabled. |
89 class FakePortAllocatorSession : public PortAllocatorSession { | 89 class FakePortAllocatorSession : public PortAllocatorSession { |
90 public: | 90 public: |
91 FakePortAllocatorSession(PortAllocator* allocator, | 91 FakePortAllocatorSession(PortAllocator* allocator, |
92 rtc::Thread* worker_thread, | 92 rtc::Thread* network_thread, |
93 rtc::PacketSocketFactory* factory, | 93 rtc::PacketSocketFactory* factory, |
94 const std::string& content_name, | 94 const std::string& content_name, |
95 int component, | 95 int component, |
96 const std::string& ice_ufrag, | 96 const std::string& ice_ufrag, |
97 const std::string& ice_pwd) | 97 const std::string& ice_pwd) |
98 : PortAllocatorSession(content_name, | 98 : PortAllocatorSession(content_name, |
99 component, | 99 component, |
100 ice_ufrag, | 100 ice_ufrag, |
101 ice_pwd, | 101 ice_pwd, |
102 allocator->flags()), | 102 allocator->flags()), |
103 worker_thread_(worker_thread), | 103 network_thread_(network_thread), |
104 factory_(factory), | 104 factory_(factory), |
105 ipv4_network_("network", | 105 ipv4_network_("network", |
106 "unittest", | 106 "unittest", |
107 rtc::IPAddress(INADDR_LOOPBACK), | 107 rtc::IPAddress(INADDR_LOOPBACK), |
108 32), | 108 32), |
109 ipv6_network_("network", | 109 ipv6_network_("network", |
110 "unittest", | 110 "unittest", |
111 rtc::IPAddress(in6addr_loopback), | 111 rtc::IPAddress(in6addr_loopback), |
112 64), | 112 64), |
113 port_(), | 113 port_(), |
114 running_(false), | 114 running_(false), |
115 port_config_count_(0), | 115 port_config_count_(0), |
116 stun_servers_(allocator->stun_servers()), | 116 stun_servers_(allocator->stun_servers()), |
117 turn_servers_(allocator->turn_servers()) { | 117 turn_servers_(allocator->turn_servers()) { |
118 ipv4_network_.AddIP(rtc::IPAddress(INADDR_LOOPBACK)); | 118 ipv4_network_.AddIP(rtc::IPAddress(INADDR_LOOPBACK)); |
119 ipv6_network_.AddIP(rtc::IPAddress(in6addr_loopback)); | 119 ipv6_network_.AddIP(rtc::IPAddress(in6addr_loopback)); |
120 } | 120 } |
121 | 121 |
122 void SetCandidateFilter(uint32_t filter) override { | 122 void SetCandidateFilter(uint32_t filter) override { |
123 candidate_filter_ = filter; | 123 candidate_filter_ = filter; |
124 } | 124 } |
125 | 125 |
126 void StartGettingPorts() override { | 126 void StartGettingPorts() override { |
127 if (!port_) { | 127 if (!port_) { |
128 rtc::Network& network = | 128 rtc::Network& network = |
129 (rtc::HasIPv6Enabled() && (flags() & PORTALLOCATOR_ENABLE_IPV6)) | 129 (rtc::HasIPv6Enabled() && (flags() & PORTALLOCATOR_ENABLE_IPV6)) |
130 ? ipv6_network_ | 130 ? ipv6_network_ |
131 : ipv4_network_; | 131 : ipv4_network_; |
132 port_.reset(TestUDPPort::Create(worker_thread_, factory_, &network, | 132 port_.reset(TestUDPPort::Create(network_thread_, factory_, &network, |
133 network.GetBestIP(), 0, 0, username(), | 133 network.GetBestIP(), 0, 0, username(), |
134 password(), std::string(), false)); | 134 password(), std::string(), false)); |
135 port_->SignalDestroyed.connect( | 135 port_->SignalDestroyed.connect( |
136 this, &FakePortAllocatorSession::OnPortDestroyed); | 136 this, &FakePortAllocatorSession::OnPortDestroyed); |
137 AddPort(port_.get()); | 137 AddPort(port_.get()); |
138 } | 138 } |
139 ++port_config_count_; | 139 ++port_config_count_; |
140 running_ = true; | 140 running_ = true; |
141 } | 141 } |
142 | 142 |
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
188 SignalCandidatesReady(this, candidates); | 188 SignalCandidatesReady(this, candidates); |
189 | 189 |
190 allocation_done_ = true; | 190 allocation_done_ = true; |
191 SignalCandidatesAllocationDone(this); | 191 SignalCandidatesAllocationDone(this); |
192 } | 192 } |
193 void OnPortDestroyed(cricket::PortInterface* port) { | 193 void OnPortDestroyed(cricket::PortInterface* port) { |
194 // Don't want to double-delete port if it deletes itself. | 194 // Don't want to double-delete port if it deletes itself. |
195 port_.release(); | 195 port_.release(); |
196 } | 196 } |
197 | 197 |
198 rtc::Thread* worker_thread_; | 198 rtc::Thread* network_thread_; |
199 rtc::PacketSocketFactory* factory_; | 199 rtc::PacketSocketFactory* factory_; |
200 rtc::Network ipv4_network_; | 200 rtc::Network ipv4_network_; |
201 rtc::Network ipv6_network_; | 201 rtc::Network ipv6_network_; |
202 std::unique_ptr<cricket::Port> port_; | 202 std::unique_ptr<cricket::Port> port_; |
203 bool running_; | 203 bool running_; |
204 int port_config_count_; | 204 int port_config_count_; |
205 std::vector<Candidate> candidates_; | 205 std::vector<Candidate> candidates_; |
206 std::vector<PortInterface*> ready_ports_; | 206 std::vector<PortInterface*> ready_ports_; |
207 bool allocation_done_ = false; | 207 bool allocation_done_ = false; |
208 ServerAddresses stun_servers_; | 208 ServerAddresses stun_servers_; |
209 std::vector<RelayServerConfig> turn_servers_; | 209 std::vector<RelayServerConfig> turn_servers_; |
210 uint32_t candidate_filter_ = CF_ALL; | 210 uint32_t candidate_filter_ = CF_ALL; |
211 int transport_info_update_count_ = 0; | 211 int transport_info_update_count_ = 0; |
212 }; | 212 }; |
213 | 213 |
214 class FakePortAllocator : public cricket::PortAllocator { | 214 class FakePortAllocator : public cricket::PortAllocator { |
215 public: | 215 public: |
216 FakePortAllocator(rtc::Thread* worker_thread, | 216 FakePortAllocator(rtc::Thread* network_thread, |
217 rtc::PacketSocketFactory* factory) | 217 rtc::PacketSocketFactory* factory) |
218 : worker_thread_(worker_thread), factory_(factory) { | 218 : network_thread_(network_thread), factory_(factory) { |
219 if (factory_ == NULL) { | 219 if (factory_ == NULL) { |
220 owned_factory_.reset(new rtc::BasicPacketSocketFactory(worker_thread_)); | 220 owned_factory_.reset(new rtc::BasicPacketSocketFactory(network_thread_)); |
221 factory_ = owned_factory_.get(); | 221 factory_ = owned_factory_.get(); |
222 } | 222 } |
223 } | 223 } |
224 | 224 |
| 225 void Initialize() override { |
| 226 // Port allocator should be initialized on the network thread. |
| 227 RTC_CHECK(network_thread_->IsCurrent()); |
| 228 initialized_ = true; |
| 229 } |
| 230 |
225 void SetNetworkIgnoreMask(int network_ignore_mask) override {} | 231 void SetNetworkIgnoreMask(int network_ignore_mask) override {} |
226 | 232 |
227 cricket::PortAllocatorSession* CreateSessionInternal( | 233 cricket::PortAllocatorSession* CreateSessionInternal( |
228 const std::string& content_name, | 234 const std::string& content_name, |
229 int component, | 235 int component, |
230 const std::string& ice_ufrag, | 236 const std::string& ice_ufrag, |
231 const std::string& ice_pwd) override { | 237 const std::string& ice_pwd) override { |
232 return new FakePortAllocatorSession(this, worker_thread_, factory_, | 238 return new FakePortAllocatorSession(this, network_thread_, factory_, |
233 content_name, component, ice_ufrag, | 239 content_name, component, ice_ufrag, |
234 ice_pwd); | 240 ice_pwd); |
235 } | 241 } |
236 | 242 |
| 243 bool initialized() const { return initialized_; } |
| 244 |
237 private: | 245 private: |
238 rtc::Thread* worker_thread_; | 246 rtc::Thread* network_thread_; |
239 rtc::PacketSocketFactory* factory_; | 247 rtc::PacketSocketFactory* factory_; |
240 std::unique_ptr<rtc::BasicPacketSocketFactory> owned_factory_; | 248 std::unique_ptr<rtc::BasicPacketSocketFactory> owned_factory_; |
| 249 bool initialized_ = false; |
241 }; | 250 }; |
242 | 251 |
243 } // namespace cricket | 252 } // namespace cricket |
244 | 253 |
245 #endif // WEBRTC_P2P_BASE_FAKEPORTALLOCATOR_H_ | 254 #endif // WEBRTC_P2P_BASE_FAKEPORTALLOCATOR_H_ |
OLD | NEW |