diff options
author | metamuffin <metamuffin@disroot.org> | 2024-08-19 12:22:53 +0200 |
---|---|---|
committer | metamuffin <metamuffin@disroot.org> | 2024-08-19 12:22:53 +0200 |
commit | 36a09fd6e452d2e6391a823a08787b5b17af7d08 (patch) | |
tree | 4698d3b6732815f7c25efc7f069e7e60c96bb14b /src | |
parent | d06821468e9a6e0d62c4b1ced21b1290e7a5bc47 (diff) | |
download | gnix-36a09fd6e452d2e6391a823a08787b5b17af7d08.tar gnix-36a09fd6e452d2e6391a823a08787b5b17af7d08.tar.bz2 gnix-36a09fd6e452d2e6391a823a08787b5b17af7d08.tar.zst |
h2
Diffstat (limited to 'src')
-rw-r--r-- | src/main.rs | 58 |
1 files changed, 27 insertions, 31 deletions
diff --git a/src/main.rs b/src/main.rs index e286924..8ca86cb 100644 --- a/src/main.rs +++ b/src/main.rs @@ -20,10 +20,10 @@ use hyper::{ body::Incoming, header::{CONTENT_TYPE, HOST, SERVER}, http::HeaderValue, - server::conn::http1, service::service_fn, Request, Response, StatusCode, }; +use hyper_util::rt::TokioExecutor; use log::{debug, error, info, warn, LevelFilter}; use modules::{NodeContext, MODULES}; use std::{ @@ -150,10 +150,7 @@ async fn serve_https(state: Arc<State>) -> Result<()> { let mut cfg = rustls::ServerConfig::builder() .with_no_client_auth() .with_cert_resolver(Arc::new(certs)); - cfg.alpn_protocols = vec![ - // b"h2".to_vec(), - b"http/1.1".to_vec(), - ]; + cfg.alpn_protocols = vec![b"h2".to_vec(), b"http/1.1".to_vec()]; Arc::new(cfg) }; let tls_acceptor = Arc::new(TlsAcceptor::from(tls_config)); @@ -184,34 +181,33 @@ pub async fn serve_stream<T: Unpin + Send + 'static + hyper::rt::Read + hyper::r addr: SocketAddr, ) { if let Ok(_semaphore) = state.l_incoming.try_acquire() { - let conn = http1::Builder::new() - .serve_connection( - stream, - service_fn(|req| { - let state = state.clone(); - async move { - let config = state.config.read().await.clone(); - match service(state, config, req, addr).await { - Ok(r) => Ok(r), - Err(ServiceError::Hyper(e)) => Err(e), - Err(error) => Ok({ - warn!("service error {addr} {error:?}"); - let mut resp = Response::new(format!( - "Sorry, we were unable to process your request: {error}" - )); - *resp.status_mut() = StatusCode::BAD_REQUEST; - resp.headers_mut() - .insert(CONTENT_TYPE, HeaderValue::from_static("text/plain")); - resp.headers_mut() - .insert(SERVER, HeaderValue::from_static("gnix")); - resp - } - .map(|b| b.map_err(|e| match e {}).boxed())), + let builder = hyper_util::server::conn::auto::Builder::new(TokioExecutor::new()); + let conn = builder.serve_connection_with_upgrades( + stream, + service_fn(|req| { + let state = state.clone(); + async move { + let config = state.config.read().await.clone(); + match service(state, config, req, addr).await { + Ok(r) => Ok(r), + Err(ServiceError::Hyper(e)) => Err(e), + Err(error) => Ok({ + warn!("service error {addr} {error:?}"); + let mut resp = Response::new(format!( + "Sorry, we were unable to process your request: {error}" + )); + *resp.status_mut() = StatusCode::BAD_REQUEST; + resp.headers_mut() + .insert(CONTENT_TYPE, HeaderValue::from_static("text/plain")); + resp.headers_mut() + .insert(SERVER, HeaderValue::from_static("gnix")); + resp } + .map(|b| b.map_err(|e| match e {}).boxed())), } - }), - ) - .with_upgrades(); + } + }), + ); if let Err(err) = conn.await { warn!("error: {:?}", err); } |