From f53dedd44654036d0438f6fbabb2f1ade2c4b9b5 Mon Sep 17 00:00:00 2001 From: yeoleobun Date: Wed, 31 Dec 2025 14:29:56 +0800 Subject: [PATCH] save destination from Invite option, used for cancel --- src/dialog/dialog.rs | 9 +++++++++ src/dialog/invitation.rs | 10 ++++++++++ 2 files changed, 19 insertions(+) diff --git a/src/dialog/dialog.rs b/src/dialog/dialog.rs index b3027cf..c114999 100644 --- a/src/dialog/dialog.rs +++ b/src/dialog/dialog.rs @@ -700,6 +700,15 @@ impl DialogInner { let key = TransactionKey::from_request(&request, TransactionRole::Client)?; let mut tx = Transaction::new_client(key, request, self.endpoint_inner.clone(), None); + if matches!(method, Method::Cancel) { + self.remote_uri + .lock() + .map(|guard| { + tx.destination = SipAddr::try_from(guard.clone()).ok(); + }) + .ok(); + } + if let Some(route) = tx.original.route_header() { if let Some(first_route) = route.typed().ok().and_then(|r| r.uris().first().cloned()) { tx.destination = SipAddr::try_from(&first_route.uri).ok(); diff --git a/src/dialog/invitation.rs b/src/dialog/invitation.rs index d083965..92e3fa0 100644 --- a/src/dialog/invitation.rs +++ b/src/dialog/invitation.rs @@ -506,6 +506,16 @@ impl DialogLayer { tx.tu_sender.clone(), )?; + if let Some(destination) = &tx.destination { + let uri = destination.clone().into(); + dlg_inner + .remote_uri + .lock() + .map(|mut guard| { + *guard = uri; + }) + .ok(); + } let dialog = ClientInviteDialog { inner: Arc::new(dlg_inner), };