This commit is contained in:
2025-03-04 23:50:33 +08:00
parent ae4a1b79ee
commit 032f66378a
3 changed files with 458 additions and 361 deletions

1
.gitignore vendored
View File

@@ -5,6 +5,7 @@ build/
!**/src/test/**/build/ !**/src/test/**/build/
### IntelliJ IDEA ### ### IntelliJ IDEA ###
.idea/
.idea/modules.xml .idea/modules.xml
.idea/jarRepositories.xml .idea/jarRepositories.xml
.idea/compiler.xml .idea/compiler.xml

2
.idea/misc.xml generated
View File

@@ -4,7 +4,7 @@
<component name="FrameworkDetectionExcludesConfiguration"> <component name="FrameworkDetectionExcludesConfiguration">
<file type="web" url="file://$PROJECT_DIR$" /> <file type="web" url="file://$PROJECT_DIR$" />
</component> </component>
<component name="ProjectRootManager" version="2" languageLevel="JDK_21" default="true" project-jdk-name="azul-21" project-jdk-type="JavaSDK"> <component name="ProjectRootManager" version="2" languageLevel="JDK_21" default="true" project-jdk-name="zulu-21" project-jdk-type="JavaSDK">
<output url="file://$PROJECT_DIR$/out" /> <output url="file://$PROJECT_DIR$/out" />
</component> </component>
</project> </project>

View File

