stochastic-routing-extended 1.0.2

SRX (Stochastic Routing eXtended) — a next-generation VPN protocol with stochastic routing, DPI evasion, post-quantum cryptography, and multi-transport channel splitting
Documentation
//! Multi-transport abstraction layer.
//!
//! SRX supports simultaneous operation over multiple transports:
//! TCP, UDP, QUIC, WebSocket, gRPC, HTTP/2-3 streams.
//!
//! Each transport implements the [`Transport`] trait, providing a uniform
//! interface for sending and receiving frames regardless of the underlying
//! protocol.

pub mod manager;
pub mod pinning;
pub mod reconnect;
pub mod tcp;
pub mod timeout;
pub mod tls_tcp;
pub mod udp;

#[cfg(feature = "quic")]
pub mod quic;

#[cfg(feature = "websocket")]
pub mod websocket;

#[cfg(feature = "grpc")]
pub mod grpc;

#[cfg(feature = "http-tunnel")]
pub mod http;

use async_trait::async_trait;
use bytes::Bytes;

pub use manager::TransportManager;
pub use pinning::{CertPin, cert_sha256};
pub use reconnect::{ReconnectConfig, ReconnectingTransport};
pub use tcp::TcpTransport;
pub use timeout::TimeoutTransport;
pub use tls_tcp::TlsTcpTransport;
pub use udp::UdpTransport;

#[cfg(feature = "grpc")]
pub use grpc::{GrpcTransport, TunnelEcho, serve_tunnel_echo, serve_tunnel_echo_tls};
#[cfg(feature = "http-tunnel")]
pub use http::HttpTunnelTransport;
#[cfg(feature = "quic")]
pub use quic::{QuicStreamChannel, QuicTransport};
#[cfg(feature = "websocket")]
pub use websocket::WebSocketTransport;

/// Identifies a transport protocol type.
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
pub enum TransportKind {
    Tcp,
    Udp,
    Quic,
    WebSocket,
    Grpc,
    Http2,
}

/// Unified trait for all transport implementations.
#[async_trait]
pub trait Transport: Send + Sync {
    /// The transport kind.
    fn kind(&self) -> TransportKind;

    /// Send raw frame bytes over this transport.
    async fn send(&self, data: Bytes) -> crate::error::Result<()>;

    /// Receive raw frame bytes from this transport.
    async fn recv(&self) -> crate::error::Result<Bytes>;

    /// Check if the transport is currently healthy.
    async fn is_healthy(&self) -> bool;

    /// Gracefully close the transport.
    async fn close(&self) -> crate::error::Result<()>;
}