feat: add new fields to vless query

This commit is contained in:
Keivan-sf
2023-10-11 17:17:34 +03:30
parent 9813811c4f
commit 201e236061

View File

@@ -12,6 +12,16 @@ pub struct VlessQuery {
r#type: String, r#type: String,
flow: String, flow: String,
path: String, path: String,
encryption: String,
header_type: String,
host: String,
seed: String,
quic_security: String,
r#key: String,
mode: String,
service_name: String,
slpn: String,
spx: String,
} }
pub struct VlessUUIDAndHost { pub struct VlessUUIDAndHost {
@@ -46,7 +56,9 @@ pub fn parse_vless_uui_and_host(raw_data: &str) -> VlessUUIDAndHost {
} }
Some(data) => ( Some(data) => (
String::from(data.0), String::from(data.0),
data.1.parse::<u16>().expect("Wrong vless format, port is not a number"), data.1
.parse::<u16>()
.expect("Wrong vless format, port is not a number"),
), ),
}; };
return VlessUUIDAndHost { uuid, host, port }; return VlessUUIDAndHost { uuid, host, port };
@@ -54,6 +66,7 @@ pub fn parse_vless_uui_and_host(raw_data: &str) -> VlessUUIDAndHost {
pub fn parse_vless_query_data(raw_query: &str) -> VlessQuery { pub fn parse_vless_query_data(raw_query: &str) -> VlessQuery {
let query = querystring::querify(raw_query); let query = querystring::querify(raw_query);
let a = VlessQuery { let a = VlessQuery {
path: query path: query
.iter() .iter()
@@ -103,6 +116,66 @@ pub fn parse_vless_query_data(raw_query: &str) -> VlessQuery {
.unwrap_or(&("", "")) .unwrap_or(&("", ""))
.1 .1
.to_string(), .to_string(),
encryption: query
.iter()
.find(|q| String::from(q.0) == String::from("encryption"))
.unwrap_or(&("", ""))
.1
.to_string(),
header_type: query
.iter()
.find(|q| String::from(q.0) == String::from("headerType"))
.unwrap_or(&("", ""))
.1
.to_string(),
host: query
.iter()
.find(|q| String::from(q.0) == String::from("host"))
.unwrap_or(&("", ""))
.1
.to_string(),
seed: query
.iter()
.find(|q| String::from(q.0) == String::from("seed"))
.unwrap_or(&("", ""))
.1
.to_string(),
quic_security: query
.iter()
.find(|q| String::from(q.0) == String::from("quicSecurity"))
.unwrap_or(&("", ""))
.1
.to_string(),
key: query
.iter()
.find(|q| String::from(q.0) == String::from("key"))
.unwrap_or(&("", ""))
.1
.to_string(),
mode: query
.iter()
.find(|q| String::from(q.0) == String::from("mode"))
.unwrap_or(&("", ""))
.1
.to_string(),
service_name: query
.iter()
.find(|q| String::from(q.0) == String::from("serviceName"))
.unwrap_or(&("", ""))
.1
.to_string(),
slpn: query
.iter()
.find(|q| String::from(q.0) == String::from("slpn"))
.unwrap_or(&("", ""))
.1
.to_string(),
spx: query
.iter()
.find(|q| String::from(q.0) == String::from("spx"))
.unwrap_or(&("", ""))
.1
.to_string(),
}; };
return a; return a;
} }
@@ -128,8 +201,18 @@ mod tests {
); );
assert_eq!(parsed_query.sid, "6ba85179e30d4fc2"); assert_eq!(parsed_query.sid, "6ba85179e30d4fc2");
assert_eq!(parsed_query.r#type, "tcp"); assert_eq!(parsed_query.r#type, "tcp");
assert_eq!(parsed_query.r#flow, "xtls-rprx-vision"); assert_eq!(parsed_query.flow, "xtls-rprx-vision");
assert_eq!(parsed_query.path, "/"); assert_eq!(parsed_query.path, "/");
assert_eq!(parsed_query.encryption, "");
assert_eq!(parsed_query.header_type, "");
assert_eq!(parsed_query.host, "");
assert_eq!(parsed_query.seed, "");
assert_eq!(parsed_query.quic_security, "");
assert_eq!(parsed_query.key, "");
assert_eq!(parsed_query.mode, "");
assert_eq!(parsed_query.service_name, "");
assert_eq!(parsed_query.slpn, "");
assert_eq!(parsed_query.spx, "");
} }
#[test] #[test]
fn parse_vless_query_with_defaults() { fn parse_vless_query_with_defaults() {
@@ -143,6 +226,16 @@ mod tests {
assert_eq!(parsed_query.r#type, ""); assert_eq!(parsed_query.r#type, "");
assert_eq!(parsed_query.r#flow, ""); assert_eq!(parsed_query.r#flow, "");
assert_eq!(parsed_query.path, ""); assert_eq!(parsed_query.path, "");
assert_eq!(parsed_query.encryption, "");
assert_eq!(parsed_query.header_type, "");
assert_eq!(parsed_query.host, "");
assert_eq!(parsed_query.seed, "");
assert_eq!(parsed_query.quic_security, "");
assert_eq!(parsed_query.key, "");
assert_eq!(parsed_query.mode, "");
assert_eq!(parsed_query.service_name, "");
assert_eq!(parsed_query.slpn, "");
assert_eq!(parsed_query.spx, "");
} }
#[test] #[test]
fn parse_vless_host() { fn parse_vless_host() {