mirror of
https://github.com/MatsuriDayo/NekoBoxForAndroid.git
synced 2025-12-19 22:50:05 +08:00
Fix hysteria subscription
This commit is contained in:
parent
fea54375d3
commit
02da17bea6
@ -9,7 +9,7 @@ import io.nekohasekai.sagernet.database.ProxyEntity
|
|||||||
import io.nekohasekai.sagernet.fmt.ConfigBuildResult
|
import io.nekohasekai.sagernet.fmt.ConfigBuildResult
|
||||||
import io.nekohasekai.sagernet.fmt.buildConfig
|
import io.nekohasekai.sagernet.fmt.buildConfig
|
||||||
import io.nekohasekai.sagernet.fmt.hysteria.HysteriaBean
|
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.NaiveBean
|
||||||
import io.nekohasekai.sagernet.fmt.naive.buildNaiveConfig
|
import io.nekohasekai.sagernet.fmt.naive.buildNaiveConfig
|
||||||
import io.nekohasekai.sagernet.fmt.trojan_go.TrojanGoBean
|
import io.nekohasekai.sagernet.fmt.trojan_go.TrojanGoBean
|
||||||
@ -75,7 +75,7 @@ abstract class BoxInstance(
|
|||||||
|
|
||||||
is HysteriaBean -> {
|
is HysteriaBean -> {
|
||||||
initPlugin("hysteria-plugin")
|
initPlugin("hysteria-plugin")
|
||||||
pluginConfigs[port] = profile.type to bean.buildHysteriaConfig(port) {
|
pluginConfigs[port] = profile.type to bean.buildHysteria1Config(port) {
|
||||||
File(
|
File(
|
||||||
app.cacheDir, "hysteria_" + SystemClock.elapsedRealtime() + ".ca"
|
app.cacheDir, "hysteria_" + SystemClock.elapsedRealtime() + ".ca"
|
||||||
).apply {
|
).apply {
|
||||||
|
|||||||
@ -278,7 +278,7 @@ data class ProxyEntity(
|
|||||||
|
|
||||||
is HysteriaBean -> {
|
is HysteriaBean -> {
|
||||||
append("\n\n")
|
append("\n\n")
|
||||||
append(bean.buildHysteriaConfig(port, null))
|
append(bean.buildHysteria1Config(port, null))
|
||||||
}
|
}
|
||||||
|
|
||||||
is TuicBean -> {
|
is TuicBean -> {
|
||||||
|
|||||||
@ -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
|
// 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 {
|
fun parseHysteria1(url: String): HysteriaBean {
|
||||||
if (url.startsWith("hysteria2:") || url.startsWith("hy2:")) {
|
|
||||||
return parseHysteria2(url)
|
|
||||||
}
|
|
||||||
val link = url.replace("hysteria://", "https://").toHttpUrlOrNull() ?: error(
|
val link = url.replace("hysteria://", "https://").toHttpUrlOrNull() ?: error(
|
||||||
"invalid hysteria link $url"
|
"invalid hysteria link $url"
|
||||||
)
|
)
|
||||||
@ -167,7 +164,7 @@ fun HysteriaBean.toUri(): String {
|
|||||||
return builder.toLink(if (protocolVersion == 2) "hy2" else "hysteria")
|
return builder.toLink(if (protocolVersion == 2) "hy2" else "hysteria")
|
||||||
}
|
}
|
||||||
|
|
||||||
fun JSONObject.parseHysteria(): HysteriaBean {
|
fun JSONObject.parseHysteria1Json(): HysteriaBean {
|
||||||
// TODO parse HY2 JSON+YAML
|
// TODO parse HY2 JSON+YAML
|
||||||
return HysteriaBean().apply {
|
return HysteriaBean().apply {
|
||||||
protocolVersion = 1
|
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) {
|
if (protocolVersion != 1) {
|
||||||
throw Exception("error version: $protocolVersion")
|
throw Exception("error version: $protocolVersion")
|
||||||
}
|
}
|
||||||
|
|||||||
@ -7,7 +7,7 @@ import io.nekohasekai.sagernet.database.*
|
|||||||
import io.nekohasekai.sagernet.fmt.AbstractBean
|
import io.nekohasekai.sagernet.fmt.AbstractBean
|
||||||
import io.nekohasekai.sagernet.fmt.http.HttpBean
|
import io.nekohasekai.sagernet.fmt.http.HttpBean
|
||||||
import io.nekohasekai.sagernet.fmt.hysteria.HysteriaBean
|
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.ShadowsocksBean
|
||||||
import io.nekohasekai.sagernet.fmt.shadowsocks.parseShadowsocks
|
import io.nekohasekai.sagernet.fmt.shadowsocks.parseShadowsocks
|
||||||
import io.nekohasekai.sagernet.fmt.socks.SOCKSBean
|
import io.nekohasekai.sagernet.fmt.socks.SOCKSBean
|
||||||
@ -465,6 +465,7 @@ object RawUpdater : GroupUpdater() {
|
|||||||
|
|
||||||
"hysteria" -> {
|
"hysteria" -> {
|
||||||
val bean = HysteriaBean()
|
val bean = HysteriaBean()
|
||||||
|
bean.protocolVersion = 1
|
||||||
var hopPorts = ""
|
var hopPorts = ""
|
||||||
for (opt in proxy) {
|
for (opt in proxy) {
|
||||||
if (opt.value == null) continue
|
if (opt.value == null) continue
|
||||||
@ -666,7 +667,7 @@ object RawUpdater : GroupUpdater() {
|
|||||||
if (json is JSONObject) {
|
if (json is JSONObject) {
|
||||||
when {
|
when {
|
||||||
json.has("server") && (json.has("up") || json.has("up_mbps")) -> {
|
json.has("server") && (json.has("up") || json.has("up_mbps")) -> {
|
||||||
return listOf(json.parseHysteria())
|
return listOf(json.parseHysteria1Json())
|
||||||
}
|
}
|
||||||
|
|
||||||
json.has("method") -> {
|
json.has("method") -> {
|
||||||
|
|||||||
@ -4,7 +4,8 @@ import com.google.gson.JsonParser
|
|||||||
import io.nekohasekai.sagernet.fmt.AbstractBean
|
import io.nekohasekai.sagernet.fmt.AbstractBean
|
||||||
import io.nekohasekai.sagernet.fmt.Serializable
|
import io.nekohasekai.sagernet.fmt.Serializable
|
||||||
import io.nekohasekai.sagernet.fmt.http.parseHttp
|
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.naive.parseNaive
|
||||||
import io.nekohasekai.sagernet.fmt.parseUniversal
|
import io.nekohasekai.sagernet.fmt.parseUniversal
|
||||||
import io.nekohasekai.sagernet.fmt.shadowsocks.parseShadowsocks
|
import io.nekohasekai.sagernet.fmt.shadowsocks.parseShadowsocks
|
||||||
@ -181,10 +182,17 @@ suspend fun parseProxies(text: String): List<AbstractBean> {
|
|||||||
}.onFailure {
|
}.onFailure {
|
||||||
Logs.w(it)
|
Logs.w(it)
|
||||||
}
|
}
|
||||||
} else if (startsWith("hysteria://") || startsWith("hysteria2://") || startsWith("hy2://")) {
|
} else if (startsWith("hysteria://")) {
|
||||||
Logs.d("Try parse hysteria link: $this")
|
Logs.d("Try parse hysteria1 link: $this")
|
||||||
runCatching {
|
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 {
|
}.onFailure {
|
||||||
Logs.w(it)
|
Logs.w(it)
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user