@@ -8,7 +8,7 @@ use std::{
88 time:: Duration ,
99} ;
1010
11- use http:: { header:: HOST , Uri } ;
11+ use http:: { header:: HOST , uri :: Authority , Uri } ;
1212use http_body_util:: BodyExt ;
1313use hyper_util:: {
1414 client:: legacy:: {
@@ -113,7 +113,7 @@ impl WasiHttpView for WasiHttpImplInner<'_> {
113113 http. response. status_code = Empty ,
114114 server. address = Empty ,
115115 server. port = Empty ,
116- ) ,
116+ )
117117 ) ]
118118 fn send_request (
119119 & mut self ,
@@ -166,12 +166,12 @@ impl RequestSender {
166166 spin_telemetry:: inject_trace_context ( & mut request) ;
167167
168168 // Run any configured request interceptor
169- let mut override_connect_host = None ;
169+ let mut override_connect_endpoint = None ;
170170 if let Some ( interceptor) = & self . request_interceptor {
171171 let intercept_request = std:: mem:: take ( & mut request) . into ( ) ;
172172 match interceptor. intercept ( intercept_request) . await ? {
173173 InterceptOutcome :: Continue ( mut req) => {
174- override_connect_host = req. override_connect_host . take ( ) ;
174+ override_connect_endpoint = req. override_connect_endpoint . take ( ) ;
175175 request = req. into_hyper_request ( ) ;
176176 }
177177 InterceptOutcome :: Complete ( resp) => {
@@ -188,15 +188,15 @@ impl RequestSender {
188188 // Backfill span fields after potentially updating the URL in the interceptor
189189 if let Some ( authority) = request. uri ( ) . authority ( ) {
190190 let span = tracing:: Span :: current ( ) ;
191- let host = override_connect_host . as_deref ( ) . unwrap_or ( authority. host ( ) ) ;
192- span. record ( "server.address" , host) ;
193- if let Some ( port) = authority. port ( ) {
194- span. record ( "server.port" , port. as_u16 ( ) ) ;
191+ let authority = override_connect_endpoint . as_ref ( ) . unwrap_or ( authority) ;
192+ span. record ( "server.address" , authority . host ( ) ) ;
193+ if let Some ( port) = authority. port_u16 ( ) {
194+ span. record ( "server.port" , port) ;
195195 }
196196 }
197197
198198 Ok ( self
199- . send_request ( request, config, override_connect_host )
199+ . send_request ( request, config, override_connect_endpoint )
200200 . await ?)
201201 }
202202
@@ -275,7 +275,7 @@ impl RequestSender {
275275 self ,
276276 request : OutgoingRequest ,
277277 config : OutgoingRequestConfig ,
278- override_connect_host : Option < String > ,
278+ override_connect_endpoint : Option < Authority > ,
279279 ) -> Result < IncomingResponse , ErrorCode > {
280280 let OutgoingRequestConfig {
281281 use_tls,
@@ -296,7 +296,7 @@ impl RequestSender {
296296 blocked_networks : self . blocked_networks ,
297297 connect_timeout,
298298 tls_client_config,
299- override_connect_host ,
299+ override_connect_endpoint ,
300300 } ,
301301 async move {
302302 if use_tls {
@@ -376,19 +376,24 @@ struct ConnectOptions {
376376 blocked_networks : BlockedNetworks ,
377377 connect_timeout : Duration ,
378378 tls_client_config : Option < TlsClientConfig > ,
379- override_connect_host : Option < String > ,
379+ override_connect_endpoint : Option < Authority > ,
380380}
381381
382382impl ConnectOptions {
383383 async fn connect_tcp ( & self , uri : & Uri , default_port : u16 ) -> Result < TcpStream , ErrorCode > {
384- let host = self
385- . override_connect_host
386- . as_deref ( )
387- . or ( uri. host ( ) )
384+ let authority = self
385+ . override_connect_endpoint
386+ . as_ref ( )
387+ . or ( uri. authority ( ) )
388388 . ok_or ( ErrorCode :: HttpRequestUriInvalid ) ?;
389- let host_and_port = ( host, uri. port_u16 ( ) . unwrap_or ( default_port) ) ;
390389
391- let mut socket_addrs = tokio:: net:: lookup_host ( host_and_port)
390+ let host_and_port = if authority. port ( ) . is_some ( ) {
391+ authority. as_str ( ) . to_string ( )
392+ } else {
393+ format ! ( "{}:{}" , authority. as_str( ) , default_port)
394+ } ;
395+
396+ let mut socket_addrs = tokio:: net:: lookup_host ( & host_and_port)
392397 . await
393398 . map_err ( |err| {
394399 tracing:: debug!( ?host_and_port, ?err, "Error resolving host" ) ;
0 commit comments