From 0873ce591fca5801d56c2da0228da195e345269c Mon Sep 17 00:00:00 2001 From: George Date: Wed, 9 Oct 2024 15:17:45 +0800 Subject: [PATCH] [feat]: add v2rayNG hysteria2 support --- app/Protocols/V2rayNG.php | 32 ++++++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) diff --git a/app/Protocols/V2rayNG.php b/app/Protocols/V2rayNG.php index 7b1ba53..21f0554 100644 --- a/app/Protocols/V2rayNG.php +++ b/app/Protocols/V2rayNG.php @@ -34,6 +34,9 @@ class V2rayNG if ($item['type'] === 'vless') { $uri .= self::buildVless($user['uuid'], $item); } + if ($item['type'] === 'hysteria') { + $uri .= self::buildHysteria($user['uuid'], $item); + } } return base64_encode($uri); } @@ -190,5 +193,34 @@ class V2rayNG return $uri; } + public static function buildHysteria($password, $server) + { + $params = []; + // Return empty if version is not 2 + if ($server['version'] !== 2) { + return ''; + } + + if ($server['server_name']) { + $params['sni'] = $server['server_name']; + $params['security'] = 'tls'; + } + + if ($server['is_obfs']) { + $params['obfs'] = 'salamander'; + $params['obfs-password'] = $server['server_key']; + } + + $params['insecure'] = $server['insecure'] ? 1 : 0; + + $query = http_build_query($params); + $name = rawurlencode($server['name']); + + $uri = "hysteria2://{$password}@{$server['host']}:{$server['port']}?{$query}#{$name}"; + $uri .= "\r\n"; + + return $uri; + } + }