Sni works.
This commit is contained in:
30
src/main.rs
30
src/main.rs
@@ -6,6 +6,7 @@ use std::fs::File;
|
||||
use std::sync::Arc;
|
||||
use std::net::ToSocketAddrs;
|
||||
use std::io::{ self, BufReader };
|
||||
use std::collections::HashMap;
|
||||
use futures_util::future::TryFutureExt;
|
||||
use tokio::prelude::*;
|
||||
use tokio::runtime;
|
||||
@@ -23,6 +24,15 @@ use std::error::Error;
|
||||
mod config;
|
||||
mod tls;
|
||||
|
||||
fn get_tls_config(cfg: config::Config) -> rustls::ServerConfig {
|
||||
let store = rustls::RootCertStore::empty();
|
||||
let verifier = rustls::AllowAnyAnonymousOrAuthenticatedClient::new(store);
|
||||
let mut tls_config = rustls::ServerConfig::new( verifier /*NoClientAuth::new()*/);
|
||||
tls_config.cert_resolver = Arc::new(tls::CertResolver::from_config(cfg).unwrap());
|
||||
|
||||
tls_config
|
||||
}
|
||||
|
||||
fn get_content(request: String) -> String {
|
||||
|
||||
let url = Url::parse(&request).unwrap();
|
||||
@@ -43,7 +53,14 @@ async fn handle_connection(mut stream: TlsStream<TcpStream>) -> Result<(), Box<d
|
||||
stream.read(&mut buffer).await?;
|
||||
let request = String::from_utf8_lossy(&buffer[..]).to_owned();
|
||||
println!("Request: {}", request);
|
||||
|
||||
/*
|
||||
let url = Url::parse(&request).unwrap();
|
||||
for name in cfg.server {
|
||||
if url.host_str() == Some(&name.url) {
|
||||
println!("serving url: {:?}", url.host_str());
|
||||
}
|
||||
}
|
||||
*/
|
||||
stream.write_all(&b"20\ttext/gemini\r\n"[..]).await?;
|
||||
stream.flush().await?;
|
||||
|
||||
@@ -57,26 +74,21 @@ async fn handle_connection(mut stream: TlsStream<TcpStream>) -> Result<(), Box<d
|
||||
|
||||
fn main() -> io::Result<()> {
|
||||
let cfg = config::Config::new("config.toml");
|
||||
let srv_map = cfg.to_map();
|
||||
|
||||
let addr = format!("{}:{}", cfg.host, cfg.port);
|
||||
addr.to_socket_addrs()?
|
||||
.next()
|
||||
.ok_or_else(|| io::Error::from(io::ErrorKind::AddrNotAvailable))?;
|
||||
|
||||
let certs = tls::load_certs(&cfg.server[0].cert)?;
|
||||
let keys = tls::load_key(&cfg.server[0].key);
|
||||
|
||||
let mut runtime = runtime::Builder::new()
|
||||
.threaded_scheduler()
|
||||
.enable_io()
|
||||
.build()?;
|
||||
let handle = runtime.handle().clone();
|
||||
let mut config = ServerConfig::new(NoClientAuth::new());
|
||||
config.set_single_cert(certs, keys)
|
||||
.map_err(|err| io::Error::new(io::ErrorKind::InvalidInput, err))?;
|
||||
let acceptor = TlsAcceptor::from(Arc::new(config));
|
||||
let config = get_tls_config(cfg);
|
||||
|
||||
println!("Serving");
|
||||
let acceptor = TlsAcceptor::from(Arc::new(config));
|
||||
|
||||
let fut = async {
|
||||
let mut listener = TcpListener::bind(&addr).await?;
|
||||
|
||||
Reference in New Issue
Block a user