From 184b4d495dfc0aae738d32793c43c6b7435cbcbd Mon Sep 17 00:00:00 2001 From: rainbus Date: Sun, 9 Mar 2025 22:31:25 +0800 Subject: [PATCH] Temp --- src/main/kotlin/conf/Clash.kt | 451 +++++++++++++--------------------- 1 file changed, 171 insertions(+), 280 deletions(-) diff --git a/src/main/kotlin/conf/Clash.kt b/src/main/kotlin/conf/Clash.kt index bced979..0a5c118 100644 --- a/src/main/kotlin/conf/Clash.kt +++ b/src/main/kotlin/conf/Clash.kt @@ -1,3 +1,4 @@ +import com.charleskorn.kaml.YamlNode import kotlinx.serialization.SerialName import kotlinx.serialization.Serializable @@ -89,12 +90,13 @@ data class Clash( val tun: Tun? = null, val listeners: List? = null, + // Outbound + val proxies: List? = null, + val proxyProviders: Map? = null, // 未在文档中提到的属性 val experimental: Experimental? = null, val tunnels: List? = null, - val proxies: List? = null, val proxyGroups: List? = null, - val proxyProviders: Map? = null, val ruleProviders: Map? = null, val rules: List? = null, val subRules: Map>? = null, @@ -246,268 +248,6 @@ data class FallbackFilter( val domain: List? = null ) -//@Serializable -//sealed class Proxy { -// @Serializable -// 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 fingerprint: String? = null, -// val skipCertVerify: Boolean? = null, -// val udp: Boolean? = null, -// val ipVersion: String? = null -// ) : Proxy() -// -// @Serializable -// data class HttpProxy( -// 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 skipCertVerify: Boolean? = null, -// val sni: String? = null, -// val fingerprint: String? = null, -// val ipVersion: String? = null -// ) : Proxy() -// -// @Serializable -// data class SnellProxy( -// val name: String? = null, -// val server: String? = null, -// val port: Int? = null, -// val psk: String? = null, -// val version: Int? = null, -// val obfsOpts: ObfsOpts? = null -// ) : Proxy() { -// @Serializable -// data class ObfsOpts( -// val mode: String? = null, -// val host: String? = null -// ) -// } -// -// @Serializable -// data class ShadowsocksProxy( -// val name: String? = null, -// val server: String? = null, -// val port: Int? = null, -// val cipher: String? = null, -// val password: String? = null, -// val udp: Boolean? = null, -// val ipVersion: String? = null, -// val plugin: String? = null, -// val pluginOpts: PluginOpts? = null -// ) : Proxy() { -// @Serializable -// data class PluginOpts( -// val mode: String? = null, -// val host: String? = null, -// val tls: Boolean? = null, -// val skipCertVerify: Boolean? = null, -// val fingerprint: String? = null, -// val path: String? = null, -// val headers: Map? = null, -// val clientFingerprint: String? = null, -// val version: Int? = null, -// val password: String? = null, -// val restlsScript: String? = null -// ) -// } -// -// @Serializable -// 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 tls: Boolean? = null, -// val fingerprint: String? = null, -// val skipCertVerify: Boolean? = null, -// val servername: String? = null, -// val network: String? = null, -// val wsOpts: WsOpts? = null, -// val h2Opts: H2Opts? = null, -// val grpcOpts: GrpcOpts? = null -// ) : Proxy() { -// @Serializable -// data class WsOpts( -// val path: String? = null, -// val headers: Map? = null -// ) -// -// @Serializable -// data class H2Opts( -// val host: List? = null, -// val path: String? = null -// ) -// -// @Serializable -// data class GrpcOpts( -// val grpcServiceName: String? = null -// ) -// } -// -// @Serializable -// data class VlessProxy( -// val name: String? = null, -// val server: String? = null, -// val port: Int? = null, -// val uuid: String? = null, -// val network: String? = null, -// val tls: Boolean? = null, -// val udp: Boolean? = null, -// val flow: String? = null, -// val clientFingerprint: String? = null, -// val servername: String? = null, -// val realityOpts: RealityOpts? = null, -// val grpcOpts: GrpcOpts? = null, -// val wsOpts: WsOpts? = null -// ) : Proxy() { -// @Serializable -// data class RealityOpts( -// val publicKey: String? = null, -// val shortId: String? = null -// ) -// -// @Serializable -// data class GrpcOpts( -// val grpcServiceName: String? = null -// ) -// -// @Serializable -// data class WsOpts( -// val path: String? = null, -// val headers: Map? = null -// ) -// } -// -// @Serializable -// data class TrojanProxy( -// val name: String? = null, -// val server: String? = null, -// val port: Int? = null, -// val password: String? = null, -// val clientFingerprint: String? = null, -// val udp: Boolean? = null, -// val sni: String? = null, -// val skipCertVerify: Boolean? = null, -// val flow: String? = null, -// val grpcOpts: GrpcOpts? = null, -// val wsOpts: WsOpts? = null -// ) : Proxy() { -// @Serializable -// data class GrpcOpts( -// val grpcServiceName: String? = null -// ) -// -// @Serializable -// data class WsOpts( -// val path: String? = null, -// val headers: Map? = null -// ) -// } -// -// @Serializable -// @SerialName("hysteria2") -// data class HysteriaProxy( -// val name: String? = null, -// val server: String? = null, -// val port: Int? = null, -// val authStr: String? = null, -// val obfs: String? = null, -// val protocol: String? = null, -// val up: String? = null, -// val down: String? = null, -// val sni: String? = null, -// val skipCertVerify: Boolean? = null, -// val fingerprint: String? = null -// ) : Proxy() -// -// @Serializable -// data class WireguardProxy( -// val name: String? = null, -// val server: String? = null, -// val port: Int? = null, -// val ip: String? = null, -// val ipv6: String? = null, -// val publicKey: String? = null, -// val privateKey: String? = null, -// val udp: Boolean? = null, -// val reserved: String? = null, -// val peers: List? = null -// ) : Proxy() { -// @Serializable -// data class Peer( -// val server: String? = null, -// val port: Int? = null, -// val publicKey: String? = null, -// val allowedIps: List? = null, -// val reserved: String? = null -// ) -// } -// -// @Serializable -// 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 udpRelayMode: String? = null, -// val congestionController: String? = null, -// val skipCertVerify: Boolean? = null, -// val sni: String? = null -// ) : Proxy() -// -// @Serializable -// data class ShadowsocksRProxy( -// val name: String? = null, -// val server: String? = null, -// val port: Int? = null, -// val cipher: String? = null, -// val password: String? = null, -// val obfs: String? = null, -// val protocol: String? = null, -// val udp: Boolean? = null -// ) : Proxy() -// -// @Serializable -// 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 -// ) : Proxy() -// -// @Serializable -// data class MieruProxy( -// val name: String? = null, -// val server: String? = null, -// val port: Int? = null, -// val transport: String? = null, -// val username: String? = null, -// val password: String? = null, -// val multiplexing: String? = null -// ) : Proxy() -// -// @Serializable -// data class DNSProxy( -// val name: String? = null -// ) : Proxy() -//} - @Serializable sealed class Proxy { abstract val tfo: Boolean? @@ -677,8 +417,8 @@ sealed class Proxy { val cipher: String? = null, val udp: Boolean? = null, val plugin: String? = null, - // TODO: -// val pluginOpts: Map? = null, + // NOTE: 暂时先不对该字段进行解析 + val pluginOpts: Map? = null, val udpOverTCP: Boolean? = null, val udpOverTCPVersion: Int? = null, val clientFingerprint: String? = null, @@ -724,8 +464,7 @@ sealed class Proxy { val psk: String? = null, val udp: Boolean? = null, val version: Int? = null, - // TODO: -// val obfsOpts: Map? = null, + val obfsOpts: Map? = null, override val tfo: Boolean? = null, override val mptcp: Boolean? = null, @@ -1032,6 +771,12 @@ sealed class Proxy { val up: String? = null, val down: String? = null, ) + + @Serializable + data class SimpleObfsOption( + val mode: String? = null, + val host: String? = null + ) } @@ -1118,31 +863,177 @@ sealed class ProxyGroup { ) : ProxyGroup() } +//@Serializable +//sealed class ProxyProvider { +// @Serializable +// data class HttpProxyProvider( +// val type: String? = null, +// val url: String? = null, +// val interval: Int? = null, +// val path: String? = null, +// val proxy: String? = null, +// val header: Header? = null, +// val healthCheck: HealthCheck? = null, +// val override: Override? = null +// ) : ProxyProvider() +// +// @Serializable +// data class InlineProxyProvider( +// val type: String? = null, val dialerProxy: String? = null, val payload: List? = null +// ) : ProxyProvider() +// +// @Serializable +// data class FileProxyProvider( +// val type: String? = null, val path: String? = null, val healthCheck: HealthCheck? = null +// ) : ProxyProvider() +//} + + +//data class ProxyProvider( +// val type: String? = null, +// val path: String? = null, +// val url: String? = null, +// val proxy: String? = null, +// val interval: Int? = null, +// val filter: String? = null, +// val excludeFilter: String? = null, +// val excludeType: String? = null, +// val dialerProxy: String? = null, +// val sizeLimit: Long? = null, +// val payload: List>? = null, +// val healthCheck: HealthCheck? = null, +// val override: Override? = null, +// val header: Map>? = null +//) { +// data class HealthCheck( +// val enable: Boolean? = null, +// val url: String? = null, +// val interval: Int? = null, +// val testTimeout: Int? = null, +// val lazy: Boolean? = null, +// 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? = null +// ) +// +// data class OverrideProxyNameSchema( +// val pattern: String? = null, +// val target: String? = null +// ) +// +//} + + @Serializable 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? + @Serializable - data class HttpProxyProvider( - val type: String? = null, - val url: String? = null, - val interval: Int? = null, + @SerialName("file") + 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() + + @Serializable + @SerialName("http") + 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 header: Header? = null, - val healthCheck: HealthCheck? = null, - val override: Override? = null + val sizeLimit: Long? = null, + val header: Map>? = null, ) : ProxyProvider() @Serializable - data class InlineProxyProvider( - val type: String? = null, val dialerProxy: String? = null, val payload: List? = null + @SerialName("inline") + 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>?, ) : ProxyProvider() @Serializable - data class FileProxyProvider( - val type: String? = null, val path: String? = null, val healthCheck: HealthCheck? = null - ) : 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, + ) + + @Serializable + 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? = null, + ) + + @Serializable + data class OverrideProxyName( + val pattern: String, + val target: String, + ) } + + @Serializable sealed class RuleProvider { @Serializable