1
0
mirror of https://github.com/coturn/coturn.git synced 2026-10-24 00:08:57 +03:00
Files
coturn/docs
Pavel Punsky ce8b25737d feat: RFC 8016 graceful dual-5-tuple mobility handoff (#1975)
Historically a MOBILITY-TICKET resume hard-switched the allocation onto
the new client socket at REFRESH time and closed the old socket
immediately. RFC 8016 instead requires the server to keep receiving on,
and transmitting peer->client data to, the old 5-tuple until the client
is active on the new one, and only then discard the old 5-tuple.

Implement that make-before-break handoff:

- handle_turn_refresh no longer transfers the socket. It rotates the
mobility ticket, refreshes the allocation on the original session, and
opens a bounded transition: the original session keeps the allocation
and its old socket (peer->client egress stays on the old 5-tuple), while
the resuming session is kept alive and linked as "pending" and the
REFRESH success response is sent on the new socket.
- read_client_connection promotes the allocation onto the new socket on
the client's first packet from the new 5-tuple
(mobile_complete_transition): the socket is moved to the allocation
session, which closes the old socket and discards the old 5-tuple, and
the packet is then served by the allocation. RFC names the trigger as
the first Send/ChannelData; we promote on any first packet so control
requests (CreatePermission/ChannelBind/Refresh) a roaming client issues
from the new address are served by the allocation.
- The per-session sweep aborts a transition left open past a 30s
deadline, conservatively keeping the allocation on the old path and
reaping the pending session. shutdown_client_connection unlinks a
transition partner on teardown.

Transition state (session ids + deadline) is added to
ts_ur_super_session; the pending session's un-allocated watchdog is
disarmed and its stray mobile-map entry removed while it legitimately
holds no allocation.

Also align resume error codes with RFC 8016: an unusable/unknown ticket
now returns 437 (Allocation Mismatch) instead of the non-standard 404.

examples/run_tests_mobile.sh now asserts, from the server log, that the
handoff actually executed (mobile_complete_transition emits a marker),
so a regression that skipped or broke the transition fails the test.
docs/mobility-rfc8016.md documents the design, the trigger/deadline
semantics, the quota note, and the deferred ticket-entropy hardening
item.
2026-07-14 21:28:29 -10:00
..
2024-01-16 19:54:19 -08:00
2024-02-09 20:14:49 -08:00