Add encrypted managed UDP relay and native voice conformance
This commit is contained in:
+33
-11
@@ -10,6 +10,31 @@ up instantly. Newest status at the top.
|
||||
|
||||
## ▶ Where we left off / next action
|
||||
|
||||
- **Done (2026-09-15): Phase 4 encrypted voice checkpoint.** Existing pending codec/DSP
|
||||
and initial server work committed as `4067bab`. Managed server now binds UDP on the
|
||||
TCP port number, issues 16-byte session tokens, supports subscription and multi-stream
|
||||
signaling, and authenticates/reseals encoded Opus to eligible channel subscribers.
|
||||
Crypto and endpoints have one UDP-loop owner; control handlers publish immutable
|
||||
routing snapshots. Rejects invalid tokens, malformed/forged/replayed media and SSRCs
|
||||
not owned by the sender. Stop, unsubscribe, channel movement and disconnect update
|
||||
routing; retired keys are cleared without requiring subsequent UDP traffic.
|
||||
First endpoint binding is fixed for the session (reconnect to change it), unlike
|
||||
the C++ oracle's permissive rebinding policy. Packet formats/protocol v2 are unchanged.
|
||||
Two actual C++ `vccli` processes authenticate, join, chat and exchange mono/stereo
|
||||
voice through the managed server. Native voice oracle additionally verifies three
|
||||
concurrent streams with bidirectional decoded PCM energy/metadata, without hardware.
|
||||
Added finite `vccli --test-tone-ms` and fixed normal `--voice` to subscribe first.
|
||||
**Verified:** 154/154 managed tests, no skips with TLS/database/voice/CLI variables;
|
||||
native dev build and 29/29 CTest tests; independent native media staging; warning-free
|
||||
managed Release build; identical regenerated wire/password fixtures; C++ DSP within
|
||||
one PCM unit; 22 permissive package licenses; `git diff --check` passes. Fan-out core
|
||||
allocates zero managed bytes for 50 subscribers; transport scheduling and crypto
|
||||
fallback are excluded. Transport test delivers all 2,500 packets at a paced 50 pps.
|
||||
**Next:** media-aware keepalive/reaper, then protected channel joins, channel CRUD,
|
||||
permissions/moderation/account administration and production configuration. Phase 4
|
||||
remains in progress. Audio, managed client/CLI, Windows cutover and C# AppKit/UIKit
|
||||
follow; keep Swift ReplayKit extension and freeze its ring contract before iOS.
|
||||
|
||||
- **In progress (2026-09-15): Phase 4 managed server control plane.** Added TLS socket
|
||||
orchestration, bounded framing/queues, guest and password authentication, persisted
|
||||
channels, state snapshots, channel joins, text routing, ping and disconnect events.
|
||||
@@ -26,7 +51,7 @@ up instantly. Newest status at the top.
|
||||
UDP voice, streams, administration, protected channel joins and production configuration
|
||||
remain pending; this is the first control-plane checkpoint, not Phase 4 completion.
|
||||
|
||||
### .NET handoff / discoveries (2026-09-15)
|
||||
### .NET control-plane checkpoint handoff / discoveries (2026-09-15)
|
||||
|
||||
- **Working tree:** stay on `dotnet/foundations`, tracking `origin/dotnet/foundations`.
|
||||
Foundation `b76181d` and TLS checkpoint `2df79cd` were committed and pushed.
|
||||
@@ -83,7 +108,7 @@ up instantly. Newest status at the top.
|
||||
SourceGear's native package lacks a NuGet license expression; the audit has an
|
||||
exact-version/repository-identity exception for its public-domain SQLite build.
|
||||
NativeAOT publishing/trimming has not been verified for this solution.
|
||||
- **Server checkpoint limits:** CLI binds loopback; positional arguments are data
|
||||
- **Previous control-plane checkpoint limits:** CLI binds loopback; positional arguments are data
|
||||
directory and TCP port. Guests are enabled there, and the hosting API can disable
|
||||
them. Accounts can be provisioned through `AccountStore` or native administration;
|
||||
automatic bootstrap/admin CLI is pending. Authentication enters unprotected Lobby
|
||||
@@ -106,25 +131,22 @@ dotnet restore dotnet/VoiceCat.slnx --locked-mode
|
||||
$env:VOICECAT_TLS_ORACLE = (Resolve-Path build/dev/bin/voicecat-dotnet-tls-oracle.exe).Path
|
||||
$env:VOICECAT_DATABASE_ORACLE = (Resolve-Path build/dev/bin/voicecat-dotnet-database-oracle.exe).Path
|
||||
$env:VOICECAT_VCCLI = (Resolve-Path build/dev/bin/vccli.exe).Path
|
||||
$env:VOICECAT_VOICE_ORACLE = (Resolve-Path build/dev/bin/voicecat-dotnet-voice-oracle.exe).Path
|
||||
dotnet test dotnet/VoiceCat.slnx -c Release --no-restore
|
||||
./dotnet/check-licenses.ps1
|
||||
```
|
||||
|
||||
Last results: **142/142 managed tests, no skips with those variables set; 29/29 native
|
||||
Last results: **154/154 managed tests, no skips with those variables set; 29/29 native
|
||||
CTest tests; warning-free Release build; 22 package licenses approved; locked restore
|
||||
and `git diff --check` passed.** Without the variables, native interoperability tests
|
||||
skip; that is not equivalent verification. Desktop CI stages codec/DSP bindings on
|
||||
Windows/Linux/macOS. Its Linux C++ job requires TLS, CLI and database interoperability
|
||||
and regenerates wire/password/DSP fixtures. Only Windows was run locally this session.
|
||||
|
||||
**Next behavior to implement:** read `docs/protocol.md`, `docs/security.md` and the
|
||||
existing UDP binding/relay/session handlers. Write a real-client test for authenticated
|
||||
UDP binding and encrypted relay between two clients, preserving SSRC/timestamp/flags
|
||||
and encoded Opus while resealing with each recipient's directional key/counter.
|
||||
Then implement binding tokens, stream announce/stop/subscription and channel routing.
|
||||
Reject unauthenticated/replayed media and verify channel/subscription isolation.
|
||||
Never decode audio on the SFU. Phase 4 exits only when two existing C++ clients can
|
||||
exchange voice through the managed server as well as authenticate, join and chat.
|
||||
**Voice behavior now verified:** real clients bind UDP and exchange encrypted Opus,
|
||||
preserving SSRC/timestamp/flags while resealing with recipient-specific counters.
|
||||
Never decode audio on the SFU. The two-C++-client voice/text criterion passes;
|
||||
the remaining Phase 4 server behaviors still need implementation and conformance tests.
|
||||
|
||||
- **Done (2026-09-15): Codec/DSP desktop port.** TLS checkpoint `2df79cd` committed
|
||||
and pushed to `origin/dotnet/foundations`. Added span-based Opus wrappers, safe native
|
||||
|
||||
Reference in New Issue
Block a user