odd-box 0.1.7-preview

dead simple reverse proxy server
use std::net::SocketAddr;
use std::sync::atomic::AtomicUsize;

#[derive(Debug)]
pub struct ProxyStats {
    pub active_connections : dashmap::DashMap<ConnectionKey,ProxyActiveConnection>,
    pub tunnelled_tcp_connections_per_hostname : dashmap::DashMap<String,AtomicUsize>,
    pub terminated_http_connections_per_hostname : dashmap::DashMap<String,AtomicUsize>
}


#[derive(Debug,Clone)]
pub enum ProxyActiveConnectionType {
    TcpTunnelUnencryptedHttp, 
    TcpTunnelTls,
    TerminatingHttp {
        incoming_scheme : String,
        incoming_http_version : String,
        outgoing_scheme : String,
        outgoing_http_version: String
    },
    TerminatingWs {
        incoming_scheme : String,
        incoming_http_version : String,
        outgoing_scheme : String,
        outgoing_http_version: String
    }
}

pub type ConnectionKey = u64;

#[derive(Debug,Clone)]
#[allow(dead_code)]
pub struct ProxyActiveConnection {
    pub target_name : String,
    pub creation_time : chrono::DateTime<chrono::Local>,
    pub description : Option<String>,
    pub connection_type : ProxyActiveConnectionType,
    pub source_addr: SocketAddr,
    pub target_addr: String
}