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

Side by Side Diff: webrtc/api/webrtcsession.h

Issue 2564333002: Reland of: Separating SCTP code from BaseChannel/MediaChannel. (Closed)
Patch Set: Merge with master. Created 3 years, 11 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/api/webrtcsdp.cc ('k') | webrtc/api/webrtcsession.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 2012 The WebRTC project authors. All Rights Reserved. 2 * Copyright 2012 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 #ifndef WEBRTC_API_WEBRTCSESSION_H_ 11 #ifndef WEBRTC_API_WEBRTCSESSION_H_
12 #define WEBRTC_API_WEBRTCSESSION_H_ 12 #define WEBRTC_API_WEBRTCSESSION_H_
13 13
14 #include <memory> 14 #include <memory>
15 #include <set> 15 #include <set>
16 #include <string> 16 #include <string>
17 #include <vector> 17 #include <vector>
18 18
19 #include "webrtc/api/datachannel.h" 19 #include "webrtc/api/datachannel.h"
20 #include "webrtc/api/dtmfsender.h" 20 #include "webrtc/api/dtmfsender.h"
21 #include "webrtc/api/mediacontroller.h" 21 #include "webrtc/api/mediacontroller.h"
22 #include "webrtc/api/peerconnectioninterface.h" 22 #include "webrtc/api/peerconnectioninterface.h"
23 #include "webrtc/api/statstypes.h" 23 #include "webrtc/api/statstypes.h"
24 #include "webrtc/base/constructormagic.h" 24 #include "webrtc/base/constructormagic.h"
25 #include "webrtc/base/optional.h"
25 #include "webrtc/base/sigslot.h" 26 #include "webrtc/base/sigslot.h"
26 #include "webrtc/base/sslidentity.h" 27 #include "webrtc/base/sslidentity.h"
27 #include "webrtc/base/thread.h" 28 #include "webrtc/base/thread.h"
28 #include "webrtc/media/base/mediachannel.h" 29 #include "webrtc/media/base/mediachannel.h"
29 #include "webrtc/p2p/base/candidate.h" 30 #include "webrtc/p2p/base/candidate.h"
30 #include "webrtc/p2p/base/transportcontroller.h" 31 #include "webrtc/p2p/base/transportcontroller.h"
31 #include "webrtc/pc/mediasession.h" 32 #include "webrtc/pc/mediasession.h"
32 33
33 #ifdef HAVE_QUIC 34 #ifdef HAVE_QUIC
34 #include "webrtc/api/quicdatatransport.h" 35 #include "webrtc/api/quicdatatransport.h"
35 #endif // HAVE_QUIC 36 #endif // HAVE_QUIC
36 37
37 namespace cricket { 38 namespace cricket {
38 39
39 class ChannelManager; 40 class ChannelManager;
40 class DataChannel; 41 class RtpDataChannel;
42 class SctpTransportInternal;
43 class SctpTransportInternalFactory;
41 class StatsReport; 44 class StatsReport;
42 class VideoChannel; 45 class VideoChannel;
43 class VoiceChannel; 46 class VoiceChannel;
44 47
45 #ifdef HAVE_QUIC 48 #ifdef HAVE_QUIC
46 class QuicTransportChannel; 49 class QuicTransportChannel;
47 #endif // HAVE_QUIC 50 #endif // HAVE_QUIC
48 51
49 } // namespace cricket 52 } // namespace cricket
50 53
51 namespace webrtc { 54 namespace webrtc {
52 55
53 class IceRestartAnswerLatch; 56 class IceRestartAnswerLatch;
54 class JsepIceCandidate; 57 class JsepIceCandidate;
55 class MediaStreamSignaling; 58 class MediaStreamSignaling;
56 class WebRtcSessionDescriptionFactory; 59 class WebRtcSessionDescriptionFactory;
57 60
58 extern const char kBundleWithoutRtcpMux[]; 61 extern const char kBundleWithoutRtcpMux[];
59 extern const char kCreateChannelFailed[]; 62 extern const char kCreateChannelFailed[];
60 extern const char kInvalidCandidates[]; 63 extern const char kInvalidCandidates[];
61 extern const char kInvalidSdp[]; 64 extern const char kInvalidSdp[];
62 extern const char kMlineMismatch[]; 65 extern const char kMlineMismatch[];
63 extern const char kPushDownTDFailed[]; 66 extern const char kPushDownTDFailed[];
64 extern const char kSdpWithoutDtlsFingerprint[]; 67 extern const char kSdpWithoutDtlsFingerprint[];
65 extern const char kSdpWithoutSdesCrypto[]; 68 extern const char kSdpWithoutSdesCrypto[];
66 extern const char kSdpWithoutIceUfragPwd[]; 69 extern const char kSdpWithoutIceUfragPwd[];
67 extern const char kSdpWithoutSdesAndDtlsDisabled[]; 70 extern const char kSdpWithoutSdesAndDtlsDisabled[];
68 extern const char kSessionError[]; 71 extern const char kSessionError[];
69 extern const char kSessionErrorDesc[]; 72 extern const char kSessionErrorDesc[];
70 extern const char kDtlsSetupFailureRtp[]; 73 extern const char kDtlsSrtpSetupFailureRtp[];
71 extern const char kDtlsSetupFailureRtcp[]; 74 extern const char kDtlsSrtpSetupFailureRtcp[];
72 extern const char kEnableBundleFailed[]; 75 extern const char kEnableBundleFailed[];
73 76
74 // Maximum number of received video streams that will be processed by webrtc 77 // Maximum number of received video streams that will be processed by webrtc
75 // even if they are not signalled beforehand. 78 // even if they are not signalled beforehand.
76 extern const int kMaxUnsignalledRecvStreams; 79 extern const int kMaxUnsignalledRecvStreams;
77 80
78 // ICE state callback interface. 81 // ICE state callback interface.
79 class IceObserver { 82 class IceObserver {
80 public: 83 public:
81 IceObserver() {} 84 IceObserver() {}
(...skipping 69 matching lines...) Expand 10 before | Expand all | Expand 10 after
151 STATE_INPROGRESS, // Offer/answer exchange completed. 154 STATE_INPROGRESS, // Offer/answer exchange completed.
152 STATE_CLOSED, // Close() was called. 155 STATE_CLOSED, // Close() was called.
153 }; 156 };
154 157
155 enum Error { 158 enum Error {
156 ERROR_NONE = 0, // no error 159 ERROR_NONE = 0, // no error
157 ERROR_CONTENT = 1, // channel errors in SetLocalContent/SetRemoteContent 160 ERROR_CONTENT = 1, // channel errors in SetLocalContent/SetRemoteContent
158 ERROR_TRANSPORT = 2, // transport error of some kind 161 ERROR_TRANSPORT = 2, // transport error of some kind
159 }; 162 };
160 163
164 // |sctp_factory| may be null, in which case SCTP is treated as unsupported.
161 WebRtcSession( 165 WebRtcSession(
162 webrtc::MediaControllerInterface* media_controller, 166 webrtc::MediaControllerInterface* media_controller,
163 rtc::Thread* network_thread, 167 rtc::Thread* network_thread,
164 rtc::Thread* worker_thread, 168 rtc::Thread* worker_thread,
165 rtc::Thread* signaling_thread, 169 rtc::Thread* signaling_thread,
166 cricket::PortAllocator* port_allocator, 170 cricket::PortAllocator* port_allocator,
167 std::unique_ptr<cricket::TransportController> transport_controller); 171 std::unique_ptr<cricket::TransportController> transport_controller,
172 std::unique_ptr<cricket::SctpTransportInternalFactory> sctp_factory);
168 virtual ~WebRtcSession(); 173 virtual ~WebRtcSession();
169 174
170 // These are const to allow them to be called from const methods. 175 // These are const to allow them to be called from const methods.
171 rtc::Thread* network_thread() const { return network_thread_; } 176 rtc::Thread* network_thread() const { return network_thread_; }
172 rtc::Thread* worker_thread() const { return worker_thread_; } 177 rtc::Thread* worker_thread() const { return worker_thread_; }
173 rtc::Thread* signaling_thread() const { return signaling_thread_; } 178 rtc::Thread* signaling_thread() const { return signaling_thread_; }
174 179
175 // The ID of this session. 180 // The ID of this session.
176 const std::string& id() const { return sid_; } 181 const std::string& id() const { return sid_; }
177 182
(...skipping 14 matching lines...) Expand all
192 sigslot::signal2<WebRtcSession*, State> SignalState; 197 sigslot::signal2<WebRtcSession*, State> SignalState;
193 198
194 // Returns the last error in the session. See the enum above for details. 199 // Returns the last error in the session. See the enum above for details.
195 Error error() const { return error_; } 200 Error error() const { return error_; }
196 const std::string& error_desc() const { return error_desc_; } 201 const std::string& error_desc() const { return error_desc_; }
197 202
198 void RegisterIceObserver(IceObserver* observer) { 203 void RegisterIceObserver(IceObserver* observer) {
199 ice_observer_ = observer; 204 ice_observer_ = observer;
200 } 205 }
201 206
207 // Exposed for stats collecting.
202 virtual cricket::VoiceChannel* voice_channel() { 208 virtual cricket::VoiceChannel* voice_channel() {
203 return voice_channel_.get(); 209 return voice_channel_.get();
204 } 210 }
205 virtual cricket::VideoChannel* video_channel() { 211 virtual cricket::VideoChannel* video_channel() {
206 return video_channel_.get(); 212 return video_channel_.get();
207 } 213 }
208 virtual cricket::DataChannel* data_channel() { 214 // Only valid when using deprecated RTP data channels.
209 return data_channel_.get(); 215 virtual cricket::RtpDataChannel* rtp_data_channel() {
216 return rtp_data_channel_.get();
217 }
218 virtual rtc::Optional<std::string> sctp_content_name() const {
219 return sctp_content_name_;
220 }
221 virtual rtc::Optional<std::string> sctp_transport_name() const {
222 return sctp_transport_name_;
210 } 223 }
211 224
212 cricket::BaseChannel* GetChannel(const std::string& content_name); 225 cricket::BaseChannel* GetChannel(const std::string& content_name);
213 226
214 cricket::SecurePolicy SdesPolicy() const; 227 cricket::SecurePolicy SdesPolicy() const;
215 228
216 // Get current ssl role from transport. 229 // Get current SSL role used by SCTP's underlying transport.
217 bool GetSslRole(const std::string& transport_name, rtc::SSLRole* role); 230 bool GetSctpSslRole(rtc::SSLRole* role);
218 231 // Get SSL role for an arbitrary m= section (handles bundling correctly).
219 // Get current SSL role for this channel's transport. 232 // TODO(deadbeef): This is only used internally by the session description
220 // If |transport| is null, returns false. 233 // factory, it shouldn't really be public).
221 bool GetSslRole(const cricket::BaseChannel* channel, rtc::SSLRole* role); 234 bool GetSslRole(const std::string& content_name, rtc::SSLRole* role);
222 235
223 void CreateOffer( 236 void CreateOffer(
224 CreateSessionDescriptionObserver* observer, 237 CreateSessionDescriptionObserver* observer,
225 const PeerConnectionInterface::RTCOfferAnswerOptions& options, 238 const PeerConnectionInterface::RTCOfferAnswerOptions& options,
226 const cricket::MediaSessionOptions& session_options); 239 const cricket::MediaSessionOptions& session_options);
227 void CreateAnswer(CreateSessionDescriptionObserver* observer, 240 void CreateAnswer(CreateSessionDescriptionObserver* observer,
228 const cricket::MediaSessionOptions& session_options); 241 const cricket::MediaSessionOptions& session_options);
229 // The ownership of |desc| will be transferred after this call. 242 // The ownership of |desc| will be transferred after this call.
230 bool SetLocalDescription(SessionDescriptionInterface* desc, 243 bool SetLocalDescription(SessionDescriptionInterface* desc,
231 std::string* err_desc); 244 std::string* err_desc);
232 // The ownership of |desc| will be transferred after this call. 245 // The ownership of |desc| will be transferred after this call.
233 bool SetRemoteDescription(SessionDescriptionInterface* desc, 246 bool SetRemoteDescription(SessionDescriptionInterface* desc,
234 std::string* err_desc); 247 std::string* err_desc);
248
235 bool ProcessIceMessage(const IceCandidateInterface* ice_candidate); 249 bool ProcessIceMessage(const IceCandidateInterface* ice_candidate);
236 250
237 bool RemoveRemoteIceCandidates( 251 bool RemoveRemoteIceCandidates(
238 const std::vector<cricket::Candidate>& candidates); 252 const std::vector<cricket::Candidate>& candidates);
239 253
240 cricket::IceConfig ParseIceConfig( 254 cricket::IceConfig ParseIceConfig(
241 const PeerConnectionInterface::RTCConfiguration& config) const; 255 const PeerConnectionInterface::RTCConfiguration& config) const;
242 256
243 void SetIceConfig(const cricket::IceConfig& ice_config); 257 void SetIceConfig(const cricket::IceConfig& ice_config);
244 258
(...skipping 74 matching lines...) Expand 10 before | Expand all | Expand 10 after
319 // Returns true if the ICE restart flag above was set, and no ICE restart has 333 // Returns true if the ICE restart flag above was set, and no ICE restart has
320 // occurred yet for this transport (by applying a local description with 334 // occurred yet for this transport (by applying a local description with
321 // changed ufrag/password). If the transport has been deleted as a result of 335 // changed ufrag/password). If the transport has been deleted as a result of
322 // bundling, returns false. 336 // bundling, returns false.
323 bool NeedsIceRestart(const std::string& content_name) const; 337 bool NeedsIceRestart(const std::string& content_name) const;
324 338
325 // Called when an RTCCertificate is generated or retrieved by 339 // Called when an RTCCertificate is generated or retrieved by
326 // WebRTCSessionDescriptionFactory. Should happen before setLocalDescription. 340 // WebRTCSessionDescriptionFactory. Should happen before setLocalDescription.
327 void OnCertificateReady( 341 void OnCertificateReady(
328 const rtc::scoped_refptr<rtc::RTCCertificate>& certificate); 342 const rtc::scoped_refptr<rtc::RTCCertificate>& certificate);
329 void OnDtlsSetupFailure(cricket::BaseChannel*, bool rtcp); 343 void OnDtlsSrtpSetupFailure(cricket::BaseChannel*, bool rtcp);
330 344
331 // For unit test. 345 // For unit test.
332 bool waiting_for_certificate_for_testing() const; 346 bool waiting_for_certificate_for_testing() const;
333 const rtc::scoped_refptr<rtc::RTCCertificate>& certificate_for_testing(); 347 const rtc::scoped_refptr<rtc::RTCCertificate>& certificate_for_testing();
334 348
335 void set_metrics_observer( 349 void set_metrics_observer(
336 webrtc::MetricsObserverInterface* metrics_observer) { 350 webrtc::MetricsObserverInterface* metrics_observer) {
337 metrics_observer_ = metrics_observer; 351 metrics_observer_ = metrics_observer;
338 transport_controller_->SetMetricsObserver(metrics_observer); 352 transport_controller_->SetMetricsObserver(metrics_observer);
339 } 353 }
340 354
341 // Called when voice_channel_, video_channel_ and data_channel_ are created 355 // Called when voice_channel_, video_channel_ and
342 // and destroyed. As a result of, for example, setting a new description. 356 // rtp_data_channel_/sctp_transport_ are created and destroyed. As a result
357 // of, for example, setting a new description.
343 sigslot::signal0<> SignalVoiceChannelCreated; 358 sigslot::signal0<> SignalVoiceChannelCreated;
344 sigslot::signal0<> SignalVoiceChannelDestroyed; 359 sigslot::signal0<> SignalVoiceChannelDestroyed;
345 sigslot::signal0<> SignalVideoChannelCreated; 360 sigslot::signal0<> SignalVideoChannelCreated;
346 sigslot::signal0<> SignalVideoChannelDestroyed; 361 sigslot::signal0<> SignalVideoChannelDestroyed;
347 sigslot::signal0<> SignalDataChannelCreated; 362 sigslot::signal0<> SignalDataChannelCreated;
348 sigslot::signal0<> SignalDataChannelDestroyed; 363 sigslot::signal0<> SignalDataChannelDestroyed;
349 // Called when the whole session is destroyed. 364 // Called when the whole session is destroyed.
350 sigslot::signal0<> SignalDestroyed; 365 sigslot::signal0<> SignalDestroyed;
351 366
352 // Called when a valid data channel OPEN message is received. 367 // Called when a valid data channel OPEN message is received.
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after
390 virtual void SetError(Error error, const std::string& error_desc); 405 virtual void SetError(Error error, const std::string& error_desc);
391 406
392 bool UpdateSessionState(Action action, cricket::ContentSource source, 407 bool UpdateSessionState(Action action, cricket::ContentSource source,
393 std::string* err_desc); 408 std::string* err_desc);
394 static Action GetAction(const std::string& type); 409 static Action GetAction(const std::string& type);
395 // Push the media parts of the local or remote session description 410 // Push the media parts of the local or remote session description
396 // down to all of the channels. 411 // down to all of the channels.
397 bool PushdownMediaDescription(cricket::ContentAction action, 412 bool PushdownMediaDescription(cricket::ContentAction action,
398 cricket::ContentSource source, 413 cricket::ContentSource source,
399 std::string* error_desc); 414 std::string* error_desc);
415 bool PushdownSctpParameters_n(cricket::ContentSource source);
400 416
401 bool PushdownTransportDescription(cricket::ContentSource source, 417 bool PushdownTransportDescription(cricket::ContentSource source,
402 cricket::ContentAction action, 418 cricket::ContentAction action,
403 std::string* error_desc); 419 std::string* error_desc);
404 420
405 // Helper methods to push local and remote transport descriptions. 421 // Helper methods to push local and remote transport descriptions.
406 bool PushdownLocalTransportDescription( 422 bool PushdownLocalTransportDescription(
407 const cricket::SessionDescription* sdesc, 423 const cricket::SessionDescription* sdesc,
408 cricket::ContentAction action, 424 cricket::ContentAction action,
409 std::string* error_desc); 425 std::string* error_desc);
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after
454 bool CreateVoiceChannel(const cricket::ContentInfo* content, 470 bool CreateVoiceChannel(const cricket::ContentInfo* content,
455 const std::string* bundle_transport); 471 const std::string* bundle_transport);
456 bool CreateVideoChannel(const cricket::ContentInfo* content, 472 bool CreateVideoChannel(const cricket::ContentInfo* content,
457 const std::string* bundle_transport); 473 const std::string* bundle_transport);
458 bool CreateDataChannel(const cricket::ContentInfo* content, 474 bool CreateDataChannel(const cricket::ContentInfo* content,
459 const std::string* bundle_transport); 475 const std::string* bundle_transport);
460 476
461 std::unique_ptr<SessionStats> GetStats_n( 477 std::unique_ptr<SessionStats> GetStats_n(
462 const ChannelNamePairs& channel_name_pairs); 478 const ChannelNamePairs& channel_name_pairs);
463 479
464 // Listens to SCTP CONTROL messages on unused SIDs and process them as OPEN 480 bool CreateSctpTransport_n(const std::string& content_name,
465 // messages. 481 const std::string& transport_name);
466 void OnDataChannelMessageReceived(cricket::DataChannel* channel, 482 // For bundling.
467 const cricket::ReceiveDataParams& params, 483 void ChangeSctpTransport_n(const std::string& transport_name);
468 const rtc::CopyOnWriteBuffer& payload); 484 void DestroySctpTransport_n();
485 // SctpTransport signal handlers. Needed to marshal signals from the network
486 // to signaling thread.
487 void OnSctpTransportReadyToSendData_n();
488 // This may be called with "false" if the direction of the m= section causes
489 // us to tear down the SCTP connection.
490 void OnSctpTransportReadyToSendData_s(bool ready);
491 void OnSctpTransportDataReceived_n(const cricket::ReceiveDataParams& params,
492 const rtc::CopyOnWriteBuffer& payload);
493 // Beyond just firing the signal to the signaling thread, listens to SCTP
494 // CONTROL messages on unused SIDs and processes them as OPEN messages.
495 void OnSctpTransportDataReceived_s(const cricket::ReceiveDataParams& params,
496 const rtc::CopyOnWriteBuffer& payload);
497 void OnSctpStreamClosedRemotely_n(int sid);
469 498
470 std::string BadStateErrMsg(State state); 499 std::string BadStateErrMsg(State state);
471 void SetIceConnectionState(PeerConnectionInterface::IceConnectionState state); 500 void SetIceConnectionState(PeerConnectionInterface::IceConnectionState state);
472 void SetIceConnectionReceiving(bool receiving); 501 void SetIceConnectionReceiving(bool receiving);
473 502
474 bool ValidateBundleSettings(const cricket::SessionDescription* desc); 503 bool ValidateBundleSettings(const cricket::SessionDescription* desc);
475 bool HasRtcpMuxEnabled(const cricket::ContentInfo* content); 504 bool HasRtcpMuxEnabled(const cricket::ContentInfo* content);
476 // Below methods are helper methods which verifies SDP. 505 // Below methods are helper methods which verifies SDP.
477 bool ValidateSessionDescription(const SessionDescriptionInterface* sdesc, 506 bool ValidateSessionDescription(const SessionDescriptionInterface* sdesc,
478 cricket::ContentSource source, 507 cricket::ContentSource source,
(...skipping 12 matching lines...) Expand all
491 // description should be used. Output |valid| is true if the candidate media 520 // description should be used. Output |valid| is true if the candidate media
492 // index is valid. 521 // index is valid.
493 bool ReadyToUseRemoteCandidate(const IceCandidateInterface* candidate, 522 bool ReadyToUseRemoteCandidate(const IceCandidateInterface* candidate,
494 const SessionDescriptionInterface* remote_desc, 523 const SessionDescriptionInterface* remote_desc,
495 bool* valid); 524 bool* valid);
496 525
497 // Returns true if SRTP (either using DTLS-SRTP or SDES) is required by 526 // Returns true if SRTP (either using DTLS-SRTP or SDES) is required by
498 // this session. 527 // this session.
499 bool SrtpRequired() const; 528 bool SrtpRequired() const;
500 529
530 // TransportController signal handlers.
501 void OnTransportControllerConnectionState(cricket::IceConnectionState state); 531 void OnTransportControllerConnectionState(cricket::IceConnectionState state);
502 void OnTransportControllerReceiving(bool receiving); 532 void OnTransportControllerReceiving(bool receiving);
503 void OnTransportControllerGatheringState(cricket::IceGatheringState state); 533 void OnTransportControllerGatheringState(cricket::IceGatheringState state);
504 void OnTransportControllerCandidatesGathered( 534 void OnTransportControllerCandidatesGathered(
505 const std::string& transport_name, 535 const std::string& transport_name,
506 const std::vector<cricket::Candidate>& candidates); 536 const std::vector<cricket::Candidate>& candidates);
507 void OnTransportControllerCandidatesRemoved( 537 void OnTransportControllerCandidatesRemoved(
508 const std::vector<cricket::Candidate>& candidates); 538 const std::vector<cricket::Candidate>& candidates);
539 void OnTransportControllerDtlsHandshakeError(rtc::SSLHandshakeError error);
509 540
510 std::string GetSessionErrorMsg(); 541 std::string GetSessionErrorMsg();
511 542
512 // Invoked when TransportController connection completion is signaled. 543 // Invoked when TransportController connection completion is signaled.
513 // Reports stats for all transports in use. 544 // Reports stats for all transports in use.
514 void ReportTransportStats(); 545 void ReportTransportStats();
515 546
516 // Gather the usage of IPv4/IPv6 as best connection. 547 // Gather the usage of IPv4/IPv6 as best connection.
517 void ReportBestConnectionState(const cricket::TransportStats& stats); 548 void ReportBestConnectionState(const cricket::TransportStats& stats);
518 549
519 void ReportNegotiatedCiphers(const cricket::TransportStats& stats); 550 void ReportNegotiatedCiphers(const cricket::TransportStats& stats);
520 551
521 void OnSentPacket_w(const rtc::SentPacket& sent_packet); 552 void OnSentPacket_w(const rtc::SentPacket& sent_packet);
522 553
523 const std::string GetTransportName(const std::string& content_name); 554 const std::string GetTransportName(const std::string& content_name);
524 555
525 void OnDtlsHandshakeError(rtc::SSLHandshakeError error);
526
527 rtc::Thread* const network_thread_; 556 rtc::Thread* const network_thread_;
528 rtc::Thread* const worker_thread_; 557 rtc::Thread* const worker_thread_;
529 rtc::Thread* const signaling_thread_; 558 rtc::Thread* const signaling_thread_;
530 559
531 State state_ = STATE_INIT; 560 State state_ = STATE_INIT;
532 Error error_ = ERROR_NONE; 561 Error error_ = ERROR_NONE;
533 std::string error_desc_; 562 std::string error_desc_;
534 563
535 const std::string sid_; 564 const std::string sid_;
536 bool initial_offerer_ = false; 565 bool initial_offerer_ = false;
537 566
538 const std::unique_ptr<cricket::TransportController> transport_controller_; 567 const std::unique_ptr<cricket::TransportController> transport_controller_;
568 const std::unique_ptr<cricket::SctpTransportInternalFactory> sctp_factory_;
539 MediaControllerInterface* media_controller_; 569 MediaControllerInterface* media_controller_;
540 std::unique_ptr<cricket::VoiceChannel> voice_channel_; 570 std::unique_ptr<cricket::VoiceChannel> voice_channel_;
541 std::unique_ptr<cricket::VideoChannel> video_channel_; 571 std::unique_ptr<cricket::VideoChannel> video_channel_;
542 std::unique_ptr<cricket::DataChannel> data_channel_; 572 // |rtp_data_channel_| is used if in RTP data channel mode, |sctp_transport_|
573 // when using SCTP.
574 std::unique_ptr<cricket::RtpDataChannel> rtp_data_channel_;
575
576 std::unique_ptr<cricket::SctpTransportInternal> sctp_transport_;
577 // |sctp_transport_name_| keeps track of what DTLS transport the SCTP
578 // transport is using (which can change due to bundling).
579 rtc::Optional<std::string> sctp_transport_name_;
580 // |sctp_content_name_| is the content name (MID) in SDP.
581 rtc::Optional<std::string> sctp_content_name_;
582 // Value cached on signaling thread. Only updated when SctpReadyToSendData
583 // fires on the signaling thread.
584 bool sctp_ready_to_send_data_ = false;
585 // Same as signals provided by SctpTransport, but these are guaranteed to
586 // fire on the signaling thread, whereas SctpTransport fires on the networking
587 // thread.
588 // |sctp_invoker_| is used so that any signals queued on the signaling thread
589 // from the network thread are immediately discarded if the SctpTransport is
590 // destroyed (due to m= section being rejected).
591 // TODO(deadbeef): Use a proxy object to ensure that method calls/signals
592 // are marshalled to the right thread. Could almost use proxy.h for this,
593 // but it doesn't have a mechanism for marshalling sigslot::signals
594 std::unique_ptr<rtc::AsyncInvoker> sctp_invoker_;
595 sigslot::signal1<bool> SignalSctpReadyToSendData;
596 sigslot::signal2<const cricket::ReceiveDataParams&,
597 const rtc::CopyOnWriteBuffer&>
598 SignalSctpDataReceived;
599 sigslot::signal1<int> SignalSctpStreamClosedRemotely;
600
543 cricket::ChannelManager* channel_manager_; 601 cricket::ChannelManager* channel_manager_;
544 IceObserver* ice_observer_; 602 IceObserver* ice_observer_;
545 PeerConnectionInterface::IceConnectionState ice_connection_state_; 603 PeerConnectionInterface::IceConnectionState ice_connection_state_;
546 bool ice_connection_receiving_; 604 bool ice_connection_receiving_;
547 std::unique_ptr<SessionDescriptionInterface> current_local_description_; 605 std::unique_ptr<SessionDescriptionInterface> current_local_description_;
548 std::unique_ptr<SessionDescriptionInterface> pending_local_description_; 606 std::unique_ptr<SessionDescriptionInterface> pending_local_description_;
549 std::unique_ptr<SessionDescriptionInterface> current_remote_description_; 607 std::unique_ptr<SessionDescriptionInterface> current_remote_description_;
550 std::unique_ptr<SessionDescriptionInterface> pending_remote_description_; 608 std::unique_ptr<SessionDescriptionInterface> pending_remote_description_;
551 // If the remote peer is using a older version of implementation. 609 // If the remote peer is using a older version of implementation.
552 bool older_version_remote_peer_; 610 bool older_version_remote_peer_;
(...skipping 29 matching lines...) Expand all
582 640
583 #ifdef HAVE_QUIC 641 #ifdef HAVE_QUIC
584 std::unique_ptr<QuicDataTransport> quic_data_transport_; 642 std::unique_ptr<QuicDataTransport> quic_data_transport_;
585 #endif // HAVE_QUIC 643 #endif // HAVE_QUIC
586 644
587 RTC_DISALLOW_COPY_AND_ASSIGN(WebRtcSession); 645 RTC_DISALLOW_COPY_AND_ASSIGN(WebRtcSession);
588 }; 646 };
589 } // namespace webrtc 647 } // namespace webrtc
590 648
591 #endif // WEBRTC_API_WEBRTCSESSION_H_ 649 #endif // WEBRTC_API_WEBRTCSESSION_H_
OLDNEW
« no previous file with comments | « webrtc/api/webrtcsdp.cc ('k') | webrtc/api/webrtcsession.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698