Create folder for vless mod

This commit is contained in:
Keivan-sf
2023-10-17 17:27:24 +03:30
parent c127d1f024
commit d4f9cda5d0
2 changed files with 39 additions and 46 deletions

View File

@@ -1,46 +1,8 @@
use querystring; use querystring;
mod models;
use serde::{Deserialize, Serialize}; use serde::{Deserialize, Serialize};
use std::process::exit; use std::process::exit;
#[derive(Serialize, Deserialize)]
struct Person {
name: String,
age: u8,
phones: Vec<String>,
}
struct VlessQuery {
security: String,
sni: String,
fp: String,
pbk: String,
sid: String,
r#type: String,
flow: 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,
}
struct VlessAddress {
uuid: String,
address: String,
port: u16,
}
pub struct VlessData {
query: VlessQuery,
address_data: VlessAddress,
}
// Outbound structs // Outbound structs
#[derive(Serialize, Deserialize)] #[derive(Serialize, Deserialize)]
@@ -101,7 +63,7 @@ pub struct Outbound {
tag: String, tag: String,
} }
fn create_outbound_object(data: VlessData) -> Outbound { fn create_outbound_object(data: models::VlessData) -> Outbound {
return Outbound { return Outbound {
protocol: String::from("vless"), protocol: String::from("vless"),
tag: String::from("proxy"), tag: String::from("proxy"),
@@ -120,7 +82,7 @@ fn create_outbound_object(data: VlessData) -> Outbound {
}; };
} }
pub fn get_vless_data(uri: &str) -> VlessData { pub fn get_vless_data(uri: &str) -> models::VlessData {
let data = uri.split_once("vless://").unwrap().1; let data = uri.split_once("vless://").unwrap().1;
let query_and_name = uri.split_once("?").unwrap().1; let query_and_name = uri.split_once("?").unwrap().1;
let query = query_and_name let query = query_and_name
@@ -129,13 +91,13 @@ pub fn get_vless_data(uri: &str) -> VlessData {
.0; .0;
let parsed_query = parse_vless_query(query); let parsed_query = parse_vless_query(query);
let parsed_address = parse_vless_address(data.split_once("?").unwrap().0); let parsed_address = parse_vless_address(data.split_once("?").unwrap().0);
return VlessData { return models::VlessData {
query: parsed_query, query: parsed_query,
address_data: parsed_address, address_data: parsed_address,
}; };
} }
fn parse_vless_address(raw_data: &str) -> VlessAddress { fn parse_vless_address(raw_data: &str) -> models::VlessAddress {
let (uuid, raw_address): (String, &str) = match raw_data.split_once("@") { let (uuid, raw_address): (String, &str) = match raw_data.split_once("@") {
None => { None => {
println!("Wrong vless format, no `@` found in the address"); println!("Wrong vless format, no `@` found in the address");
@@ -155,17 +117,17 @@ fn parse_vless_address(raw_data: &str) -> VlessAddress {
.expect("Wrong vless format, port is not a number"), .expect("Wrong vless format, port is not a number"),
), ),
}; };
return VlessAddress { return models::VlessAddress {
uuid, uuid,
address, address,
port, port,
}; };
} }
fn parse_vless_query(raw_query: &str) -> VlessQuery { fn parse_vless_query(raw_query: &str) -> models::VlessQuery {
let query: Vec<(&str, &str)> = querystring::querify(raw_query); let query: Vec<(&str, &str)> = querystring::querify(raw_query);
let a = VlessQuery { let a = models::VlessQuery {
path: get_parameter_value(&query, "path"), path: get_parameter_value(&query, "path"),
pbk: get_parameter_value(&query, "pbk"), pbk: get_parameter_value(&query, "pbk"),
security: get_parameter_value(&query, "security"), security: get_parameter_value(&query, "security"),

View File

@@ -0,0 +1,31 @@
pub struct VlessQuery {
pub security: String,
pub sni: String,
pub fp: String,
pub pbk: String,
pub sid: String,
pub r#type: String,
pub flow: String,
pub path: String,
pub encryption: String,
pub header_type: String,
pub host: String,
pub seed: String,
pub quic_security: String,
pub r#key: String,
pub mode: String,
pub service_name: String,
pub slpn: String,
pub spx: String,
}
pub struct VlessAddress {
pub uuid: String,
pub address: String,
pub port: u16,
}
pub struct VlessData {
pub query: VlessQuery,
pub address_data: VlessAddress,
}