diff --git a/.gitignore b/.gitignore
index b1dff0d..cf65fa7 100644
--- a/.gitignore
+++ b/.gitignore
@@ -5,6 +5,7 @@ build/
!**/src/test/**/build/
### IntelliJ IDEA ###
+.idea/
.idea/modules.xml
.idea/jarRepositories.xml
.idea/compiler.xml
diff --git a/.idea/misc.xml b/.idea/misc.xml
index 88922cc..1ebec2f 100644
--- a/.idea/misc.xml
+++ b/.idea/misc.xml
@@ -4,7 +4,7 @@
-
+
\ No newline at end of file
diff --git a/src/main/kotlin/conf/Clash.kt b/src/main/kotlin/conf/Clash.kt
index fa562f4..7c62f52 100644
--- a/src/main/kotlin/conf/Clash.kt
+++ b/src/main/kotlin/conf/Clash.kt
@@ -1,63 +1,111 @@
import kotlinx.serialization.SerialName
import kotlinx.serialization.Serializable
-
@Serializable
data class Clash(
- // Port
- val port: Int? = null,
- val socksPort: Int? = null,
- val mixedPort: Int? = null,
- // LAN
+ /*------------------------------------------- *General configuration* -------------------------------------------*/
+ // Allow LAN
val allowLan: Boolean? = null,
val bindAddress: String? = null,
- val authentication: List? = null,
- val skipAuthPrefixes: List? = null,
val lanAllowedIps: List? = null,
val lanDisallowedIps: List? = null,
- val findProcessMode: String? = null,
+ val authentication: List? = null,
+ val skipAuthPrefixes: List? = null,
+
+ // Operation Mode
val mode: String? = null,
- // Geo
- val geoxUrl: GeoXUrl? = null,
- val geoAutoUpdate: Boolean? = null,
- val geoUpdateInterval: Int? = null,
+
+ // Log Level
val logLevel: String? = null,
- val ipv6: Boolean? = null,
- val tls: TLS? = null,
- // External Controller
+
+ // 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,
- val externalDohServer: String? = null,
- val interfaceName: String? = null,
- val globalClientFingerprint: String? = null,
- val experimental: Experimental? = null,
- val unifiedDelay: Boolean? = null,
- val hosts: List? = null,
+
+ // Cache
val profile: Profile? = null,
- val tun: Tun? = null,
- val sniffer: Sniffer? = null,
- val tunnels: List? = 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,
+
+ // Global Client Fingerprint
+ val globalClientFingerprint: String? = null,
+
+ // Custom Global UA
+ val globalUa: String? = null,
+
+ // ETag Support
+ val etagSupport: Boolean? = null,
+
+ /*------------------------------------------------ *DNS* ------------------------------------------------*/
+ val hosts: List? = null,
+ // TODO:
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? = 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,
- val listeners: List? = null
)
@Serializable
data class GeoXUrl(
val geoip: String? = null,
val geosite: String? = null,
- val mmdb: String? = null
+ val mmdb: String? = null,
+ val asn: String? = null
)
@Serializable
@@ -88,20 +136,23 @@ data class Profile(
data class Tun(
val enable: Boolean? = null,
val stack: String? = null,
- val dnsHijack: List? = null,
- val autoDetectInterface: Boolean? = null,
val autoRoute: Boolean? = null,
+ val autoRedirect: Boolean? = null,
+ val autoDetectInterface: Boolean? = null,
+ val dnsHijack: List? = null,
+ val device: String? = null,
val mtu: Int? = null,
+ val strictRoute: Boolean? = null,
val gso: Boolean? = null,
val gsoMaxSize: Int? = null,
- val autoRedirect: Boolean? = null,
- val strictRoute: Boolean? = null,
+ val udpTimeout: Int? = null,
+ val iproute2TableIndex: Int? = null,
+ val iproute2RuleIndex: Int? = null,
+ val endpointIndependentNat: Boolean? = null,
val routeAddressSet: List? = null,
val routeExcludeAddressSet: List? = null,
val routeAddress: List? = null,
- val inet4RouteAddress: List? = null,
- val inet6RouteAddress: List? = null,
- val endpointIndependentNat: Boolean? = null,
+ val routeExcludeAddress: List? = null,
val includeInterface: List? = null,
val excludeInterface: List? = null,
val includeUid: List? = null,
@@ -110,20 +161,26 @@ data class Tun(
val excludeUidRange: List>? = null,
val includeAndroidUser: List? = null,
val includePackage: List? = null,
- val excludePackage: List? = null
+ val excludePackage: List? = null,
+ @Deprecated("") val inet4RouteAddress: List? = null,
+ @Deprecated("") val inet6RouteAddress: List? = null,
+ @Deprecated("") val inet4RouteExcludeAddress: List? = null,
+ @Deprecated("") val inet6RouteExcludeAddress: List? = null
)
@Serializable
data class Sniffer(
val enable: Boolean? = null,
+ val forceDnsMapping: Boolean? = null,
+ val parsePureIp: Boolean? = null,
val overrideDestination: Boolean? = null,
val sniff: Sniff? = null,
val forceDomain: List? = null,
+ val skipDomain: List? = null,
val skipSrcAddress: List? = null,
val skipDstAddress: List? = null,
- val skipDomain: List? = null,
- val sniffing: List? = null,
- val portWhitelist: List? = null
+ @Deprecated("") val sniffing: List? = null,
+ @Deprecated("") val portWhitelist: List? = null
)
@Serializable
@@ -204,173 +261,173 @@ data class FallbackFilter(
@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
+ 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")
@@ -388,80 +445,80 @@ sealed class Proxy {
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
+ 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
@@ -648,6 +705,20 @@ data class Payload(
@Serializable
sealed class Listener {
@Serializable
+ @SerialName("http")
+ data class HttpListener(
+ val name: String? = null,
+ val port: Int? = null,
+ val listen: String? = null,
+ val rule: String? = null,
+ val proxy: String? = null,
+ val users: List? = null,
+ val certificate: String? = null,
+ val privateKey: String? = null
+ ) : Listener()
+
+ @Serializable
+ @SerialName("socks")
data class SocksListener(
val name: String? = null,
val port: Int? = null,
@@ -655,20 +726,13 @@ sealed class Listener {
val rule: String? = null,
val proxy: String? = null,
val udp: Boolean? = null,
- val users: List? = null
- ) : Listener()
-
- @Serializable
- data class HttpListener(
- val name: String? = null,
- val port: Int? = null,
- val listen: String? = null,
- val rule: String? = null,
- val proxy: String? = null,
- val users: List? = null
+ val users: List? = null,
+ val certificate: String? = null,
+ val privateKey: String? = null
) : Listener()
@Serializable
+ @SerialName("mixed")
data class MixedListener(
val name: String? = null,
val port: Int? = null,
@@ -676,10 +740,13 @@ sealed class Listener {
val rule: String? = null,
val proxy: String? = null,
val udp: Boolean? = null,
- val users: List? = null
+ val users: List? = null,
+ val certificate: String? = null,
+ val privateKey: String? = null
) : Listener()
@Serializable
+ @SerialName("redir")
data class RedirListener(
val name: String? = null,
val port: Int? = null,
@@ -689,84 +756,18 @@ sealed class Listener {
) : Listener()
@Serializable
+ @SerialName("tproxy")
data class TProxyListener(
val name: String? = null,
val port: Int? = null,
val listen: String? = null,
val rule: String? = null,
val proxy: String? = null,
- val udp: Boolean? = null
- ) : Listener()
-
- @Serializable
- data class ShadowsocksListener(
- val name: String? = null,
- val port: Int? = null,
- val listen: String? = null,
- val rule: String? = null,
- val proxy: String? = null,
- val password: String? = null,
- val cipher: String? = null
- ) : Listener()
-
- @Serializable
- data class VmessListener(
- val name: String? = null,
- val port: Int? = null,
- val listen: String? = null,
- val rule: String? = null,
- val proxy: String? = null,
- val users: List? = null,
- val wsPath: String? = null,
- val certificate: String? = null,
- val privateKey: String? = null,
- val realityConfig: RealityConfig? = null
- ) : Listener()
-
- @Serializable
- data class TuicListener(
- val name: String? = null,
- val port: Int? = null,
- val listen: String? = null,
- val rule: String? = null,
- val proxy: String? = null,
- val token: List? = null,
- val users: Map? = null,
- val certificate: String? = null,
- val privateKey: String? = null,
- val congestionController: String? = null,
- val maxIdleTime: Int? = null,
- val authenticationTimeout: Int? = null,
- val alpn: List? = null,
- val maxUdpRelayPacketSize: Int? = null
- ) : Listener()
-
- @Serializable
- data class TunnelListener(
- val name: String? = null,
- val port: Int? = null,
- val listen: String? = null,
- val rule: String? = null,
- val proxy: String? = null,
- val network: List? = null,
- val target: String? = null
- ) : Listener()
-
- @Serializable
- data class VlessListener(
- val name: String? = null,
- val port: Int? = null,
- val listen: String? = null,
- val rule: String? = null,
- val proxy: String? = null,
- val users: List? = null,
- val wsPath: String? = null,
- val certificate: String? = null,
- val privateKey: String? = null,
- val realityConfig: RealityConfig? = null
+ val udp: Boolean? = null,
) : Listener()
@Serializable
+ @SerialName("tun")
data class TunListener(
val name: String? = null,
val stack: String? = null,
@@ -790,6 +791,101 @@ sealed class Listener {
val includePackage: List? = null,
val excludePackage: List? = null
) : Listener()
+
+ @Serializable
+ @SerialName("shadowsocks")
+ data class ShadowsocksListener(
+ val name: String? = null,
+ val port: Int? = null,
+ val listen: String? = null,
+ val rule: String? = null,
+ val proxy: String? = null,
+ val password: String? = null,
+ val cipher: String? = null,
+ val udp: Boolean? = null
+ ) : Listener()
+
+ @Serializable
+ @SerialName("vmess")
+ data class VmessListener(
+ val name: String? = null,
+ val port: Int? = null,
+ val listen: String? = null,
+ val rule: String? = null,
+ val proxy: String? = null,
+ val users: List? = null,
+ val privateKey: String? = null,
+ val certificate: String? = null,
+ // Follows are from mihomo config yaml
+ val wsPath: String? = null,
+ val realityConfig: RealityConfig? = null
+ ) : Listener()
+
+ @Serializable
+ @SerialName("tuic")
+ data class TuicListener(
+ val name: String? = null,
+ val port: Int? = null,
+ val listen: String? = null,
+ val rule: String? = null,
+ val proxy: String? = null,
+ val token: List? = null,
+ val users: Map? = null,
+ val certificate: String? = null,
+ val privateKey: String? = null,
+ val congestionController: String? = null,
+ val maxIdleTime: Int? = null,
+ val authenticationTimeout: Int? = null,
+ val alpn: List? = null,
+ val maxUdpRelayPacketSize: Int? = null
+ ) : Listener()
+
+ @Serializable
+ @SerialName("hysteria2")
+ data class Hysteria2Listener(
+ val name: String? = null,
+ val port: Int? = null,
+ val listen: String? = null,
+ val rule: String? = null,
+ val proxy: String? = null,
+ val users: Map? = 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? = null,
+ val certificate: String? = null,
+ val privateKey: String? = null,
+ ) : Listener()
+
+ @Serializable
+ @SerialName("tunnel")
+ data class TunnelListener(
+ val name: String? = null,
+ val port: Int? = null,
+ val listen: String? = null,
+ val rule: String? = null,
+ val proxy: String? = null,
+ val network: List? = null,
+ val target: String? = null
+ ) : Listener()
+
+ @Serializable
+ @SerialName("vless")
+ data class VlessListener(
+ val name: String? = null,
+ val port: Int? = null,
+ val listen: String? = null,
+ val rule: String? = null,
+ val proxy: String? = null,
+ val users: List? = null,
+ val wsPath: String? = null,
+ val certificate: String? = null,
+ val privateKey: String? = null,
+ val realityConfig: RealityConfig? = null
+ ) : Listener()
}
@Serializable