Rust engine: - start_signaling(): persistent _signal connection, presence registration - Signal recv loop: handles DirectCallOffer, CallRinging, CallSetup, Hangup - New CallState variants: Registered, Ringing, IncomingCall - Stats expose incoming_call_id, incoming_caller_fp, incoming_caller_alias, sas_code - New EngineCommands: PlaceCall, AnswerCall, RejectCall JNI bridge: - nativeStartSignaling(relay, seed, token, alias) - nativePlaceCall(targetFp) - nativeAnswerCall(callId, mode) Kotlin API (WzpEngine.kt): - startSignaling(relay, seed, token, alias) - placeCall(targetFingerprint) - answerCall(callId, mode) — 0=Reject, 1=AcceptTrusted, 2=AcceptGeneric Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
25 lines
805 B
Rust
25 lines
805 B
Rust
//! Engine commands sent from the JNI/UI thread to the engine.
|
|
|
|
use wzp_proto::QualityProfile;
|
|
|
|
/// Commands that can be sent to the running engine.
|
|
pub enum EngineCommand {
|
|
/// Mute or unmute the microphone.
|
|
SetMute(bool),
|
|
/// Enable or disable speaker (loudspeaker) mode.
|
|
SetSpeaker(bool),
|
|
/// Force a specific quality profile (overrides adaptive logic).
|
|
ForceProfile(QualityProfile),
|
|
/// Stop the call and shut down the engine.
|
|
Stop,
|
|
/// Place a direct call to a fingerprint (requires signal connection).
|
|
PlaceCall { target_fingerprint: String },
|
|
/// Answer an incoming direct call.
|
|
AnswerCall {
|
|
call_id: String,
|
|
accept_mode: wzp_proto::CallAcceptMode,
|
|
},
|
|
/// Reject an incoming direct call.
|
|
RejectCall { call_id: String },
|
|
}
|