Files
subconverter4j/src/main/kotlin/conf/Clash.kt
2025-03-11 15:09:26 +08:00

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
)