Files
v2ray-proxy/src/config_models/mod.rs
Keivan-sf 6f7b9ca06a Improve config type and add authority
This makes the parser take a more passive approach, no unnecessary
defaults or fileds
2025-07-26 13:46:08 +03:30

154 lines
3.7 KiB
Rust

use serde::{Deserialize, Serialize};
#[derive(Serialize, Deserialize)]
pub struct VlessUser {
pub id: String,
pub encryption: String,
pub flow: Option<String>,
pub level: Option<u8>,
}
#[derive(Serialize, Deserialize)]
pub struct VlessServerObject {
pub address: String,
pub port: u16,
pub users: Vec<VlessUser>,
}
#[derive(Serialize, Deserialize)]
pub struct VlessOutboundSettings {
pub vnext: Vec<VlessServerObject>,
}
#[derive(Serialize, Deserialize)]
#[serde(untagged)]
pub enum OutboundSettings {
Vless(VlessOutboundSettings),
}
#[derive(Serialize, Deserialize)]
pub struct NonHeaderObject {
pub r#type: Option<String>,
}
#[allow(non_snake_case)]
#[derive(Serialize, Deserialize)]
pub struct QuicSettings {
pub header: Option<NonHeaderObject>,
pub security: Option<String>,
pub key: Option<String>,
}
#[allow(non_snake_case)]
#[derive(Serialize, Deserialize)]
pub struct GRPCSettings {
pub authority: Option<String>,
pub multiMode: Option<bool>,
pub serviceName: Option<String>,
}
#[allow(non_snake_case)]
#[derive(Serialize, Deserialize)]
pub struct RealitySettings {
pub fingerprint: Option<String>,
pub serverName: Option<String>,
pub publicKey: Option<String>,
pub shortId: Option<String>,
pub spiderX: Option<String>,
}
#[derive(Serialize, Deserialize)]
pub struct TCPHeader {
pub r#type: Option<String>,
}
#[allow(non_snake_case)]
#[derive(Serialize, Deserialize)]
pub struct TCPSettings {
pub header: Option<TCPHeader>,
pub acceptProxyProtocol: Option<bool>,
}
#[allow(non_snake_case)]
#[derive(Serialize, Deserialize)]
pub struct HeaderSetting {
pub Host: Option<String>,
}
#[allow(non_snake_case)]
#[derive(Serialize, Deserialize)]
pub struct WsSettings {
pub path: Option<String>,
pub Host: Option<String>,
pub acceptProxyProtocol: Option<bool>,
}
#[allow(non_snake_case)]
#[derive(Serialize, Deserialize)]
pub struct TlsSettings {
pub alpn: Option<Vec<String>>,
pub allowInsecure: Option<bool>,
pub serverName: Option<String>,
pub enableSessionResumption: Option<bool>,
pub disableSystemRoot: Option<bool>,
pub minVersion: Option<String>,
pub maxVersion: Option<String>,
pub cipherSuites: Option<String>,
pub preferServerCipherSuites: Option<bool>,
pub fingerprint: Option<String>,
pub rejectUnknownSni: Option<bool>,
}
#[allow(non_snake_case)]
#[derive(Serialize, Deserialize)]
pub struct StreamSettings {
pub network: Option<String>,
pub security: Option<String>,
pub tlsSettings: Option<TlsSettings>,
pub wsSettings: Option<WsSettings>,
pub tcpSettings: Option<TCPSettings>,
pub realitySettings: Option<RealitySettings>,
pub grpcSettings: Option<GRPCSettings>,
pub quicSettings: Option<QuicSettings>,
}
#[allow(non_snake_case)]
#[derive(Serialize, Deserialize)]
pub struct Outbound {
pub settings: OutboundSettings,
pub streamSettings: StreamSettings,
pub protocol: String,
pub tag: String,
}
#[derive(Serialize, Deserialize)]
pub struct InboundSettings {
pub udp: bool,
}
#[derive(Serialize, Deserialize)]
#[allow(non_snake_case)]
pub struct SniffingSettings {
pub enabled: Option<bool>,
pub destOverride: Option<Vec<String>>,
pub domainsExcluded: Option<Vec<String>>,
pub metadataOnly: Option<bool>,
pub routeOnly: Option<bool>,
}
#[derive(Serialize, Deserialize)]
pub struct Inbound {
pub listen: String,
pub port: u16,
pub protocol: String,
pub settings: InboundSettings,
pub sniffing: Option<SniffingSettings>,
pub tag: String,
}
#[derive(Serialize, Deserialize)]
pub struct Config {
pub outbounds: Vec<Outbound>,
pub inbounds: Vec<Inbound>,
}