From e7d8cc181b50165c9b159e26d02ba361e5c502f0 Mon Sep 17 00:00:00 2001 From: yeoleobun Date: Sun, 7 Dec 2025 18:25:27 +0800 Subject: [PATCH] fix ack for domain name contact --- src/transaction/transaction.rs | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/src/transaction/transaction.rs b/src/transaction/transaction.rs index b7133d0c..35fd0a9a 100644 --- a/src/transaction/transaction.rs +++ b/src/transaction/transaction.rs @@ -426,7 +426,7 @@ impl Transaction { } } - pub async fn send_ack(&mut self, connection: Option) -> Result<()> { + pub async fn send_ack(&mut self, mut connection: Option) -> Result<()> { if self.transaction_type != TransactionType::ClientInvite { return Err(Error::TransactionError( "send_ack is only valid for client invite transactions".to_string(), @@ -466,11 +466,20 @@ impl Transaction { } else { ack.to_owned().into() }; - if let SipMessage::Request(ref req) = ack { + if let SipMessage::Request(req) = &ack { if let Some(resp) = self.last_response.as_ref() { if resp.status_code.kind() == StatusCodeKind::Successful { // 2xx response, set destination from request - self.destination = destination_from_request(&req); + if let Some(dest) = destination_from_request(req) { + let (conn, addr) = self + .endpoint_inner + .transport_layer + .lookup(&dest, Some(&self.key)) + .await?; + + connection = Some(conn); + self.destination = Some(addr); + } } } }