@@ -17,6 +17,7 @@ use crate::{
1717 recv, socket,
1818 } ,
1919} ;
20+ use s2n_quic:: server:: Name ;
2021use s2n_quic_core:: time:: Clock ;
2122use std:: { io, net:: SocketAddr , time:: Duration } ;
2223use tokio:: net:: TcpStream ;
@@ -33,6 +34,7 @@ pub trait Handshake: Clone {
3334 async fn handshake_with_entry (
3435 & self ,
3536 remote_handshake_addr : SocketAddr ,
37+ server_name : Name ,
3638 ) -> std:: io:: Result < ( secret:: map:: Peer , secret:: HandshakeKind ) > ;
3739
3840 fn local_addr ( & self ) -> std:: io:: Result < SocketAddr > ;
@@ -44,8 +46,9 @@ impl Handshake for crate::psk::client::Provider {
4446 async fn handshake_with_entry (
4547 & self ,
4648 remote_handshake_addr : SocketAddr ,
49+ server_name : Name ,
4750 ) -> std:: io:: Result < ( secret:: map:: Peer , secret:: HandshakeKind ) > {
48- self . handshake_with_entry ( remote_handshake_addr, |_conn, _duration| { } )
51+ self . handshake_with_entry ( remote_handshake_addr, |_conn, _duration| { } , server_name )
4952 . await
5053 }
5154
@@ -89,10 +92,11 @@ impl<H: Handshake + Clone, S: event::Subscriber + Clone> Client<H, S> {
8992 pub async fn handshake_with (
9093 & self ,
9194 remote_handshake_addr : SocketAddr ,
95+ server_name : Name ,
9296 ) -> io:: Result < secret:: HandshakeKind > {
9397 let ( _peer, kind) = self
9498 . handshake
95- . handshake_with_entry ( remote_handshake_addr)
99+ . handshake_with_entry ( remote_handshake_addr, server_name )
96100 . await ?;
97101 Ok ( kind)
98102 }
@@ -101,10 +105,11 @@ impl<H: Handshake + Clone, S: event::Subscriber + Clone> Client<H, S> {
101105 async fn handshake_for_connect (
102106 & self ,
103107 remote_handshake_addr : SocketAddr ,
108+ server_name : Name ,
104109 ) -> io:: Result < secret:: map:: Peer > {
105110 let ( peer, _kind) = self
106111 . handshake
107- . handshake_with_entry ( remote_handshake_addr)
112+ . handshake_with_entry ( remote_handshake_addr, server_name )
108113 . await ?;
109114 Ok ( peer)
110115 }
@@ -115,10 +120,17 @@ impl<H: Handshake + Clone, S: event::Subscriber + Clone> Client<H, S> {
115120 & self ,
116121 handshake_addr : SocketAddr ,
117122 acceptor_addr : SocketAddr ,
123+ server_name : Name ,
118124 ) -> io:: Result < Stream < S > > {
119125 match self . default_protocol {
120- socket:: Protocol :: Udp => self . connect_udp ( handshake_addr, acceptor_addr) . await ,
121- socket:: Protocol :: Tcp => self . connect_tcp ( handshake_addr, acceptor_addr) . await ,
126+ socket:: Protocol :: Udp => {
127+ self . connect_udp ( handshake_addr, acceptor_addr, server_name)
128+ . await
129+ }
130+ socket:: Protocol :: Tcp => {
131+ self . connect_tcp ( handshake_addr, acceptor_addr, server_name)
132+ . await
133+ }
122134 protocol => Err ( io:: Error :: new (
123135 io:: ErrorKind :: InvalidInput ,
124136 format ! ( "invalid default protocol {protocol:?}" ) ,
@@ -133,19 +145,32 @@ impl<H: Handshake + Clone, S: event::Subscriber + Clone> Client<H, S> {
133145 acceptor_addr : SocketAddr ,
134146 request : Req ,
135147 response : Res ,
148+ server_name : Name ,
136149 ) -> io:: Result < Res :: Output >
137150 where
138151 Req : rpc:: Request ,
139152 Res : rpc:: Response ,
140153 {
141154 match self . default_protocol {
142155 socket:: Protocol :: Udp => {
143- self . rpc_udp ( handshake_addr, acceptor_addr, request, response)
144- . await
156+ self . rpc_udp (
157+ handshake_addr,
158+ acceptor_addr,
159+ request,
160+ response,
161+ server_name,
162+ )
163+ . await
145164 }
146165 socket:: Protocol :: Tcp => {
147- self . rpc_tcp ( handshake_addr, acceptor_addr, request, response)
148- . await
166+ self . rpc_tcp (
167+ handshake_addr,
168+ acceptor_addr,
169+ request,
170+ response,
171+ server_name,
172+ )
173+ . await
149174 }
150175 protocol => Err ( io:: Error :: new (
151176 io:: ErrorKind :: InvalidInput ,
@@ -160,9 +185,10 @@ impl<H: Handshake + Clone, S: event::Subscriber + Clone> Client<H, S> {
160185 & self ,
161186 handshake_addr : SocketAddr ,
162187 acceptor_addr : SocketAddr ,
188+ server_name : Name ,
163189 ) -> io:: Result < Stream < S > > {
164190 // ensure we have a secret for the peer
165- let handshake = self . handshake_for_connect ( handshake_addr) ;
191+ let handshake = self . handshake_for_connect ( handshake_addr, server_name ) ;
166192
167193 let mut stream = client:: connect_udp ( handshake, acceptor_addr, & self . env ) . await ?;
168194 Self :: write_prelude ( & mut stream) . await ?;
@@ -177,13 +203,14 @@ impl<H: Handshake + Clone, S: event::Subscriber + Clone> Client<H, S> {
177203 acceptor_addr : SocketAddr ,
178204 request : Req ,
179205 response : Res ,
206+ server_name : Name ,
180207 ) -> io:: Result < Res :: Output >
181208 where
182209 Req : rpc:: Request ,
183210 Res : rpc:: Response ,
184211 {
185212 // ensure we have a secret for the peer
186- let handshake = self . handshake_for_connect ( handshake_addr) ;
213+ let handshake = self . handshake_for_connect ( handshake_addr, server_name ) ;
187214
188215 let stream = client:: connect_udp ( handshake, acceptor_addr, & self . env ) . await ?;
189216 rpc_internal:: from_stream ( stream, request, response) . await
@@ -195,9 +222,10 @@ impl<H: Handshake + Clone, S: event::Subscriber + Clone> Client<H, S> {
195222 & self ,
196223 handshake_addr : SocketAddr ,
197224 acceptor_addr : SocketAddr ,
225+ server_name : Name ,
198226 ) -> io:: Result < Stream < S > > {
199227 // ensure we have a secret for the peer
200- let handshake = self . handshake_for_connect ( handshake_addr) ;
228+ let handshake = self . handshake_for_connect ( handshake_addr, server_name ) ;
201229
202230 let mut stream =
203231 client:: connect_tcp ( handshake, acceptor_addr, & self . env , self . linger ) . await ?;
@@ -213,13 +241,14 @@ impl<H: Handshake + Clone, S: event::Subscriber + Clone> Client<H, S> {
213241 acceptor_addr : SocketAddr ,
214242 request : Req ,
215243 response : Res ,
244+ server_name : Name ,
216245 ) -> io:: Result < Res :: Output >
217246 where
218247 Req : rpc:: Request ,
219248 Res : rpc:: Response ,
220249 {
221250 // ensure we have a secret for the peer
222- let handshake = self . handshake_for_connect ( handshake_addr) ;
251+ let handshake = self . handshake_for_connect ( handshake_addr, server_name ) ;
223252
224253 let stream = client:: connect_tcp ( handshake, acceptor_addr, & self . env , self . linger ) . await ?;
225254 rpc_internal:: from_stream ( stream, request, response) . await
@@ -231,9 +260,12 @@ impl<H: Handshake + Clone, S: event::Subscriber + Clone> Client<H, S> {
231260 & self ,
232261 handshake_addr : SocketAddr ,
233262 stream : TcpStream ,
263+ server_name : Name ,
234264 ) -> io:: Result < Stream < S > > {
235265 // ensure we have a secret for the peer
236- let handshake = self . handshake_for_connect ( handshake_addr) . await ?;
266+ let handshake = self
267+ . handshake_for_connect ( handshake_addr, server_name)
268+ . await ?;
237269
238270 let mut stream = client:: connect_tcp_with ( handshake, stream, & self . env ) . await ?;
239271 Self :: write_prelude ( & mut stream) . await ?;
0 commit comments