pc: add "always negotiate datachannels" options to RTCConfiguration

Add a boolean option to always negotiate SCTP m-line even
when no datachannel have been added to the peerconnection. This avoids
creating a throwaway datachannel and also allows avoiding the backward
compat "put datachannel last" provision described in
  https://datatracker.ietf.org/doc/html/rfc8829#name-initial-offers
  "Lastly, if any datachannel has been created..."
and putting that m-line before any RTP m-lines.

Unlike RTP contents, data channels are rarely rejected which avoids
issues with rejecting the first media section which is better for the
behavior described in
  https://datatracker.ietf.org/doc/html/rfc8843#name-rejecting-a-media-descripti
  It is RECOMMENDED that the suggested offerer-tagged "m=" section be
  a bundled "m=" section that the offerer believes is unlikely that
  the answerer will reject or move out of the BUNDLE group

W3C spec link:
  https://w3c.github.io/webrtc-extensions/#always-negotiating-datachannels

Reupload of
  https://webrtc-review.googlesource.com/c/src/+/405044

Co-authored-by: phancke@meta.com

Bug: chromium:433898678
Change-Id: I6862b952c305ba11346475227f342b3cebf9031b
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/417783
Reviewed-by: Harald Alvestrand <hta@webrtc.org>
Commit-Queue: Philipp Hancke <philipp.hancke@googlemail.com>
Reviewed-by: Guido Urdaneta <guidou@webrtc.org>
Cr-Commit-Position: refs/heads/main@{#46025}
5 files changed
tree: c157e90b3eac210b1e41b35c7d27e7faf9263a4d
  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