@@ -1,63 +1,111 @@
import kotlinx.serialization.SerialName import kotlinx.serialization.SerialName
import kotlinx.serialization.Serializable import kotlinx.serialization.Serializable
@Serializable @Serializable
data class Clash( data class Clash(
// Port /*------------------------------------------- *General configuration* -------------------------------------------*/
val port: Int? = null, // Allow LAN
val socksPort: Int? = null,
val mixedPort: Int? = null,
// LAN
val allowLan: Boolean? = null, val allowLan: Boolean? = null,
val bindAddress: String? = null, val bindAddress: String? = null,
val authentication: List<String>? = null,
val skipAuthPrefixes: List<String>? = null,
val lanAllowedIps: List<String>? = null, val lanAllowedIps: List<String>? = null,
val lanDisallowedIps: List<String>? = null, val lanDisallowedIps: List<String>? = null,
val findProcessMode: String? = null, val authentication: List<String>? = null,
val skipAuthPrefixes: List<String>? = null,
// Operation Mode
val mode: String? = null, val mode: String? = null,
// Geo
val geoxUrl: GeoXUrl? = null, // Log Level
val geoAutoUpdate: Boolean? = null,
val geoUpdateInterval: Int? = null,
val logLevel: String? = null, val logLevel: String? = null,
val ipv6: Boolean? = null,
val tls: TLS? = null, // TCP Keep Alive Settings
// External Controller 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 externalController: String? = null,
val externalControllerTls: String? = null, val externalControllerTls: String? = null,
val externalControllerCors: ExternalControllerCors? = null, val externalControllerCors: ExternalControllerCors? = null,
val externalControllerUnix: String? = null, val externalControllerUnix: String? = null,
val externalControllerPipe: String? = null, val externalControllerPipe: String? = null,
val secret: String? = null,
val externalDohServer: String? = null,
// External User Interface
val externalUi: String? = null, val externalUi: String? = null,
val externalUiName: String? = null, val externalUiName: String? = null,
val externalUiUrl: String? = null, val externalUiUrl: String? = null,
val externalDohServer: String? = null,
val interfaceName: String? = null, // Cache
val globalClientFingerprint: String? = null,
val experimental: Experimental? = null,
val unifiedDelay: Boolean? = null,
val hosts: List<String>? = null,
val profile: Profile? = null, val profile: Profile? = null,
val tun: Tun? = null,
val sniffer: Sniffer? = null, // Unified Delay
val tunnels: List<Tunnel>? = null, 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<String>? = null,
// TODO:
val dns: DNS? = 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,
// 未在文档中提到的属性
val experimental: Experimental? = null,
val tunnels: List<Tunnel>? = null,
val proxies: List<Proxy>? = null, val proxies: List<Proxy>? = null,
val proxyGroups: List<ProxyGroup>? = null, val proxyGroups: List<ProxyGroup>? = null,
val proxyProviders: Map<String, ProxyProvider>? = 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,
val listeners: List<Listener>? = null
) )
@Serializable @Serializable
data class GeoXUrl( data class GeoXUrl(
val geoip: String? = null, val geoip: String? = null,
val geosite: String? = null, val geosite: String? = null,
val mmdb: String? = null val mmdb: String? = null,
val asn: String? = null
) )
@Serializable @Serializable
@@ -88,20 +136,23 @@ data class Profile(
data class Tun( data class Tun(
val enable: Boolean? = null, val enable: Boolean? = null,
val stack: String? = null, val stack: String? = null,
val dnsHijack: List<String>? = null,
val autoDetectInterface: Boolean? = null,
val autoRoute: Boolean? = 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 mtu: Int? = null,
val strictRoute: Boolean? = null,
val gso: Boolean? = null, val gso: Boolean? = null,
val gsoMaxSize: Int? = null, val gsoMaxSize: Int? = null,
val autoRedirect: Boolean? = null, val udpTimeout: Int? = null,
val strictRoute: Boolean? = null, val iproute2TableIndex: Int? = null,
val iproute2RuleIndex: Int? = null,
val endpointIndependentNat: Boolean? = null,
val routeAddressSet: List<String>? = null, val routeAddressSet: List<String>? = null,
val routeExcludeAddressSet: List<String>? = null, val routeExcludeAddressSet: List<String>? = null,
val routeAddress: List<String>? = null, val routeAddress: List<String>? = null,
val inet4RouteAddress: List<String>? = null, val routeExcludeAddress: List<String>? = null,
val inet6RouteAddress: List<String>? = null,
val endpointIndependentNat: Boolean? = null,
val includeInterface: List<String>? = null, val includeInterface: List<String>? = null,
val excludeInterface: List<String>? = null, val excludeInterface: List<String>? = null,
val includeUid: List<Int>? = null, val includeUid: List<Int>? = null,
@@ -110,20 +161,26 @@ data class Tun(
val excludeUidRange: List<Pair<Int, Int>>? = null, val excludeUidRange: List<Pair<Int, Int>>? = null,
val includeAndroidUser: List<Int>? = null, val includeAndroidUser: List<Int>? = null,
val includePackage: List<String>? = null, val includePackage: List<String>? = null,
val excludePackage: 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
) )
@Serializable @Serializable
data class Sniffer( data class Sniffer(
val enable: Boolean? = null, val enable: Boolean? = null,
val forceDnsMapping: Boolean? = null,
val parsePureIp: Boolean? = null,
val overrideDestination: Boolean? = null, val overrideDestination: Boolean? = null,
val sniff: Sniff? = null, val sniff: Sniff? = null,
val forceDomain: List<String>? = null, val forceDomain: List<String>? = null,
val skipDomain: List<String>? = null,
val skipSrcAddress: List<String>? = null, val skipSrcAddress: List<String>? = null,
val skipDstAddress: List<String>? = null, val skipDstAddress: List<String>? = null,
val skipDomain: List<String>? = null, @Deprecated("") val sniffing: List<String>? = null,
val sniffing: List<String>? = null, @Deprecated("") val portWhitelist: List<String>? = null
val portWhitelist: List<String>? = null
) )
@Serializable @Serializable
@@ -204,173 +261,173 @@ data class FallbackFilter(
@Serializable @Serializable
sealed class Proxy { sealed class Proxy {
// @Serializable @Serializable
// data class Socks5Proxy( data class Socks5Proxy(
// val name: String? = null, val name: String? = null,
// val server: String? = null, val server: String? = null,
// val port: Int? = null, val port: Int? = null,
// val username: String? = null, val username: String? = null,
// val password: String? = null, val password: String? = null,
// val tls: Boolean? = null, val tls: Boolean? = null,
// val fingerprint: String? = null, val fingerprint: String? = null,
// val skipCertVerify: Boolean? = null, val skipCertVerify: Boolean? = null,
// val udp: Boolean? = null, val udp: Boolean? = null,
// val ipVersion: String? = null val ipVersion: String? = null
// ) : Proxy() ) : Proxy()
//
// @Serializable @Serializable
// data class HttpProxy( data class HttpProxy(
// val name: String? = null, val name: String? = null,
// val server: String? = null, val server: String? = null,
// val port: Int? = null, val port: Int? = null,
// val username: String? = null, val username: String? = null,
// val password: String? = null, val password: String? = null,
// val tls: Boolean? = null, val tls: Boolean? = null,
// val skipCertVerify: Boolean? = null, val skipCertVerify: Boolean? = null,
// val sni: String? = null, val sni: String? = null,
// val fingerprint: String? = null, val fingerprint: String? = null,
// val ipVersion: String? = null val ipVersion: String? = null
// ) : Proxy() ) : Proxy()
//
// @Serializable @Serializable
// data class SnellProxy( data class SnellProxy(
// val name: String? = null, val name: String? = null,
// val server: String? = null, val server: String? = null,
// val port: Int? = null, val port: Int? = null,
// val psk: String? = null, val psk: String? = null,
// val version: Int? = null, val version: Int? = null,
// val obfsOpts: ObfsOpts? = null val obfsOpts: ObfsOpts? = null
// ) : Proxy() { ) : Proxy() {
// @Serializable @Serializable
// data class ObfsOpts( data class ObfsOpts(
// val mode: String? = null, val mode: String? = null,
// val host: String? = null val host: String? = null
// ) )
// } }
//
// @Serializable @Serializable
// data class ShadowsocksProxy( data class ShadowsocksProxy(
// val name: String? = null, val name: String? = null,
// val server: String? = null, val server: String? = null,
// val port: Int? = null, val port: Int? = null,
// val cipher: String? = null, val cipher: String? = null,
// val password: String? = null, val password: String? = null,
// val udp: Boolean? = null, val udp: Boolean? = null,
// val ipVersion: String? = null, val ipVersion: String? = null,
// val plugin: String? = null, val plugin: String? = null,
// val pluginOpts: PluginOpts? = null val pluginOpts: PluginOpts? = null
// ) : Proxy() { ) : Proxy() {
// @Serializable @Serializable
// data class PluginOpts( data class PluginOpts(
// val mode: String? = null, val mode: String? = null,
// val host: String? = null, val host: String? = null,
// val tls: Boolean? = null, val tls: Boolean? = null,
// val skipCertVerify: Boolean? = null, val skipCertVerify: Boolean? = null,
// val fingerprint: String? = null, val fingerprint: String? = null,
// val path: String? = null, val path: String? = null,
// val headers: Map<String, String>? = null, val headers: Map<String, String>? = null,
// val clientFingerprint: String? = null, val clientFingerprint: String? = null,
// val version: Int? = null, val version: Int? = null,
// val password: String? = null, val password: String? = null,
// val restlsScript: String? = null val restlsScript: String? = null
// ) )
// } }
//
// @Serializable @Serializable
// data class VmessProxy( data class VmessProxy(
// val name: String? = null, val name: String? = null,
// val server: String? = null, val server: String? = null,
// val port: Int? = null, val port: Int? = null,
// val uuid: String? = null, val uuid: String? = null,
// val alterId: Int? = null, val alterId: Int? = null,
// val cipher: String? = null, val cipher: String? = null,
// val udp: Boolean? = null, val udp: Boolean? = null,
// val tls: Boolean? = null, val tls: Boolean? = null,
// val fingerprint: String? = null, val fingerprint: String? = null,
// val skipCertVerify: Boolean? = null, val skipCertVerify: Boolean? = null,
// val servername: String? = null, val servername: String? = null,
// val network: String? = null, val network: String? = null,
// val wsOpts: WsOpts? = null, val wsOpts: WsOpts? = null,
// val h2Opts: H2Opts? = null, val h2Opts: H2Opts? = null,
// val grpcOpts: GrpcOpts? = null val grpcOpts: GrpcOpts? = null
// ) : Proxy() { ) : Proxy() {
// @Serializable @Serializable
// data class WsOpts( data class WsOpts(
// val path: String? = null, val path: String? = null,
// val headers: Map<String, String>? = null val headers: Map<String, String>? = null
// ) )
//
// @Serializable @Serializable
// data class H2Opts( data class H2Opts(
// val host: List<String>? = null, val host: List<String>? = null,
// val path: String? = null val path: String? = null
// ) )
//
// @Serializable @Serializable
// data class GrpcOpts( data class GrpcOpts(
// val grpcServiceName: String? = null val grpcServiceName: String? = null
// ) )
// } }
//
// @Serializable @Serializable
// data class VlessProxy( data class VlessProxy(
// val name: String? = null, val name: String? = null,
// val server: String? = null, val server: String? = null,
// val port: Int? = null, val port: Int? = null,
// val uuid: String? = null, val uuid: String? = null,
// val network: String? = null, val network: String? = null,
// val tls: Boolean? = null, val tls: Boolean? = null,
// val udp: Boolean? = null, val udp: Boolean? = null,
// val flow: String? = null, val flow: String? = null,
// val clientFingerprint: String? = null, val clientFingerprint: String? = null,
// val servername: String? = null, val servername: String? = null,
// val realityOpts: RealityOpts? = null, val realityOpts: RealityOpts? = null,
// val grpcOpts: GrpcOpts? = null, val grpcOpts: GrpcOpts? = null,
// val wsOpts: WsOpts? = null val wsOpts: WsOpts? = null
// ) : Proxy() { ) : Proxy() {
// @Serializable @Serializable
// data class RealityOpts( data class RealityOpts(
// val publicKey: String? = null, val publicKey: String? = null,
// val shortId: String? = null val shortId: String? = null
// ) )
//
// @Serializable @Serializable
// data class GrpcOpts( data class GrpcOpts(
// val grpcServiceName: String? = null val grpcServiceName: String? = null
// ) )
//
// @Serializable @Serializable
// data class WsOpts( data class WsOpts(
// val path: String? = null, val path: String? = null,
// val headers: Map<String, String>? = null val headers: Map<String, String>? = null
// ) )
// } }
//
// @Serializable @Serializable
// data class TrojanProxy( data class TrojanProxy(
// val name: String? = null, val name: String? = null,
// val server: String? = null, val server: String? = null,
// val port: Int? = null, val port: Int? = null,
// val password: String? = null, val password: String? = null,
// val clientFingerprint: String? = null, val clientFingerprint: String? = null,
// val udp: Boolean? = null, val udp: Boolean? = null,
// val sni: String? = null, val sni: String? = null,
// val skipCertVerify: Boolean? = null, val skipCertVerify: Boolean? = null,
// val flow: String? = null, val flow: String? = null,
// val grpcOpts: GrpcOpts? = null, val grpcOpts: GrpcOpts? = null,
// val wsOpts: WsOpts? = null val wsOpts: WsOpts? = null
// ) : Proxy() { ) : Proxy() {
// @Serializable @Serializable
// data class GrpcOpts( data class GrpcOpts(
// val grpcServiceName: String? = null val grpcServiceName: String? = null
// ) )
//
// @Serializable @Serializable
// data class WsOpts( data class WsOpts(
// val path: String? = null, val path: String? = null,
// val headers: Map<String, String>? = null val headers: Map<String, String>? = null
// ) )
// } }
@Serializable @Serializable
@SerialName("hysteria2") @SerialName("hysteria2")
@@ -388,80 +445,80 @@ sealed class Proxy {
val fingerprint: String? = null val fingerprint: String? = null
) : Proxy() ) : Proxy()
// @Serializable @Serializable
// data class WireguardProxy( data class WireguardProxy(
// val name: String? = null, val name: String? = null,
// val server: String? = null, val server: String? = null,
// val port: Int? = null, val port: Int? = null,
// val ip: String? = null, val ip: String? = null,
// val ipv6: String? = null, val ipv6: String? = null,
// val publicKey: String? = null, val publicKey: String? = null,
// val privateKey: String? = null, val privateKey: String? = null,
// val udp: Boolean? = null, val udp: Boolean? = null,
// val reserved: String? = null, val reserved: String? = null,
// val peers: List<Peer>? = null val peers: List<Peer>? = null
// ) : Proxy() { ) : Proxy() {
// @Serializable @Serializable
// data class Peer( data class Peer(
// val server: String? = null, val server: String? = null,
// val port: Int? = null, val port: Int? = null,
// val publicKey: String? = null, val publicKey: String? = null,
// val allowedIps: List<String>? = null, val allowedIps: List<String>? = null,
// val reserved: String? = null val reserved: String? = null
// ) )
// } }
//
// @Serializable @Serializable
// data class TuicProxy( data class TuicProxy(
// val name: String? = null, val name: String? = null,
// val server: String? = null, val server: String? = null,
// val port: Int? = null, val port: Int? = null,
// val token: String? = null, val token: String? = null,
// val uuid: String? = null, val uuid: String? = null,
// val password: String? = null, val password: String? = null,
// val udpRelayMode: String? = null, val udpRelayMode: String? = null,
// val congestionController: String? = null, val congestionController: String? = null,
// val skipCertVerify: Boolean? = null, val skipCertVerify: Boolean? = null,
// val sni: String? = null val sni: String? = null
// ) : Proxy() ) : Proxy()
//
// @Serializable @Serializable
// data class ShadowsocksRProxy( data class ShadowsocksRProxy(
// val name: String? = null, val name: String? = null,
// val server: String? = null, val server: String? = null,
// val port: Int? = null, val port: Int? = null,
// val cipher: String? = null, val cipher: String? = null,
// val password: String? = null, val password: String? = null,
// val obfs: String? = null, val obfs: String? = null,
// val protocol: String? = null, val protocol: String? = null,
// val udp: Boolean? = null val udp: Boolean? = null
// ) : Proxy() ) : Proxy()
//
// @Serializable @Serializable
// data class SSHProxy( data class SSHProxy(
// val name: String? = null, val name: String? = null,
// val server: String? = null, val server: String? = null,
// val port: Int? = null, val port: Int? = null,
// val username: String? = null, val username: String? = null,
// val password: String? = null, val password: String? = null,
// val privateKey: String? = null val privateKey: String? = null
// ) : Proxy() ) : Proxy()
//
// @Serializable @Serializable
// data class MieruProxy( data class MieruProxy(
// val name: String? = null, val name: String? = null,
// val server: String? = null, val server: String? = null,
// val port: Int? = null, val port: Int? = null,
// val transport: String? = null, val transport: String? = null,
// val username: String? = null, val username: String? = null,
// val password: String? = null, val password: String? = null,
// val multiplexing: String? = null val multiplexing: String? = null
// ) : Proxy() ) : Proxy()
//
// @Serializable @Serializable
// data class DNSProxy( data class DNSProxy(
// val name: String? = null val name: String? = null
// ) : Proxy() ) : Proxy()
} }
@Serializable @Serializable
@@ -648,6 +705,20 @@ data class Payload(
@Serializable @Serializable
sealed class Listener { sealed class Listener {
@Serializable @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<User>? = null,
val certificate: String? = null,
val privateKey: String? = null
) : Listener()
@Serializable
@SerialName("socks")
data class SocksListener( data class SocksListener(
val name: String? = null, val name: String? = null,
val port: Int? = null, val port: Int? = null,
@@ -655,20 +726,13 @@ sealed class Listener {
val rule: String? = null, val rule: String? = null,
val proxy: String? = null, val proxy: String? = null,
val udp: Boolean? = null, val udp: Boolean? = null,
val users: List<User>? = null val users: List<User>? = null,
) : Listener() val certificate: String? = null,
val privateKey: String? = null
@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<User>? = null
) : Listener() ) : Listener()
@Serializable @Serializable
@SerialName("mixed")
data class MixedListener( data class MixedListener(
val name: String? = null, val name: String? = null,
val port: Int? = null, val port: Int? = null,
@@ -676,10 +740,13 @@ sealed class Listener {
val rule: String? = null, val rule: String? = null,
val proxy: String? = null, val proxy: String? = null,
val udp: Boolean? = null, val udp: Boolean? = null,
val users: List<User>? = null val users: List<User>? = null,
val certificate: String? = null,
val privateKey: String? = null
) : Listener() ) : Listener()
@Serializable @Serializable
@SerialName("redir")
data class RedirListener( data class RedirListener(
val name: String? = null, val name: String? = null,
val port: Int? = null, val port: Int? = null,
@@ -689,84 +756,18 @@ sealed class Listener {
) : Listener() ) : Listener()
@Serializable @Serializable
@SerialName("tproxy")
data class TProxyListener( data class TProxyListener(
val name: String? = null, val name: String? = null,
val port: Int? = null, val port: Int? = null,
val listen: String? = null, val listen: String? = null,
val rule: String? = null, val rule: String? = null,
val proxy: String? = null, val proxy: String? = null,
val udp: Boolean? = 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<VmessUser>? = 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<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()
@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<String>? = 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<VlessUser>? = null,
val wsPath: String? = null,
val certificate: String? = null,
val privateKey: String? = null,
val realityConfig: RealityConfig? = null
) : Listener() ) : Listener()
@Serializable @Serializable
@SerialName("tun")
data class TunListener( data class TunListener(
val name: String? = null, val name: String? = null,
val stack: String? = null, val stack: String? = null,
@@ -790,6 +791,101 @@ sealed class Listener {
val includePackage: List<String>? = null, val includePackage: List<String>? = null,
val excludePackage: List<String>? = null val excludePackage: List<String>? = null
) : Listener() ) : 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<VmessUser>? = 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<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()
@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<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()
@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<String>? = 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<VlessUser>? = null,
val wsPath: String? = null,
val certificate: String? = null,
val privateKey: String? = null,
val realityConfig: RealityConfig? = null
) : Listener()
} }
@Serializable @Serializable