diff --git a/src/transport/connection.rs b/src/transport/connection.rs index 8b51f81..88c0d38 100644 --- a/src/transport/connection.rs +++ b/src/transport/connection.rs @@ -347,9 +347,13 @@ impl SipConnection { typed_via.params.push(Param::Transport(transport)); } + let received_str = match addr { + SocketAddr::V6(_) => format!("[{}]", received.host), + _ => received.host.to_string(), + }; *via = typed_via .with_param(Param::Received(rsip::param::Received::new( - received.host.to_string(), + received_str, ))) .with_param(Param::Other( rsip::param::OtherParam::new("rport"), diff --git a/src/transport/tcp_listener.rs b/src/transport/tcp_listener.rs index 7aa80cf..91508af 100644 --- a/src/transport/tcp_listener.rs +++ b/src/transport/tcp_listener.rs @@ -36,6 +36,10 @@ impl TcpListenerConnection { transport_layer_inner: TransportLayerInnerRef, ) -> Result<()> { let listener = TcpListener::bind(self.inner.local_addr.get_socketaddr()?).await?; + let listener_local_addr = SipAddr { + r#type: Some(rsip::transport::Transport::Tcp), + addr: listener.local_addr().unwrap().into(), + }; tokio::spawn(async move { loop { let (stream, remote_addr) = match listener.accept().await { @@ -49,10 +53,7 @@ impl TcpListenerConnection { debug!(remote = %remote_addr, "tcp connection rejected by whitelist"); continue; } - let local_addr = SipAddr { - r#type: Some(rsip::transport::Transport::Tcp), - addr: remote_addr.into(), - }; + let local_addr = listener_local_addr.clone(); let tcp_connection = match TcpConnection::from_stream( stream, local_addr.clone(), diff --git a/src/transport/transport_layer.rs b/src/transport/transport_layer.rs index 4fcbb91..d1a1717 100644 --- a/src/transport/transport_layer.rs +++ b/src/transport/transport_layer.rs @@ -431,9 +431,12 @@ impl TransportLayerInner { } select! { _ = sub_token.cancelled() => { } - _ = async { + result = async { transport.serve_loop(sender_clone.clone()).await } => { + if let Err(e) = result { + warn!(addr=%transport.get_addr(), error = %e, "serve_loop error"); + } } } info!(addr=%transport.get_addr(), "transport serve_loop exited");