1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
//! # Refractium
//!
//! A high-performance, lightweight L4 protocol multiplexer.
//!
//! `refractium` allows you to route incoming TCP and UDP traffic to different backends
//! based on the protocol identification (magic bytes, SNI, etc.). It supports
//! dynamic protocol registration, load balancing, and health monitoring.
//!
//! ## Core Features
//! - **TCP & UDP Support**: Multiplex both stream and packet-based traffic.
//! - **Protocol Identification**: Built-in support for HTTP, HTTPS (with SNI), SSH, DNS, and FTP.
//! - **Dynamic Routing**: Add custom protocols using simple patterns or complex logic.
//! - **Load Balancing**: Distribute traffic across multiple backends with health checks.
//! - **Graceful Shutdown**: Built-in support for cancellation tokens.
//!
//! ## Quick Start
//! ```rust,no_run
//! use refractium::core::Refractium;
//! use refractium::protocols::ProtocolRegistry;
//! use refractium::protocols::http::Http;
//! use std::collections::HashMap;
//! use std::sync::Arc;
//!
//! #[tokio::main]
//! async fn main() -> Result<(), Box<dyn std::error::Error>> {
//! let mut registry = ProtocolRegistry::new();
//! registry.register(Box::new(Http));
//!
//! let mut routes = HashMap::new();
//! routes.insert("Http".to_string(), vec!["127.0.0.1:8080".to_string()]);
//!
//! let refractium = Refractium::builder()
//! .registries(Arc::new(registry), Arc::new(ProtocolRegistry::new()))
//! .routes(routes, HashMap::new())
//! .build();
//!
//! refractium.run_tcp("0.0.0.0:80".parse()?).await?;
//! Ok(())
//! }
//! ```
/// Core logic for proxying and routing.
/// Error types and result aliases.
/// Internal macros for protocol definition.
/// Protocol implementations and identification logic.
pub use cratetypes;
pub use crate;
pub use crate;