Repository navigation
docs: let direct send run on STUN alone (protocol and vectors) - #89
Merged
Merged
Conversation
An ice entry of stun: URLs carries empty username and credential; an entry with any turn: URL keeps its credential. The at-least-one-TURN rule goes, the allowlist check stays. Drop falls back to a public STUN default when the node runs no issuer, and hiding needs a TURN URL. Vectors cover STUN-only, mixed entries and the new refusals.
Drop accepts an ICE entry of STUN URLs with empty credentials, and when the node answers 404 for the issuer it uses a built-in stun:stun.cloudflare.com:3478 for both ends instead of failing with no_turn. Hiding needs a TURN URL, so a receive with hiding on refuses with no_relay before any link is shown, and the encoder never sends a hidden invitation without one. The hide setting now defaults to off for installs that never set it; a stored on or off is kept. A connection that fails with no relay on offer reports connect_direct. The vendored direct-send bundle is rebuilt from the page change.
This was referenced Oct 23, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Direct send needed a TURN URL and a credential in every invitation. With the ForgeSworn TURN server switched off, Drop fails before it shows a link. This changes the protocol text and vectors so that STUN alone is a valid configuration. Version stays
wildbloom-direct/1(still experimental); the vector filename and constants are unchanged.What changes in the protocol:
iceentry keeps exactly{"credential","urls","username"}. An entry with anyturn:/turns:URL has a username and credential of 1 to 256 bytes (unchanged). An entry ofstun:URLs only has both exactly"". Anything else is a syntax refusal (failed), so a credential never goes to a STUN server and there is one canonical form.stun:stun.cloudflare.com:3478. Cloudflare learns the public address of each end that does not hide. No ForgeSworn host is a default.--turn-urlmay bestun:only (no secret) or include TURN (secret required). Operator recipes added.Vectors: allowlist gains
stun:stun.example.net:3478; new messages "invite, STUN only" and "invite, STUN server and TURN server as two entries"; the old "no TURN URL" refusal is renamed "STUN-only server with a credential" and now refusesfailed; new refusals for a STUN-only username without credential, a TURN server with an empty username, and a STUN-only server off the allowlist. Hashes recomputed,syntheticOnlykept. Nothing else in the file moved.Notes for review and merge order:
desktop/src-tauri) read this file and will fail against it until the Drop change lands, because Drop still requires a TURN URL. That PR is stacked on this branch (feat/direct-stun-protocol) and fixes them. Merge them together or in quick succession; no release in between.client.rstest case of that name is an issuer-reply test, not a vector index, and is updated in the Drop PR. The page copies the vectors from this branch's head (5899ff2); if this is squash-merged, re-copy from the merge commit.--turn-issueris left for the wildbloomd PR.