Piggybacking DTLS on Stun is a mechanism whereby we send the initial DTLS handshake over the STUN exchange that opens up the data path, thereby saving round trips.
The implementation is in dtls_stun_piggyback_controller.{h,cc} and is tested by dtls_ice_integration_test.cc.
The state machine is as follows:
Initial state: CLIENT: TENTATIVE SERVER: TENTATIVE
A “flight” is a set of one or more DTLS messages (see resp. RFC).
*** DTLS1.2 (RFC 6347) ***
Flight 1: CLIENT => SERVER SERVER when receiving Flight 1: TENTATIVE => CONFIRMED
Flight 2: SERVER => CLIENT CLIENT when receiving Flight 2: TENTATIVE => CONFIRMED
Flight 3: CLIENT => SERVER SERVER when receiving Flight 3: CONFIRMED => PENDING (dtls writable)
Flight 4: SERVER => CLIENT Client when receiving Flight 4: CONFIRMED => COMPLETE (dtls writable)
SERVER will switch to COMPLETE when one of
*** DTLS1.3 (RFC 9147) ***
Flight 1: CLIENT => SERVER SERVER when receiving Flight 1: TENTATIVE => CONFIRMED
Flight 2: SERVER => CLIENT CLIENT when receiving Flight 2: TENTATIVE => PENDING (dtls writable)
Flight 3: CLIENT => SERVER SERVER when receiving Flight 3: CONFIRMED => COMPLETE (dtls writable)
CLIENT will switch to COMPLETE when one of