Refactor DtlsTransport, remove internal ownership and raw pointers.

Refactors DtlsTransport to function as a stateless wrapper regarding
DtlsTransportInternal. It no longer owns or stores a raw pointer to the
internal transport. Instead, some of the formerly internal logic has
been moved to JsepTransport and test fixtures, where actual ownership
lies (as indicated by explicit calls to Clear()).

Key changes:
* Remove DtlsTransport's internal DtlsTransportInternal*
* Remove DtlsTransport::internal() accessor to avoid spreading use of
  this pointer.
* Update SctpTransport and PeerConnection to access the underlying
  transport via SctpTransportInternal or RtpTransport which is closer to
  where the actual ownership is.
* Refactored DtlsTransport to be passive regarding state updates;
  subscriptions are managed externally, together with ownership.
* Updated unit tests (DtlsTransportTest, SctpTransportTest,
  JsepTransportControllerTest) to align with the clarified ownership
  model, ensure that tests own the internal transport explicitly in the
  same way as production code does.
* Removed SctpTransportInternal::SetDtlsTransport as transport injection
  is now enforced via constructor.
* This enabled making the transport_ pointer const, more reliable
  and also unblock multi thread access, which will be needed down the
  line.

This simplifies DtlsTransport, removes quite a bit of raw pointer
wrangling (although some still remains), prevents potential
Use-After-Free issues by decoupling the wrapper's lifetime from the
internal transport.

Bug: None
Change-Id: I37f74d7945c6f8a69dc53d217ec1e6726a63d3e2
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/429041
Reviewed-by: Harald Alvestrand <hta@webrtc.org>
Commit-Queue: Tomas Gunnarsson <tommi@webrtc.org>
Cr-Commit-Position: refs/heads/main@{#46360}
16 files changed
tree: f7975bc3a56da2e2397cf92421d8ede490f7a954
  1. api/
  2. audio/
  3. build_overrides/
  4. call/
  5. common_audio/
  6. common_video/
  7. data/
  8. docs/
  9. examples/
  10. experiments/
  11. g3doc/
  12. infra/
  13. logging/
  14. media/
  15. modules/
  16. net/
  17. p2p/
  18. pc/
  19. resources/
  20. rtc_base/
  21. rtc_tools/
  22. sdk/
  23. stats/
  24. system_wrappers/
  25. test/
  26. tools_webrtc/
  27. video/
  28. .clang-format
  29. .clang-tidy
  30. .git-blame-ignore-revs
  31. .gitignore
  32. .gn
  33. .mailmap
  34. .rustfmt.toml
  35. .style.yapf
  36. .vpython3
  37. AUTHORS
  38. BUILD.gn
  39. CODE_OF_CONDUCT.md
  40. codereview.settings
  41. DEPS
  42. DIR_METADATA
  43. ENG_REVIEW_OWNERS
  44. LICENSE
  45. license_template.txt
  46. native-api.md
  47. OWNERS
  48. OWNERS_INFRA
  49. PATENTS
  50. PRESUBMIT.py
  51. presubmit_test.py
  52. presubmit_test_mocks.py
  53. pylintrc
  54. pylintrc_old_style
  55. README.chromium
  56. README.md
  57. WATCHLISTS
  58. webrtc.gni
  59. webrtc_lib_link_test.cc
  60. whitespace.txt
README.md

WebRTC is a free, open software project that provides browsers and mobile applications with Real-Time Communications (RTC) capabilities via simple APIs. The WebRTC components have been optimized to best serve this purpose.

Our mission: To enable rich, high-quality RTC applications to be developed for the browser, mobile platforms, and IoT devices, and allow them all to communicate via a common set of protocols.

The WebRTC initiative is a project supported by Google, Mozilla and Opera, amongst others.

Development

See here for instructions on how to get started developing with the native code.

Authoritative list of directories that contain the native API header files.

More info