diff --git a/app/src/main/java/io/nekohasekai/sagernet/bg/proto/BoxInstance.kt b/app/src/main/java/io/nekohasekai/sagernet/bg/proto/BoxInstance.kt index f94d168..6cd54cd 100644 --- a/app/src/main/java/io/nekohasekai/sagernet/bg/proto/BoxInstance.kt +++ b/app/src/main/java/io/nekohasekai/sagernet/bg/proto/BoxInstance.kt @@ -9,7 +9,7 @@ import io.nekohasekai.sagernet.database.ProxyEntity import io.nekohasekai.sagernet.fmt.ConfigBuildResult import io.nekohasekai.sagernet.fmt.buildConfig import io.nekohasekai.sagernet.fmt.hysteria.HysteriaBean -import io.nekohasekai.sagernet.fmt.hysteria.buildHysteriaConfig +import io.nekohasekai.sagernet.fmt.hysteria.buildHysteria1Config import io.nekohasekai.sagernet.fmt.naive.NaiveBean import io.nekohasekai.sagernet.fmt.naive.buildNaiveConfig import io.nekohasekai.sagernet.fmt.trojan_go.TrojanGoBean @@ -75,7 +75,7 @@ abstract class BoxInstance( is HysteriaBean -> { initPlugin("hysteria-plugin") - pluginConfigs[port] = profile.type to bean.buildHysteriaConfig(port) { + pluginConfigs[port] = profile.type to bean.buildHysteria1Config(port) { File( app.cacheDir, "hysteria_" + SystemClock.elapsedRealtime() + ".ca" ).apply { diff --git a/app/src/main/java/io/nekohasekai/sagernet/database/ProxyEntity.kt b/app/src/main/java/io/nekohasekai/sagernet/database/ProxyEntity.kt index 8c3fc74..fde609c 100644 --- a/app/src/main/java/io/nekohasekai/sagernet/database/ProxyEntity.kt +++ b/app/src/main/java/io/nekohasekai/sagernet/database/ProxyEntity.kt @@ -278,7 +278,7 @@ data class ProxyEntity( is HysteriaBean -> { append("\n\n") - append(bean.buildHysteriaConfig(port, null)) + append(bean.buildHysteria1Config(port, null)) } is TuicBean -> { diff --git a/app/src/main/java/io/nekohasekai/sagernet/fmt/hysteria/HysteriaFmt.kt b/app/src/main/java/io/nekohasekai/sagernet/fmt/hysteria/HysteriaFmt.kt index 08dbb61..ec3e49c 100644 --- a/app/src/main/java/io/nekohasekai/sagernet/fmt/hysteria/HysteriaFmt.kt +++ b/app/src/main/java/io/nekohasekai/sagernet/fmt/hysteria/HysteriaFmt.kt @@ -11,10 +11,7 @@ import java.io.File // hysteria://host:port?auth=123456&peer=sni.domain&insecure=1|0&upmbps=100&downmbps=100&alpn=hysteria&obfs=xplus&obfsParam=123456#remarks -fun parseHysteria(url: String): HysteriaBean { - if (url.startsWith("hysteria2:") || url.startsWith("hy2:")) { - return parseHysteria2(url) - } +fun parseHysteria1(url: String): HysteriaBean { val link = url.replace("hysteria://", "https://").toHttpUrlOrNull() ?: error( "invalid hysteria link $url" ) @@ -167,7 +164,7 @@ fun HysteriaBean.toUri(): String { return builder.toLink(if (protocolVersion == 2) "hy2" else "hysteria") } -fun JSONObject.parseHysteria(): HysteriaBean { +fun JSONObject.parseHysteria1Json(): HysteriaBean { // TODO parse HY2 JSON+YAML return HysteriaBean().apply { protocolVersion = 1 @@ -205,7 +202,7 @@ fun JSONObject.parseHysteria(): HysteriaBean { } } -fun HysteriaBean.buildHysteriaConfig(port: Int, cacheFile: (() -> File)?): String { +fun HysteriaBean.buildHysteria1Config(port: Int, cacheFile: (() -> File)?): String { if (protocolVersion != 1) { throw Exception("error version: $protocolVersion") } diff --git a/app/src/main/java/io/nekohasekai/sagernet/group/RawUpdater.kt b/app/src/main/java/io/nekohasekai/sagernet/group/RawUpdater.kt index f0c457f..7c145f5 100644 --- a/app/src/main/java/io/nekohasekai/sagernet/group/RawUpdater.kt +++ b/app/src/main/java/io/nekohasekai/sagernet/group/RawUpdater.kt @@ -7,7 +7,7 @@ import io.nekohasekai.sagernet.database.* import io.nekohasekai.sagernet.fmt.AbstractBean import io.nekohasekai.sagernet.fmt.http.HttpBean import io.nekohasekai.sagernet.fmt.hysteria.HysteriaBean -import io.nekohasekai.sagernet.fmt.hysteria.parseHysteria +import io.nekohasekai.sagernet.fmt.hysteria.parseHysteria1Json import io.nekohasekai.sagernet.fmt.shadowsocks.ShadowsocksBean import io.nekohasekai.sagernet.fmt.shadowsocks.parseShadowsocks import io.nekohasekai.sagernet.fmt.socks.SOCKSBean @@ -465,6 +465,7 @@ object RawUpdater : GroupUpdater() { "hysteria" -> { val bean = HysteriaBean() + bean.protocolVersion = 1 var hopPorts = "" for (opt in proxy) { if (opt.value == null) continue @@ -666,7 +667,7 @@ object RawUpdater : GroupUpdater() { if (json is JSONObject) { when { json.has("server") && (json.has("up") || json.has("up_mbps")) -> { - return listOf(json.parseHysteria()) + return listOf(json.parseHysteria1Json()) } json.has("method") -> { diff --git a/app/src/main/java/io/nekohasekai/sagernet/ktx/Formats.kt b/app/src/main/java/io/nekohasekai/sagernet/ktx/Formats.kt index 1764c5b..8f7a9b4 100644 --- a/app/src/main/java/io/nekohasekai/sagernet/ktx/Formats.kt +++ b/app/src/main/java/io/nekohasekai/sagernet/ktx/Formats.kt @@ -4,7 +4,8 @@ import com.google.gson.JsonParser import io.nekohasekai.sagernet.fmt.AbstractBean import io.nekohasekai.sagernet.fmt.Serializable import io.nekohasekai.sagernet.fmt.http.parseHttp -import io.nekohasekai.sagernet.fmt.hysteria.parseHysteria +import io.nekohasekai.sagernet.fmt.hysteria.parseHysteria1 +import io.nekohasekai.sagernet.fmt.hysteria.parseHysteria2 import io.nekohasekai.sagernet.fmt.naive.parseNaive import io.nekohasekai.sagernet.fmt.parseUniversal import io.nekohasekai.sagernet.fmt.shadowsocks.parseShadowsocks @@ -181,10 +182,17 @@ suspend fun parseProxies(text: String): List { }.onFailure { Logs.w(it) } - } else if (startsWith("hysteria://") || startsWith("hysteria2://") || startsWith("hy2://")) { - Logs.d("Try parse hysteria link: $this") + } else if (startsWith("hysteria://")) { + Logs.d("Try parse hysteria1 link: $this") runCatching { - entities.add(parseHysteria(this)) + entities.add(parseHysteria1(this)) + }.onFailure { + Logs.w(it) + } + } else if (startsWith("hysteria2://") || startsWith("hy2://")) { + Logs.d("Try parse hysteria2 link: $this") + runCatching { + entities.add(parseHysteria2(this)) }.onFailure { Logs.w(it) }