MCPcopy Create free account
hub / github.com/cargo-lambda/cargo-lambda / start_tls_proxy

Function start_tls_proxy

crates/cargo-lambda-watch/src/lib.rs:305–367  ·  view source on GitHub ↗
(
    subsys: SubsystemHandle,
    connection_tracker: TaskTracker,
    tls_config: ServerConfig,
    proxy_addr: SocketAddr,
    runtime_addr: SocketAddr,
)

Source from the content-addressed store, hash-verified

303}
304
305async fn start_tls_proxy(
306 subsys: SubsystemHandle,
307 connection_tracker: TaskTracker,
308 tls_config: ServerConfig,
309 proxy_addr: SocketAddr,
310 runtime_addr: SocketAddr,
311) -> Result<()> {
312 info!(
313 ?proxy_addr,
314 "starting TLS server, use this address to send secure requests to the runtime"
315 );
316
317 let acceptor = TlsAcceptor::from(Arc::new(tls_config));
318
319 let listener = TcpListener::bind(proxy_addr).await.into_diagnostic()?;
320
321 let addr = Arc::new(runtime_addr);
322
323 loop {
324 let (stream, _) = listener.accept().await.into_diagnostic()?;
325 let acceptor = acceptor.clone();
326
327 let addr = addr.clone();
328
329 connection_tracker.spawn({
330 let cancellation_token = subsys.create_cancellation_token();
331 let connection_tracker = connection_tracker.clone();
332
333 async move {
334 let hyper_service = service_fn(move |request: Request<Incoming>| {
335 proxy(connection_tracker.clone(), request, addr.clone())
336 });
337
338 let tls_stream = match acceptor.accept(stream).await {
339 Ok(tls_stream) => tls_stream,
340 Err(e) => {
341 error!(error = ?e, "Failed to accept TLS connection");
342 return Err(e).into_diagnostic();
343 }
344 };
345
346 let builder = Builder::new(TokioExecutor::new());
347 let conn = builder.serve_connection(TokioIo::new(tls_stream), hyper_service);
348
349 pin!(conn);
350
351 let result = tokio::select! {
352 res = conn.as_mut() => res,
353 _ = cancellation_token.cancelled() => {
354 conn.as_mut().graceful_shutdown();
355 conn.await
356 }
357 };
358
359 if let Err(e) = result {
360 error!(error = ?e, "Failed to serve connection");
361 }
362

Callers 1

start_serverFunction · 0.85

Calls 2

newFunction · 0.85
proxyFunction · 0.85

Tested by

no test coverage detected