From f9e79018d85d5a49e2680f6792e1a6d31d4877f3 Mon Sep 17 00:00:00 2001 From: Cp0204 Date: Mon, 27 Mar 2023 21:53:52 +0800 Subject: [PATCH] update: Support TCP-HTTP sub rules --- app/Http/Controllers/Client/Protocols/Clash.php | 5 +++++ app/Http/Controllers/Client/Protocols/ClashMeta.php | 5 +++++ app/Http/Controllers/Client/Protocols/General.php | 5 +++++ app/Http/Controllers/Client/Protocols/Passwall.php | 5 +++++ app/Http/Controllers/Client/Protocols/SagerNet.php | 5 +++++ app/Http/Controllers/Client/Protocols/Shadowrocket.php | 9 +++++++++ app/Http/Controllers/Client/Protocols/Stash.php | 5 +++++ app/Http/Controllers/Client/Protocols/V2rayN.php | 5 +++++ app/Http/Controllers/Client/Protocols/V2rayNG.php | 5 +++++ 9 files changed, 49 insertions(+) diff --git a/app/Http/Controllers/Client/Protocols/Clash.php b/app/Http/Controllers/Client/Protocols/Clash.php index 0a2ab6e5..53a0fdc2 100644 --- a/app/Http/Controllers/Client/Protocols/Clash.php +++ b/app/Http/Controllers/Client/Protocols/Clash.php @@ -129,6 +129,11 @@ class Clash $array['servername'] = $tlsSettings['serverName']; } } + if ($server['network'] === 'tcp') { + $tcpSettings = $server['networkSettings']; + if (isset($tcpSettings['header']['type'])) $array['network'] = $tcpSettings['header']['type']; + if (isset($tcpSettings['header']['request']['path'][0])) $array['http-opts']['path'] = $tcpSettings['header']['request']['path'][0]; + } if ($server['network'] === 'ws') { $array['network'] = 'ws'; if ($server['networkSettings']) { diff --git a/app/Http/Controllers/Client/Protocols/ClashMeta.php b/app/Http/Controllers/Client/Protocols/ClashMeta.php index 0348f6cb..070f9eec 100644 --- a/app/Http/Controllers/Client/Protocols/ClashMeta.php +++ b/app/Http/Controllers/Client/Protocols/ClashMeta.php @@ -128,6 +128,11 @@ class ClashMeta $array['servername'] = $tlsSettings['serverName']; } } + if ($server['network'] === 'tcp') { + $tcpSettings = $server['networkSettings']; + if (isset($tcpSettings['header']['type'])) $array['network'] = $tcpSettings['header']['type']; + if (isset($tcpSettings['header']['request']['path'][0])) $array['http-opts']['path'] = $tcpSettings['header']['request']['path'][0]; + } if ($server['network'] === 'ws') { $array['network'] = 'ws'; if ($server['networkSettings']) { diff --git a/app/Http/Controllers/Client/Protocols/General.php b/app/Http/Controllers/Client/Protocols/General.php index d7c641e2..8cc20582 100644 --- a/app/Http/Controllers/Client/Protocols/General.php +++ b/app/Http/Controllers/Client/Protocols/General.php @@ -80,6 +80,11 @@ class General $config['sni'] = $tlsSettings['serverName']; } } + if ((string)$server['network'] === 'tcp') { + $tcpSettings = $server['networkSettings']; + if (isset($tcpSettings['header']['type'])) $config['type'] = $tcpSettings['header']['type']; + if (isset($tcpSettings['header']['request']['path'][0])) $config['path'] = $tcpSettings['header']['request']['path'][0]; + } if ((string)$server['network'] === 'ws') { $wsSettings = $server['networkSettings']; if (isset($wsSettings['path'])) $config['path'] = $wsSettings['path']; diff --git a/app/Http/Controllers/Client/Protocols/Passwall.php b/app/Http/Controllers/Client/Protocols/Passwall.php index 25a42dd1..38c3e320 100644 --- a/app/Http/Controllers/Client/Protocols/Passwall.php +++ b/app/Http/Controllers/Client/Protocols/Passwall.php @@ -68,6 +68,11 @@ class Passwall $config['sni'] = $tlsSettings['serverName']; } } + if ((string)$server['network'] === 'tcp') { + $tcpSettings = $server['networkSettings']; + if (isset($tcpSettings['header']['type'])) $config['type'] = $tcpSettings['header']['type']; + if (isset($tcpSettings['header']['request']['path'][0])) $config['path'] = $tcpSettings['header']['request']['path'][0]; + } if ((string)$server['network'] === 'ws') { $wsSettings = $server['networkSettings']; if (isset($wsSettings['path'])) $config['path'] = $wsSettings['path']; diff --git a/app/Http/Controllers/Client/Protocols/SagerNet.php b/app/Http/Controllers/Client/Protocols/SagerNet.php index 1a6aa819..dba43b3e 100644 --- a/app/Http/Controllers/Client/Protocols/SagerNet.php +++ b/app/Http/Controllers/Client/Protocols/SagerNet.php @@ -72,6 +72,11 @@ class SagerNet $config['sni'] = urlencode($tlsSettings['serverName']); } } + if ((string)$server['network'] === 'tcp') { + $tcpSettings = $server['networkSettings']; + if (isset($tcpSettings['header']['type'])) $config['type'] = $tcpSettings['header']['type']; + if (isset($tcpSettings['header']['request']['path'][0])) $config['path'] = $tcpSettings['header']['request']['path'][0]; + } if ((string)$server['network'] === 'ws') { $wsSettings = $server['networkSettings']; if (isset($wsSettings['path'])) $config['path'] = $wsSettings['path']; diff --git a/app/Http/Controllers/Client/Protocols/Shadowrocket.php b/app/Http/Controllers/Client/Protocols/Shadowrocket.php index 31425863..42ffc133 100644 --- a/app/Http/Controllers/Client/Protocols/Shadowrocket.php +++ b/app/Http/Controllers/Client/Protocols/Shadowrocket.php @@ -82,6 +82,15 @@ class Shadowrocket $config['peer'] = $tlsSettings['serverName']; } } + if ($server['network'] === 'tcp') { + if ($server['networkSettings']) { + $tcpSettings = $server['networkSettings']; + if (isset($tcpSettings['header']['type']) && !empty($tcpSettings['header']['type'])) + $config['obfs'] = $tcpSettings['header']['type']; + if (isset($tcpSettings['header']['request']['path'][0]) && !empty($tcpSettings['header']['request']['path'][0])) + $config['path'] = $tcpSettings['header']['request']['path'][0]; + } + } if ($server['network'] === 'ws') { $config['obfs'] = "websocket"; if ($server['networkSettings']) { diff --git a/app/Http/Controllers/Client/Protocols/Stash.php b/app/Http/Controllers/Client/Protocols/Stash.php index 1dc3ab06..b7073215 100644 --- a/app/Http/Controllers/Client/Protocols/Stash.php +++ b/app/Http/Controllers/Client/Protocols/Stash.php @@ -125,6 +125,11 @@ class Stash $array['servername'] = $tlsSettings['serverName']; } } + if ($server['network'] === 'tcp') { + $tcpSettings = $server['networkSettings']; + if (isset($tcpSettings['header']['type'])) $array['network'] = $tcpSettings['header']['type']; + if (isset($tcpSettings['header']['request']['path'][0])) $array['http-opts']['path'] = $tcpSettings['header']['request']['path'][0]; + } if ($server['network'] === 'ws') { $array['network'] = 'ws'; if ($server['networkSettings']) { diff --git a/app/Http/Controllers/Client/Protocols/V2rayN.php b/app/Http/Controllers/Client/Protocols/V2rayN.php index d71b4e0d..08d4b2de 100644 --- a/app/Http/Controllers/Client/Protocols/V2rayN.php +++ b/app/Http/Controllers/Client/Protocols/V2rayN.php @@ -80,6 +80,11 @@ class V2rayN $config['sni'] = $tlsSettings['serverName']; } } + if ((string)$server['network'] === 'tcp') { + $tcpSettings = $server['networkSettings']; + if (isset($tcpSettings['header']['type'])) $config['type'] = $tcpSettings['header']['type']; + if (isset($tcpSettings['header']['request']['path'][0])) $config['path'] = $tcpSettings['header']['request']['path'][0]; + } if ((string)$server['network'] === 'ws') { $wsSettings = $server['networkSettings']; if (isset($wsSettings['path'])) $config['path'] = $wsSettings['path']; diff --git a/app/Http/Controllers/Client/Protocols/V2rayNG.php b/app/Http/Controllers/Client/Protocols/V2rayNG.php index 0be4005f..90e2d165 100644 --- a/app/Http/Controllers/Client/Protocols/V2rayNG.php +++ b/app/Http/Controllers/Client/Protocols/V2rayNG.php @@ -68,6 +68,11 @@ class V2rayNG $config['sni'] = $tlsSettings['serverName']; } } + if ((string)$server['network'] === 'tcp') { + $tcpSettings = $server['networkSettings']; + if (isset($tcpSettings['header']['type'])) $config['type'] = $tcpSettings['header']['type']; + if (isset($tcpSettings['header']['request']['path'][0])) $config['path'] = $tcpSettings['header']['request']['path'][0]; + } if ((string)$server['network'] === 'ws') { $wsSettings = $server['networkSettings']; if (isset($wsSettings['path'])) $config['path'] = $wsSettings['path'];