T3.3: SignalMessage version field
This commit is contained in:
@@ -24,7 +24,7 @@
|
||||
//! Bob's CallSetup carries Alice's reflex addr — cross-wired
|
||||
//! through two relays + a federation link.
|
||||
|
||||
use wzp_proto::{CallAcceptMode, SignalMessage};
|
||||
use wzp_proto::{CallAcceptMode, SignalMessage, default_signal_version};
|
||||
use wzp_relay::call_registry::CallRegistry;
|
||||
|
||||
// ────────────────────────────────────────────────────────────────
|
||||
@@ -42,6 +42,7 @@ const RELAY_B_ADDR: &str = "203.0.113.10:4433";
|
||||
/// Helper that Alice's place_call sends.
|
||||
fn alice_offer(call_id: &str) -> SignalMessage {
|
||||
SignalMessage::DirectCallOffer {
|
||||
version: default_signal_version(),
|
||||
caller_fingerprint: "alice".into(),
|
||||
caller_alias: None,
|
||||
target_fingerprint: "bob".into(),
|
||||
@@ -84,6 +85,7 @@ fn relay_a_handle_offer(reg_a: &mut CallRegistry, offer: &SignalMessage) -> Sign
|
||||
// Build the federation envelope the main loop would
|
||||
// broadcast.
|
||||
SignalMessage::FederatedSignalForward {
|
||||
version: default_signal_version(),
|
||||
inner: Box::new(offer.clone()),
|
||||
origin_relay_fp: RELAY_A_TLS_FP.into(),
|
||||
}
|
||||
@@ -97,6 +99,7 @@ fn relay_b_handle_forwarded_offer(reg_b: &mut CallRegistry, forward: &SignalMess
|
||||
SignalMessage::FederatedSignalForward {
|
||||
inner,
|
||||
origin_relay_fp,
|
||||
..
|
||||
} => (inner.as_ref().clone(), origin_relay_fp.clone()),
|
||||
_ => panic!("not a forward"),
|
||||
};
|
||||
@@ -123,6 +126,7 @@ fn relay_b_handle_forwarded_offer(reg_b: &mut CallRegistry, forward: &SignalMess
|
||||
/// Bob's answer — AcceptTrusted with his reflex addr.
|
||||
fn bob_answer(call_id: &str) -> SignalMessage {
|
||||
SignalMessage::DirectCallAnswer {
|
||||
version: default_signal_version(),
|
||||
call_id: call_id.into(),
|
||||
accept_mode: CallAcceptMode::AcceptTrusted,
|
||||
identity_pub: None,
|
||||
@@ -166,12 +170,14 @@ fn relay_b_handle_local_answer(
|
||||
|
||||
// Forward the answer back over federation.
|
||||
let forward = SignalMessage::FederatedSignalForward {
|
||||
version: default_signal_version(),
|
||||
inner: Box::new(answer.clone()),
|
||||
origin_relay_fp: RELAY_B_TLS_FP.into(),
|
||||
};
|
||||
|
||||
// Local CallSetup for Bob — peer_direct_addr = Alice's addr.
|
||||
let setup_for_bob = SignalMessage::CallSetup {
|
||||
version: default_signal_version(),
|
||||
call_id: call_id.clone(),
|
||||
room: format!("call-{call_id}"),
|
||||
relay_addr: RELAY_B_ADDR.into(),
|
||||
@@ -194,6 +200,7 @@ fn relay_a_handle_forwarded_answer(
|
||||
SignalMessage::FederatedSignalForward {
|
||||
inner,
|
||||
origin_relay_fp,
|
||||
..
|
||||
} => (inner.as_ref().clone(), origin_relay_fp.clone()),
|
||||
_ => panic!("not a forward"),
|
||||
};
|
||||
@@ -215,6 +222,7 @@ fn relay_a_handle_forwarded_answer(
|
||||
|
||||
// Alice's CallSetup — peer_direct_addr = Bob's addr.
|
||||
SignalMessage::CallSetup {
|
||||
version: default_signal_version(),
|
||||
call_id: call_id.clone(),
|
||||
room: format!("call-{call_id}"),
|
||||
relay_addr: RELAY_A_ADDR.into(),
|
||||
@@ -312,6 +320,7 @@ fn cross_relay_loop_prevention_drops_self_sourced_forward() {
|
||||
// A FederatedSignalForward that circles back to the origin
|
||||
// relay should be dropped before it hits the call registry.
|
||||
let forward = SignalMessage::FederatedSignalForward {
|
||||
version: default_signal_version(),
|
||||
inner: Box::new(alice_offer("c-loop")),
|
||||
origin_relay_fp: RELAY_B_TLS_FP.into(),
|
||||
};
|
||||
|
||||
@@ -18,7 +18,7 @@ use std::sync::Arc;
|
||||
use std::time::Duration;
|
||||
|
||||
use bytes::Bytes;
|
||||
use wzp_proto::{MediaTransport, SignalMessage};
|
||||
use wzp_proto::{MediaTransport, SignalMessage, default_signal_version};
|
||||
use wzp_relay::config::{PeerConfig, TrustedConfig};
|
||||
use wzp_relay::event_log::EventLogger;
|
||||
use wzp_relay::federation::{FederationManager, room_hash};
|
||||
@@ -348,7 +348,9 @@ async fn broadcast_signal_sends_to_all_peers() {
|
||||
.expect("some message");
|
||||
|
||||
match hello {
|
||||
SignalMessage::FederationHello { tls_fingerprint } => {
|
||||
SignalMessage::FederationHello {
|
||||
tls_fingerprint, ..
|
||||
} => {
|
||||
assert_eq!(tls_fingerprint, "test-relay-fp-abc123");
|
||||
}
|
||||
other => panic!(
|
||||
@@ -367,6 +369,7 @@ async fn broadcast_signal_sends_to_all_peers() {
|
||||
|
||||
// Now call broadcast_signal on the FM
|
||||
let test_msg = SignalMessage::FederatedSignalForward {
|
||||
version: default_signal_version(),
|
||||
inner: Box::new(SignalMessage::Reflect),
|
||||
origin_relay_fp: "other-relay-fp".into(),
|
||||
};
|
||||
|
||||
@@ -9,7 +9,7 @@ use std::sync::Arc;
|
||||
|
||||
use wzp_client::perform_handshake;
|
||||
use wzp_crypto::{KeyExchange, WarzoneKeyExchange};
|
||||
use wzp_proto::{MediaTransport, SignalMessage};
|
||||
use wzp_proto::{MediaTransport, SignalMessage, default_signal_version};
|
||||
use wzp_relay::handshake::accept_handshake;
|
||||
use wzp_transport::{QuinnTransport, client_config, create_endpoint, server_config};
|
||||
|
||||
@@ -129,6 +129,7 @@ async fn handshake_rejects_v1_protocol_version() {
|
||||
let signature = kx.sign(&sign_data);
|
||||
|
||||
let v1_offer = SignalMessage::CallOffer {
|
||||
version: 1,
|
||||
identity_pub,
|
||||
ephemeral_pub,
|
||||
signature,
|
||||
@@ -255,7 +256,7 @@ async fn auth_then_handshake() {
|
||||
.expect("should receive a message");
|
||||
|
||||
let token = match auth_msg {
|
||||
SignalMessage::AuthToken { token } => token,
|
||||
SignalMessage::AuthToken { token, .. } => token,
|
||||
other => panic!(
|
||||
"expected AuthToken, got {:?}",
|
||||
std::mem::discriminant(&other)
|
||||
@@ -273,6 +274,7 @@ async fn auth_then_handshake() {
|
||||
|
||||
// Caller side: send AuthToken first, then perform_handshake.
|
||||
let auth = SignalMessage::AuthToken {
|
||||
version: default_signal_version(),
|
||||
token: "bearer-test-token-12345".to_string(),
|
||||
};
|
||||
client_transport
|
||||
@@ -344,6 +346,7 @@ async fn handshake_rejects_bad_signature() {
|
||||
}
|
||||
|
||||
let bad_offer = SignalMessage::CallOffer {
|
||||
version: default_signal_version(),
|
||||
identity_pub,
|
||||
ephemeral_pub,
|
||||
signature,
|
||||
|
||||
@@ -20,7 +20,7 @@
|
||||
//! to reason about, no real network, and what we actually want to
|
||||
//! test is the cross-wiring logic, not the whole signal stack.
|
||||
|
||||
use wzp_proto::{CallAcceptMode, SignalMessage};
|
||||
use wzp_proto::{CallAcceptMode, SignalMessage, default_signal_version};
|
||||
use wzp_relay::call_registry::CallRegistry;
|
||||
|
||||
/// Helper: simulate the relay's handling of a DirectCallOffer. In
|
||||
@@ -77,6 +77,7 @@ fn handle_answer_and_build_setups(
|
||||
};
|
||||
|
||||
let setup_for_caller = SignalMessage::CallSetup {
|
||||
version: default_signal_version(),
|
||||
call_id: call_id.clone(),
|
||||
room: room.clone(),
|
||||
relay_addr: "203.0.113.5:4433".into(),
|
||||
@@ -85,6 +86,7 @@ fn handle_answer_and_build_setups(
|
||||
peer_mapped_addr: None,
|
||||
};
|
||||
let setup_for_callee = SignalMessage::CallSetup {
|
||||
version: default_signal_version(),
|
||||
call_id,
|
||||
room,
|
||||
relay_addr: "203.0.113.5:4433".into(),
|
||||
@@ -97,6 +99,7 @@ fn handle_answer_and_build_setups(
|
||||
|
||||
fn mk_offer(call_id: &str, caller_reflexive_addr: Option<&str>) -> SignalMessage {
|
||||
SignalMessage::DirectCallOffer {
|
||||
version: default_signal_version(),
|
||||
caller_fingerprint: "alice".into(),
|
||||
caller_alias: None,
|
||||
target_fingerprint: "bob".into(),
|
||||
@@ -118,6 +121,7 @@ fn mk_answer(
|
||||
callee_reflexive_addr: Option<&str>,
|
||||
) -> SignalMessage {
|
||||
SignalMessage::DirectCallAnswer {
|
||||
version: default_signal_version(),
|
||||
call_id: call_id.into(),
|
||||
accept_mode: mode,
|
||||
identity_pub: None,
|
||||
|
||||
@@ -63,6 +63,7 @@ async fn spawn_mock_relay() -> (SocketAddr, tokio::task::JoinHandle<()>) {
|
||||
Ok(Some(SignalMessage::RegisterPresence { .. })) => {
|
||||
let _ = t
|
||||
.send_signal(&SignalMessage::RegisterPresenceAck {
|
||||
version: 1,
|
||||
success: true,
|
||||
error: None,
|
||||
relay_build: None,
|
||||
@@ -74,6 +75,7 @@ async fn spawn_mock_relay() -> (SocketAddr, tokio::task::JoinHandle<()>) {
|
||||
Ok(Some(SignalMessage::Reflect)) => {
|
||||
let _ = t
|
||||
.send_signal(&SignalMessage::ReflectResponse {
|
||||
version: 1,
|
||||
observed_addr: observed_addr.to_string(),
|
||||
})
|
||||
.await;
|
||||
|
||||
@@ -30,7 +30,7 @@ use std::net::{Ipv4Addr, SocketAddr};
|
||||
use std::sync::Arc;
|
||||
use std::time::Duration;
|
||||
|
||||
use wzp_proto::{MediaTransport, SignalMessage};
|
||||
use wzp_proto::{MediaTransport, SignalMessage, default_signal_version};
|
||||
use wzp_transport::{QuinnTransport, client_config, create_endpoint, server_config};
|
||||
|
||||
/// Spawn a minimal mock relay that loops over `recv_signal`,
|
||||
@@ -49,6 +49,7 @@ async fn spawn_mock_relay_with_reflect(
|
||||
match server_transport.recv_signal().await {
|
||||
Ok(Some(SignalMessage::Reflect)) => {
|
||||
let resp = SignalMessage::ReflectResponse {
|
||||
version: default_signal_version(),
|
||||
observed_addr: observed.to_string(),
|
||||
};
|
||||
// If the send fails the client has gone; just exit.
|
||||
@@ -164,7 +165,7 @@ async fn reflect_happy_path() {
|
||||
.expect("some message");
|
||||
|
||||
let observed_addr = match resp {
|
||||
SignalMessage::ReflectResponse { observed_addr } => observed_addr,
|
||||
SignalMessage::ReflectResponse { observed_addr, .. } => observed_addr,
|
||||
other => panic!(
|
||||
"expected ReflectResponse, got {:?}",
|
||||
std::mem::discriminant(&other)
|
||||
@@ -251,7 +252,7 @@ async fn reflect_two_clients_distinct_ports() {
|
||||
.expect("ok")
|
||||
.expect("some");
|
||||
match resp {
|
||||
SignalMessage::ReflectResponse { observed_addr } => observed_addr,
|
||||
SignalMessage::ReflectResponse { observed_addr, .. } => observed_addr,
|
||||
_ => panic!("wrong variant"),
|
||||
}
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user