github anton48/vk-turn-proxy-ios v1.0-build380
The captcha solver back, a network switch that costs four seconds, and a start that takes one

3 hours ago

CAPTCHA. Since 6 September VK refused every automatic captcha solve:
its widget now opens each session with a call the app had never made
(captchaNotRobot.initSession) and takes the challenge from that call's
answer. The app makes the call, reads the challenge type and the
slider's settings from it, sends the page's own debug value instead of
an old constant, and drops two fields the widget no longer sends. On
our phones the checkbox check passes again with no WebView; on a
generated browser fingerprint the checkbox is refused and the slider
carries the solve, three times out of three in the stand runs.

NETWORK SWITCH. The app's HTTP client for VK's API is one per process
and kept a pooled HTTP/2 connection bound to the old network: after a
switch the next credential mints reused it, timed out at twenty
seconds each, and all thirty connections were back only 65 seconds
later. The client is now replaced on every path event and once more
before a single retry after a network-class error, keeping its cookies;
the switch costs about four seconds. A switch during a fresh client's
very first request retries on the replacement instead of falling to
the legacy captcha path. A path event that arrives before the first
session rotates the group but restarts nothing.

START AND STOP. Every connection launches within a second of the
bootstrap; the old pace, one connection per five seconds after the
first ten, dated from a model of VK's quota that a June measurement had
replaced, and it only delayed the use of credentials already on disk.
A warm start reads 30/30 in under two seconds. The cascade detector no
longer arms on the tunnel's own start report, so a real switch within
90 seconds of Connect is not paused for 30 seconds. Every native stop
used to pay a third of a second inside wireguard-go's receive routine
because a stopped proxy was reported as a cancelled context rather
than a closed bind; the stop takes about 15 milliseconds now. Stopping
on a dead relay no longer hangs on the DTLS close or in a relay write.

CREDENTIAL POOL. A credential fetched by the background grower is kept
even when the connections reached the cold-start target while it was
being fetched; it used to be thrown away, and the next fill came two to
five minutes later. A fetch that outlives a reset of the pool (a
Resume) publishes only into a slot it still owns, never over a slot the
new connections have refilled — that used to zero a live slot's
allocation count. In the logged-in (cookie) mode a late credential is
never moved into another relay's slot, which doubled a relay's quota;
and the cold-start target is ceil(N/10) bounded by the pool in every
mode, so after a switch in cookie mode the third relay is minted at
once rather than after the grower's next maintenance fill.

SMALLER FIXES. The native bridge publishes its device and link under
locks, the same race the csqtt bridge fixed in 364. The main screen's
message for an empty csqtt Device ID points to Settings instead of
"this screen". A csqtt:// link in the older secret@host:port form
whose password begins with "connect" parses correctly. The Go module
floor is 1.26.

Client only — the server side is unchanged, so srtp-build306 remains
current.

Don't miss a new vk-turn-proxy-ios release

NewReleases is sending notifications on new releases.