diff --git a/src/main.rs b/src/main.rs index 8c1ef0b..f5e3312 100644 --- a/src/main.rs +++ b/src/main.rs @@ -2,7 +2,7 @@ use std::process::exit; mod parser; fn main() { - let protocol = parser::get_uri_format("vmess://"); + let protocol = parser::get_uri_protocol("vmess://"); match protocol { Some(parser::protocols::Vless) => { println!("The protocol was Vless"); diff --git a/src/parser/mod.rs b/src/parser/mod.rs index b8d2f5e..51523e9 100644 --- a/src/parser/mod.rs +++ b/src/parser/mod.rs @@ -9,7 +9,7 @@ pub enum protocols { Http, } -pub fn get_uri_format(uri: &str) -> Option { +pub fn get_uri_protocol(uri: &str) -> Option { let uri_regex = Regex::new(r"^[a-z]+:\/\/.+$").unwrap(); if !uri_regex.is_match(uri) { return None; @@ -20,6 +20,18 @@ pub fn get_uri_format(uri: &str) -> Option { if uri.starts_with("vless://") { return Some(protocols::Vless); } + if uri.starts_with("ss://") { + return Some(protocols::Shadowsocks); + } + if uri.starts_with("socks://") { + return Some(protocols::Socks); + } + if uri.starts_with("http://") { + return Some(protocols::Http); + } + if uri.starts_with("trojan://") { + return Some(protocols::Trojan); + } return None; } @@ -28,12 +40,27 @@ mod tests { use super::*; #[test] fn return_none_for_invalid_uri() { - let protocol = get_uri_format("123-vless://3d1c3f04-729d-59d3-bdb6-3f3f4352e173@root.ii.one:2083?security=reality&sni=www.spamhaus.org&fp=safari&pbk=7xhH4b_VkliBxGulljcyPOH-bYUA2dl-XAdZAsfhk04&sid=6ba85179e30d4fc2&type=tcp&flow=xtls-rprx-vision#Ha-ac"); + let protocol = get_uri_protocol("123-vless://3d1c3f04-729d-59d3-bdb6-3f3f4352e173@root.ii.one:2083?security=reality&sni=www.spamhaus.org&fp=safari&pbk=7xhH4b_VkliBxGulljcyPOH-bYUA2dl-XAdZAsfhk04&sid=6ba85179e30d4fc2&type=tcp&flow=xtls-rprx-vision#Ha-ac"); assert!(matches!(protocol, None)); } #[test] - fn recognize_vless_format() { - let protocol = get_uri_format("vless://3d1c3f04-729d-59d3-bdb6-3f3f4352e173@root.ii.one:2083?security=reality&sni=www.spamhaus.org&fp=safari&pbk=7xhH4b_VkliBxGulljcyPOH-bYUA2dl-XAdZAsfhk04&sid=6ba85179e30d4fc2&type=tcp&flow=xtls-rprx-vision#Ha-ac").unwrap(); + fn recognize_vless_protocol() { + let protocol = get_uri_protocol("vless://3d1c3f04-729d-59d3-bdb6-3f3f4352e173@root.ii.one:2083?security=reality&sni=www.spamhaus.org&fp=safari&pbk=7xhH4b_VkliBxGulljcyPOH-bYUA2dl-XAdZAsfhk04&sid=6ba85179e30d4fc2&type=tcp&flow=xtls-rprx-vision#Ha-ac").unwrap(); assert!(matches!(protocol, protocols::Vless)); } + #[test] + fn recognize_vmess_protocol() { + let protocol = get_uri_protocol("vmess://eyJhZGQiOiIxMjcuMC4wLjEiLCJhaWQiOiIwIiwiaG9zdCI6IiIsImlkIjoiOHM2OTdlMmMtZXMxNy00MDNkLTI0ZjMtZHMyYzYwc2I4ZjUiLCJuZXQiOiJ0Y3AiLCJwYXRoIjoiIiwicG9ydCI6IjgwODAiLCJwcyI6InRlc3QiLCJzY3kiOiJhdXRvIiwic25pIjoiIiwidGxzIjoiIiwidHlwZSI6Im5vbmUiLCJ2IjoiMiJ9").unwrap(); + assert!(matches!(protocol, protocols::Vmess)); + } + #[test] + fn recognize_shadowsocks_protocol() { + let protocol = get_uri_protocol("ss://Y2hhY2hhMjAtaWV0Zi1wb2x5MTMwNTpXNzRYRkFMS0t1dzZtNUlB@www.outline.aasf.cyou:443#test").unwrap(); + assert!(matches!(protocol, protocols::Shadowsocks)); + } + #[test] + fn recognize_trojan_protocol() { + let protocol = get_uri_protocol("trojan://test-pw@13.50.100.84:22222?security=tls&sni=trj.rollingnext.co.uk&type=tcp#test").unwrap(); + assert!(matches!(protocol, protocols::Trojan)); + } }