🚧 wip: start making a place for PTTH_QUIC relay server config
parent
5eda2c4288
commit
86e5305630
|
@ -1354,6 +1354,7 @@ name = "ptth_quic"
|
||||||
version = "0.1.0"
|
version = "0.1.0"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"anyhow",
|
"anyhow",
|
||||||
|
"arc-swap",
|
||||||
"base64 0.20.0",
|
"base64 0.20.0",
|
||||||
"ctrlc",
|
"ctrlc",
|
||||||
"futures-util",
|
"futures-util",
|
||||||
|
@ -1364,6 +1365,8 @@ dependencies = [
|
||||||
"reqwest",
|
"reqwest",
|
||||||
"rmp-serde 1.1.1",
|
"rmp-serde 1.1.1",
|
||||||
"rustls",
|
"rustls",
|
||||||
|
"rusty_ulid 1.0.0",
|
||||||
|
"serde",
|
||||||
"structopt",
|
"structopt",
|
||||||
"tokio",
|
"tokio",
|
||||||
"tracing",
|
"tracing",
|
||||||
|
@ -1910,18 +1913,18 @@ dependencies = [
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "serde"
|
name = "serde"
|
||||||
version = "1.0.150"
|
version = "1.0.151"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "e326c9ec8042f1b5da33252c8a37e9ffbd2c9bef0155215b6e6c80c790e05f91"
|
checksum = "97fed41fc1a24994d044e6db6935e69511a1153b52c15eb42493b26fa87feba0"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"serde_derive",
|
"serde_derive",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "serde_derive"
|
name = "serde_derive"
|
||||||
version = "1.0.150"
|
version = "1.0.151"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "42a3df25b0713732468deadad63ab9da1f1fd75a48a15024b50363f128db627e"
|
checksum = "255abe9a125a985c05190d687b320c12f9b1f0b99445e608c21ba0782c719ad8"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"proc-macro2",
|
"proc-macro2",
|
||||||
"quote",
|
"quote",
|
||||||
|
|
|
@ -9,6 +9,7 @@ license = "AGPL-3.0"
|
||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
anyhow = "1.0.66"
|
anyhow = "1.0.66"
|
||||||
|
arc-swap = "1.5.1"
|
||||||
base64 = "0.20.0"
|
base64 = "0.20.0"
|
||||||
ctrlc = "3.2.4"
|
ctrlc = "3.2.4"
|
||||||
futures-util = "0.3.25"
|
futures-util = "0.3.25"
|
||||||
|
@ -18,6 +19,8 @@ rand = "0.8.5"
|
||||||
rcgen = "0.10.0"
|
rcgen = "0.10.0"
|
||||||
rmp-serde = "1.1.1"
|
rmp-serde = "1.1.1"
|
||||||
rustls = "0.20.7"
|
rustls = "0.20.7"
|
||||||
|
rusty_ulid = "1.0.0"
|
||||||
|
serde = "1.0.151"
|
||||||
structopt = "0.3.26"
|
structopt = "0.3.26"
|
||||||
tokio = { version = "1.23.0", features = ["full"] }
|
tokio = { version = "1.23.0", features = ["full"] }
|
||||||
tracing-subscriber = "0.3.16"
|
tracing-subscriber = "0.3.16"
|
||||||
|
|
|
@ -164,11 +164,22 @@ async fn handle_http (_req: Request <Body>, relay_state: Arc <RelayState>)
|
||||||
|
|
||||||
#[derive (Default)]
|
#[derive (Default)]
|
||||||
struct RelayState {
|
struct RelayState {
|
||||||
|
config: arc_swap::ArcSwap <Config>,
|
||||||
p4_server_proxies: Mutex <HashMap <PeerId, P4State>>,
|
p4_server_proxies: Mutex <HashMap <PeerId, P4State>>,
|
||||||
direc_cookies: Mutex <HashMap <Vec <u8>, DirecState>>,
|
direc_cookies: Mutex <HashMap <Vec <u8>, DirecState>>,
|
||||||
stats: Stats,
|
stats: Stats,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[derive (Default)]
|
||||||
|
struct Config {
|
||||||
|
ip_nicknames: HashMap <String, [u8; 4]>,
|
||||||
|
}
|
||||||
|
|
||||||
|
#[derive (Deserialize)]
|
||||||
|
struct ConfigFile {
|
||||||
|
ip_nicknames: HashMap <String, String>,
|
||||||
|
}
|
||||||
|
|
||||||
struct DirecState {
|
struct DirecState {
|
||||||
start_time: Instant,
|
start_time: Instant,
|
||||||
p2_id: PeerId,
|
p2_id: PeerId,
|
||||||
|
@ -287,6 +298,19 @@ async fn handle_quic_connection (
|
||||||
conn: quinn::Connecting,
|
conn: quinn::Connecting,
|
||||||
) -> anyhow::Result <()>
|
) -> anyhow::Result <()>
|
||||||
{
|
{
|
||||||
|
let id = Ulid::generate ();
|
||||||
|
|
||||||
|
let remote_addr = conn.remote_address ();
|
||||||
|
let ip_nickname = match remote_addr {
|
||||||
|
SocketAddr::V4 (x) => {
|
||||||
|
let ip = x.ip ().octets ();
|
||||||
|
"Unknown"
|
||||||
|
},
|
||||||
|
_ => "Unknown, not IPv4",
|
||||||
|
};
|
||||||
|
|
||||||
|
debug! ("EHG7NVUD Incoming QUIC connection {} from {:?} ({})", id, remote_addr, ip_nickname);
|
||||||
|
|
||||||
let conn = conn.await?;
|
let conn = conn.await?;
|
||||||
|
|
||||||
// Everyone who connects must identify themselves with the first
|
// Everyone who connects must identify themselves with the first
|
||||||
|
@ -299,14 +323,14 @@ async fn handle_quic_connection (
|
||||||
|
|
||||||
match peer {
|
match peer {
|
||||||
protocol::P3Peer::P2ClientProxy (peer) => {
|
protocol::P3Peer::P2ClientProxy (peer) => {
|
||||||
trace! ("H36JTVE5 Accepting connection from P2 client");
|
trace! ("H36JTVE5 Handling connection {} as P2 client", id);
|
||||||
// TODO: Check authorization for P2 peers
|
// TODO: Check authorization for P2 peers
|
||||||
|
|
||||||
protocol::p3_authorize_p2_peer (&mut send).await?;
|
protocol::p3_authorize_p2_peer (&mut send).await?;
|
||||||
handle_p2_connection (relay_state, conn, peer).await?;
|
handle_p2_connection (relay_state, conn, peer).await?;
|
||||||
},
|
},
|
||||||
protocol::P3Peer::P4ServerProxy (peer) => {
|
protocol::P3Peer::P4ServerProxy (peer) => {
|
||||||
trace! ("LRHUKB7K Accepting connection from P4 end server");
|
trace! ("LRHUKB7K Handling connection {} as P4 end server", id);
|
||||||
// TODO: Check authorization for P4 peers
|
// TODO: Check authorization for P4 peers
|
||||||
|
|
||||||
protocol::p3_authorize_p4_peer (&mut send).await?;
|
protocol::p3_authorize_p4_peer (&mut send).await?;
|
||||||
|
|
|
@ -45,6 +45,8 @@ pub use rand::{
|
||||||
Rng,
|
Rng,
|
||||||
RngCore,
|
RngCore,
|
||||||
};
|
};
|
||||||
|
pub use rusty_ulid::Ulid;
|
||||||
|
pub use serde::Deserialize;
|
||||||
pub use tracing::{
|
pub use tracing::{
|
||||||
debug,
|
debug,
|
||||||
error,
|
error,
|
||||||
|
|
Loading…
Reference in New Issue