Temp
This commit is contained in:
@@ -1,3 +1,4 @@
|
|||||||
|
import com.charleskorn.kaml.YamlNode
|
||||||
import kotlinx.serialization.SerialName
|
import kotlinx.serialization.SerialName
|
||||||
import kotlinx.serialization.Serializable
|
import kotlinx.serialization.Serializable
|
||||||
|
|
||||||
@@ -89,12 +90,13 @@ data class Clash(
|
|||||||
val tun: Tun? = null,
|
val tun: Tun? = null,
|
||||||
val listeners: List<Listener>? = null,
|
val listeners: List<Listener>? = null,
|
||||||
|
|
||||||
|
// Outbound
|
||||||
|
val proxies: List<Proxy>? = null,
|
||||||
|
val proxyProviders: Map<String, ProxyProvider>? = null,
|
||||||
// 未在文档中提到的属性
|
// 未在文档中提到的属性
|
||||||
val experimental: Experimental? = null,
|
val experimental: Experimental? = null,
|
||||||
val tunnels: List<Tunnel>? = null,
|
val tunnels: List<Tunnel>? = null,
|
||||||
val proxies: List<Proxy>? = null,
|
|
||||||
val proxyGroups: List<ProxyGroup>? = null,
|
val proxyGroups: List<ProxyGroup>? = null,
|
||||||
val proxyProviders: Map<String, ProxyProvider>? = null,
|
|
||||||
val ruleProviders: Map<String, RuleProvider>? = null,
|
val ruleProviders: Map<String, RuleProvider>? = null,
|
||||||
val rules: List<String>? = null,
|
val rules: List<String>? = null,
|
||||||
val subRules: Map<String, List<String>>? = null,
|
val subRules: Map<String, List<String>>? = null,
|
||||||
@@ -246,268 +248,6 @@ data class FallbackFilter(
|
|||||||
val domain: List<String>? = null
|
val domain: List<String>? = 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<String, String>? = 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<String, String>? = null
|
|
||||||
// )
|
|
||||||
//
|
|
||||||
// @Serializable
|
|
||||||
// data class H2Opts(
|
|
||||||
// val host: List<String>? = 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<String, String>? = 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<String, String>? = 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<Peer>? = null
|
|
||||||
// ) : Proxy() {
|
|
||||||
// @Serializable
|
|
||||||
// data class Peer(
|
|
||||||
// val server: String? = null,
|
|
||||||
// val port: Int? = null,
|
|
||||||
// val publicKey: String? = null,
|
|
||||||
// val allowedIps: List<String>? = 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
|
@Serializable
|
||||||
sealed class Proxy {
|
sealed class Proxy {
|
||||||
abstract val tfo: Boolean?
|
abstract val tfo: Boolean?
|
||||||
@@ -677,8 +417,8 @@ sealed class Proxy {
|
|||||||
val cipher: String? = null,
|
val cipher: String? = null,
|
||||||
val udp: Boolean? = null,
|
val udp: Boolean? = null,
|
||||||
val plugin: String? = null,
|
val plugin: String? = null,
|
||||||
// TODO:
|
// NOTE: 暂时先不对该字段进行解析
|
||||||
// val pluginOpts: Map<String, @Contextual Any>? = null,
|
val pluginOpts: Map<String, YamlNode>? = null,
|
||||||
val udpOverTCP: Boolean? = null,
|
val udpOverTCP: Boolean? = null,
|
||||||
val udpOverTCPVersion: Int? = null,
|
val udpOverTCPVersion: Int? = null,
|
||||||
val clientFingerprint: String? = null,
|
val clientFingerprint: String? = null,
|
||||||
@@ -724,8 +464,7 @@ sealed class Proxy {
|
|||||||
val psk: String? = null,
|
val psk: String? = null,
|
||||||
val udp: Boolean? = null,
|
val udp: Boolean? = null,
|
||||||
val version: Int? = null,
|
val version: Int? = null,
|
||||||
// TODO:
|
val obfsOpts: Map<String, SimpleObfsOption>? = null,
|
||||||
// val obfsOpts: Map<String, @Contextual Any>? = null,
|
|
||||||
|
|
||||||
override val tfo: Boolean? = null,
|
override val tfo: Boolean? = null,
|
||||||
override val mptcp: Boolean? = null,
|
override val mptcp: Boolean? = null,
|
||||||
@@ -1032,6 +771,12 @@ sealed class Proxy {
|
|||||||
val up: String? = null,
|
val up: String? = null,
|
||||||
val down: 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()
|
) : 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<Payload>? = 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<Map<String, Any>>? = null,
|
||||||
|
// val healthCheck: HealthCheck? = null,
|
||||||
|
// val override: Override? = null,
|
||||||
|
// val header: Map<String, List<String>>? = 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<OverrideProxyNameSchema>? = null
|
||||||
|
// )
|
||||||
|
//
|
||||||
|
// data class OverrideProxyNameSchema(
|
||||||
|
// val pattern: String? = null,
|
||||||
|
// val target: String? = null
|
||||||
|
// )
|
||||||
|
//
|
||||||
|
//}
|
||||||
|
|
||||||
|
|
||||||
@Serializable
|
@Serializable
|
||||||
sealed class ProxyProvider {
|
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
|
@Serializable
|
||||||
data class HttpProxyProvider(
|
@SerialName("file")
|
||||||
val type: String? = null,
|
data class FileProvider(
|
||||||
val url: String? = null,
|
override val name: String? = null,
|
||||||
val interval: Int? = 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 path: String? = null,
|
||||||
val proxy: String? = null,
|
val proxy: String? = null,
|
||||||
val header: Header? = null,
|
val sizeLimit: Long? = null,
|
||||||
val healthCheck: HealthCheck? = null,
|
val header: Map<String, List<String>>? = null,
|
||||||
val override: Override? = null
|
|
||||||
) : ProxyProvider()
|
) : ProxyProvider()
|
||||||
|
|
||||||
@Serializable
|
@Serializable
|
||||||
data class InlineProxyProvider(
|
@SerialName("inline")
|
||||||
val type: String? = null, val dialerProxy: String? = null, val payload: List<Payload>? = null
|
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, YamlNode>>?,
|
||||||
) : ProxyProvider()
|
) : ProxyProvider()
|
||||||
|
|
||||||
@Serializable
|
@Serializable
|
||||||
data class FileProxyProvider(
|
data class HealthCheck(
|
||||||
val type: String? = null, val path: String? = null, val healthCheck: HealthCheck? = null
|
val enable: Boolean,
|
||||||
) : ProxyProvider()
|
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<OverrideProxyName>? = null,
|
||||||
|
)
|
||||||
|
|
||||||
|
@Serializable
|
||||||
|
data class OverrideProxyName(
|
||||||
|
val pattern: String,
|
||||||
|
val target: String,
|
||||||
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@Serializable
|
@Serializable
|
||||||
sealed class RuleProvider {
|
sealed class RuleProvider {
|
||||||
@Serializable
|
@Serializable
|
||||||
|
|||||||
Reference in New Issue
Block a user