diff --git a/src/parser/config_models/mod.rs b/src/parser/config_models/mod.rs index 2c76269..ceff53e 100644 --- a/src/parser/config_models/mod.rs +++ b/src/parser/config_models/mod.rs @@ -31,6 +31,13 @@ pub struct NonHeaderObject { pub r#type: String, } +#[allow(non_snake_case)] +#[derive(Serialize, Deserialize)] +pub struct GRPCSettings { + pub multiMode: bool, + pub serviceName: String, +} + #[allow(non_snake_case)] #[derive(Serialize, Deserialize)] pub struct RealitySettings { @@ -80,6 +87,7 @@ pub struct StreamSettings { pub wsSettings: Option, pub tcpSettings: Option, pub realitySettings: Option, + pub grpcSettings: Option, } #[allow(non_snake_case)] diff --git a/src/parser/vless/mod.rs b/src/parser/vless/mod.rs index 21784f6..bfcc74e 100644 --- a/src/parser/vless/mod.rs +++ b/src/parser/vless/mod.rs @@ -55,6 +55,14 @@ pub fn create_outbound_object(data: models::VlessData) -> Outbound { } else { None }, + grpcSettings: if data.query.r#type == String::from("grpc") { + Some(GRPCSettings { + multiMode: false, + serviceName: data.query.service_name, + }) + } else { + None + }, }, settings: OutboundSettings::Vless(VlessOutboundSettings { vnext: vec![VlessServerObject {