From e16618142a138e11b267d143fda7897ed25000e7 Mon Sep 17 00:00:00 2001 From: xboard Date: Wed, 13 Dec 2023 00:08:39 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E5=A2=9E=E5=8A=A0Loon=E8=87=AA?= =?UTF-8?q?=E5=8A=A8=E4=B8=8B=E5=8F=91Hysteria2=E8=8A=82=E7=82=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../V1/Client/ClientController.php | 3 ++- app/Protocols/Loon.php | 24 +++++++++++++++++++ 2 files changed, 26 insertions(+), 1 deletion(-) diff --git a/app/Http/Controllers/V1/Client/ClientController.php b/app/Http/Controllers/V1/Client/ClientController.php index 4711c09..7a2c077 100644 --- a/app/Http/Controllers/V1/Client/ClientController.php +++ b/app/Http/Controllers/V1/Client/ClientController.php @@ -42,7 +42,8 @@ class ClientController extends Controller 'Nekoray' => '3.24', 'verge' => '1.3.8', 'ClashX Meta' => '1.3.5', - 'Hiddify' => '0.1.0' + 'Hiddify' => '0.1.0', + 'loon' => '637' ]; foreach($minSupportHy2ClinetVersionMap as $client => $minVersion){ if (stripos($flag, $client) !== false && $this->versionCompare($version, $minVersion)) { diff --git a/app/Protocols/Loon.php b/app/Protocols/Loon.php index 5aae24f..20cba66 100644 --- a/app/Protocols/Loon.php +++ b/app/Protocols/Loon.php @@ -38,6 +38,9 @@ class Loon if ($item['type'] === 'trojan') { $uri .= self::buildTrojan($user['uuid'], $item); } + if ($item['type'] === 'hysteria') { + $uri .= self::buildHysteria($user['uuid'], $item, $user); + } } return response($uri, 200) ->header('Subscription-Userinfo', "upload={$user['u']}; download={$user['d']}; total={$user['transfer_enable']}; expire={$user['expired_at']}"); @@ -132,4 +135,25 @@ class Loon $uri .= "\r\n"; return $uri; } + + public static function buildHysteria($password, $server, $user) + { + if ($server['version'] !== 2){ + return ; + } + $config = [ + "{$server['name']}=Hysteria2", + $server['host'], + $server['port'], + $password, + $server['server_name'] ? "tls={$server['server_name']}" : "(null)" + ]; + if ($server['insecure']) $config[] = "skip-cert-verify=true"; + $config[] = "download-bandwidth=" . ($user->speed_limit ? min($server['down_mbps'], $user->speed_limit) : $server['down_mbps']); + $config[] = "udp=true"; + $config = array_filter($config); + $uri = implode(',', $config); + $uri .= "\r\n"; + return $uri; + } }