From 10f32674529577f2e3285a02c1c080d22976b206 Mon Sep 17 00:00:00 2001 From: Eval EXEC Date: Wed, 4 Dec 2024 11:22:39 +0800 Subject: [PATCH] wip Signed-off-by: Eval EXEC --- Cargo.lock | 21 +++++----------- network/Cargo.toml | 1 + network/src/lib.rs | 1 + network/src/proxy.rs | 34 ++++++++++++++++++++++++++ util/app-config/src/configs/network.rs | 1 + 5 files changed, 43 insertions(+), 15 deletions(-) create mode 100644 network/src/proxy.rs diff --git a/Cargo.lock b/Cargo.lock index d19039b51a3..70e68557c75 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1363,6 +1363,7 @@ dependencies = [ "tokio", "tokio-util", "trust-dns-resolver", + "url", ] [[package]] @@ -3684,16 +3685,6 @@ dependencies = [ "unicode-normalization", ] -[[package]] -name = "idna" -version = "0.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "634d9b1461af396cad843f47fdba5597a4f9e6ddd4bfb6ff5d85028c25cb12f6" -dependencies = [ - "unicode-bidi", - "unicode-normalization", -] - [[package]] name = "idna" version = "1.0.3" @@ -5392,9 +5383,9 @@ checksum = "2b15c43186be67a4fd63bee50d0303afffcef381492ebe2c5d87f324e1b8815c" [[package]] name = "reqwest" -version = "0.12.8" +version = "0.12.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f713147fbe92361e52392c73b8c9e48c04c6625bce969ef54dc901e58e042a7b" +checksum = "a77c62af46e79de0a562e1a9849205ffcb7fc1238876e9bd743357570e04046f" dependencies = [ "base64 0.22.1", "bytes", @@ -7340,12 +7331,12 @@ dependencies = [ [[package]] name = "url" -version = "2.5.2" +version = "2.5.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "22784dbdf76fdde8af1aeda5622b546b422b6fc585325248a2bf9f5e41e94d6c" +checksum = "32f8b686cadd1473f4bd0117a5d28d36b1ade384ea9b5069a1c40aefed7fda60" dependencies = [ "form_urlencoded", - "idna 0.5.0", + "idna 1.0.3", "percent-encoding", "serde", ] diff --git a/network/Cargo.toml b/network/Cargo.toml index c653ddf17e9..861865177dc 100644 --- a/network/Cargo.toml +++ b/network/Cargo.toml @@ -35,6 +35,7 @@ bloom-filters = "0.1" ckb-spawn = { path = "../util/spawn", version = "= 0.120.0-pre" } bitflags = "1.0" p2p = { path = "/home/exec/Projects/github.com/nervosnetwork/tentacle/tentacle", package = "tentacle", default-features = false } +url = "2.5.4" [target.'cfg(not(target_family = "wasm"))'.dependencies] p2p = { path = "/home/exec/Projects/github.com/nervosnetwork/tentacle/tentacle", package = "tentacle", default-features = false, features = [ diff --git a/network/src/lib.rs b/network/src/lib.rs index c672dab65a2..57423034a94 100644 --- a/network/src/lib.rs +++ b/network/src/lib.rs @@ -17,6 +17,7 @@ pub mod peer_registry; pub mod peer_store; mod protocols; mod services; +mod proxy; #[cfg(test)] mod tests; diff --git a/network/src/proxy.rs b/network/src/proxy.rs new file mode 100644 index 00000000000..f584a1f212a --- /dev/null +++ b/network/src/proxy.rs @@ -0,0 +1,34 @@ +use p2p::service::ProxyConfig; + +use crate::Error; + +fn parse(proxy_url: &str) -> Result { + let parsed_url = url::Url::parse(proxy_url).map_err(|e| Error::Proxy(e.to_string()))?; + let scheme = parsed_url.scheme(); + match scheme { + "socks5" => Ok(ProxyConfig { + proxy_url: proxy_url.to_string(), + }), + _ => Err(Error::Proxy(format!( + "CKB doesn't support proxy scheme: {}", + scheme + ))), + } +} + +#[test] +fn parse_socks5_url() { + let result = url::Url::parse("socks5://username:password@localhost:1080"); + assert!(result.is_ok()); + let parsed_url = result.unwrap(); + dbg!(&parsed_url); + assert_eq!(parsed_url.scheme(), "socks5"); + // username + assert_eq!(parsed_url.username(), "username"); + // password + assert_eq!(parsed_url.password(), Some("password")); + // host + assert_eq!(parsed_url.host_str(), Some("localhost")); + // port + assert_eq!(parsed_url.port(), Some(1080)); +} diff --git a/util/app-config/src/configs/network.rs b/util/app-config/src/configs/network.rs index bcfcd7048a7..060e357309b 100644 --- a/util/app-config/src/configs/network.rs +++ b/util/app-config/src/configs/network.rs @@ -101,6 +101,7 @@ pub struct Config { #[derive(Clone, Debug, Serialize, Deserialize, Default)] pub struct ProxyConfig { pub enable: bool, + // like: socks5://username:password@127.0.0.1:1080 pub proxy_url: String, }