fix(relay): set peer_relay_fp on originating relay when answer arrives
The originating relay (where the caller is) never set peer_relay_fp because the call was created locally. When the callee's answer arrived via federation, the cross-relay dispatcher handled it but didn't mark the call as cross-relay. This meant the caller's MediaPathReport was delivered via local hub.send_to() to a peer fingerprint that isn't connected locally — silently dropped. Fix: in the cross-relay answer dispatcher, call reg.set_peer_relay_fp(call_id, Some(origin_relay_fp)) so the originating relay knows to forward MediaPathReport via federation. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -625,10 +625,13 @@ async fn main() -> anyhow::Result<()> {
|
|||||||
// then read back everything needed to cross-
|
// then read back everything needed to cross-
|
||||||
// wire peer_direct_addr + peer_local_addrs in
|
// wire peer_direct_addr + peer_local_addrs in
|
||||||
// the local CallSetup.
|
// the local CallSetup.
|
||||||
|
// Also set peer_relay_fp so the originating
|
||||||
|
// relay knows where to forward MediaPathReport.
|
||||||
let room_name = format!("call-{call_id}");
|
let room_name = format!("call-{call_id}");
|
||||||
let (callee_addr_for_setup, callee_local_for_setup) = {
|
let (callee_addr_for_setup, callee_local_for_setup) = {
|
||||||
let mut reg = call_registry_d.lock().await;
|
let mut reg = call_registry_d.lock().await;
|
||||||
reg.set_active(call_id, accept_mode, room_name.clone());
|
reg.set_active(call_id, accept_mode, room_name.clone());
|
||||||
|
reg.set_peer_relay_fp(call_id, Some(origin_relay_fp.clone()));
|
||||||
reg.set_callee_reflexive_addr(
|
reg.set_callee_reflexive_addr(
|
||||||
call_id,
|
call_id,
|
||||||
callee_reflexive_addr.clone(),
|
callee_reflexive_addr.clone(),
|
||||||
|
|||||||
Reference in New Issue
Block a user