@@ -2,15 +2,15 @@ use anyhow::Context;
22use async_trait:: async_trait;
33use devolutions_gateway_task:: { ChildTask , ShutdownSignal , Task } ;
44use futures:: TryFutureExt as _;
5- use std:: net:: SocketAddr ;
5+ use std:: net:: { SocketAddr , ToSocketAddrs as _ } ;
66use tap:: Pipe as _;
77use tokio:: io:: { AsyncRead , AsyncWrite } ;
88use tokio:: net:: { TcpListener , TcpSocket , TcpStream } ;
99use tracing:: Instrument as _;
1010use url:: Url ;
1111
1212use crate :: generic_client:: GenericClient ;
13- use crate :: utils :: url_to_socket_addr ;
13+ use crate :: target_addr :: TargetAddr ;
1414use crate :: DgwState ;
1515
1616const HTTP_CONNECTION_MAX_DURATION : tokio:: time:: Duration = tokio:: time:: Duration :: from_secs ( 10 * 60 ) ;
@@ -36,7 +36,7 @@ pub enum ListenerKind {
3636
3737pub struct GatewayListener {
3838 addr : SocketAddr ,
39- listener_url : Url ,
39+ binding_url : TargetAddr ,
4040 kind : ListenerKind ,
4141 listener : TcpListener ,
4242 state : DgwState ,
@@ -48,7 +48,12 @@ impl GatewayListener {
4848
4949 info ! ( %url, "Initiating listener..." ) ;
5050
51- let socket_addr = url_to_socket_addr ( & url) . context ( "invalid url" ) ?;
51+ let url = TargetAddr :: try_from ( url) . context ( "invalid internal url" ) ?;
52+ let socket_addr = url
53+ . to_socket_addrs ( )
54+ . context ( "resolve internal URL to socket addr" ) ?
55+ . next ( )
56+ . context ( "internal URL resolved to nothing" ) ?;
5257
5358 let socket = if socket_addr. is_ipv4 ( ) {
5459 TcpSocket :: new_v4 ( ) . context ( "failed to create IPv4 TCP socket" ) ?
@@ -72,7 +77,7 @@ impl GatewayListener {
7277
7378 Ok ( Self {
7479 addr : socket_addr,
75- listener_url : url,
80+ binding_url : url,
7681 kind,
7782 listener,
7883 state,
@@ -87,7 +92,7 @@ impl GatewayListener {
8792 self . kind
8893 }
8994
90- #[ instrument( "listener" , skip( self ) , fields( port = self . listener_url . port( ) . expect ( "port" ) ) ) ]
95+ #[ instrument( "listener" , skip( self ) , fields( port = self . binding_url . port( ) ) ) ]
9196 pub async fn run ( self ) -> anyhow:: Result < ( ) > {
9297 match self . kind ( ) {
9398 ListenerKind :: Tcp => run_tcp_listener ( self . listener , self . state ) . await ,
0 commit comments