4 Commits fbcab5bc52 ... 77edea5419

Autor SHA1 Mensaje Fecha
  mhsanaei 77edea5419 v2.4.1 hace 3 días
  mhsanaei 521870df0a minor changes hace 3 días
  mhsanaei dc1c1eb998 Xray Core v24.9.16 hace 3 días
  mhsanaei e78427245a New - splithttp (xmux) hace 3 días

+ 1 - 1
.github/workflows/release.yml

@@ -83,7 +83,7 @@ jobs:
           cd x-ui/bin
           
           # Download dependencies
-          Xray_URL="https://github.com/XTLS/Xray-core/releases/download/v24.9.7/"
+          Xray_URL="https://github.com/XTLS/Xray-core/releases/download/v24.9.16/"
           if [ "${{ matrix.platform }}" == "amd64" ]; then
             wget ${Xray_URL}Xray-linux-64.zip
             unzip Xray-linux-64.zip

+ 1 - 1
DockerInit.sh

@@ -27,7 +27,7 @@ case $1 in
 esac
 mkdir -p build/bin
 cd build/bin
-wget "https://github.com/XTLS/Xray-core/releases/download/v24.9.7/Xray-linux-${ARCH}.zip"
+wget "https://github.com/XTLS/Xray-core/releases/download/v24.9.16/Xray-linux-${ARCH}.zip"
 unzip "Xray-linux-${ARCH}.zip"
 rm -f "Xray-linux-${ARCH}.zip" geoip.dat geosite.dat
 mv xray "xray-linux-${FNAME}"

+ 2 - 2
README.es_ES.md

