dtls-in-stun: Resend last part of handshake when becoming ICE writable.

When receiving the STUN_BINDING_RESPONSE on a dtls-client with piggy
backing, the DTLS attribute is processed before ICE becomes writable.
The DTLS attribut makes DTLS writable...but a last packet needs to be
transported or else the server can not receive packets from the client.

This patch makes sure that the last packet is sent.

Test improvments:
- Add FakeIceTransport feature to drop non stun packets unless writable.
- Add count of "DTLS retransmission" (maybe also add to stats?)
- Add count of DTLS data received by STUN.

Bonus: Found Connection.cc propagating DTLS-in-stun attributes
*before* the STUN_BINDING_RESPONSE was authenticated. The same
attributes were already propagated in the correct place (
Connection::OnConnectionRequestResponse) after the RESPONSE
was fully verified. This part lacks unit tests :( But is
tested in the integration test using the new counter I added.

BUG=webrtc:367395350

Change-Id: I126abdcb062d95389fd5ce1376c212a3634f07a6
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/382981
Reviewed-by: Harald Alvestrand <hta@webrtc.org>
Commit-Queue: Jonas Oreland <jonaso@webrtc.org>
Cr-Commit-Position: refs/heads/main@{#44229}
11 files changed
tree: 8a558b0b8e40bfba2ceac72b801d46b289402698
  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. .git-blame-ignore-revs
  30. .gitignore
  31. .gn
  32. .mailmap
  33. .rustfmt.toml
  34. .style.yapf
  35. .vpython3
  36. AUTHORS
  37. BUILD.gn
  38. CODE_OF_CONDUCT.md
  39. codereview.settings
  40. DEPS
  41. DIR_METADATA
  42. ENG_REVIEW_OWNERS
  43. LICENSE
  44. license_template.txt
  45. native-api.md
  46. OWNERS
  47. OWNERS_INFRA
  48. PATENTS
  49. PRESUBMIT.py
  50. presubmit_test.py
  51. presubmit_test_mocks.py
  52. pylintrc
  53. pylintrc_old_style
  54. README.chromium
  55. README.md
  56. WATCHLISTS
  57. webrtc.gni
  58. webrtc_lib_link_test.cc
  59. 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