fix(M2): wire vc_client's real voice plane through the C ABI, not just raw sockets
test_m2_voice passed against raw BSD sockets, but vc_client::stream_start/stop, UDP binding, and capture/recv were still VC_ERR_NOT_IMPLEMENTED stubs -- meaning vccli and any GUI client still couldn't actually talk. Implements the real client-side UDP-binding handshake, media key derivation, capture->encode->seal-> send and recv->open->decode->playback paths, plus server-side StreamInfo broadcast so peers learn about each other's streams via sync_remote_streams(). Adds test_voice_client_abi (two real vc_client instances, not raw sockets) and vccli --voice/--mute/--text flags, manually verified live between two instances. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -14,6 +14,7 @@
|
||||
#include <atomic>
|
||||
#include <cstdint>
|
||||
#include <memory>
|
||||
#include <optional>
|
||||
#include <shared_mutex>
|
||||
#include <string>
|
||||
#include <unordered_map>
|
||||
@@ -95,6 +96,15 @@ class SessionRegistry {
|
||||
// Assign an SSRC for a new stream. Returns the assigned SSRC.
|
||||
uint32_t assign_ssrc(uint64_t session_id);
|
||||
|
||||
// Add/replace a stream entry on a user (called when StreamAnnounce succeeds).
|
||||
// Returns the updated User proto for broadcasting, or nullopt if user not found.
|
||||
std::optional<voicecat::v1::User> set_user_stream(uint32_t user_id,
|
||||
const voicecat::v1::StreamInfo& info);
|
||||
|
||||
// Remove a stream entry from a user (called on StreamStop). Returns the updated
|
||||
// User proto for broadcasting, or nullopt if user not found.
|
||||
std::optional<voicecat::v1::User> clear_user_stream(uint32_t user_id, uint32_t stream_id);
|
||||
|
||||
// Get all sessions in a channel except the one excluded (for SFU relay).
|
||||
std::vector<std::shared_ptr<ConnSession>> find_channel_sessions(
|
||||
uint32_t channel_id, uint64_t exclude_session_id = 0) const;
|
||||
|
||||
Reference in New Issue
Block a user