agate

Simple gemini server for static files
git clone https://github.com/mbrubeck/agate.git
Log | Files | Refs | README

commit 45faee45a7a3c88050df3cd0f3e7ec9744d8c8db
parent dc417324867be91d9e9972fdac1b087e6e438d29
Author: Matt Brubeck <mbrubeck@limpet.net>
Date:   Sun, 17 May 2020 09:40:50 -0700

Start of handle_connection

Diffstat:
Msrc/main.rs | 17++++++++++++++---
1 file changed, 14 insertions(+), 3 deletions(-)

diff --git a/src/main.rs b/src/main.rs @@ -1,9 +1,10 @@ use { async_std::{ - net::TcpListener, + net::{TcpListener, TcpStream}, prelude::*, - task::block_on, + task, }, + async_tls::TlsAcceptor, rustls::{ internal::pemfile::{certs, rsa_private_keys}, }, @@ -11,11 +12,15 @@ use { error::Error, fs::File, io::BufReader, + sync::Arc, }, }; pub type Result<T=()> = std::result::Result<T, Box<dyn Error>>; +async fn handle_connection(_: TlsAcceptor, _: TcpStream) { +} + fn main() -> Result { let certs = certs(&mut BufReader::new(File::open("tests/cert.pem")?)) .expect("Error reading certificate file"); @@ -24,14 +29,20 @@ fn main() -> Result { let mut config = rustls::ServerConfig::new(rustls::NoClientAuth::new()); config.set_single_cert(certs, keys.remove(0))?; + let acceptor = TlsAcceptor::from(Arc::new(config)); let addr = "0.0.0.0:1965"; - block_on(async { + task::block_on(async { let listener = TcpListener::bind(addr).await?; let mut incoming = listener.incoming(); while let Some(stream) = incoming.next().await { + let acceptor = acceptor.clone(); + let stream = stream?; + task::spawn(async { + handle_connection(acceptor, stream).await; + }); } Ok(())