Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/MHSanaei/3x-ui.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMHSanaei <ho3ein.sanaei@gmail.com>2026-04-21 13:55:16 +0300
committerMHSanaei <ho3ein.sanaei@gmail.com>2026-04-21 13:55:16 +0300
commit8d512d55e59b4e24383d449325b77661b89741c3 (patch)
tree5d6dbeeea51928de0289729282bca78edf9d6a7e
parenta9d890539389e52c4d824ead53555dd523b61e01 (diff)
revert Fix geosite:ru rule (ram leak)
#4050 #4055
-rw-r--r--go.mod4
-rw-r--r--go.sum4
-rw-r--r--web/service/server.go56
-rw-r--r--web/web.go18
4 files changed, 4 insertions, 78 deletions
diff --git a/go.mod b/go.mod
index e8dcecc1..331261f8 100644
--- a/go.mod
+++ b/go.mod
@@ -27,7 +27,6 @@ require (
golang.org/x/sys v0.43.0
golang.org/x/text v0.36.0
google.golang.org/grpc v1.80.0
- google.golang.org/protobuf v1.36.11
gorm.io/driver/sqlite v1.6.0
gorm.io/gorm v1.31.1
)
@@ -96,7 +95,8 @@ require (
golang.org/x/tools v0.44.0 // indirect
golang.zx2c4.com/wintun v0.0.0-20230126152724-0fa3db229ce2 // indirect
golang.zx2c4.com/wireguard v0.0.0-20250521234502-f333402bd9cb // indirect
- google.golang.org/genproto/googleapis/rpc v0.0.0-20260414002931-afd174a4e478 // indirect
+ google.golang.org/genproto/googleapis/rpc v0.0.0-20260401024825-9d38bb4040a9 // indirect
+ google.golang.org/protobuf v1.36.11 // indirect
gvisor.dev/gvisor v0.0.0-20260122175437-89a5d21be8f0 // indirect
lukechampine.com/blake3 v1.4.1 // indirect
)
diff --git a/go.sum b/go.sum
index 0429dcc8..45931b83 100644
--- a/go.sum
+++ b/go.sum
@@ -256,8 +256,8 @@ golang.zx2c4.com/wireguard v0.0.0-20250521234502-f333402bd9cb h1:whnFRlWMcXI9d+Z
golang.zx2c4.com/wireguard v0.0.0-20250521234502-f333402bd9cb/go.mod h1:rpwXGsirqLqN2L0JDJQlwOboGHmptD5ZD6T2VmcqhTw=
gonum.org/v1/gonum v0.17.0 h1:VbpOemQlsSMrYmn7T2OUvQ4dqxQXU+ouZFQsZOx50z4=
gonum.org/v1/gonum v0.17.0/go.mod h1:El3tOrEuMpv2UdMrbNlKEh9vd86bmQ6vqIcDwxEOc1E=
-google.golang.org/genproto/googleapis/rpc v0.0.0-20260414002931-afd174a4e478 h1:RmoJA1ujG+/lRGNfUnOMfhCy5EipVMyvUE+KNbPbTlw=
-google.golang.org/genproto/googleapis/rpc v0.0.0-20260414002931-afd174a4e478/go.mod h1:4Hqkh8ycfw05ld/3BWL7rJOSfebL2Q+DVDeRgYgxUU8=
+google.golang.org/genproto/googleapis/rpc v0.0.0-20260401024825-9d38bb4040a9 h1:m8qni9SQFH0tJc1X0vmnpw/0t+AImlSvp30sEupozUg=
+google.golang.org/genproto/googleapis/rpc v0.0.0-20260401024825-9d38bb4040a9/go.mod h1:4Hqkh8ycfw05ld/3BWL7rJOSfebL2Q+DVDeRgYgxUU8=
google.golang.org/grpc v1.80.0 h1:Xr6m2WmWZLETvUNvIUmeD5OAagMw3FiKmMlTdViWsHM=
google.golang.org/grpc v1.80.0/go.mod h1:ho/dLnxwi3EDJA4Zghp7k2Ec1+c2jqup0bFkw07bwF4=
google.golang.org/protobuf v1.36.11 h1:fV6ZwhNocDyBLK0dj+fg8ektcVegBBuEolpbTQyBNVE=
diff --git a/web/service/server.go b/web/service/server.go
index 6869cdf3..3292bbab 100644
--- a/web/service/server.go
+++ b/web/service/server.go
@@ -34,8 +34,6 @@ import (
"github.com/shirou/gopsutil/v4/load"
"github.com/shirou/gopsutil/v4/mem"
"github.com/shirou/gopsutil/v4/net"
- "github.com/xtls/xray-core/app/router"
- "google.golang.org/protobuf/proto"
)
// ProcessState represents the current state of a system process.
@@ -1057,48 +1055,6 @@ func (s *ServerService) IsValidGeofileName(filename string) bool {
return matched
}
-// NormalizeGeositeCountryCodes reads a geosite .dat file, uppercases all
-// country_code fields, and writes it back. This works around a case-sensitivity
-// mismatch in Xray-core: the router normalizes codes to uppercase before lookup,
-// but the find() function compares bytes case-sensitively. Some geosite.dat
-// providers (e.g. Loyalsoldier) store codes in lowercase, causing lookup failures.
-func NormalizeGeositeCountryCodes(path string) error {
- data, err := os.ReadFile(path)
- if err != nil {
- return fmt.Errorf("failed to read geosite file %s: %w", path, err)
- }
-
- var list router.GeoSiteList
- if err := proto.Unmarshal(data, &list); err != nil {
- return fmt.Errorf("failed to parse geosite file %s: %w", path, err)
- }
-
- changed := false
- for _, entry := range list.Entry {
- upper := strings.ToUpper(entry.CountryCode)
- if entry.CountryCode != upper {
- entry.CountryCode = upper
- changed = true
- }
- }
-
- if !changed {
- return nil
- }
-
- normalized, err := proto.Marshal(&list)
- if err != nil {
- return fmt.Errorf("failed to serialize normalized geosite file %s: %w", path, err)
- }
-
- if err := os.WriteFile(path, normalized, 0o644); err != nil {
- return fmt.Errorf("failed to write normalized geosite file %s: %w", path, err)
- }
-
- logger.Infof("Normalized country codes to uppercase in %s (%d entries)", path, len(list.Entry))
- return nil
-}
-
func (s *ServerService) UpdateGeofile(fileName string) error {
type geofileEntry struct {
URL string
@@ -1190,22 +1146,12 @@ func (s *ServerService) UpdateGeofile(fileName string) error {
var errorMessages []string
- normalizeIfGeosite := func(destPath, name string) {
- if strings.Contains(name, "geosite") {
- if err := NormalizeGeositeCountryCodes(destPath); err != nil {
- logger.Warningf("Failed to normalize geosite country codes in %s: %v", name, err)
- }
- }
- }
-
if fileName == "" {
// Download all geofiles
for _, entry := range geofileAllowlist {
destPath := filepath.Join(config.GetBinFolderPath(), entry.FileName)
if err := downloadFile(entry.URL, destPath); err != nil {
errorMessages = append(errorMessages, fmt.Sprintf("Error downloading Geofile '%s': %v", entry.FileName, err))
- } else {
- normalizeIfGeosite(destPath, entry.FileName)
}
}
} else {
@@ -1213,8 +1159,6 @@ func (s *ServerService) UpdateGeofile(fileName string) error {
destPath := filepath.Join(config.GetBinFolderPath(), entry.FileName)
if err := downloadFile(entry.URL, destPath); err != nil {
errorMessages = append(errorMessages, fmt.Sprintf("Error downloading Geofile '%s': %v", entry.FileName, err))
- } else {
- normalizeIfGeosite(destPath, entry.FileName)
}
}
diff --git a/web/web.go b/web/web.go
index 81868d36..835e82e1 100644
--- a/web/web.go
+++ b/web/web.go
@@ -12,7 +12,6 @@ import (
"net"
"net/http"
"os"
- "path/filepath"
"strconv"
"strings"
"time"
@@ -295,26 +294,9 @@ func (s *Server) initRouter() (*gin.Engine, error) {
return engine, nil
}
-// normalizeExistingGeositeFiles normalizes country codes in all geosite .dat
-// files found in the bin directory so Xray-core can locate entries correctly.
-func normalizeExistingGeositeFiles() {
- binDir := config.GetBinFolderPath()
- matches, err := filepath.Glob(filepath.Join(binDir, "geosite*.dat"))
- if err != nil {
- logger.Warningf("Failed to glob geosite files: %v", err)
- return
- }
- for _, path := range matches {
- if err := service.NormalizeGeositeCountryCodes(path); err != nil {
- logger.Warningf("Failed to normalize geosite country codes in %s: %v", path, err)
- }
- }
-}
-
// startTask schedules background jobs (Xray checks, traffic jobs, cron
// jobs) which the panel relies on for periodic maintenance and monitoring.
func (s *Server) startTask() {
- normalizeExistingGeositeFiles()
s.customGeoService.EnsureOnStartup()
err := s.xrayService.RestartXray(true)
if err != nil {