MCPcopy Create free account
hub / github.com/DNSCrypt/encrypted-dns-server / tls_proxy

Function tls_proxy

src/main.rs:259–296  ·  view source on GitHub ↗
(
    globals: Arc<Globals>,
    binlen: [u8; 2],
    mut client_connection: TcpStream,
)

Source from the content-addressed store, hash-verified

257}
258
259async fn tls_proxy(
260 globals: Arc<Globals>,
261 binlen: [u8; 2],
262 mut client_connection: TcpStream,
263) -> Result<(), Error> {
264 let tls_upstream_addr = match &globals.tls_upstream_addr {
265 None => return Ok(()),
266 Some(tls_upstream_addr) => tls_upstream_addr,
267 };
268 let socket = match globals.external_addr {
269 Some(x @ SocketAddr::V4(_)) => {
270 let socket = TcpSocket::new_v4()?;
271 socket.set_reuseaddr(true).ok();
272 socket.bind(x)?;
273 socket
274 }
275 Some(x @ SocketAddr::V6(_)) => {
276 let socket = TcpSocket::new_v6()?;
277 socket.set_reuseaddr(true).ok();
278 socket.bind(x)?;
279 socket
280 }
281 None => match tls_upstream_addr {
282 SocketAddr::V4(_) => TcpSocket::new_v4()?,
283 SocketAddr::V6(_) => TcpSocket::new_v6()?,
284 },
285 };
286 let mut ext_socket = socket.connect(*tls_upstream_addr).await?;
287 let (mut erh, mut ewh) = ext_socket.split();
288 let (mut rh, mut wh) = client_connection.split();
289 ewh.write_all(&binlen).await?;
290 let fut_proxy_1 = tokio::io::copy(&mut rh, &mut ewh);
291 let fut_proxy_2 = tokio::io::copy(&mut erh, &mut wh);
292 match join!(fut_proxy_1, fut_proxy_2) {
293 (Ok(_), Ok(_)) => Ok(()),
294 _ => bail!("TLS proxy error"),
295 }
296}
297
298async fn tcp_acceptor(globals: Arc<Globals>, tcp_listener: TcpListener) -> Result<(), Error> {
299 let runtime_handle = globals.runtime_handle.clone();

Callers 1

tcp_acceptorFunction · 0.85

Calls

no outgoing calls

Tested by

no test coverage detected