Paired with the iOS client build 478 (v1.0-build478). Over srtp-build440:
-
The downlink pace is the client's word for its relay. Behind the group
hello a client >= 476 declares the pace of the relay the connection rides
(the override entry's fourth field, host:port:quota:pace, KiB/s; 0 = no
pacer); the server paces that connection's downlink at the declared rate,
bounded by -downlink-pace-max (0 honours the declaration as made). A client
that declares nothing is paced at -downlink-pace as before. -
The replacement sentinel. A client >= 478 names, behind the hello and
behind every tick's ping, the connection its new session replaces, with the
session's generation; the server ends the dead predecessor at once (reap
reason "replaced") instead of keeping it until the zombie reaper. The dead
member used to take its share of the shared downlink queue: ~26-28 s of a
deaf tunnel after a fast failover and, while it stayed, an equal share of
every downlink packet lost (a download at 2 Mbit/s instead of 70). The
highest generation accepted per index wins, a late copy of an older session
ends that session and leaves the holder alone; the counters on the stats
line ("N replaced"). -
tools/turn-relay: the user's own TURN relay for the client's override list
(anton48/vk-turn-proxy-ios#105), moved here from the iOS repo with its
vendored pion/turn fork (the request's MESSAGE-INTEGRITY check removed so
the relay accepts the credentials VK issued); built as
turn-relay-- for every Unix row of the release. Its TCP listener
is plain TCP (MPTCP off) and refuses TCP allocations. -
The keepalive's clockwork is built by the caller before its goroutine
starts (a latent data race the race detector found).
Compatibility: a client >= 221 still requires srtp-build306 or newer; a
client >= 434 names the group it leaves, reaped at once since srtp-build440;
the declaration and the sentinel are 20-byte packets of the hello's
construction — an older server forwards them to WireGuard, which drops them.