1256 lines
41 KiB
Kotlin
1256 lines
41 KiB
Kotlin
data class Clash(
|
|
/*------------------------------------------- *General configuration* -------------------------------------------*/
|
|
// Allow LAN
|
|
val allowLan: Boolean? = null,
|
|
val bindAddress: String? = null,
|
|
val lanAllowedIps: List<String>? = null,
|
|
val lanDisallowedIps: List<String>? = null,
|
|
val authentication: List<String>? = null,
|
|
val skipAuthPrefixes: List<String>? = null,
|
|
|
|
// Operation Mode
|
|
val mode: String? = null,
|
|
|
|
// Log Level
|
|
val logLevel: String? = null,
|
|
|
|
// TCP Keep Alive Settings
|
|
val keepAliveInterval: Int? = null,
|
|
val keepAliveIdle: Int? = null,
|
|
val disableKeepAlive: Boolean? = null,
|
|
|
|
// Process Matching Mode
|
|
val findProcessMode: String? = null,
|
|
|
|
// External Control (API)
|
|
val externalController: String? = null,
|
|
val externalControllerTls: String? = null,
|
|
val externalControllerCors: ExternalControllerCors? = null,
|
|
val externalControllerUnix: String? = null,
|
|
val externalControllerPipe: String? = null,
|
|
val secret: String? = null,
|
|
val externalDohServer: String? = null,
|
|
|
|
// External User Interface
|
|
val externalUi: String? = null,
|
|
val externalUiName: String? = null,
|
|
val externalUiUrl: String? = null,
|
|
|
|
// Cache
|
|
val profile: Profile? = null,
|
|
|
|
// Unified Delay
|
|
val unifiedDelay: Boolean? = null,
|
|
|
|
// TCP Concurrency
|
|
val tcpConcurrent: Boolean? = null,
|
|
|
|
// Outbound Interface
|
|
val interfaceName: String? = null,
|
|
|
|
// Routing Mark
|
|
val routingMark: Int? = null,
|
|
|
|
// TLS
|
|
val tls: TLS? = null,
|
|
|
|
// GEO Data Configuration
|
|
val geoxUrl: GeoXUrl? = null,
|
|
val geoAutoUpdate: Boolean? = null,
|
|
val geoUpdateInterval: Int? = null,
|
|
val geodataMode: Boolean? = null,
|
|
val geodataLoader: String? = null,
|
|
val geoSiteMatcher: String? = null,
|
|
|
|
|
|
// Global Client Fingerprint
|
|
val globalClientFingerprint: String? = null,
|
|
|
|
// IPV6
|
|
val ipv6: Boolean? = null,
|
|
|
|
// Custom Global UA
|
|
val globalUa: String? = null,
|
|
|
|
// ETag Support
|
|
val etagSupport: Boolean? = null,
|
|
|
|
// Global Config
|
|
val ssConfig: String? = null,
|
|
val vmessConfig: String? = null,
|
|
|
|
/*------------------------------------------------ *DNS* ------------------------------------------------*/
|
|
// TODO:
|
|
val hosts: List<String>? = null,
|
|
val dns: DNS? = null,
|
|
val sniffer: Sniffer? = null,
|
|
|
|
|
|
/*------------------------------------------------ *Inbounds* ------------------------------------------------*/
|
|
// Proxy Port
|
|
val port: Int? = null,
|
|
val socksPort: Int? = null,
|
|
val mixedPort: Int? = null,
|
|
val redirPort: Int? = null,
|
|
val tproxyPort: Int? = null,
|
|
val tun: Tun? = null,
|
|
val listeners: List<Listener>? = null,
|
|
// inbound-tfo
|
|
val inboundTfo: Boolean? = null,
|
|
val inboundMptcp: Boolean? = null,
|
|
|
|
// Outbound
|
|
val proxies: List<Proxy>? = null,
|
|
val proxyProviders: Map<String, ProxyProvider>? = null,
|
|
val proxyGroups: List<ProxyGroup>? = null,
|
|
|
|
val ruleProviders: Map<String, RuleProvider>? = null,
|
|
// TODO
|
|
val rules: List<String>? = null,
|
|
val subRules: Map<String, List<String>>? = null,
|
|
|
|
|
|
// TODO
|
|
val tunnels: List<Tunnel>? = null,
|
|
val ntp: NTP? = null,
|
|
val experimental: Experimental? = null,
|
|
|
|
val iptables: IPTables? = null,
|
|
val clashForAndroid: ClashForAndroid? = null,
|
|
val tuicServer: TuicServer? = null,
|
|
|
|
)
|
|
|
|
data class GeoXUrl(
|
|
val geoip: String? = null, val geosite: String? = null, val mmdb: String? = null, val asn: String? = null
|
|
)
|
|
|
|
data class TLS(
|
|
val certificate: String? = null, val privateKey: String? = null, val customCertifactes: List<String>? = null
|
|
)
|
|
|
|
data class ExternalControllerCors(
|
|
val allowOrigins: List<String>? = null, val allowPrivateNetwork: Boolean? = null
|
|
)
|
|
data class Experimental(
|
|
val fingerprints: List<String>? = null,
|
|
val quicGoDisableGSO: Boolean? = null,
|
|
val quicGoDisableECN: Boolean? = null,
|
|
val ip4pEnable: Boolean? = null,
|
|
)
|
|
|
|
data class Profile(
|
|
val storeSelected: Boolean? = null, val storeFakeIp: Boolean? = null
|
|
)
|
|
|
|
data class Tun(
|
|
val enable: Boolean? = null,
|
|
val stack: String? = null,
|
|
val autoRoute: Boolean? = null,
|
|
val autoRedirect: Boolean? = null,
|
|
val autoDetectInterface: Boolean? = null,
|
|
val dnsHijack: List<String>? = null,
|
|
val device: String? = null,
|
|
val mtu: Int? = null,
|
|
val strictRoute: Boolean? = null,
|
|
val gso: Boolean? = null,
|
|
val gsoMaxSize: Int? = null,
|
|
val udpTimeout: Int? = null,
|
|
val iproute2TableIndex: Int? = null,
|
|
val iproute2RuleIndex: Int? = null,
|
|
val endpointIndependentNat: Boolean? = null,
|
|
val routeAddressSet: List<String>? = null,
|
|
val routeExcludeAddressSet: List<String>? = null,
|
|
val routeAddress: List<String>? = null,
|
|
val routeExcludeAddress: List<String>? = null,
|
|
val includeInterface: List<String>? = null,
|
|
val excludeInterface: List<String>? = null,
|
|
val includeUid: List<Int>? = null,
|
|
val includeUidRange: List<Pair<Int, Int>>? = null,
|
|
val excludeUid: List<Int>? = null,
|
|
val excludeUidRange: List<Pair<Int, Int>>? = null,
|
|
val includeAndroidUser: List<Int>? = null,
|
|
val includePackage: List<String>? = null,
|
|
val excludePackage: List<String>? = null,
|
|
@Deprecated("") val inet4RouteAddress: List<String>? = null,
|
|
@Deprecated("") val inet6RouteAddress: List<String>? = null,
|
|
@Deprecated("") val inet4RouteExcludeAddress: List<String>? = null,
|
|
@Deprecated("") val inet6RouteExcludeAddress: List<String>? = null
|
|
)
|
|
|
|
data class Sniffer(
|
|
val enable: Boolean? = null,
|
|
val forceDnsMapping: Boolean? = null,
|
|
val parsePureIp: Boolean? = null,
|
|
val overrideDestination: Boolean? = null,
|
|
val sniff: Map<String, Sniff>? = null,
|
|
val forceDomain: List<String>? = null,
|
|
val skipDomain: List<String>? = null,
|
|
val skipSrcAddress: List<String>? = null,
|
|
val skipDstAddress: List<String>? = null,
|
|
@Deprecated("") val sniffing: List<String>? = null,
|
|
@Deprecated("") val portWhitelist: List<String>? = null
|
|
)
|
|
|
|
data class Sniff(
|
|
val ports: List<Int>? = null,
|
|
val overrideDestination: Boolean? = null,
|
|
)
|
|
|
|
sealed class Tunnel {
|
|
data class InlineTunnel(
|
|
val network: String? = null, val address: String? = null, val target: String? = null, val proxy: String? = null
|
|
) : Tunnel()
|
|
|
|
data class FullTunnel(
|
|
val network: List<String>? = null,
|
|
val address: String? = null,
|
|
val target: String? = null,
|
|
val proxy: String? = null
|
|
) : Tunnel()
|
|
}
|
|
|
|
data class DNS(
|
|
val enable: Boolean? = null,
|
|
val preferH3: Boolean? = null,
|
|
val ipv6: Boolean? = null,
|
|
val ipv6Timeout: UInt? = null,
|
|
val useHosts: Boolean? = null,
|
|
val useSystemHosts: Boolean? = null,
|
|
val respectRules: Boolean? = null,
|
|
val nameServer: List<String>? = null,
|
|
val fallback: List<String>? = null,
|
|
val fallbackFilter: FallbackFilter? = null,
|
|
val listen: String? = null,
|
|
val enhancedMode: Int? = null,
|
|
val fakeIPRange: String? = null,
|
|
val fakeIPFilter: List<String>? = null,
|
|
val fakeIPFilterMode: Int? = null,
|
|
val defaultNameserver: List<String>? = null,
|
|
val cacheAlgorithm: String? = null,
|
|
// TODO
|
|
// val nameServerPolicy: OrderedMap<String, Any>? = null,
|
|
val proxyServerNameserver: List<String>? = null,
|
|
val directNameServer: List<String>? = null,
|
|
val directNameServerFollowPolicy: Boolean? = null
|
|
)
|
|
|
|
data class FallbackFilter(
|
|
val geoIP: Boolean? = null,
|
|
val geoIPCode: String? = null,
|
|
val ipCIDR: List<String>? = null,
|
|
val domain: List<String>? = null,
|
|
val geoSite: List<String>? = null
|
|
)
|
|
|
|
sealed class Proxy {
|
|
abstract val tfo: Boolean?
|
|
abstract val mptcp: Boolean?
|
|
abstract val interfaceName: String?
|
|
abstract val routingMark: Int?
|
|
abstract val ipVersion: String?
|
|
abstract val dialerProxy: String?
|
|
abstract val smux: SingMuxOption?
|
|
|
|
data class DirectProxy(
|
|
val name: String? = null,
|
|
override val tfo: Boolean?,
|
|
override val mptcp: Boolean?,
|
|
override val interfaceName: String?,
|
|
override val routingMark: Int?,
|
|
override val ipVersion: String?,
|
|
override val dialerProxy: String?,
|
|
override val smux: SingMuxOption?,
|
|
) : Proxy()
|
|
|
|
data class RejectProxy(
|
|
val name: String? = null,
|
|
)
|
|
|
|
|
|
data class DnsProxy(
|
|
val name: String? = null,
|
|
override val tfo: Boolean? = null,
|
|
override val mptcp: Boolean? = null,
|
|
override val interfaceName: String? = null,
|
|
override val routingMark: Int? = null,
|
|
override val ipVersion: String? = null,
|
|
override val dialerProxy: String? = null,
|
|
override val smux: SingMuxOption?,
|
|
) : Proxy()
|
|
|
|
data class HttpProxy(
|
|
val name: String? = null,
|
|
val server: String,
|
|
val port: Int,
|
|
val username: String? = null,
|
|
val password: String? = null,
|
|
val tls: Boolean? = null,
|
|
val sni: String? = null,
|
|
val skipCertVerify: Boolean? = null,
|
|
val fingerprint: String? = null,
|
|
val headers: Map<String, String>? = null,
|
|
override val tfo: Boolean? = null,
|
|
override val mptcp: Boolean? = null,
|
|
override val interfaceName: String? = null,
|
|
override val routingMark: Int? = null,
|
|
override val ipVersion: String? = null,
|
|
override val dialerProxy: String? = null,
|
|
override val smux: SingMuxOption?,
|
|
) : Proxy()
|
|
|
|
data class HysteriaProxy(
|
|
val name: String? = null,
|
|
val server: String? = null,
|
|
val port: Int? = null,
|
|
val ports: String? = null,
|
|
val protocol: String? = null,
|
|
val obfsProtocol: String? = null, // compatible with Stash
|
|
val up: String? = null,
|
|
val upSpeed: Int? = null, // compatible with Stash
|
|
val down: String? = null,
|
|
val downSpeed: Int? = null, // compatible with Stash
|
|
val auth: String? = null,
|
|
val authString: String? = null,
|
|
val obfs: String? = null,
|
|
val sni: String? = null,
|
|
val skipCertVerify: Boolean? = null,
|
|
val fingerprint: String? = null,
|
|
val alpn: List<String>? = null,
|
|
val customCA: String? = null,
|
|
val customCAString: String? = null,
|
|
val receiveWindowConn: Int? = null,
|
|
val receiveWindow: Int? = null,
|
|
val disableMTUDiscovery: Boolean? = null,
|
|
val fastOpen: Boolean? = null,
|
|
val hopInterval: Int? = null,
|
|
override val tfo: Boolean? = null,
|
|
override val mptcp: Boolean? = null,
|
|
override val interfaceName: String? = null,
|
|
override val routingMark: Int? = null,
|
|
override val ipVersion: String? = null,
|
|
override val dialerProxy: String? = null,
|
|
override val smux: SingMuxOption?,
|
|
) : Proxy()
|
|
|
|
data class Hysteria2Proxy(
|
|
val name: String? = null,
|
|
val server: String? = null,
|
|
val port: Int? = null,
|
|
val ports: String? = null,
|
|
val hopInterval: Int? = null,
|
|
val up: String? = null,
|
|
val down: String? = null,
|
|
val password: String? = null,
|
|
val obfs: String? = null,
|
|
val obfsPassword: String? = null,
|
|
val sni: String? = null,
|
|
val skipCertVerify: Boolean? = null,
|
|
val fingerprint: String? = null,
|
|
val alpn: List<String>? = null,
|
|
val customCA: String? = null,
|
|
val customCAString: String? = null,
|
|
val cwnd: Int? = null,
|
|
val udpMTU: Int? = null,
|
|
|
|
val initialStreamReceiveWindow: ULong? = null,
|
|
val maxStreamReceiveWindow: ULong? = null,
|
|
val initialConnectionReceiveWindow: ULong? = null,
|
|
val maxConnectionReceiveWindow: ULong? = null,
|
|
|
|
override val tfo: Boolean? = null,
|
|
override val mptcp: Boolean? = null,
|
|
override val interfaceName: String? = null,
|
|
override val routingMark: Int? = null,
|
|
override val ipVersion: String? = null,
|
|
override val dialerProxy: String? = null,
|
|
override val smux: SingMuxOption?,
|
|
) : Proxy()
|
|
|
|
data class MieruProxy(
|
|
val name: String? = null,
|
|
val server: String? = null,
|
|
val port: Int? = null,
|
|
val portRange: String? = null,
|
|
val transport: String? = null,
|
|
val userName: String? = null,
|
|
val password: String? = null,
|
|
val multiplexing: String? = null,
|
|
|
|
override val tfo: Boolean? = null,
|
|
override val mptcp: Boolean? = null,
|
|
override val interfaceName: String? = null,
|
|
override val routingMark: Int? = null,
|
|
override val ipVersion: String? = null,
|
|
override val dialerProxy: String? = null,
|
|
override val smux: SingMuxOption?,
|
|
) : Proxy()
|
|
|
|
data class ShadowSocksProxy(
|
|
val name: String? = null,
|
|
val server: String? = null,
|
|
val port: Int? = null,
|
|
val password: String? = null,
|
|
val cipher: String? = null,
|
|
val udp: Boolean? = null,
|
|
val plugin: String? = null,
|
|
// NOTE: 暂时先不对该字段进行解析
|
|
val pluginOpts: Map<String, Any>? = null,
|
|
val udpOverTCP: Boolean? = null,
|
|
val udpOverTCPVersion: Int? = null,
|
|
val clientFingerprint: String? = null,
|
|
|
|
override val tfo: Boolean? = null,
|
|
override val mptcp: Boolean? = null,
|
|
override val interfaceName: String? = null,
|
|
override val routingMark: Int? = null,
|
|
override val ipVersion: String? = null,
|
|
override val dialerProxy: String? = null,
|
|
override val smux: SingMuxOption?,
|
|
) : Proxy()
|
|
|
|
data class ShadowSocksRProxy(
|
|
val name: String? = null,
|
|
val server: String? = null,
|
|
val port: Int? = null,
|
|
val password: String? = null,
|
|
val cipher: String? = null,
|
|
val obfs: String? = null,
|
|
val obfsParam: String? = null,
|
|
val protocol: String? = null,
|
|
val protocolParam: String? = null,
|
|
val udp: Boolean? = null,
|
|
|
|
override val tfo: Boolean? = null,
|
|
override val mptcp: Boolean? = null,
|
|
override val interfaceName: String? = null,
|
|
override val routingMark: Int? = null,
|
|
override val ipVersion: String? = null,
|
|
override val dialerProxy: String? = null,
|
|
override val smux: SingMuxOption?,
|
|
) : Proxy()
|
|
|
|
data class SnellProxy(
|
|
val name: String? = null,
|
|
val server: String? = null,
|
|
val port: Int? = null,
|
|
val psk: String? = null,
|
|
val udp: Boolean? = null,
|
|
val version: Int? = null,
|
|
val obfsOpts: Map<String, SimpleObfsOption>? = null,
|
|
|
|
override val tfo: Boolean? = null,
|
|
override val mptcp: Boolean? = null,
|
|
override val interfaceName: String? = null,
|
|
override val routingMark: Int? = null,
|
|
override val ipVersion: String? = null,
|
|
override val dialerProxy: String? = null,
|
|
override val smux: SingMuxOption?,
|
|
) : Proxy()
|
|
|
|
data class Socks5Proxy(
|
|
val name: String? = null,
|
|
val server: String? = null,
|
|
val port: Int? = null,
|
|
val userName: String? = null,
|
|
val password: String? = null,
|
|
val tls: Boolean? = null,
|
|
val udp: Boolean? = null,
|
|
val skipCertVerify: Boolean? = null,
|
|
val fingerprint: String? = null,
|
|
|
|
override val tfo: Boolean? = null,
|
|
override val mptcp: Boolean? = null,
|
|
override val interfaceName: String? = null,
|
|
override val routingMark: Int? = null,
|
|
override val ipVersion: String? = null,
|
|
override val dialerProxy: String? = null,
|
|
override val smux: SingMuxOption?,
|
|
) : Proxy()
|
|
|
|
data class SshProxy(
|
|
val name: String? = null,
|
|
val server: String? = null,
|
|
val port: Int? = null,
|
|
val userName: String? = null,
|
|
val password: String? = null,
|
|
val privateKey: String? = null,
|
|
val privateKeyPassphrase: String? = null,
|
|
val hostKey: List<String>? = null,
|
|
val hostKeyAlgorithms: List<String>? = null,
|
|
|
|
override val tfo: Boolean? = null,
|
|
override val mptcp: Boolean? = null,
|
|
override val interfaceName: String? = null,
|
|
override val routingMark: Int? = null,
|
|
override val ipVersion: String? = null,
|
|
override val dialerProxy: String? = null,
|
|
override val smux: SingMuxOption?,
|
|
) : Proxy()
|
|
|
|
data class TrojanProxy(
|
|
val name: String? = null,
|
|
val server: String? = null,
|
|
val port: Int? = null,
|
|
val password: String? = null,
|
|
val alpn: List<String>? = null,
|
|
val sni: String? = null,
|
|
val skipCertVerify: Boolean? = null,
|
|
val fingerprint: String? = null,
|
|
val udp: Boolean? = null,
|
|
val network: String? = null,
|
|
val realityOpts: RealityOptions? = null,
|
|
val grpcOpts: GrpcOptions? = null,
|
|
val wsOpts: WSOptions? = null,
|
|
val ssOpts: TrojanSSOption? = null,
|
|
val clientFingerprint: String? = null,
|
|
|
|
override val tfo: Boolean? = null,
|
|
override val mptcp: Boolean? = null,
|
|
override val interfaceName: String? = null,
|
|
override val routingMark: Int? = null,
|
|
override val ipVersion: String? = null,
|
|
override val dialerProxy: String? = null,
|
|
override val smux: SingMuxOption?,
|
|
) : Proxy()
|
|
|
|
data class TuicProxy(
|
|
val name: String? = null,
|
|
val server: String? = null,
|
|
val port: Int? = null,
|
|
val token: String? = null,
|
|
val uuid: String? = null,
|
|
val password: String? = null,
|
|
val ip: String? = null,
|
|
val heartbeatInterval: Int? = null,
|
|
val alpn: List<String>? = null,
|
|
val reduceRtt: Boolean? = null,
|
|
val requestTimeout: Int? = null,
|
|
val udpRelayMode: String? = null,
|
|
val congestionController: String? = null,
|
|
val disableSni: Boolean? = null,
|
|
val maxUdpRelayPacketSize: Int? = null,
|
|
val fastOpen: Boolean? = null,
|
|
val maxOpenStreams: Int? = null,
|
|
val cwnd: Int? = null,
|
|
val skipCertVerify: Boolean? = null,
|
|
val fingerprint: String? = null,
|
|
val customCA: String? = null,
|
|
val customCAString: String? = null,
|
|
val receiveWindowConn: Int? = null,
|
|
val receiveWindow: Int? = null,
|
|
val disableMTUDiscovery: Boolean? = null,
|
|
val maxDatagramFrameSize: Int? = null,
|
|
val sni: String? = null,
|
|
val udpOverStream: Boolean? = null,
|
|
val udpOverStreamVersion: Int? = null,
|
|
|
|
override val tfo: Boolean? = null,
|
|
override val mptcp: Boolean? = null,
|
|
override val interfaceName: String? = null,
|
|
override val routingMark: Int? = null,
|
|
override val ipVersion: String? = null,
|
|
override val dialerProxy: String? = null,
|
|
override val smux: SingMuxOption?,
|
|
) : Proxy()
|
|
|
|
data class VlessProxy(
|
|
val name: String? = null,
|
|
val server: String? = null,
|
|
val port: Int? = null,
|
|
val uuid: String? = null,
|
|
val flow: String? = null,
|
|
val tls: Boolean? = null,
|
|
val alpn: List<String>? = null,
|
|
val udp: Boolean? = null,
|
|
val packetAddr: Boolean? = null,
|
|
val xudp: Boolean? = null,
|
|
val packetEncoding: String? = null,
|
|
val network: String? = null,
|
|
val realityOpts: RealityOptions? = null,
|
|
val httpOpts: HTTPOptions? = null,
|
|
val http2Opts: HTTP2Options? = null,
|
|
val grpcOpts: GrpcOptions? = null,
|
|
val wsOpts: WSOptions? = null,
|
|
val wsPath: String? = null,
|
|
val wsHeaders: Map<String, String>? = null,
|
|
val skipCertVerify: Boolean? = null,
|
|
val fingerprint: String? = null,
|
|
val serverName: String? = null,
|
|
val clientFingerprint: String? = null,
|
|
|
|
override val tfo: Boolean? = null,
|
|
override val mptcp: Boolean? = null,
|
|
override val interfaceName: String? = null,
|
|
override val routingMark: Int? = null,
|
|
override val ipVersion: String? = null,
|
|
override val dialerProxy: String? = null,
|
|
override val smux: SingMuxOption?,
|
|
) : Proxy()
|
|
|
|
data class VmessProxy(
|
|
val name: String? = null,
|
|
val server: String? = null,
|
|
val port: Int? = null,
|
|
val uuid: String? = null,
|
|
val alterId: Int? = null,
|
|
val cipher: String? = null,
|
|
val udp: Boolean? = null,
|
|
val network: String? = null,
|
|
val tls: Boolean? = null,
|
|
val alpn: List<String>? = null,
|
|
val skipCertVerify: Boolean? = null,
|
|
val fingerprint: String? = null,
|
|
val serverName: String? = null,
|
|
val realityOpts: RealityOptions? = null,
|
|
val httpOpts: HTTPOptions? = null,
|
|
val http2Opts: HTTP2Options? = null,
|
|
val grpcOpts: GrpcOptions? = null,
|
|
val wsOpts: WSOptions? = null,
|
|
val packetAddr: Boolean? = null,
|
|
val xudp: Boolean? = null,
|
|
val packetEncoding: String? = null,
|
|
val globalPadding: Boolean? = null,
|
|
val authenticatedLength: Boolean? = null,
|
|
val clientFingerprint: String? = null,
|
|
|
|
override val tfo: Boolean? = null,
|
|
override val mptcp: Boolean? = null,
|
|
override val interfaceName: String? = null,
|
|
override val routingMark: Int? = null,
|
|
override val ipVersion: String? = null,
|
|
override val dialerProxy: String? = null,
|
|
override val smux: SingMuxOption?,
|
|
) : Proxy()
|
|
|
|
data class WireGuardProxy(
|
|
val name: String? = null,
|
|
val ip: String? = null,
|
|
val ipv6: String? = null,
|
|
val privateKey: String? = null,
|
|
val workers: Int? = null,
|
|
val mtu: Int? = null,
|
|
val udp: Boolean? = null,
|
|
val persistentKeepalive: Int? = null,
|
|
val amneziaWGOption: AmneziaWGOption? = null,
|
|
val peers: List<WireGuardPeerOption>? = null,
|
|
val remoteDnsResolve: Boolean? = null,
|
|
val dns: List<String>? = null,
|
|
val refreshServerIPInterval: Int? = null,
|
|
|
|
override val tfo: Boolean? = null,
|
|
override val mptcp: Boolean? = null,
|
|
override val interfaceName: String? = null,
|
|
override val routingMark: Int? = null,
|
|
override val ipVersion: String? = null,
|
|
override val dialerProxy: String? = null,
|
|
override val smux: SingMuxOption?,
|
|
) : Proxy()
|
|
|
|
data class RealityOptions(
|
|
val publicKey: String? = null,
|
|
val shortID: String? = null,
|
|
)
|
|
|
|
data class GrpcOptions(
|
|
val grpcServiceName: String? = null,
|
|
)
|
|
|
|
data class HTTPOptions(
|
|
val method: String? = null,
|
|
val path: List<String>? = null,
|
|
val headers: Map<String, List<String>>? = null,
|
|
)
|
|
|
|
data class HTTP2Options(
|
|
val host: List<String>? = null,
|
|
val path: String? = null,
|
|
)
|
|
|
|
data class WSOptions(
|
|
val path: String? = null,
|
|
val headers: Map<String, String>? = null,
|
|
val maxEarlyData: Int? = null,
|
|
val earlyDataHeaderName: String? = null,
|
|
val v2rayHttpUpgrade: Boolean? = null,
|
|
val v2rayHttpUpgradeFastOpen: Boolean? = null,
|
|
)
|
|
|
|
data class TrojanSSOption(
|
|
val enabled: Boolean? = null,
|
|
val method: String? = null,
|
|
val password: String? = null,
|
|
)
|
|
|
|
data class WireGuardPeerOption(
|
|
val server: String? = null,
|
|
val port: Int? = null,
|
|
val publicKey: String? = null,
|
|
val preSharedKey: String? = null,
|
|
val reserved: List<Byte>? = null,
|
|
val allowedIPs: List<String>? = null,
|
|
)
|
|
|
|
data class AmneziaWGOption(
|
|
val jc: Int? = null,
|
|
val jMin: Int? = null,
|
|
val jMax: Int? = null,
|
|
val s1: Int? = null,
|
|
val s2: Int? = null,
|
|
val h1: UInt? = null,
|
|
val h2: UInt? = null,
|
|
val h3: UInt? = null,
|
|
val h4: UInt? = null,
|
|
)
|
|
|
|
data class SingMuxOption(
|
|
val enabled: Boolean? = null,
|
|
val protocol: String? = null,
|
|
val maxConnections: Int? = null,
|
|
val minStreams: Int? = null,
|
|
val maxStreams: Int? = null,
|
|
val padding: Boolean? = null,
|
|
val statistic: Boolean? = null,
|
|
val onlyTcp: Boolean? = null,
|
|
val brutalOpts: BrutalOption? = null,
|
|
)
|
|
|
|
data class BrutalOption(
|
|
val enabled: Boolean? = null,
|
|
val up: String? = null,
|
|
val down: String? = null,
|
|
)
|
|
|
|
data class SimpleObfsOption(
|
|
val mode: String? = null,
|
|
val host: String? = null
|
|
)
|
|
}
|
|
|
|
|
|
data class SmuxConfig(
|
|
val enabled: Boolean? = null,
|
|
val protocol: String? = null,
|
|
val maxConnections: Int? = null,
|
|
val minStreams: Int? = null,
|
|
val maxStreams: Int? = null,
|
|
val statistic: Boolean? = null,
|
|
val onlyTcp: Boolean? = null,
|
|
val padding: Boolean? = null,
|
|
val brutalOpts: BruteOpts? = null
|
|
) {
|
|
data class BruteOpts(
|
|
val enabled: Boolean? = null, val up: Int? = null, val down: Int? = null
|
|
)
|
|
}
|
|
|
|
sealed class ProxyGroup {
|
|
abstract val name: String?
|
|
abstract val proxies: List<String>?
|
|
abstract val use: List<String>?
|
|
abstract val url: String?
|
|
abstract val interval: Int?
|
|
abstract val lazy: Boolean?
|
|
abstract val timeout: Int?
|
|
abstract val maxFailedTimes: Int?
|
|
abstract val disableUDP: Boolean?
|
|
@Deprecated("") abstract val interfaceName: String?
|
|
@Deprecated("") abstract val routingMark: Int?
|
|
abstract val includeAll: Boolean?
|
|
abstract val includeAllProxies: Boolean?
|
|
abstract val includeAllProviders: Boolean?
|
|
abstract val filter: String?
|
|
abstract val excludeFilter: String?
|
|
abstract val excludeType: String?
|
|
abstract val expectedStatus: String?
|
|
abstract val hidden: Boolean?
|
|
abstract val icon: String?
|
|
|
|
data class UrlTest(
|
|
override val name: String?,
|
|
override val proxies: List<String>?,
|
|
override val use: List<String>?,
|
|
override val url: String?,
|
|
override val interval: Int?,
|
|
override val lazy: Boolean?,
|
|
override val timeout: Int?,
|
|
override val maxFailedTimes: Int?,
|
|
override val disableUDP: Boolean?,
|
|
override val interfaceName: String?,
|
|
override val routingMark: Int?,
|
|
override val includeAll: Boolean?,
|
|
override val includeAllProxies: Boolean?,
|
|
override val includeAllProviders: Boolean?,
|
|
override val filter: String?,
|
|
override val excludeFilter: String?,
|
|
override val excludeType: String?,
|
|
override val expectedStatus: String?,
|
|
override val hidden: Boolean?,
|
|
override val icon: String?,
|
|
val tolerance: Int?,
|
|
):ProxyGroup()
|
|
|
|
data class Select(
|
|
override val name: String?,
|
|
override val proxies: List<String>?,
|
|
override val use: List<String>?,
|
|
override val url: String?,
|
|
override val interval: Int?,
|
|
override val lazy: Boolean?,
|
|
override val timeout: Int?,
|
|
override val maxFailedTimes: Int?,
|
|
override val disableUDP: Boolean?,
|
|
override val interfaceName: String?,
|
|
override val routingMark: Int?,
|
|
override val includeAll: Boolean?,
|
|
override val includeAllProxies: Boolean?,
|
|
override val includeAllProviders: Boolean?,
|
|
override val filter: String?,
|
|
override val excludeFilter: String?,
|
|
override val excludeType: String?,
|
|
override val expectedStatus: String?,
|
|
override val hidden: Boolean?,
|
|
override val icon: String?
|
|
): ProxyGroup()
|
|
|
|
data class Fallback(
|
|
override val name: String?,
|
|
override val proxies: List<String>?,
|
|
override val use: List<String>?,
|
|
override val url: String?,
|
|
override val interval: Int?,
|
|
override val lazy: Boolean?,
|
|
override val timeout: Int?,
|
|
override val maxFailedTimes: Int?,
|
|
override val disableUDP: Boolean?,
|
|
override val interfaceName: String?,
|
|
override val routingMark: Int?,
|
|
override val includeAll: Boolean?,
|
|
override val includeAllProxies: Boolean?,
|
|
override val includeAllProviders: Boolean?,
|
|
override val filter: String?,
|
|
override val excludeFilter: String?,
|
|
override val excludeType: String?,
|
|
override val expectedStatus: String?,
|
|
override val hidden: Boolean?,
|
|
override val icon: String?
|
|
): ProxyGroup()
|
|
|
|
data class LoadBalance(
|
|
override val name: String?,
|
|
override val proxies: List<String>?,
|
|
override val use: List<String>?,
|
|
override val url: String?,
|
|
override val interval: Int?,
|
|
override val lazy: Boolean?,
|
|
override val timeout: Int?,
|
|
override val maxFailedTimes: Int?,
|
|
override val disableUDP: Boolean?,
|
|
override val interfaceName: String?,
|
|
override val routingMark: Int?,
|
|
override val includeAll: Boolean?,
|
|
override val includeAllProxies: Boolean?,
|
|
override val includeAllProviders: Boolean?,
|
|
override val filter: String?,
|
|
override val excludeFilter: String?,
|
|
override val excludeType: String?,
|
|
override val expectedStatus: String?,
|
|
override val hidden: Boolean?,
|
|
override val icon: String?,
|
|
val strategy: String?,
|
|
): ProxyGroup()
|
|
|
|
data class Relay(
|
|
override val name: String?,
|
|
override val proxies: List<String>?,
|
|
override val use: List<String>?,
|
|
override val url: String?,
|
|
override val interval: Int?,
|
|
override val lazy: Boolean?,
|
|
override val timeout: Int?,
|
|
override val maxFailedTimes: Int?,
|
|
override val disableUDP: Boolean?,
|
|
override val interfaceName: String?,
|
|
override val routingMark: Int?,
|
|
override val includeAll: Boolean?,
|
|
override val includeAllProxies: Boolean?,
|
|
override val includeAllProviders: Boolean?,
|
|
override val filter: String?,
|
|
override val excludeFilter: String?,
|
|
override val excludeType: String?,
|
|
override val expectedStatus: String?,
|
|
override val hidden: Boolean?,
|
|
override val icon: String?
|
|
):ProxyGroup()
|
|
}
|
|
|
|
sealed class ProxyProvider {
|
|
abstract val name: String?
|
|
abstract val interval: Int?
|
|
abstract val filter: String?
|
|
abstract val excludeFilter: String?
|
|
abstract val excludeType: String?
|
|
abstract val dialerProxy: String?
|
|
abstract val healthCheck: HealthCheck?
|
|
abstract val override: Override?
|
|
|
|
data class FileProvider(
|
|
override val name: String? = null,
|
|
override val interval: Int?,
|
|
override val filter: String?,
|
|
override val excludeFilter: String?,
|
|
override val excludeType: String?,
|
|
override val dialerProxy: String?,
|
|
override val healthCheck: HealthCheck?,
|
|
override val override: Override?,
|
|
val path: String?,
|
|
) : ProxyProvider()
|
|
|
|
data class HttpProvider(
|
|
override val name: String? = null,
|
|
override val interval: Int?,
|
|
override val filter: String?,
|
|
override val excludeFilter: String?,
|
|
override val excludeType: String?,
|
|
override val dialerProxy: String?,
|
|
override val healthCheck: HealthCheck?,
|
|
override val override: Override?,
|
|
val url: String,
|
|
val path: String? = null,
|
|
val proxy: String? = null,
|
|
val sizeLimit: Long? = null,
|
|
val header: Map<String, List<String>>? = null,
|
|
) : ProxyProvider()
|
|
|
|
data class InlineProvider(
|
|
override val name: String? = null,
|
|
override val interval: Int?,
|
|
override val filter: String?,
|
|
override val excludeFilter: String?,
|
|
override val excludeType: String?,
|
|
override val dialerProxy: String?,
|
|
override val healthCheck: HealthCheck?,
|
|
override val override: Override?,
|
|
// TODO:
|
|
val payload: List<Map<String, Any>>?,
|
|
) : ProxyProvider()
|
|
|
|
data class HealthCheck(
|
|
val enable: Boolean,
|
|
val url: String,
|
|
val interval: Int,
|
|
val timeout: Int? = null,
|
|
val lazy: Boolean? = true,
|
|
val expectedStatus: String? = null,
|
|
)
|
|
|
|
data class Override(
|
|
val tfo: Boolean? = null,
|
|
val mptcp: Boolean? = null,
|
|
val udp: Boolean? = null,
|
|
val udpOverTcp: Boolean? = null,
|
|
val up: String? = null,
|
|
val down: String? = null,
|
|
val dialerProxy: String? = null,
|
|
val skipCertVerify: Boolean? = null,
|
|
val interfaceName: String? = null,
|
|
val routingMark: Int? = null,
|
|
val ipVersion: String? = null,
|
|
val additionalPrefix: String? = null,
|
|
val additionalSuffix: String? = null,
|
|
val proxyName: List<OverrideProxyName>? = null,
|
|
)
|
|
|
|
data class OverrideProxyName(
|
|
val pattern: String,
|
|
val target: String,
|
|
)
|
|
}
|
|
|
|
sealed class RuleProvider {
|
|
abstract val behavior: String?
|
|
|
|
data class FileProvider(
|
|
override val behavior: String? = null,
|
|
val format: String? = null,
|
|
val interval: Int? = null,
|
|
val path: String? = null,
|
|
) : RuleProvider()
|
|
|
|
data class HttpProvider(
|
|
override val behavior: String? = null,
|
|
val format: String? = null,
|
|
val interval: Int? = null,
|
|
val path: String? = null,
|
|
val url: String? = null,
|
|
val proxy: String? = null,
|
|
val sizeLimit: Long? = null,
|
|
) : RuleProvider()
|
|
data class InlineProvider(
|
|
override val behavior: String,
|
|
val payload: List<String>,
|
|
) : RuleProvider()
|
|
}
|
|
|
|
data class Header(
|
|
val userAgent: List<String>? = null, val accept: List<String>? = null, val authorization: List<String>? = null
|
|
)
|
|
|
|
data class HealthCheck(
|
|
val enable: Boolean? = null,
|
|
val interval: Int? = null,
|
|
val lazy: Boolean? = null,
|
|
val url: String? = null,
|
|
val expectedStatus: Int? = null
|
|
)
|
|
|
|
data class Override(
|
|
val skipCertVerify: Boolean? = null,
|
|
val udp: Boolean? = null,
|
|
val down: String? = null,
|
|
val up: String? = null,
|
|
val dialerProxy: String? = null,
|
|
val interfaceName: String? = null,
|
|
val routingMark: Int? = null,
|
|
val ipVersion: String? = null,
|
|
val additionalPrefix: String? = null,
|
|
val additionalSuffix: String? = null,
|
|
val proxyName: List<ProxyName>? = null
|
|
)
|
|
|
|
data class ProxyName(
|
|
val pattern: String? = null, val target: String? = null
|
|
)
|
|
|
|
data class Payload(
|
|
val name: String? = null,
|
|
val type: String? = null,
|
|
val server: String? = null,
|
|
val port: Int? = null,
|
|
val cipher: String? = null,
|
|
val password: String? = null
|
|
)
|
|
|
|
sealed class Listener {
|
|
abstract val name: String?
|
|
abstract val port: Int?
|
|
abstract val listen: String?
|
|
abstract val rule: String?
|
|
abstract val proxy: String?
|
|
|
|
data class HttpListener(
|
|
override val name: String? = null,
|
|
override val port: Int? = null,
|
|
override val listen: String? = null,
|
|
override val rule: String? = null,
|
|
override val proxy: String? = null,
|
|
val users: List<User>? = null,
|
|
val certificate: String? = null,
|
|
val privateKey: String? = null
|
|
) : Listener()
|
|
|
|
data class SocksListener(
|
|
override val name: String? = null,
|
|
override val port: Int? = null,
|
|
override val listen: String? = null,
|
|
override val rule: String? = null,
|
|
override val proxy: String? = null,
|
|
val udp: Boolean? = null,
|
|
val users: List<User>? = null,
|
|
val certificate: String? = null,
|
|
val privateKey: String? = null
|
|
) : Listener()
|
|
|
|
data class MixedListener(
|
|
override val name: String? = null,
|
|
override val port: Int? = null,
|
|
override val listen: String? = null,
|
|
override val rule: String? = null,
|
|
override val proxy: String? = null,
|
|
val udp: Boolean? = null,
|
|
val users: List<User>? = null,
|
|
val certificate: String? = null,
|
|
val privateKey: String? = null
|
|
) : Listener()
|
|
|
|
data class RedirListener(
|
|
override val name: String? = null,
|
|
override val port: Int? = null,
|
|
override val listen: String? = null,
|
|
override val rule: String? = null,
|
|
override val proxy: String? = null
|
|
) : Listener()
|
|
|
|
data class TProxyListener(
|
|
override val name: String? = null,
|
|
override val port: Int? = null,
|
|
override val listen: String? = null,
|
|
override val rule: String? = null,
|
|
override val proxy: String? = null,
|
|
val udp: Boolean? = null
|
|
) : Listener()
|
|
|
|
data class TunListener(
|
|
override val name: String? = null,
|
|
override val port: Int? = null,
|
|
override val listen: String? = null,
|
|
override val rule: String? = null,
|
|
override val proxy: String? = null,
|
|
val stack: String? = null,
|
|
val dnsHijack: List<String>? = null,
|
|
val inet4Address: List<String>? = null,
|
|
val inet6Address: List<String>? = null,
|
|
val autoDetectInterface: Boolean? = null,
|
|
val autoRoute: Boolean? = null,
|
|
val mtu: Int? = null,
|
|
val strictRoute: Boolean? = null,
|
|
val inet4RouteAddress: List<String>? = null,
|
|
val inet6RouteAddress: List<String>? = null,
|
|
val endpointIndependentNat: Boolean? = null,
|
|
val includeUid: List<Int>? = null,
|
|
val includeUidRange: List<String>? = null,
|
|
val excludeUid: List<Int>? = null,
|
|
val excludeUidRange: List<String>? = null,
|
|
val includeAndroidUser: List<Int>? = null,
|
|
val includePackage: List<String>? = null,
|
|
val excludePackage: List<String>? = null
|
|
) : Listener()
|
|
|
|
data class ShadowsocksListener(
|
|
override val name: String? = null,
|
|
override val port: Int? = null,
|
|
override val listen: String? = null,
|
|
override val rule: String? = null,
|
|
override val proxy: String? = null,
|
|
val password: String? = null,
|
|
val cipher: String? = null,
|
|
val udp: Boolean? = null
|
|
) : Listener()
|
|
|
|
data class VmessListener(
|
|
override val name: String? = null,
|
|
override val port: Int? = null,
|
|
override val listen: String? = null,
|
|
override val rule: String? = null,
|
|
override val proxy: String? = null,
|
|
val users: List<VmessUser>? = null,
|
|
val privateKey: String? = null,
|
|
val certificate: String? = null,
|
|
val wsPath: String? = null,
|
|
val realityConfig: RealityConfig? = null
|
|
) : Listener()
|
|
|
|
data class TuicListener(
|
|
override val name: String? = null,
|
|
override val port: Int? = null,
|
|
override val listen: String? = null,
|
|
override val rule: String? = null,
|
|
override val proxy: String? = null,
|
|
val token: List<String>? = null,
|
|
val users: Map<String, String>? = null,
|
|
val certificate: String? = null,
|
|
val privateKey: String? = null,
|
|
val congestionController: String? = null,
|
|
val maxIdleTime: Int? = null,
|
|
val authenticationTimeout: Int? = null,
|
|
val alpn: List<String>? = null,
|
|
val maxUdpRelayPacketSize: Int? = null
|
|
) : Listener()
|
|
|
|
data class Hysteria2Listener(
|
|
override val name: String? = null,
|
|
override val port: Int? = null,
|
|
override val listen: String? = null,
|
|
override val rule: String? = null,
|
|
override val proxy: String? = null,
|
|
val users: Map<String, String>? = null,
|
|
val up: Int? = null,
|
|
val down: Int? = null,
|
|
val ignoreClientBandwidth: Boolean? = null,
|
|
val obfs: String? = null,
|
|
val obfsPassword: String? = null,
|
|
val masquerade: String? = null,
|
|
val alpn: List<String>? = null,
|
|
val certificate: String? = null,
|
|
val privateKey: String? = null
|
|
) : Listener()
|
|
|
|
data class TunnelListener(
|
|
override val name: String? = null,
|
|
override val port: Int? = null,
|
|
override val listen: String? = null,
|
|
override val rule: String? = null,
|
|
override val proxy: String? = null,
|
|
val network: List<String>? = null,
|
|
val target: String? = null
|
|
) : Listener()
|
|
|
|
data class VlessListener(
|
|
override val name: String? = null,
|
|
override val port: Int? = null,
|
|
override val listen: String? = null,
|
|
override val rule: String? = null,
|
|
override val proxy: String? = null,
|
|
val users: List<VlessUser>? = null,
|
|
val wsPath: String? = null,
|
|
val certificate: String? = null,
|
|
val privateKey: String? = null,
|
|
val realityConfig: RealityConfig? = null
|
|
) : Listener()
|
|
|
|
data class User(
|
|
val username: String? = null, val password: String? = null
|
|
)
|
|
|
|
data class VmessUser(
|
|
val username: String? = null, val uuid: String? = null, val alterId: Int? = null
|
|
)
|
|
|
|
data class VlessUser(
|
|
val username: String? = null, val uuid: String? = null, val flow: String? = null
|
|
)
|
|
|
|
data class RealityConfig(
|
|
val dest: String? = null,
|
|
val privateKey: String? = null,
|
|
val shortId: List<String>? = null,
|
|
val serverNames: List<String>? = null
|
|
)
|
|
}
|
|
|
|
|
|
data class NTP(
|
|
val enable: Boolean? = null,
|
|
val server: String? = null,
|
|
val port: Int? = null,
|
|
val interval: Int? = null,
|
|
val dialerProxy: String? = null,
|
|
val writeToSystem: Boolean? = null
|
|
)
|
|
|
|
data class TuicServer(
|
|
val enable: Boolean? = null,
|
|
val listen: String? = null,
|
|
val token: List<String>? = null,
|
|
val users: Map<String, String>? = null,
|
|
val certificate: String? = null,
|
|
val privateKey: String? = null,
|
|
val congestionController: String? = null,
|
|
val maxIdleTime: Int? = null,
|
|
val authenticationTimeout: Int? = null,
|
|
val alpn: List<String>? = null,
|
|
val maxUdpRelayPacketSize: Int? = null,
|
|
val cwnd: Int? = null,
|
|
)
|
|
|
|
data class IPTables(
|
|
val enable: Boolean? = null,
|
|
val inboundInterface: String? = null,
|
|
val bypass: List<String>? = null,
|
|
val dnsRedirect: Boolean? = null
|
|
)
|
|
|
|
data class ClashForAndroid(
|
|
val appendSystemDns: Boolean? = null,
|
|
val uiSubtitlePattern: String? = null
|
|
) |