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

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

Issue 2770903003: Accept remote offers with current DTLS role, rather than "actpass". (Closed)
Patch Set: Adding link to spec and section number. Created 3 years, 8 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/dtlstransportchannel_unittest.cc ('k') | webrtc/p2p/base/jseptransport.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
(...skipping 280 matching lines...) Expand 10 before | Expand all | Expand 10 after
291 // occurs. 291 // occurs.
292 // 292 //
293 // This and the below method can be called safely from any thread as long as 293 // This and the below method can be called safely from any thread as long as
294 // SetXTransportDescription is not in progress. 294 // SetXTransportDescription is not in progress.
295 void SetNeedsIceRestartFlag(); 295 void SetNeedsIceRestartFlag();
296 // Returns true if the ICE restart flag above was set, and no ICE restart has 296 // Returns true if the ICE restart flag above was set, and no ICE restart has
297 // occurred yet for this transport (by applying a local description with 297 // occurred yet for this transport (by applying a local description with
298 // changed ufrag/password). 298 // changed ufrag/password).
299 bool NeedsIceRestart() const; 299 bool NeedsIceRestart() const;
300 300
301 void GetSslRole(rtc::SSLRole* ssl_role) const; 301 // Returns role if negotiated, or empty Optional if it hasn't been negotiated
302 // yet.
303 rtc::Optional<rtc::SSLRole> GetSslRole() const;
302 304
303 // TODO(deadbeef): Make this const. See comment in transportcontroller.h. 305 // TODO(deadbeef): Make this const. See comment in transportcontroller.h.
304 bool GetStats(TransportStats* stats); 306 bool GetStats(TransportStats* stats);
305 307
306 // The current local transport description, possibly used 308 // The current local transport description, possibly used
307 // by the transport controller. 309 // by the transport controller.
308 const TransportDescription* local_description() const { 310 const TransportDescription* local_description() const {
309 return local_description_.get(); 311 return local_description_.get();
310 } 312 }
311 313
312 // The current remote transport description, possibly used 314 // The current remote transport description, possibly used
313 // by the transport controller. 315 // by the transport controller.
314 const TransportDescription* remote_description() const { 316 const TransportDescription* remote_description() const {
315 return remote_description_.get(); 317 return remote_description_.get();
316 } 318 }
317 319
318 // TODO(deadbeef): The methods below are only public for testing. Should make 320 // TODO(deadbeef): The methods below are only public for testing. Should make
319 // them utility functions or objects so they can be tested independently from 321 // them utility functions or objects so they can be tested independently from
320 // this class. 322 // this class.
321 323
322 // Returns false if the certificate's identity does not match the fingerprint, 324 // Returns false if the certificate's identity does not match the fingerprint,
323 // or either is NULL. 325 // or either is NULL.
324 bool VerifyCertificateFingerprint(const rtc::RTCCertificate* certificate, 326 bool VerifyCertificateFingerprint(const rtc::RTCCertificate* certificate,
325 const rtc::SSLFingerprint* fingerprint, 327 const rtc::SSLFingerprint* fingerprint,
326 std::string* error_desc) const; 328 std::string* error_desc) const;
327 329
328 // Negotiates the SSL role based off the offer and answer as specified by
329 // RFC 4145, section-4.1. Returns false if the SSL role cannot be determined
330 // from the local description and remote description.
331 bool NegotiateRole(ContentAction local_role,
332 rtc::SSLRole* ssl_role,
333 std::string* error_desc) const;
334
335 private: 330 private:
336 // Negotiates the transport parameters based on the current local and remote 331 // Negotiates the transport parameters based on the current local and remote
337 // transport description, such as the ICE role to use, and whether DTLS 332 // transport description, such as the ICE role to use, and whether DTLS
338 // should be activated. 333 // should be activated.
339 // 334 //
340 // Called when an answer TransportDescription is applied. 335 // Called when an answer TransportDescription is applied.
341 bool NegotiateTransportDescription(ContentAction local_role, 336 bool NegotiateTransportDescription(ContentAction local_description_type,
342 std::string* error_desc); 337 std::string* error_desc);
343 338
339 // Negotiates the SSL role based off the offer and answer as specified by
340 // RFC 4145, section-4.1. Returns false if the SSL role cannot be determined
341 // from the local description and remote description.
342 bool NegotiateRole(ContentAction local_description_type,
343 std::string* error_desc);
344
344 // Pushes down the transport parameters from the local description, such 345 // Pushes down the transport parameters from the local description, such
345 // as the ICE ufrag and pwd. 346 // as the ICE ufrag and pwd.
346 bool ApplyLocalTransportDescription(DtlsTransportInternal* dtls_transport, 347 bool ApplyLocalTransportDescription(DtlsTransportInternal* dtls_transport,
347 std::string* error_desc); 348 std::string* error_desc);
348 349
349 // Pushes down the transport parameters from the remote description to the 350 // Pushes down the transport parameters from the remote description to the
350 // transport channel. 351 // transport channel.
351 bool ApplyRemoteTransportDescription(DtlsTransportInternal* dtls_transport, 352 bool ApplyRemoteTransportDescription(DtlsTransportInternal* dtls_transport,
352 std::string* error_desc); 353 std::string* error_desc);
353 354
354 // Pushes down the transport parameters obtained via negotiation. 355 // Pushes down the transport parameters obtained via negotiation.
355 bool ApplyNegotiatedTransportDescription( 356 bool ApplyNegotiatedTransportDescription(
356 DtlsTransportInternal* dtls_transport, 357 DtlsTransportInternal* dtls_transport,
357 std::string* error_desc); 358 std::string* error_desc);
358 359
359 const std::string mid_; 360 const std::string mid_;
360 // needs-ice-restart bit as described in JSEP. 361 // needs-ice-restart bit as described in JSEP.
361 bool needs_ice_restart_ = false; 362 bool needs_ice_restart_ = false;
362 rtc::scoped_refptr<rtc::RTCCertificate> certificate_; 363 rtc::scoped_refptr<rtc::RTCCertificate> certificate_;
363 rtc::SSLRole secure_role_ = rtc::SSL_CLIENT; 364 rtc::Optional<rtc::SSLRole> ssl_role_;
364 std::unique_ptr<rtc::SSLFingerprint> remote_fingerprint_; 365 std::unique_ptr<rtc::SSLFingerprint> remote_fingerprint_;
365 std::unique_ptr<TransportDescription> local_description_; 366 std::unique_ptr<TransportDescription> local_description_;
366 std::unique_ptr<TransportDescription> remote_description_; 367 std::unique_ptr<TransportDescription> remote_description_;
367 bool local_description_set_ = false; 368 bool local_description_set_ = false;
368 bool remote_description_set_ = false; 369 bool remote_description_set_ = false;
369 370
370 // Candidate component => DTLS channel 371 // Candidate component => DTLS channel
371 std::map<int, DtlsTransportInternal*> channels_; 372 std::map<int, DtlsTransportInternal*> channels_;
372 373
373 RTC_DISALLOW_COPY_AND_ASSIGN(JsepTransport); 374 RTC_DISALLOW_COPY_AND_ASSIGN(JsepTransport);
374 }; 375 };
375 376
376 } // namespace cricket 377 } // namespace cricket
377 378
378 #endif // WEBRTC_P2P_BASE_JSEPTRANSPORT_H_ 379 #endif // WEBRTC_P2P_BASE_JSEPTRANSPORT_H_
OLDNEW
« no previous file with comments | « webrtc/p2p/base/dtlstransportchannel_unittest.cc ('k') | webrtc/p2p/base/jseptransport.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698