1452 lines
45 KiB
Kotlin
1452 lines
45 KiB
Kotlin
import kotlinx.serialization.SerialName
|
|
import kotlinx.serialization.Serializable
|
|
|
|
@Serializable
|
|
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,
|
|
|
|
// 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 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 proxyGroups: List<ProxyGroup>? = null,
|
|
val proxyProviders: Map<String, ProxyProvider>? = null,
|
|
val ruleProviders: Map<String, RuleProvider>? = null,
|
|
val rules: List<String>? = null,
|
|
val subRules: Map<String, List<String>>? = null,
|
|
)
|
|
|
|
@Serializable
|
|
data class GeoXUrl(
|
|
val geoip: String? = null, val geosite: String? = null, val mmdb: String? = null, val asn: String? = null
|
|
)
|
|
|
|
@Serializable
|
|
data class TLS(
|
|
val certificate: String? = null, val privateKey: String? = null, val customCertifactes: List<String>? = null
|
|
)
|
|
|
|
@Serializable
|
|
data class ExternalControllerCors(
|
|
val allowOrigins: List<String>? = null, val allowPrivateNetwork: Boolean? = null
|
|
)
|
|
|
|
@Serializable
|
|
data class Experimental(
|
|
val quicGoDisableGso: Boolean? = null
|
|
)
|
|
|
|
@Serializable
|
|
data class Profile(
|
|
val storeSelected: Boolean? = null, val storeFakeIp: Boolean? = null
|
|
)
|
|
|
|
@Serializable
|
|
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
|
|
)
|
|
|
|
@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<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
|
|
)
|
|
|
|
@Serializable
|
|
data class Sniff(
|
|
val QUIC: SniffQUIC? = null, val TLS: SniffTLS? = null, val HTTP: SniffHTTP? = null
|
|
)
|
|
|
|
@Serializable
|
|
data class SniffQUIC(
|
|
val ports: List<Int>? = null
|
|
)
|
|
|
|
@Serializable
|
|
data class SniffTLS(
|
|
val ports: List<Int>? = null
|
|
)
|
|
|
|
@Serializable
|
|
data class SniffHTTP(
|
|
val ports: List<Int>? = null, val overrideDestination: Boolean? = null
|
|
)
|
|
|
|
@Serializable
|
|
sealed class Tunnel {
|
|
@Serializable
|
|
data class InlineTunnel(
|
|
val network: String? = null, val address: String? = null, val target: String? = null, val proxy: String? = null
|
|
) : Tunnel()
|
|
|
|
@Serializable
|
|
data class FullTunnel(
|
|
val network: List<String>? = null,
|
|
val address: String? = null,
|
|
val target: String? = null,
|
|
val proxy: String? = null
|
|
) : Tunnel()
|
|
}
|
|
|
|
@Serializable
|
|
data class DNS(
|
|
val cacheAlgorithm: String? = null,
|
|
val enable: Boolean? = null,
|
|
val preferH3: Boolean? = null,
|
|
val listen: String? = null,
|
|
val ipv6: Boolean? = null,
|
|
val ipv6Timeout: Int? = null,
|
|
val defaultNameserver: List<String>? = null,
|
|
val enhancedMode: String? = null,
|
|
val fakeIpRange: String? = null,
|
|
val fakeIpFilter: List<String>? = null,
|
|
val fakeIpFilterMode: String? = null,
|
|
val useHosts: Boolean? = null,
|
|
val useSystemHosts: Boolean? = null,
|
|
val respectRules: Boolean? = null,
|
|
val nameserver: List<String>? = null,
|
|
val fallback: List<String>? = null,
|
|
val proxyServerNameserver: List<String>? = null,
|
|
val directNameserver: List<String>? = null,
|
|
val directNameserverFollowPolicy: Boolean? = null,
|
|
val fallbackFilter: FallbackFilter? = null,
|
|
val nameserverPolicy: Map<String, List<String>>? = null
|
|
)
|
|
|
|
@Serializable
|
|
data class FallbackFilter(
|
|
val geoip: Boolean? = null,
|
|
val geoipCode: String? = null,
|
|
val geosite: List<String>? = null,
|
|
val ipcidr: 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
|
|
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?
|
|
|
|
@Serializable
|
|
@SerialName("direct")
|
|
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()
|
|
|
|
@Serializable
|
|
@SerialName("reject")
|
|
data class RejectProxy(
|
|
val name: String? = null,
|
|
)
|
|
|
|
|
|
@Serializable
|
|
@SerialName("dns")
|
|
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()
|
|
|
|
@Serializable
|
|
@SerialName("http")
|
|
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()
|
|
|
|
@Serializable
|
|
@SerialName("hysteria")
|
|
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()
|
|
|
|
@Serializable
|
|
@SerialName("hysteria2")
|
|
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,
|
|
|
|
// quic-go special config
|
|
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()
|
|
|
|
@Serializable
|
|
@SerialName("mieru")
|
|
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()
|
|
|
|
@Serializable
|
|
@SerialName("ss")
|
|
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,
|
|
// TODO:
|
|
// val pluginOpts: Map<String, @Contextual 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()
|
|
|
|
@Serializable
|
|
@SerialName("ssr")
|
|
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()
|
|
|
|
@Serializable
|
|
@SerialName("snell")
|
|
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,
|
|
// TODO:
|
|
// val obfsOpts: Map<String, @Contextual Any>? = 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()
|
|
|
|
@Serializable
|
|
@SerialName("socks5")
|
|
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()
|
|
|
|
@Serializable
|
|
@SerialName("ssh")
|
|
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()
|
|
|
|
@Serializable
|
|
@SerialName("trojan")
|
|
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()
|
|
|
|
@Serializable
|
|
@SerialName("tuic")
|
|
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()
|
|
|
|
@Serializable
|
|
@SerialName("vless")
|
|
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()
|
|
|
|
@Serializable
|
|
@SerialName("vmess")
|
|
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()
|
|
|
|
@Serializable
|
|
@SerialName("wireguard")
|
|
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()
|
|
|
|
@Serializable
|
|
data class RealityOptions(
|
|
val publicKey: String? = null,
|
|
val shortID: String? = null,
|
|
)
|
|
|
|
@Serializable
|
|
data class GrpcOptions(
|
|
val grpcServiceName: String? = null,
|
|
)
|
|
|
|
@Serializable
|
|
data class HTTPOptions(
|
|
val method: String? = null,
|
|
val path: List<String>? = null,
|
|
val headers: Map<String, List<String>>? = null,
|
|
)
|
|
|
|
@Serializable
|
|
data class HTTP2Options(
|
|
val host: List<String>? = null,
|
|
val path: String? = null,
|
|
)
|
|
|
|
@Serializable
|
|
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,
|
|
)
|
|
|
|
@Serializable
|
|
data class TrojanSSOption(
|
|
val enabled: Boolean? = null,
|
|
val method: String? = null,
|
|
val password: String? = null,
|
|
)
|
|
|
|
@Serializable
|
|
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,
|
|
)
|
|
|
|
@Serializable
|
|
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,
|
|
)
|
|
|
|
@Serializable
|
|
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,
|
|
)
|
|
|
|
@Serializable
|
|
data class BrutalOption(
|
|
val enabled: Boolean? = null,
|
|
val up: String? = null,
|
|
val down: String? = null,
|
|
)
|
|
}
|
|
|
|
|
|
@Serializable
|
|
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
|
|
) {
|
|
@Serializable
|
|
data class BruteOpts(
|
|
val enabled: Boolean? = null, val up: Int? = null, val down: Int? = null
|
|
)
|
|
}
|
|
|
|
@Serializable
|
|
sealed class ProxyGroup {
|
|
@Serializable
|
|
data class RelayGroup(
|
|
val name: String? = null, val proxies: List<String>? = null, val type: String? = null
|
|
) : ProxyGroup()
|
|
|
|
@Serializable
|
|
data class UrlTestGroup(
|
|
val name: String? = null,
|
|
val proxies: List<String>? = null,
|
|
val url: String? = null,
|
|
val interval: Int? = null,
|
|
val tolerance: Int? = null,
|
|
val lazy: Boolean? = null,
|
|
val expectedStatus: Int? = null,
|
|
val type: String? = null
|
|
) : ProxyGroup()
|
|
|
|
@Serializable
|
|
data class FallbackGroup(
|
|
val name: String? = null,
|
|
val proxies: List<String>? = null,
|
|
val url: String? = null,
|
|
val interval: Int? = null,
|
|
val type: String? = null
|
|
) : ProxyGroup()
|
|
|
|
@Serializable
|
|
data class LoadBalanceGroup(
|
|
val name: String? = null,
|
|
val proxies: List<String>? = null,
|
|
val url: String? = null,
|
|
val interval: Int? = null,
|
|
val strategy: String? = null,
|
|
val type: String? = null
|
|
) : ProxyGroup()
|
|
|
|
@Serializable
|
|
data class SelectGroup(
|
|
val name: String? = null,
|
|
val proxies: List<String>? = null,
|
|
val disableUdp: Boolean? = null,
|
|
val type: String? = null
|
|
) : ProxyGroup()
|
|
|
|
@Serializable
|
|
data class InterfaceGroup(
|
|
val name: String? = null,
|
|
val interfaceName: String? = null,
|
|
val routingMark: Int? = null,
|
|
val proxies: List<String>? = null,
|
|
val type: String? = null
|
|
) : ProxyGroup()
|
|
|
|
@Serializable
|
|
data class UseProviderGroup(
|
|
val name: String? = null,
|
|
val filter: String? = null,
|
|
val use: List<String>? = null,
|
|
val proxies: List<String>? = null,
|
|
val type: String? = null
|
|
) : 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()
|
|
}
|
|
|
|
@Serializable
|
|
sealed class RuleProvider {
|
|
@Serializable
|
|
data class HttpRuleProvider(
|
|
val behavior: String? = null,
|
|
val interval: Int? = null,
|
|
val path: String? = null,
|
|
val type: String? = null,
|
|
val url: String? = null,
|
|
val proxy: String? = null,
|
|
val sizeLimit: Int? = null
|
|
) : RuleProvider()
|
|
|
|
@Serializable
|
|
data class FileRuleProvider(
|
|
val behavior: String? = null, val interval: Int? = null, val path: String? = null, val type: String? = null
|
|
) : RuleProvider()
|
|
|
|
@Serializable
|
|
data class MrsRuleProvider(
|
|
val type: String? = null,
|
|
val url: String? = null,
|
|
val format: String? = null,
|
|
val behavior: String? = null,
|
|
val path: String? = null
|
|
) : RuleProvider()
|
|
|
|
@Serializable
|
|
data class InlineRuleProvider(
|
|
val type: String? = null, val behavior: String? = null, val payload: List<String>? = null
|
|
) : RuleProvider()
|
|
}
|
|
|
|
@Serializable
|
|
data class Header(
|
|
val userAgent: List<String>? = null, val accept: List<String>? = null, val authorization: List<String>? = null
|
|
)
|
|
|
|
@Serializable
|
|
data class HealthCheck(
|
|
val enable: Boolean? = null,
|
|
val interval: Int? = null,
|
|
val lazy: Boolean? = null,
|
|
val url: String? = null,
|
|
val expectedStatus: Int? = null
|
|
)
|
|
|
|
@Serializable
|
|
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
|
|
)
|
|
|
|
@Serializable
|
|
data class ProxyName(
|
|
val pattern: String? = null, val target: String? = null
|
|
)
|
|
|
|
@Serializable
|
|
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
|
|
)
|
|
|
|
@Serializable
|
|
sealed class Listener {
|
|
abstract val name: String?
|
|
abstract val port: Int?
|
|
abstract val listen: String?
|
|
abstract val rule: String?
|
|
abstract val proxy: String?
|
|
|
|
@Serializable
|
|
@SerialName("http")
|
|
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()
|
|
|
|
@Serializable
|
|
@SerialName("socks")
|
|
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()
|
|
|
|
@Serializable
|
|
@SerialName("mixed")
|
|
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()
|
|
|
|
@Serializable
|
|
@SerialName("redir")
|
|
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()
|
|
|
|
@Serializable
|
|
@SerialName("tproxy")
|
|
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()
|
|
|
|
@Serializable
|
|
@SerialName("tun")
|
|
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()
|
|
|
|
@Serializable
|
|
@SerialName("shadowsocks")
|
|
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()
|
|
|
|
@Serializable
|
|
@SerialName("vmess")
|
|
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()
|
|
|
|
@Serializable
|
|
@SerialName("tuic")
|
|
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()
|
|
|
|
@Serializable
|
|
@SerialName("hysteria2")
|
|
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()
|
|
|
|
@Serializable
|
|
@SerialName("tunnel")
|
|
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()
|
|
|
|
@Serializable
|
|
@SerialName("vless")
|
|
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()
|
|
}
|
|
|
|
@Serializable
|
|
data class User(
|
|
val username: String? = null, val password: String? = null
|
|
)
|
|
|
|
@Serializable
|
|
data class VmessUser(
|
|
val username: String? = null, val uuid: String? = null, val alterId: Int? = null
|
|
)
|
|
|
|
@Serializable
|
|
data class VlessUser(
|
|
val username: String? = null, val uuid: String? = null, val flow: String? = null
|
|
)
|
|
|
|
@Serializable
|
|
data class RealityConfig(
|
|
val dest: String? = null,
|
|
val privateKey: String? = null,
|
|
val shortId: List<String>? = null,
|
|
val serverNames: List<String>? = null
|
|
)
|
|
|
|
@Serializable
|
|
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
|
|
) |