Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(120)

Side by Side Diff: webrtc/p2p/base/transport.h

Issue 1358413003: Revert of TransportController refactoring. (Closed) Base URL: https://chromium.googlesource.com/external/webrtc.git@master
Patch Set: Created 5 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « webrtc/p2p/base/session_unittest.cc ('k') | webrtc/p2p/base/transport.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 /* 1 /*
2 * Copyright 2004 The WebRTC Project Authors. All rights reserved. 2 * Copyright 2004 The WebRTC Project Authors. All rights reserved.
3 * 3 *
4 * Use of this source code is governed by a BSD-style license 4 * Use of this source code is governed by a BSD-style license
5 * that can be found in the LICENSE file in the root of the source 5 * that can be found in the LICENSE file in the root of the source
6 * tree. An additional intellectual property rights grant can be found 6 * tree. An additional intellectual property rights grant can be found
7 * in the file PATENTS. All contributing project authors may 7 * in the file PATENTS. All contributing project authors may
8 * be found in the AUTHORS file in the root of the source tree. 8 * be found in the AUTHORS file in the root of the source tree.
9 */ 9 */
10 10
11 // A Transport manages a set of named channels of the same type. 11 // A Transport manages a set of named channels of the same type.
12 // 12 //
13 // Subclasses choose the appropriate class to instantiate for each channel; 13 // Subclasses choose the appropriate class to instantiate for each channel;
14 // however, this base class keeps track of the channels by name, watches their 14 // however, this base class keeps track of the channels by name, watches their
15 // state changes (in order to update the manager's state), and forwards 15 // state changes (in order to update the manager's state), and forwards
16 // requests to begin connecting or to reset to each of the channels. 16 // requests to begin connecting or to reset to each of the channels.
17 // 17 //
18 // On Threading: Transport performs work solely on the worker thread, and so 18 // On Threading: Transport performs work on both the signaling and worker
19 // its methods should only be called on the worker thread. 19 // threads. For subclasses, the rule is that all signaling related calls will
20 // be made on the signaling thread and all channel related calls (including
21 // signaling for a channel) will be made on the worker thread. When
22 // information needs to be sent between the two threads, this class should do
23 // the work (e.g., OnRemoteCandidate).
20 // 24 //
21 // Note: Subclasses must call DestroyChannels() in their own destructors. 25 // Note: Subclasses must call DestroyChannels() in their own constructors.
22 // It is not possible to do so here because the subclass destructor will 26 // It is not possible to do so here because the subclass constructor will
23 // already have run. 27 // already have run.
24 28
25 #ifndef WEBRTC_P2P_BASE_TRANSPORT_H_ 29 #ifndef WEBRTC_P2P_BASE_TRANSPORT_H_
26 #define WEBRTC_P2P_BASE_TRANSPORT_H_ 30 #define WEBRTC_P2P_BASE_TRANSPORT_H_
27 31
28 #include <map> 32 #include <map>
29 #include <string> 33 #include <string>
30 #include <vector> 34 #include <vector>
31 #include "webrtc/p2p/base/candidate.h" 35 #include "webrtc/p2p/base/candidate.h"
32 #include "webrtc/p2p/base/constants.h" 36 #include "webrtc/p2p/base/constants.h"
33 #include "webrtc/p2p/base/sessiondescription.h" 37 #include "webrtc/p2p/base/sessiondescription.h"
34 #include "webrtc/p2p/base/transportinfo.h" 38 #include "webrtc/p2p/base/transportinfo.h"
39 #include "webrtc/base/criticalsection.h"
35 #include "webrtc/base/messagequeue.h" 40 #include "webrtc/base/messagequeue.h"
36 #include "webrtc/base/rtccertificate.h" 41 #include "webrtc/base/rtccertificate.h"
37 #include "webrtc/base/sigslot.h" 42 #include "webrtc/base/sigslot.h"
38 #include "webrtc/base/sslstreamadapter.h" 43 #include "webrtc/base/sslstreamadapter.h"
39 44
45 namespace rtc {
46 class Thread;
47 }
48
40 namespace cricket { 49 namespace cricket {
41 50
42 class PortAllocator; 51 class PortAllocator;
43 class TransportChannel; 52 class TransportChannel;
44 class TransportChannelImpl; 53 class TransportChannelImpl;
45 54
46 typedef std::vector<Candidate> Candidates; 55 typedef std::vector<Candidate> Candidates;
47 56
48 // TODO(deadbeef): Unify with PeerConnectionInterface::IceConnectionState
49 // once /talk/ and /webrtc/ are combined, and also switch to ENUM_NAME naming
50 // style.
51 enum IceConnectionState {
52 kIceConnectionConnecting = 0,
53 kIceConnectionFailed,
54 kIceConnectionConnected, // Writable, but still checking one or more
55 // connections
56 kIceConnectionCompleted,
57 };
58
59 // TODO(deadbeef): Unify with PeerConnectionInterface::IceConnectionState
60 // once /talk/ and /webrtc/ are combined, and also switch to ENUM_NAME naming
61 // style.
62 enum IceGatheringState {
63 kIceGatheringNew = 0,
64 kIceGatheringGathering,
65 kIceGatheringComplete,
66 };
67
68 // For "writable" and "receiving", we need to differentiate between 57 // For "writable" and "receiving", we need to differentiate between
69 // none, all, and some. 58 // none, all, and some.
70 enum TransportState { 59 enum TransportState {
71 TRANSPORT_STATE_NONE = 0, 60 TRANSPORT_STATE_NONE = 0,
72 TRANSPORT_STATE_SOME, 61 TRANSPORT_STATE_SOME,
73 TRANSPORT_STATE_ALL 62 TRANSPORT_STATE_ALL
74 }; 63 };
75 64
76 // When checking transport state, we need to differentiate between 65 // When checking transport state, we need to differentiate between
77 // "writable" or "receiving" check. 66 // "writable" or "receiving" check.
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after
128 std::string srtp_cipher; 117 std::string srtp_cipher;
129 std::string ssl_cipher; 118 std::string ssl_cipher;
130 }; 119 };
131 120
132 // Information about all the channels of a transport. 121 // Information about all the channels of a transport.
133 // TODO(hta): Consider if a simple vector is as good as a map. 122 // TODO(hta): Consider if a simple vector is as good as a map.
134 typedef std::vector<TransportChannelStats> TransportChannelStatsList; 123 typedef std::vector<TransportChannelStats> TransportChannelStatsList;
135 124
136 // Information about the stats of a transport. 125 // Information about the stats of a transport.
137 struct TransportStats { 126 struct TransportStats {
138 std::string transport_name; 127 std::string content_name;
139 TransportChannelStatsList channel_stats; 128 TransportChannelStatsList channel_stats;
140 }; 129 };
141 130
142 bool BadTransportDescription(const std::string& desc, std::string* err_desc); 131 bool BadTransportDescription(const std::string& desc, std::string* err_desc);
143 132
144 bool IceCredentialsChanged(const std::string& old_ufrag, 133 bool IceCredentialsChanged(const std::string& old_ufrag,
145 const std::string& old_pwd, 134 const std::string& old_pwd,
146 const std::string& new_ufrag, 135 const std::string& new_ufrag,
147 const std::string& new_pwd); 136 const std::string& new_pwd);
148 137
149 class Transport : public sigslot::has_slots<> { 138 class Transport : public rtc::MessageHandler,
139 public sigslot::has_slots<> {
150 public: 140 public:
151 Transport(const std::string& name, PortAllocator* allocator); 141 Transport(rtc::Thread* signaling_thread,
142 rtc::Thread* worker_thread,
143 const std::string& content_name,
144 PortAllocator* allocator);
152 virtual ~Transport(); 145 virtual ~Transport();
153 146
154 // Returns the name of this transport. 147 // Returns the signaling thread. The app talks to Transport on this thread.
155 const std::string& name() const { return name_; } 148 rtc::Thread* signaling_thread() const { return signaling_thread_; }
149 // Returns the worker thread. The actual networking is done on this thread.
150 rtc::Thread* worker_thread() const { return worker_thread_; }
151
152 // Returns the content_name of this transport.
153 const std::string& content_name() const { return content_name_; }
156 154
157 // Returns the port allocator object for this transport. 155 // Returns the port allocator object for this transport.
158 PortAllocator* port_allocator() { return allocator_; } 156 PortAllocator* port_allocator() { return allocator_; }
159 157
160 // Returns the states of this manager. These bits are the ORs 158 // Returns the states of this manager. These bits are the ORs
161 // of the corresponding bits on the managed channels. Each time one of these 159 // of the corresponding bits on the managed channels. Each time one of these
162 // states changes, a signal is raised. 160 // states changes, a signal is raised.
163 // TODO(honghaiz): Replace uses of writable() with any_channels_writable(). 161 // TODO(honghaiz): Replace uses of writable() with any_channels_writable().
164 bool writable() const { return any_channels_writable(); } 162 bool writable() const { return any_channels_writable(); }
165 bool was_writable() const { return was_writable_; } 163 bool was_writable() const { return was_writable_; }
166 bool any_channels_writable() const { 164 bool any_channels_writable() const {
167 return (writable_ == TRANSPORT_STATE_SOME || 165 return (writable_ == TRANSPORT_STATE_SOME ||
168 writable_ == TRANSPORT_STATE_ALL); 166 writable_ == TRANSPORT_STATE_ALL);
169 } 167 }
170 bool all_channels_writable() const { 168 bool all_channels_writable() const {
171 return (writable_ == TRANSPORT_STATE_ALL); 169 return (writable_ == TRANSPORT_STATE_ALL);
172 } 170 }
173 bool any_channel_receiving() const { 171 bool any_channel_receiving() const {
174 return (receiving_ == TRANSPORT_STATE_SOME || 172 return (receiving_ == TRANSPORT_STATE_SOME ||
175 receiving_ == TRANSPORT_STATE_ALL); 173 receiving_ == TRANSPORT_STATE_ALL);
176 } 174 }
177 bool ready_for_remote_candidates() const {
178 return local_description_set_ && remote_description_set_;
179 }
180
181 bool AllChannelsCompleted() const;
182 bool AnyChannelFailed() const;
183
184 IceGatheringState gathering_state() const { return gathering_state_; }
185 175
186 sigslot::signal1<Transport*> SignalWritableState; 176 sigslot::signal1<Transport*> SignalWritableState;
187 sigslot::signal1<Transport*> SignalReceivingState; 177 sigslot::signal1<Transport*> SignalReceivingState;
188 sigslot::signal1<Transport*> SignalCompleted; 178 sigslot::signal1<Transport*> SignalCompleted;
189 sigslot::signal1<Transport*> SignalFailed; 179 sigslot::signal1<Transport*> SignalFailed;
190 180
191 // Returns whether the client has requested the channels to connect. 181 // Returns whether the client has requested the channels to connect.
192 bool connect_requested() const { return connect_requested_; } 182 bool connect_requested() const { return connect_requested_; }
193 183
194 void SetIceRole(IceRole role); 184 void SetIceRole(IceRole role);
195 IceRole ice_role() const { return ice_role_; } 185 IceRole ice_role() const { return ice_role_; }
196 186
197 void SetIceTiebreaker(uint64 IceTiebreaker) { tiebreaker_ = IceTiebreaker; } 187 void SetIceTiebreaker(uint64 IceTiebreaker) { tiebreaker_ = IceTiebreaker; }
198 uint64 IceTiebreaker() { return tiebreaker_; } 188 uint64 IceTiebreaker() { return tiebreaker_; }
199 189
200 void SetChannelReceivingTimeout(int timeout_ms); 190 void SetChannelReceivingTimeout(int timeout_ms);
201 191
202 // Must be called before applying local session description. 192 // Must be called before applying local session description.
203 virtual void SetLocalCertificate( 193 void SetCertificate(
204 const rtc::scoped_refptr<rtc::RTCCertificate>& certificate) {} 194 const rtc::scoped_refptr<rtc::RTCCertificate>& certificate);
205 195
206 // Get a copy of the local certificate provided by SetLocalCertificate. 196 // Get a copy of the local identity provided by SetIdentity.
207 virtual bool GetLocalCertificate( 197 bool GetCertificate(rtc::scoped_refptr<rtc::RTCCertificate>* certificate);
208 rtc::scoped_refptr<rtc::RTCCertificate>* certificate) {
209 return false;
210 }
211 198
212 // Get a copy of the remote certificate in use by the specified channel. 199 // Get a copy of the remote certificate in use by the specified channel.
213 bool GetRemoteSSLCertificate(rtc::SSLCertificate** cert); 200 bool GetRemoteSSLCertificate(rtc::SSLCertificate** cert);
214 201
215 // Create, destroy, and lookup the channels of this type by their components. 202 // Create, destroy, and lookup the channels of this type by their components.
216 TransportChannelImpl* CreateChannel(int component); 203 TransportChannelImpl* CreateChannel(int component);
217 204 // Note: GetChannel may lead to race conditions, since the mutex is not held
205 // after the pointer is returned.
218 TransportChannelImpl* GetChannel(int component); 206 TransportChannelImpl* GetChannel(int component);
219 207 // Note: HasChannel does not lead to race conditions, unlike GetChannel.
220 bool HasChannel(int component) { 208 bool HasChannel(int component) {
221 return (NULL != GetChannel(component)); 209 return (NULL != GetChannel(component));
222 } 210 }
223 bool HasChannels(); 211 bool HasChannels();
224 void DestroyChannel(int component); 212 void DestroyChannel(int component);
225 213
226 // Set the local TransportDescription to be used by TransportChannels. 214 // Set the local TransportDescription to be used by TransportChannels.
215 // This should be called before ConnectChannels().
227 bool SetLocalTransportDescription(const TransportDescription& description, 216 bool SetLocalTransportDescription(const TransportDescription& description,
228 ContentAction action, 217 ContentAction action,
229 std::string* error_desc); 218 std::string* error_desc);
230 219
231 // Set the remote TransportDescription to be used by TransportChannels. 220 // Set the remote TransportDescription to be used by TransportChannels.
232 bool SetRemoteTransportDescription(const TransportDescription& description, 221 bool SetRemoteTransportDescription(const TransportDescription& description,
233 ContentAction action, 222 ContentAction action,
234 std::string* error_desc); 223 std::string* error_desc);
235 224
236 // Tells all current and future channels to start connecting. When the first 225 // Tells all current and future channels to start connecting. When the first
237 // channel begins connecting, the following signal is raised. 226 // channel begins connecting, the following signal is raised.
238 void ConnectChannels(); 227 void ConnectChannels();
239 sigslot::signal1<Transport*> SignalConnecting; 228 sigslot::signal1<Transport*> SignalConnecting;
240 229
241 // Tells channels to start gathering candidates if necessary.
242 // Should be called after ConnectChannels() has been called at least once,
243 // which will happen in SetLocalTransportDescription.
244 void MaybeStartGathering();
245
246 // Resets all of the channels back to their initial state. They are no 230 // Resets all of the channels back to their initial state. They are no
247 // longer connecting. 231 // longer connecting.
248 void ResetChannels(); 232 void ResetChannels();
249 233
250 // Destroys every channel created so far. 234 // Destroys every channel created so far.
251 void DestroyAllChannels(); 235 void DestroyAllChannels();
252 236
253 bool GetStats(TransportStats* stats); 237 bool GetStats(TransportStats* stats);
254 238
255 sigslot::signal1<Transport*> SignalGatheringState; 239 // Before any stanza is sent, the manager will request signaling. Once
240 // signaling is available, the client should call OnSignalingReady. Once
241 // this occurs, the transport (or its channels) can send any waiting stanzas.
242 // OnSignalingReady invokes OnTransportSignalingReady and then forwards this
243 // signal to each channel.
244 sigslot::signal1<Transport*> SignalRequestSignaling;
245 void OnSignalingReady();
256 246
257 // Handles sending of ready candidates and receiving of remote candidates. 247 // Handles sending of ready candidates and receiving of remote candidates.
258 sigslot::signal2<Transport*, const std::vector<Candidate>&> 248 sigslot::signal2<Transport*,
259 SignalCandidatesGathered; 249 const std::vector<Candidate>&> SignalCandidatesReady;
260 250
261 // Called when one or more candidates are ready from the remote peer. 251 sigslot::signal1<Transport*> SignalCandidatesAllocationDone;
262 bool AddRemoteCandidates(const std::vector<Candidate>& candidates, 252 void OnRemoteCandidates(const std::vector<Candidate>& candidates);
263 std::string* error);
264 253
265 // If candidate is not acceptable, returns false and sets error. 254 // If candidate is not acceptable, returns false and sets error.
266 // Call this before calling OnRemoteCandidates. 255 // Call this before calling OnRemoteCandidates.
267 virtual bool VerifyCandidate(const Candidate& candidate, 256 virtual bool VerifyCandidate(const Candidate& candidate,
268 std::string* error); 257 std::string* error);
269 258
270 // Signals when the best connection for a channel changes. 259 // Signals when the best connection for a channel changes.
271 sigslot::signal3<Transport*, 260 sigslot::signal3<Transport*,
272 int, // component 261 int, // component
273 const Candidate&> SignalRouteChange; 262 const Candidate&> SignalRouteChange;
274 263
275 // Forwards the signal from TransportChannel to BaseSession. 264 // Forwards the signal from TransportChannel to BaseSession.
276 sigslot::signal0<> SignalRoleConflict; 265 sigslot::signal0<> SignalRoleConflict;
277 266
278 virtual bool GetSslRole(rtc::SSLRole* ssl_role) const { return false; } 267 virtual bool GetSslRole(rtc::SSLRole* ssl_role) const;
279 268
280 // Must be called before channel is starting to connect. 269 // Must be called before channel is starting to connect.
281 virtual bool SetSslMaxProtocolVersion(rtc::SSLProtocolVersion version) { 270 virtual bool SetSslMaxProtocolVersion(rtc::SSLProtocolVersion version);
282 return false;
283 }
284 271
285 protected: 272 protected:
286 // These are called by Create/DestroyChannel above in order to create or 273 // These are called by Create/DestroyChannel above in order to create or
287 // destroy the appropriate type of channel. 274 // destroy the appropriate type of channel.
288 virtual TransportChannelImpl* CreateTransportChannel(int component) = 0; 275 virtual TransportChannelImpl* CreateTransportChannel(int component) = 0;
289 virtual void DestroyTransportChannel(TransportChannelImpl* channel) = 0; 276 virtual void DestroyTransportChannel(TransportChannelImpl* channel) = 0;
290 277
278 // Informs the subclass that we received the signaling ready message.
279 virtual void OnTransportSignalingReady() {}
280
291 // The current local transport description, for use by derived classes 281 // The current local transport description, for use by derived classes
292 // when performing transport description negotiation. 282 // when performing transport description negotiation.
293 const TransportDescription* local_description() const { 283 const TransportDescription* local_description() const {
294 return local_description_.get(); 284 return local_description_.get();
295 } 285 }
296 286
297 // The current remote transport description, for use by derived classes 287 // The current remote transport description, for use by derived classes
298 // when performing transport description negotiation. 288 // when performing transport description negotiation.
299 const TransportDescription* remote_description() const { 289 const TransportDescription* remote_description() const {
300 return remote_description_.get(); 290 return remote_description_.get();
301 } 291 }
302 292
293 virtual void SetCertificate_w(
294 const rtc::scoped_refptr<rtc::RTCCertificate>& certificate) {}
295
296 virtual bool GetCertificate_w(
297 rtc::scoped_refptr<rtc::RTCCertificate>* certificate) {
298 return false;
299 }
300
303 // Pushes down the transport parameters from the local description, such 301 // Pushes down the transport parameters from the local description, such
304 // as the ICE ufrag and pwd. 302 // as the ICE ufrag and pwd.
305 // Derived classes can override, but must call the base as well. 303 // Derived classes can override, but must call the base as well.
306 virtual bool ApplyLocalTransportDescription(TransportChannelImpl* channel, 304 virtual bool ApplyLocalTransportDescription_w(TransportChannelImpl* channel,
307 std::string* error_desc); 305 std::string* error_desc);
308 306
309 // Pushes down remote ice credentials from the remote description to the 307 // Pushes down remote ice credentials from the remote description to the
310 // transport channel. 308 // transport channel.
311 virtual bool ApplyRemoteTransportDescription(TransportChannelImpl* ch, 309 virtual bool ApplyRemoteTransportDescription_w(TransportChannelImpl* ch,
312 std::string* error_desc); 310 std::string* error_desc);
313 311
314 // Negotiates the transport parameters based on the current local and remote 312 // Negotiates the transport parameters based on the current local and remote
315 // transport description, such as the ICE role to use, and whether DTLS 313 // transport description, such as the ICE role to use, and whether DTLS
316 // should be activated. 314 // should be activated.
317 // Derived classes can negotiate their specific parameters here, but must call 315 // Derived classes can negotiate their specific parameters here, but must call
318 // the base as well. 316 // the base as well.
319 virtual bool NegotiateTransportDescription(ContentAction local_role, 317 virtual bool NegotiateTransportDescription_w(ContentAction local_role,
320 std::string* error_desc); 318 std::string* error_desc);
321 319
322 // Pushes down the transport parameters obtained via negotiation. 320 // Pushes down the transport parameters obtained via negotiation.
323 // Derived classes can set their specific parameters here, but must call the 321 // Derived classes can set their specific parameters here, but must call the
324 // base as well. 322 // base as well.
325 virtual bool ApplyNegotiatedTransportDescription( 323 virtual bool ApplyNegotiatedTransportDescription_w(
326 TransportChannelImpl* channel, 324 TransportChannelImpl* channel, std::string* error_desc);
327 std::string* error_desc); 325
326 virtual bool GetSslRole_w(rtc::SSLRole* ssl_role) const {
327 return false;
328 }
329
330 virtual bool SetSslMaxProtocolVersion_w(rtc::SSLProtocolVersion version) {
331 return false;
332 }
328 333
329 private: 334 private:
330 struct ChannelMapEntry { 335 struct ChannelMapEntry {
331 ChannelMapEntry() : impl_(NULL), ref_(0) {} 336 ChannelMapEntry() : impl_(NULL), candidates_allocated_(false), ref_(0) {}
332 explicit ChannelMapEntry(TransportChannelImpl *impl) 337 explicit ChannelMapEntry(TransportChannelImpl *impl)
333 : impl_(impl), 338 : impl_(impl),
339 candidates_allocated_(false),
334 ref_(0) { 340 ref_(0) {
335 } 341 }
336 342
337 void AddRef() { ++ref_; } 343 void AddRef() { ++ref_; }
338 void DecRef() { 344 void DecRef() {
339 ASSERT(ref_ > 0); 345 ASSERT(ref_ > 0);
340 --ref_; 346 --ref_;
341 } 347 }
342 int ref() const { return ref_; } 348 int ref() const { return ref_; }
343 349
344 TransportChannelImpl* get() const { return impl_; } 350 TransportChannelImpl* get() const { return impl_; }
345 TransportChannelImpl* operator->() const { return impl_; } 351 TransportChannelImpl* operator->() const { return impl_; }
352 void set_candidates_allocated(bool status) {
353 candidates_allocated_ = status;
354 }
355 bool candidates_allocated() const { return candidates_allocated_; }
346 356
347 private: 357 private:
348 TransportChannelImpl* impl_; 358 TransportChannelImpl *impl_;
359 bool candidates_allocated_;
349 int ref_; 360 int ref_;
350 }; 361 };
351 362
352 // Candidate component => ChannelMapEntry 363 // Candidate component => ChannelMapEntry
353 typedef std::map<int, ChannelMapEntry> ChannelMap; 364 typedef std::map<int, ChannelMapEntry> ChannelMap;
354 365
355 // Called when the write state of a channel changes. 366 // Called when the write state of a channel changes.
356 void OnChannelWritableState(TransportChannel* channel); 367 void OnChannelWritableState(TransportChannel* channel);
357 368
358 // Called when the receiving state of a channel changes. 369 // Called when the receiving state of a channel changes.
359 void OnChannelReceivingState(TransportChannel* channel); 370 void OnChannelReceivingState(TransportChannel* channel);
360 371
361 // Called when a channel starts finishes gathering candidates 372 // Called when a channel requests signaling.
362 void OnChannelGatheringState(TransportChannelImpl* channel); 373 void OnChannelRequestSignaling(TransportChannelImpl* channel);
363 374
375 // Called when a candidate is ready from remote peer.
376 void OnRemoteCandidate(const Candidate& candidate);
364 // Called when a candidate is ready from channel. 377 // Called when a candidate is ready from channel.
365 void OnChannelCandidateGathered(TransportChannelImpl* channel, 378 void OnChannelCandidateReady(TransportChannelImpl* channel,
366 const Candidate& candidate); 379 const Candidate& candidate);
367 void OnChannelRouteChange(TransportChannel* channel, 380 void OnChannelRouteChange(TransportChannel* channel,
368 const Candidate& remote_candidate); 381 const Candidate& remote_candidate);
382 void OnChannelCandidatesAllocationDone(TransportChannelImpl* channel);
369 // Called when there is ICE role change. 383 // Called when there is ICE role change.
370 void OnRoleConflict(TransportChannelImpl* channel); 384 void OnRoleConflict(TransportChannelImpl* channel);
371 // Called when the channel removes a connection. 385 // Called when the channel removes a connection.
372 void OnChannelConnectionRemoved(TransportChannelImpl* channel); 386 void OnChannelConnectionRemoved(TransportChannelImpl* channel);
373 387
388 // Dispatches messages to the appropriate handler (below).
389 void OnMessage(rtc::Message* msg);
390
391 // These are versions of the above methods that are called only on a
392 // particular thread (s = signaling, w = worker). The above methods post or
393 // send a message to invoke this version.
394 TransportChannelImpl* CreateChannel_w(int component);
395 void DestroyChannel_w(int component);
396 void ConnectChannels_w();
397 void ResetChannels_w();
398 void DestroyAllChannels_w();
399 void OnRemoteCandidate_w(const Candidate& candidate);
400 void OnChannelWritableState_s();
401 void OnChannelReceivingState_s();
402 void OnChannelRequestSignaling_s();
403 void OnConnecting_s();
404 void OnChannelRouteChange_s(const TransportChannel* channel,
405 const Candidate& remote_candidate);
406 void OnChannelCandidatesAllocationDone_s();
407
374 // Helper function that invokes the given function on every channel. 408 // Helper function that invokes the given function on every channel.
375 typedef void (TransportChannelImpl::* TransportChannelFunc)(); 409 typedef void (TransportChannelImpl::* TransportChannelFunc)();
376 void CallChannels(TransportChannelFunc func); 410 void CallChannels_w(TransportChannelFunc func);
377 411
378 // Computes the AND and OR of the channel's read/write/receiving state 412 // Computes the AND and OR of the channel's read/write/receiving state
379 // (argument picks the operation). 413 // (argument picks the operation).
380 TransportState GetTransportState(TransportStateType type); 414 TransportState GetTransportState_s(TransportStateType type);
415
416 void OnChannelCandidateReady_s();
417
418 void SetIceRole_w(IceRole role);
419 void SetRemoteIceMode_w(IceMode mode);
420 bool SetLocalTransportDescription_w(const TransportDescription& desc,
421 ContentAction action,
422 std::string* error_desc);
423 bool SetRemoteTransportDescription_w(const TransportDescription& desc,
424 ContentAction action,
425 std::string* error_desc);
426 bool GetStats_w(TransportStats* infos);
427 bool GetRemoteSSLCertificate_w(rtc::SSLCertificate** cert);
428
429 void SetChannelReceivingTimeout_w(int timeout_ms);
381 430
382 // Sends SignalCompleted if we are now in that state. 431 // Sends SignalCompleted if we are now in that state.
383 void MaybeSignalCompleted(); 432 void MaybeCompleted_w();
384 433
385 // Sends SignalGatheringState if gathering state changed 434 rtc::Thread* const signaling_thread_;
386 void UpdateGatheringState(); 435 rtc::Thread* const worker_thread_;
387 436 const std::string content_name_;
388 void UpdateWritableState();
389 void UpdateReceivingState();
390
391 const std::string name_;
392 PortAllocator* const allocator_; 437 PortAllocator* const allocator_;
393 bool channels_destroyed_ = false; 438 bool destroyed_;
394 TransportState readable_ = TRANSPORT_STATE_NONE; 439 TransportState readable_;
395 TransportState writable_ = TRANSPORT_STATE_NONE; 440 TransportState writable_;
396 TransportState receiving_ = TRANSPORT_STATE_NONE; 441 TransportState receiving_;
397 bool was_writable_ = false; 442 bool was_writable_;
398 bool connect_requested_ = false; 443 bool connect_requested_;
399 IceRole ice_role_ = ICEROLE_UNKNOWN; 444 IceRole ice_role_;
400 uint64 tiebreaker_ = 0; 445 uint64 tiebreaker_;
401 IceMode remote_ice_mode_ = ICEMODE_FULL; 446 IceMode remote_ice_mode_;
402 int channel_receiving_timeout_ = -1; 447 int channel_receiving_timeout_;
403 rtc::scoped_ptr<TransportDescription> local_description_; 448 rtc::scoped_ptr<TransportDescription> local_description_;
404 rtc::scoped_ptr<TransportDescription> remote_description_; 449 rtc::scoped_ptr<TransportDescription> remote_description_;
405 bool local_description_set_ = false;
406 bool remote_description_set_ = false;
407 IceGatheringState gathering_state_ = kIceGatheringNew;
408 450
451 // TODO(tommi): Make sure we only use this on the worker thread.
409 ChannelMap channels_; 452 ChannelMap channels_;
453 // Buffers the ready_candidates so that SignalCanidatesReady can
454 // provide them in multiples.
455 std::vector<Candidate> ready_candidates_;
456 // Protects changes to channels and messages
457 rtc::CriticalSection crit_;
410 458
411 RTC_DISALLOW_COPY_AND_ASSIGN(Transport); 459 RTC_DISALLOW_COPY_AND_ASSIGN(Transport);
412 }; 460 };
413 461
414 462
415 } // namespace cricket 463 } // namespace cricket
416 464
417 #endif // WEBRTC_P2P_BASE_TRANSPORT_H_ 465 #endif // WEBRTC_P2P_BASE_TRANSPORT_H_
OLDNEW
« no previous file with comments | « webrtc/p2p/base/session_unittest.cc ('k') | webrtc/p2p/base/transport.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698