@@ -32,10 +32,10 @@ bash <(curl -Ls https://raw.githubusercontent.com/mhsanaei/3x-ui/master/install.
 
 ## Instalar una Versión Personalizada
 
-Para instalar la versión deseada, agrega la versión al final del comando de instalación. Por ejemplo, ver `v2.4.0`:
+Para instalar la versión deseada, agrega la versión al final del comando de instalación. Por ejemplo, ver `v2.4.1`:
 
 ```
-bash <(curl -Ls https://raw.githubusercontent.com/mhsanaei/3x-ui/master/install.sh) v2.4.0
+bash <(curl -Ls https://raw.githubusercontent.com/mhsanaei/3x-ui/master/install.sh) v2.4.1
 ```
 
 ## Certificado SSL

+ 2 - 2
README.md

@@ -32,10 +32,10 @@ bash <(curl -Ls https://raw.githubusercontent.com/mhsanaei/3x-ui/master/install.
 
 ## Install Custom Version
 
-To install your desired version, add the version to the end of the installation command. e.g., ver `v2.4.0`:
+To install your desired version, add the version to the end of the installation command. e.g., ver `v2.4.1`:
 
 ```
-bash <(curl -Ls https://raw.githubusercontent.com/mhsanaei/3x-ui/master/install.sh) v2.4.0
+bash <(curl -Ls https://raw.githubusercontent.com/mhsanaei/3x-ui/master/install.sh) v2.4.1
 ```
 
 ## SSL Certificate

+ 2 - 2
README.ru_RU.md

@@ -32,10 +32,10 @@ bash <(curl -Ls https://raw.githubusercontent.com/mhsanaei/3x-ui/master/install.
 
 ## Установка определённой версии
 
-Чтобы установить нужную вам версию, добавьте номер версии в конец команды установки. Например, `v2.4.0`:
+Чтобы установить нужную вам версию, добавьте номер версии в конец команды установки. Например, `v2.4.1`:
 
 ```
-bash <(curl -Ls https://raw.githubusercontent.com/mhsanaei/3x-ui/master/install.sh) v2.4.0
+bash <(curl -Ls https://raw.githubusercontent.com/mhsanaei/3x-ui/master/install.sh) v2.4.1
 ```
 
 ## SSL Сертификат

+ 2 - 2
README.zh_CN.md

@@ -32,10 +32,10 @@ bash <(curl -Ls https://raw.githubusercontent.com/mhsanaei/3x-ui/master/install.
 
 ## 安装指定版本
 
-要安装所需的版本,请将该版本添加到安装命令的末尾。 e.g., ver `v2.4.0`:
+要安装所需的版本,请将该版本添加到安装命令的末尾。 e.g., ver `v2.4.1`:
 
 ```
-bash <(curl -Ls https://raw.githubusercontent.com/mhsanaei/3x-ui/master/install.sh) v2.4.0
+bash <(curl -Ls https://raw.githubusercontent.com/mhsanaei/3x-ui/master/install.sh) v2.4.1
 ```
 
 ### SSL证书

+ 1 - 1
config/version

@@ -1 +1 @@
-2.4.0
+2.4.1

+ 1 - 1
go.mod

@@ -65,7 +65,7 @@ require (
 	github.com/refraction-networking/utls v1.6.7 // indirect
 	github.com/riobard/go-bloom v0.0.0-20200614022211-cdc8013cb5b3 // indirect
 	github.com/rogpeppe/go-internal v1.12.0 // indirect
-	github.com/sagernet/sing v0.4.2 // indirect
+	github.com/sagernet/sing v0.4.3 // indirect
 	github.com/sagernet/sing-shadowsocks v0.2.7 // indirect
 	github.com/savsgio/gotils v0.0.0-20240704082632-aef3928b8a38 // indirect
 	github.com/seiflotfy/cuckoofilter v0.0.0-20240715131351-a2f2c23f1771 // indirect

+ 2 - 2
go.sum

@@ -199,8 +199,8 @@ github.com/robfig/cron/v3 v3.0.1/go.mod h1:eQICP3HwyT7UooqI/z+Ov+PtYAWygg1TEWWzG
 github.com/rogpeppe/go-internal v1.12.0 h1:exVL4IDcn6na9z1rAb56Vxr+CgyK3nn3O+epU5NdKM8=
 github.com/rogpeppe/go-internal v1.12.0/go.mod h1:E+RYuTGaKKdloAfM02xzb0FW3Paa99yedzYV+kq4uf4=
 github.com/russross/blackfriday v1.5.2/go.mod h1:JO/DiYxRf+HjHt06OyowR9PTA263kcR/rfWxYHBV53g=
-github.com/sagernet/sing v0.4.2 h1:jzGNJdZVRI0xlAfFugsIQUPvyB9SuWvbJK7zQCXc4QM=
-github.com/sagernet/sing v0.4.2/go.mod h1:ieZHA/+Y9YZfXs2I3WtuwgyCZ6GPsIR7HdKb1SdEnls=
+github.com/sagernet/sing v0.4.3 h1:Ty/NAiNnVd6844k7ujlL5lkzydhcTH5Psc432jXA4Y8=
+github.com/sagernet/sing v0.4.3/go.mod h1:ieZHA/+Y9YZfXs2I3WtuwgyCZ6GPsIR7HdKb1SdEnls=
 github.com/sagernet/sing-shadowsocks v0.2.7 h1:zaopR1tbHEw5Nk6FAkM05wCslV6ahVegEZaKMv9ipx8=
 github.com/sagernet/sing-shadowsocks v0.2.7/go.mod h1:0rIKJZBR65Qi0zwdKezt4s57y/Tl1ofkaq6NlkzVuyE=
 github.com/savsgio/gotils v0.0.0-20240704082632-aef3928b8a38 h1:D0vL7YNisV2yqE55+q0lFuGse6U8lxlg7fYTctlT5Gc=

+ 14 - 0
web/assets/js/model/xray.js

@@ -529,6 +529,12 @@ class SplitHTTPStreamSettings extends XrayCommonClass {
         scMinPostsIntervalMs = "10-50",
         noSSEHeader = false,
         xPaddingBytes = "100-1000",
+        xmux = { 
+            maxConnections: 0, 
+            maxConcurrency: 0, 
+            cMaxReuseTimes: 0, 
+            cMaxLifetimeMs: 0 
+        }
     ) {
         super();
         this.path = path;
@@ -539,6 +545,7 @@ class SplitHTTPStreamSettings extends XrayCommonClass {
         this.scMinPostsIntervalMs = scMinPostsIntervalMs;
         this.noSSEHeader = noSSEHeader;
         this.xPaddingBytes = xPaddingBytes;
+        this.xmux = xmux;   
     }
 
     addHeader(name, value) {
@@ -559,6 +566,7 @@ class SplitHTTPStreamSettings extends XrayCommonClass {
             json.scMinPostsIntervalMs,
             json.noSSEHeader,
             json.xPaddingBytes,
+            json.xmux,
         );
     }
 
@@ -572,6 +580,12 @@ class SplitHTTPStreamSettings extends XrayCommonClass {
             scMinPostsIntervalMs: this.scMinPostsIntervalMs,
             noSSEHeader: this.noSSEHeader,
             xPaddingBytes: this.xPaddingBytes,
+            xmux: {
+                maxConnections: this.xmux.maxConnections,
+                maxConcurrency: this.xmux.maxConcurrency,
+                cMaxReuseTimes: this.xmux.cMaxReuseTimes,
+                cMaxLifetimeMs: this.xmux.cMaxLifetimeMs
+            }
         };
     }
 }

+ 3 - 3
web/html/xui/form/allocate.html

@@ -1,15 +1,15 @@
 {{define "form/allocate"}}
 <a-divider style="margin:5px 0 0;">Allocate</a-divider>
 <a-form :colon="false" :label-col="{ md: {span:8} }" :wrapper-col="{ md: {span:14} }">
-    <a-form-item label='strategy'>
+    <a-form-item label='Strategy'>
       <a-select v-model="inbound.allocate.strategy" :dropdown-class-name="themeSwitcher.currentTheme">
         <a-select-option v-for="s in ['always','random']" :value="s">[[ s ]]</a-select-option>
       </a-select>
     </a-form-item>
-    <a-form-item label='refresh'>
+    <a-form-item label='Refresh'>
       <a-input-number v-model.number="inbound.allocate.refresh" min="0"></a-input-number>
     </a-form-item>
-    <a-form-item label='concurrency'>
+    <a-form-item label='Concurrency'>
       <a-input-number v-model.number="inbound.allocate.concurrency" min="0"></a-input-number>
     </a-form-item>
 </a-form>

+ 1 - 1
web/html/xui/form/sniffing.html

@@ -3,7 +3,7 @@
 <a-form :colon="false" :label-col="{ md: {span:8} }" :wrapper-col="{ md: {span:14} }">
   <a-form-item>
     <span slot="label">
-        Sniffing
+      {{ i18n "enabled" }}
         <a-tooltip>
             <template slot="title">
                 <span>{{ i18n "pages.inbounds.noRecommendKeepDefault" }}</span>

+ 12 - 0
web/html/xui/form/stream/stream_splithttp.html

@@ -34,5 +34,17 @@
     <a-form-item label="No SSE Header">
         <a-switch v-model="inbound.stream.splithttp.noSSEHeader"></a-switch>
     </a-form-item>
+    <a-form-item label="Max Connections">
+        <a-input-number v-model.trim="inbound.stream.splithttp.xmux.maxConnections"></a-input-number>
+    </a-form-item>
+    <a-form-item label="Max Concurrency">
+        <a-input-number v-model.trim="inbound.stream.splithttp.xmux.maxConcurrency"></a-input-number>
+    </a-form-item>
+    <a-form-item label="Max Reuse Times">
+        <a-input-number v-model.trim="inbound.stream.splithttp.xmux.cMaxReuseTimes"></a-input-number>
+    </a-form-item>
+    <a-form-item label="Max Lifetime (ms)">
+        <a-input-number v-model.trim="inbound.stream.splithttp.xmux.cMaxLifetimeMs"></a-input-number>
+    </a-form-item>
 </a-form>
 {{end}}

+ 1 - 1
web/html/xui/inbounds.html

@@ -733,7 +733,7 @@
                     this.inbounds.push(to_inbound);
                     this.dbInbounds.push(dbInbound);
                     if ([Protocols.VMESS, Protocols.VLESS, Protocols.TROJAN, Protocols.SHADOWSOCKS].includes(inbound.protocol)) {
-                        if (inbound.protocol === Protocols.SHADOWSOCKS && (!to_inbound.isSSMultiUser)) {
+                        if (dbInbound.isSS && (!to_inbound.isSSMultiUser)) {
                             continue;
                         }
                         this.clientCount[inbound.id] = this.getClientCounts(inbound, to_inbound);