Skip to content

A sixth transport, csqtt — and a network switch that costs two seconds

Latest

Choose a tag to compare

@anton48 anton48 released this 06 Sep 21:54
d6ae2e1

CSQTT. The app can now connect to a csqtt server (the wire protocol of
csqtt 2.1.9, implemented from its published description, not from its
code). Add a server in csqtt mode with the server's address, the
password and a Device ID, or open a csqtt:// link — the connect form or
the older secret@host:port form. A link may carry &device=: a csqtt
server binds a password to the first device that uses it and refuses
every other with device_mismatch, and the app now names that reason and
what to do about it. Know the trade before you use it: csqtt has one key
derived from the password and no key exchange, so a captured password
decrypts recorded sessions; the edit screen says so. Relay credentials
come from the same VK pool as the other transports (ten allocations per
identity, cached on disk). In our runs on one phone and one network the
download read about 45 Mbit/s against the native transport's 52.

NETWORK SWITCH. On the native transport a switch between Wi-Fi and
cellular used to leave roughly half of the downlink dead for about two
and a half minutes: the server kept the old, dead connections in the
session's group until its own timeout, and the client could not tell
it. Now a switch rotates the session's group and restarts its
connections a second later, so the new connections form a fresh group;
the credential pool mints for the restarted connections instead of
parking them behind slots it had just marked saturated. Full speed
returns about two seconds after the switch. A second switch within 90
seconds still pays the pool's 30-second cascade pause, by design.

SMALLER FIXES. Flipping the VPN bypass (DIRECT) no longer tears the
tunnel down when the tunnel descriptor happened to be duplicated below
its original number — the check is by interface name now. Stopping a
tunnel whose relay has gone silent no longer hangs on the final
deallocate. Secrets on the extension's start-up log line are masked
structurally, whatever characters a password contains: a password with
a quote in it used to leak into the log, and the wrap key and the seeded
TURN password of the native transport were never masked before. A csqtt
worker the relay refuses for quota now moves to another credential
instead of retrying the same one.

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