cttps 0.1.1

Reference implementation for the CTTPS protocol
Documentation
// src/main.rs

use cttps::CttpsStream;

use tokio::net::TcpListener;

#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
    let listener = TcpListener::bind("127.0.0.1:8443").await?;

    println!("CTTPS server listening on 127.0.0.1:8443");

    loop {
        let (socket, addr) = listener.accept().await?;

        println!("Client connected: {}", addr);

        tokio::spawn(async move {
            match CttpsStream::connect(socket).await {
                Ok(mut cttps) => {
                    println!("Secure tunnel established");

                    loop {
                        match cttps.recv_packet().await {
                            Ok(data) => {
                                println!(
                                    "Received: {}",
                                    String::from_utf8_lossy(&data)
                                );

                                // Echo response
                                let mut response =
                                    b"Hello from secure server".to_vec();

                                if let Err(e) =
                                    cttps.send_packet(&mut response).await
                                {
                                    eprintln!("Send error: {}", e);
                                    break;
                                }
                            }

                            Err(e) => {
                                eprintln!("Receive error: {}", e);
                                break;
                            }
                        }
                    }
                }

                Err(e) => {
                    eprintln!("Handshake failed: {}", e);
                }
            }
        });
    }
}