From e805fe7ab9cc67149a08416dfcf6d1b0f1a66641 Mon Sep 17 00:00:00 2001 From: Misaka-blog Date: Wed, 1 Nov 2023 10:41:15 +0800 Subject: [PATCH] feat: Add supports for HTTPUpgrade --- .../sagernet/fmt/v2ray/StandardV2RayBean.java | 11 ++++++++++- .../nekohasekai/sagernet/fmt/v2ray/V2RayFmt.kt | 18 ++++++++++++++++++ .../profile/StandardV2RaySettingsActivity.kt | 6 ++++++ .../java/moe/matsuri/nb4a/SingBoxOptions.java | 10 ++++++++++ app/src/main/res/values/arrays.xml | 1 + 5 files changed, 45 insertions(+), 1 deletion(-) diff --git a/app/src/main/java/io/nekohasekai/sagernet/fmt/v2ray/StandardV2RayBean.java b/app/src/main/java/io/nekohasekai/sagernet/fmt/v2ray/StandardV2RayBean.java index 00f1fdd..41f8eeb 100644 --- a/app/src/main/java/io/nekohasekai/sagernet/fmt/v2ray/StandardV2RayBean.java +++ b/app/src/main/java/io/nekohasekai/sagernet/fmt/v2ray/StandardV2RayBean.java @@ -14,7 +14,7 @@ public abstract class StandardV2RayBean extends AbstractBean { //////// End of VMess & VLESS //////// - // "V2Ray Transport" tcp/http/ws/quic/grpc + // "V2Ray Transport" tcp/http/ws/quic/grpc/httpupgrade public String type; public String host; @@ -133,6 +133,11 @@ public abstract class StandardV2RayBean extends AbstractBean { case "grpc": { output.writeString(path); } + case "httpupgrade": { + output.writeString(host); + output.writeString(path); + + } } output.writeString(security); @@ -180,6 +185,10 @@ public abstract class StandardV2RayBean extends AbstractBean { case "grpc": { path = input.readString(); } + case "httpupgrade": { + host = input.readString(); + path = input.readString(); + } } security = input.readString(); diff --git a/app/src/main/java/io/nekohasekai/sagernet/fmt/v2ray/V2RayFmt.kt b/app/src/main/java/io/nekohasekai/sagernet/fmt/v2ray/V2RayFmt.kt index 3abf518..8e935c1 100644 --- a/app/src/main/java/io/nekohasekai/sagernet/fmt/v2ray/V2RayFmt.kt +++ b/app/src/main/java/io/nekohasekai/sagernet/fmt/v2ray/V2RayFmt.kt @@ -116,6 +116,15 @@ fun parseV2Ray(link: String): StandardV2RayBean { bean.path = it } } + + "httpupgrade" -> { + url.queryParameter("path")?.let { + bean.path = it + } + url.queryParameter("host")?.let { + bean.host = it + } + } } } else { // also vless format @@ -215,6 +224,15 @@ fun StandardV2RayBean.parseDuckSoft(url: HttpUrl) { path = it } } + + "httpupgrade" -> { + url.queryParameter("host")?.let { + host = it + } + url.queryParameter("path")?.let { + path = it + } + } } // maybe from matsuri vmess exoprt diff --git a/app/src/main/java/io/nekohasekai/sagernet/ui/profile/StandardV2RaySettingsActivity.kt b/app/src/main/java/io/nekohasekai/sagernet/ui/profile/StandardV2RaySettingsActivity.kt index 40a39eb..ca9a14a 100644 --- a/app/src/main/java/io/nekohasekai/sagernet/ui/profile/StandardV2RaySettingsActivity.kt +++ b/app/src/main/java/io/nekohasekai/sagernet/ui/profile/StandardV2RaySettingsActivity.kt @@ -170,6 +170,12 @@ abstract class StandardV2RaySettingsActivity : ProfileSettingsActivity { + host.preference.setTitle("HTTPUpgrade Host") + path.preference.setTitle("HTTPUpgrade Path") + host.preference.isVisible = true + path.preference.isVisible = true + } } } diff --git a/app/src/main/java/moe/matsuri/nb4a/SingBoxOptions.java b/app/src/main/java/moe/matsuri/nb4a/SingBoxOptions.java index 3663524..38d3232 100644 --- a/app/src/main/java/moe/matsuri/nb4a/SingBoxOptions.java +++ b/app/src/main/java/moe/matsuri/nb4a/SingBoxOptions.java @@ -2447,6 +2447,16 @@ public class SingBoxOptions { } + public static class V2RayHTTPUpgradeOptions extends SingBoxOption { + + public String host; + + public String path; + + public Map headers; + + } + public static class VLESSInboundOptions extends SingBoxOption { // Generate note: nested type ListenOptions diff --git a/app/src/main/res/values/arrays.xml b/app/src/main/res/values/arrays.xml index 12ee17c..92b812d 100644 --- a/app/src/main/res/values/arrays.xml +++ b/app/src/main/res/values/arrays.xml @@ -263,6 +263,7 @@ http quic grpc + httpupgrade