@@ -2,15 +2,15 @@ use anyhow::Context;
2
2
use async_trait:: async_trait;
3
3
use devolutions_gateway_task:: { ChildTask , ShutdownSignal , Task } ;
4
4
use futures:: TryFutureExt as _;
5
- use std:: net:: SocketAddr ;
5
+ use std:: net:: { SocketAddr , ToSocketAddrs as _ } ;
6
6
use tap:: Pipe as _;
7
7
use tokio:: io:: { AsyncRead , AsyncWrite } ;
8
8
use tokio:: net:: { TcpListener , TcpSocket , TcpStream } ;
9
9
use tracing:: Instrument as _;
10
10
use url:: Url ;
11
11
12
12
use crate :: generic_client:: GenericClient ;
13
- use crate :: utils :: url_to_socket_addr ;
13
+ use crate :: target_addr :: TargetAddr ;
14
14
use crate :: DgwState ;
15
15
16
16
const HTTP_CONNECTION_MAX_DURATION : tokio:: time:: Duration = tokio:: time:: Duration :: from_secs ( 10 * 60 ) ;
@@ -36,7 +36,7 @@ pub enum ListenerKind {
36
36
37
37
pub struct GatewayListener {
38
38
addr : SocketAddr ,
39
- listener_url : Url ,
39
+ binding_url : TargetAddr ,
40
40
kind : ListenerKind ,
41
41
listener : TcpListener ,
42
42
state : DgwState ,
@@ -48,7 +48,12 @@ impl GatewayListener {
48
48
49
49
info ! ( %url, "Initiating listener..." ) ;
50
50
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" ) ?;
52
57
53
58
let socket = if socket_addr. is_ipv4 ( ) {
54
59
TcpSocket :: new_v4 ( ) . context ( "failed to create IPv4 TCP socket" ) ?
@@ -72,7 +77,7 @@ impl GatewayListener {
72
77
73
78
Ok ( Self {
74
79
addr : socket_addr,
75
- listener_url : url,
80
+ binding_url : url,
76
81
kind,
77
82
listener,
78
83
state,
@@ -87,7 +92,7 @@ impl GatewayListener {
87
92
self . kind
88
93
}
89
94
90
- #[ instrument( "listener" , skip( self ) , fields( port = self . listener_url . port( ) . expect ( "port" ) ) ) ]
95
+ #[ instrument( "listener" , skip( self ) , fields( port = self . binding_url . port( ) ) ) ]
91
96
pub async fn run ( self ) -> anyhow:: Result < ( ) > {
92
97
match self . kind ( ) {
93
98
ListenerKind :: Tcp => run_tcp_listener ( self . listener , self . state ) . await ,
0 commit comments