Skip to content

Commit a3b2f8b

Browse files
authored
Merge pull request #121 from aimalygin/main
Xray-core v26.5.9 support
2 parents 9a86646 + 3f5bfac commit a3b2f8b

11 files changed

Lines changed: 94 additions & 110 deletions

File tree

build/app/build.py

Lines changed: 4 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -30,10 +30,10 @@ def clean_lib_dirs(self, dirs: list[str]):
3030

3131
def init_go_env(self):
3232
os.chdir(self.lib_dir)
33-
self.clean_lib_files(["go.mod", "go.sum"])
34-
ret = subprocess.run(["go", "mod", "init", LIBXRAY_MOD_NAME])
35-
if ret.returncode != 0:
36-
raise Exception("go mod init failed")
33+
if not os.path.exists(os.path.join(self.lib_dir, "go.mod")):
34+
ret = subprocess.run(["go", "mod", "init", LIBXRAY_MOD_NAME])
35+
if ret.returncode != 0:
36+
raise Exception("go mod init failed")
3737

3838
ret = subprocess.run(
3939
[
@@ -150,11 +150,6 @@ def build_desktop_bin(self):
150150

151151
def revert_go_env(self):
152152
os.chdir(self.lib_dir)
153-
self.clean_lib_files(["go.mod", "go.sum"])
154-
ret = subprocess.run(["go", "mod", "init", LIBXRAY_MOD_NAME])
155-
if ret.returncode != 0:
156-
raise Exception("go mod init failed")
157-
158153
ret = subprocess.run(
159154
[
160155
"go",

geo/count.go

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ import (
88
"sort"
99

1010
"github.com/xtls/libxray/nodep"
11-
"github.com/xtls/xray-core/app/router"
11+
"github.com/xtls/xray-core/common/geodata"
1212
"google.golang.org/protobuf/proto"
1313
)
1414

@@ -56,7 +56,7 @@ func countGeoSite(datDir string, name string) error {
5656
if err != nil {
5757
return err
5858
}
59-
var geositeList router.GeoSiteList
59+
var geositeList geodata.GeoSiteList
6060
if err := proto.Unmarshal(geositeBytes, &geositeList); err != nil {
6161
return err
6262
}
@@ -66,13 +66,13 @@ func countGeoSite(datDir string, name string) error {
6666
var codes []*geoCountryCode
6767
for _, site := range geositeList.Entry {
6868
var siteCode geoCountryCode
69-
siteCode.Code = site.CountryCode
69+
siteCode.Code = site.Code
7070
siteCode.RuleCount = len(site.Domain)
7171
codes = append(codes, &siteCode)
7272
list.RuleCount += siteCode.RuleCount
7373
for _, domain := range site.Domain {
7474
for _, attribute := range domain.Attribute {
75-
attr := fmt.Sprintf("%s@%s", site.CountryCode, attribute.Key)
75+
attr := fmt.Sprintf("%s@%s", site.Code, attribute.Key)
7676
attrCode := findAttrCode(codes, attr)
7777
if attrCode == nil {
7878
var newCode geoCountryCode
@@ -108,7 +108,7 @@ func countGeoIP(datDir string, name string) error {
108108
if err != nil {
109109
return err
110110
}
111-
var geoipList router.GeoIPList
111+
var geoipList geodata.GeoIPList
112112
if err := proto.Unmarshal(geoipBytes, &geoipList); err != nil {
113113
return err
114114
}
@@ -118,7 +118,7 @@ func countGeoIP(datDir string, name string) error {
118118
var codes []*geoCountryCode
119119
for _, geoip := range geoipList.Entry {
120120
var code geoCountryCode
121-
code.Code = geoip.CountryCode
121+
code.Code = geoip.Code
122122
code.RuleCount = len(geoip.Cidr)
123123
codes = append(codes, &code)
124124
list.RuleCount += code.RuleCount

go.mod

Lines changed: 13 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -5,14 +5,14 @@ go 1.26.2
55
require (
66
github.com/stretchr/testify v1.11.1
77
github.com/vishvananda/netlink v1.3.1
8-
github.com/xtls/xray-core v1.260327.0
8+
github.com/xtls/xray-core v1.260327.1-0.20260509173629-1bdb488c9ec0
99
google.golang.org/protobuf v1.36.11
1010
gopkg.in/yaml.v3 v3.0.1
1111
)
1212

1313
require (
1414
github.com/andybalholm/brotli v1.0.6 // indirect
15-
github.com/apernet/quic-go v0.59.1-0.20260217092621-db4786c77a22 // indirect
15+
github.com/apernet/quic-go v0.59.1-0.20260425001925-6c6cc9bcb716 // indirect
1616
github.com/cloudflare/circl v1.6.3 // indirect
1717
github.com/davecgh/go-spew v1.1.1 // indirect
1818
github.com/ghodss/yaml v1.0.1-0.20220118164431-d8423dcdf344 // indirect
@@ -23,28 +23,30 @@ require (
2323
github.com/klauspost/cpuid/v2 v2.3.0 // indirect
2424
github.com/miekg/dns v1.1.72 // indirect
2525
github.com/pelletier/go-toml v1.9.5 // indirect
26-
github.com/pires/go-proxyproto v0.11.0 // indirect
26+
github.com/pires/go-proxyproto v0.12.0 // indirect
2727
github.com/pmezard/go-difflib v1.0.0 // indirect
2828
github.com/quic-go/qpack v0.6.0 // indirect
2929
github.com/refraction-networking/utls v1.8.3-0.20260301010127-aa6edf4b11af // indirect
30+
github.com/robfig/cron/v3 v3.0.1 // indirect
3031
github.com/sagernet/sing v0.5.1 // indirect
3132
github.com/sagernet/sing-shadowsocks v0.2.7 // indirect
3233
github.com/vishvananda/netns v0.0.5 // indirect
3334
github.com/xtls/reality v0.0.0-20260322125925-9234c772ba8f // indirect
3435
go4.org/netipx v0.0.0-20231129151722-fdeea329fbba // indirect
35-
golang.org/x/crypto v0.49.0 // indirect
36+
golang.org/x/crypto v0.50.0 // indirect
3637
golang.org/x/exp v0.0.0-20240506185415-9bf2ced13842 // indirect
37-
golang.org/x/mod v0.33.0 // indirect
38-
golang.org/x/net v0.52.0 // indirect
38+
golang.org/x/mod v0.34.0 // indirect
39+
golang.org/x/net v0.53.0 // indirect
3940
golang.org/x/sync v0.20.0 // indirect
40-
golang.org/x/sys v0.42.0 // indirect
41-
golang.org/x/text v0.35.0 // indirect
41+
golang.org/x/sys v0.43.0 // indirect
42+
golang.org/x/text v0.36.0 // indirect
4243
golang.org/x/time v0.12.0 // indirect
43-
golang.org/x/tools v0.42.0 // indirect
44+
golang.org/x/tools v0.43.0 // indirect
4445
golang.zx2c4.com/wintun v0.0.0-20230126152724-0fa3db229ce2 // indirect
4546
golang.zx2c4.com/wireguard v0.0.0-20250521234502-f333402bd9cb // indirect
46-
google.golang.org/genproto/googleapis/rpc v0.0.0-20251202230838-ff82c1b0f217 // indirect
47-
google.golang.org/grpc v1.79.3 // indirect
47+
golang.zx2c4.com/wireguard/windows v1.0.1 // indirect
48+
google.golang.org/genproto/googleapis/rpc v0.0.0-20260226221140-a57be14db171 // indirect
49+
google.golang.org/grpc v1.81.0 // indirect
4850
gopkg.in/yaml.v2 v2.4.0 // indirect
4951
gvisor.dev/gvisor v0.0.0-20260122175437-89a5d21be8f0 // indirect
5052
lukechampine.com/blake3 v1.4.1 // indirect

go.sum

Lines changed: 38 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
github.com/andybalholm/brotli v1.0.6 h1:Yf9fFpf49Zrxb9NlQaluyE92/+X7UVHlhMNJN2sxfOI=
22
github.com/andybalholm/brotli v1.0.6/go.mod h1:fO7iG3H7G2nSZ7m0zPUDn85XEX2GTukHGRSepvi9Eig=
3-
github.com/apernet/quic-go v0.59.1-0.20260217092621-db4786c77a22 h1:00ziBGnLWQEcR9LThDwvxOznJJquJ9bYUdmBFnawLMU=
4-
github.com/apernet/quic-go v0.59.1-0.20260217092621-db4786c77a22/go.mod h1:Npbg8qBtAZlsAB3FWmqwlVh5jtVG6a4DlYsOylUpvzA=
3+
github.com/apernet/quic-go v0.59.1-0.20260425001925-6c6cc9bcb716 h1:J1O+xpLuJWkdYbw5JPGwBqIHs2J8tiEP7Py9lPqkN2I=
4+
github.com/apernet/quic-go v0.59.1-0.20260425001925-6c6cc9bcb716/go.mod h1:Npbg8qBtAZlsAB3FWmqwlVh5jtVG6a4DlYsOylUpvzA=
55
github.com/cespare/xxhash/v2 v2.3.0 h1:UL815xU9SqsFlibzuggzjXhog7bL6oX9BbNZnL2UFvs=
66
github.com/cespare/xxhash/v2 v2.3.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs=
77
github.com/cloudflare/circl v1.6.3 h1:9GPOhQGF9MCYUeXyMYlqTR6a5gTrgR/fBLXvUgtVcg8=
@@ -40,14 +40,16 @@ github.com/miekg/dns v1.1.72 h1:vhmr+TF2A3tuoGNkLDFK9zi36F2LS+hKTRW0Uf8kbzI=
4040
github.com/miekg/dns v1.1.72/go.mod h1:+EuEPhdHOsfk6Wk5TT2CzssZdqkmFhf8r+aVyDEToIs=
4141
github.com/pelletier/go-toml v1.9.5 h1:4yBQzkHv+7BHq2PQUZF3Mx0IYxG7LsP222s7Agd3ve8=
4242
github.com/pelletier/go-toml v1.9.5/go.mod h1:u1nR/EPcESfeI/szUZKdtJ0xRNbUoANCkoOuaOx1Y+c=
43-
github.com/pires/go-proxyproto v0.11.0 h1:gUQpS85X/VJMdUsYyEgyn59uLJvGqPhJV5YvG68wXH4=
44-
github.com/pires/go-proxyproto v0.11.0/go.mod h1:ZKAAyp3cgy5Y5Mo4n9AlScrkCZwUy0g3Jf+slqQVcuU=
43+
github.com/pires/go-proxyproto v0.12.0 h1:TTCxD66dU898tahivkqc3hoceZp7P44FnorWyo9d5vM=
44+
github.com/pires/go-proxyproto v0.12.0/go.mod h1:qUvfqUMEoX7T8g0q7TQLDnhMjdTrxnG0hvpMn+7ePNI=
4545
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
4646
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
4747
github.com/quic-go/qpack v0.6.0 h1:g7W+BMYynC1LbYLSqRt8PBg5Tgwxn214ZZR34VIOjz8=
4848
github.com/quic-go/qpack v0.6.0/go.mod h1:lUpLKChi8njB4ty2bFLX2x4gzDqXwUpaO1DP9qMDZII=
4949
github.com/refraction-networking/utls v1.8.3-0.20260301010127-aa6edf4b11af h1:er2acxbi3N1nvEq6HXHUAR1nTWEJmQfqiGR8EVT9rfs=
5050
github.com/refraction-networking/utls v1.8.3-0.20260301010127-aa6edf4b11af/go.mod h1:jkSOEkLqn+S/jtpEHPOsVv/4V4EVnelwbMQl4vCWXAM=
51+
github.com/robfig/cron/v3 v3.0.1 h1:WdRxkvbJztn8LMz/QEvLN5sBU+xKpSqwwUO1Pjr4qDs=
52+
github.com/robfig/cron/v3 v3.0.1/go.mod h1:eQICP3HwyT7UooqI/z+Ov+PtYAWygg1TEWWzGIFLtro=
5153
github.com/rogpeppe/go-internal v1.10.0 h1:TMyTOH3F/DB16zRVcYyreMH6GnZZrwQVAoYjRBZyWFQ=
5254
github.com/rogpeppe/go-internal v1.10.0/go.mod h1:UQnix2H7Ngw/k4C5ijL5+65zddjncjaFoBhdsK/akog=
5355
github.com/sagernet/sing v0.5.1 h1:mhL/MZVq0TjuvHcpYcFtmSD1BFOxZ/+8ofbNZcg1k1Y=
@@ -62,54 +64,56 @@ github.com/vishvananda/netns v0.0.5 h1:DfiHV+j8bA32MFM7bfEunvT8IAqQ/NzSJHtcmW5zd
6264
github.com/vishvananda/netns v0.0.5/go.mod h1:SpkAiCQRtJ6TvvxPnOSyH3BMl6unz3xZlaprSwhNNJM=
6365
github.com/xtls/reality v0.0.0-20260322125925-9234c772ba8f h1:iy2JRioxmUpoJ3SzbFPyTxHZMbR/rSHP7dOOgYaq1O8=
6466
github.com/xtls/reality v0.0.0-20260322125925-9234c772ba8f/go.mod h1:DsJblcWDGt76+FVqBVwbwRhxyyNJsGV48gJLch0OOWI=
65-
github.com/xtls/xray-core v1.260327.0 h1:g4TzxMwyPrxslZh6uD+FiG3lXKTrnNO+b4ky2OhogHE=
66-
github.com/xtls/xray-core v1.260327.0/go.mod h1:OXMlhBloFry8mw0KwWLWLd3RQyXJzEYsCGlgsX36h60=
67+
github.com/xtls/xray-core v1.260327.1-0.20260509173629-1bdb488c9ec0 h1:ft6HiTHelF1z9i3zZVPG9Q1LcLcvEB5jzBxky/+wljk=
68+
github.com/xtls/xray-core v1.260327.1-0.20260509173629-1bdb488c9ec0/go.mod h1:LWadz6mFBKGPHAe0KscKjugHjmQeyDt5Na6J86ol/hY=
6769
go.opentelemetry.io/auto/sdk v1.2.1 h1:jXsnJ4Lmnqd11kwkBV2LgLoFMZKizbCi5fNZ/ipaZ64=
6870
go.opentelemetry.io/auto/sdk v1.2.1/go.mod h1:KRTj+aOaElaLi+wW1kO/DZRXwkF4C5xPbEe3ZiIhN7Y=
69-
go.opentelemetry.io/otel v1.39.0 h1:8yPrr/S0ND9QEfTfdP9V+SiwT4E0G7Y5MO7p85nis48=
70-
go.opentelemetry.io/otel v1.39.0/go.mod h1:kLlFTywNWrFyEdH0oj2xK0bFYZtHRYUdv1NklR/tgc8=
71-
go.opentelemetry.io/otel/metric v1.39.0 h1:d1UzonvEZriVfpNKEVmHXbdf909uGTOQjA0HF0Ls5Q0=
72-
go.opentelemetry.io/otel/metric v1.39.0/go.mod h1:jrZSWL33sD7bBxg1xjrqyDjnuzTUB0x1nBERXd7Ftcs=
73-
go.opentelemetry.io/otel/sdk v1.39.0 h1:nMLYcjVsvdui1B/4FRkwjzoRVsMK8uL/cj0OyhKzt18=
74-
go.opentelemetry.io/otel/sdk v1.39.0/go.mod h1:vDojkC4/jsTJsE+kh+LXYQlbL8CgrEcwmt1ENZszdJE=
75-
go.opentelemetry.io/otel/sdk/metric v1.39.0 h1:cXMVVFVgsIf2YL6QkRF4Urbr/aMInf+2WKg+sEJTtB8=
76-
go.opentelemetry.io/otel/sdk/metric v1.39.0/go.mod h1:xq9HEVH7qeX69/JnwEfp6fVq5wosJsY1mt4lLfYdVew=
77-
go.opentelemetry.io/otel/trace v1.39.0 h1:2d2vfpEDmCJ5zVYz7ijaJdOF59xLomrvj7bjt6/qCJI=
78-
go.opentelemetry.io/otel/trace v1.39.0/go.mod h1:88w4/PnZSazkGzz/w84VHpQafiU4EtqqlVdxWy+rNOA=
71+
go.opentelemetry.io/otel v1.43.0 h1:mYIM03dnh5zfN7HautFE4ieIig9amkNANT+xcVxAj9I=
72+
go.opentelemetry.io/otel v1.43.0/go.mod h1:JuG+u74mvjvcm8vj8pI5XiHy1zDeoCS2LB1spIq7Ay0=
73+
go.opentelemetry.io/otel/metric v1.43.0 h1:d7638QeInOnuwOONPp4JAOGfbCEpYb+K6DVWvdxGzgM=
74+
go.opentelemetry.io/otel/metric v1.43.0/go.mod h1:RDnPtIxvqlgO8GRW18W6Z/4P462ldprJtfxHxyKd2PY=
75+
go.opentelemetry.io/otel/sdk v1.43.0 h1:pi5mE86i5rTeLXqoF/hhiBtUNcrAGHLKQdhg4h4V9Dg=
76+
go.opentelemetry.io/otel/sdk v1.43.0/go.mod h1:P+IkVU3iWukmiit/Yf9AWvpyRDlUeBaRg6Y+C58QHzg=
77+
go.opentelemetry.io/otel/sdk/metric v1.43.0 h1:S88dyqXjJkuBNLeMcVPRFXpRw2fuwdvfCGLEo89fDkw=
78+
go.opentelemetry.io/otel/sdk/metric v1.43.0/go.mod h1:C/RJtwSEJ5hzTiUz5pXF1kILHStzb9zFlIEe85bhj6A=
79+
go.opentelemetry.io/otel/trace v1.43.0 h1:BkNrHpup+4k4w+ZZ86CZoHHEkohws8AY+WTX09nk+3A=
80+
go.opentelemetry.io/otel/trace v1.43.0/go.mod h1:/QJhyVBUUswCphDVxq+8mld+AvhXZLhe+8WVFxiFff0=
7981
go.uber.org/mock v0.5.2 h1:LbtPTcP8A5k9WPXj54PPPbjcI4Y6lhyOZXn+VS7wNko=
8082
go.uber.org/mock v0.5.2/go.mod h1:wLlUxC2vVTPTaE3UD51E0BGOAElKrILxhVSDYQLld5o=
8183
go4.org/netipx v0.0.0-20231129151722-fdeea329fbba h1:0b9z3AuHCjxk0x/opv64kcgZLBseWJUpBw5I82+2U4M=
8284
go4.org/netipx v0.0.0-20231129151722-fdeea329fbba/go.mod h1:PLyyIXexvUFg3Owu6p/WfdlivPbZJsZdgWZlrGope/Y=
83-
golang.org/x/crypto v0.49.0 h1:+Ng2ULVvLHnJ/ZFEq4KdcDd/cfjrrjjNSXNzxg0Y4U4=
84-
golang.org/x/crypto v0.49.0/go.mod h1:ErX4dUh2UM+CFYiXZRTcMpEcN8b/1gxEuv3nODoYtCA=
85+
golang.org/x/crypto v0.50.0 h1:zO47/JPrL6vsNkINmLoo/PH1gcxpls50DNogFvB5ZGI=
86+
golang.org/x/crypto v0.50.0/go.mod h1:3muZ7vA7PBCE6xgPX7nkzzjiUq87kRItoJQM1Yo8S+Q=
8587
golang.org/x/exp v0.0.0-20240506185415-9bf2ced13842 h1:vr/HnozRka3pE4EsMEg1lgkXJkTFJCVUX+S/ZT6wYzM=
8688
golang.org/x/exp v0.0.0-20240506185415-9bf2ced13842/go.mod h1:XtvwrStGgqGPLc4cjQfWqZHG1YFdYs6swckp8vpsjnc=
87-
golang.org/x/mod v0.33.0 h1:tHFzIWbBifEmbwtGz65eaWyGiGZatSrT9prnU8DbVL8=
88-
golang.org/x/mod v0.33.0/go.mod h1:swjeQEj+6r7fODbD2cqrnje9PnziFuw4bmLbBZFrQ5w=
89-
golang.org/x/net v0.52.0 h1:He/TN1l0e4mmR3QqHMT2Xab3Aj3L9qjbhRm78/6jrW0=
90-
golang.org/x/net v0.52.0/go.mod h1:R1MAz7uMZxVMualyPXb+VaqGSa3LIaUqk0eEt3w36Sw=
89+
golang.org/x/mod v0.34.0 h1:xIHgNUUnW6sYkcM5Jleh05DvLOtwc6RitGHbDk4akRI=
90+
golang.org/x/mod v0.34.0/go.mod h1:ykgH52iCZe79kzLLMhyCUzhMci+nQj+0XkbXpNYtVjY=
91+
golang.org/x/net v0.53.0 h1:d+qAbo5L0orcWAr0a9JweQpjXF19LMXJE8Ey7hwOdUA=
92+
golang.org/x/net v0.53.0/go.mod h1:JvMuJH7rrdiCfbeHoo3fCQU24Lf5JJwT9W3sJFulfgs=
9193
golang.org/x/sync v0.20.0 h1:e0PTpb7pjO8GAtTs2dQ6jYa5BWYlMuX047Dco/pItO4=
9294
golang.org/x/sync v0.20.0/go.mod h1:9xrNwdLfx4jkKbNva9FpL6vEN7evnE43NNNJQ2LF3+0=
9395
golang.org/x/sys v0.2.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
9496
golang.org/x/sys v0.10.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
95-
golang.org/x/sys v0.42.0 h1:omrd2nAlyT5ESRdCLYdm3+fMfNFE/+Rf4bDIQImRJeo=
96-
golang.org/x/sys v0.42.0/go.mod h1:4GL1E5IUh+htKOUEOaiffhrAeqysfVGipDYzABqnCmw=
97-
golang.org/x/text v0.35.0 h1:JOVx6vVDFokkpaq1AEptVzLTpDe9KGpj5tR4/X+ybL8=
98-
golang.org/x/text v0.35.0/go.mod h1:khi/HExzZJ2pGnjenulevKNX1W67CUy0AsXcNubPGCA=
97+
golang.org/x/sys v0.43.0 h1:Rlag2XtaFTxp19wS8MXlJwTvoh8ArU6ezoyFsMyCTNI=
98+
golang.org/x/sys v0.43.0/go.mod h1:4GL1E5IUh+htKOUEOaiffhrAeqysfVGipDYzABqnCmw=
99+
golang.org/x/text v0.36.0 h1:JfKh3XmcRPqZPKevfXVpI1wXPTqbkE5f7JA92a55Yxg=
100+
golang.org/x/text v0.36.0/go.mod h1:NIdBknypM8iqVmPiuco0Dh6P5Jcdk8lJL0CUebqK164=
99101
golang.org/x/time v0.12.0 h1:ScB/8o8olJvc+CQPWrK3fPZNfh7qgwCrY0zJmoEQLSE=
100102
golang.org/x/time v0.12.0/go.mod h1:CDIdPxbZBQxdj6cxyCIdrNogrJKMJ7pr37NYpMcMDSg=
101-
golang.org/x/tools v0.42.0 h1:uNgphsn75Tdz5Ji2q36v/nsFSfR/9BRFvqhGBaJGd5k=
102-
golang.org/x/tools v0.42.0/go.mod h1:Ma6lCIwGZvHK6XtgbswSoWroEkhugApmsXyrUmBhfr0=
103+
golang.org/x/tools v0.43.0 h1:12BdW9CeB3Z+J/I/wj34VMl8X+fEXBxVR90JeMX5E7s=
104+
golang.org/x/tools v0.43.0/go.mod h1:uHkMso649BX2cZK6+RpuIPXS3ho2hZo4FVwfoy1vIk0=
103105
golang.zx2c4.com/wintun v0.0.0-20230126152724-0fa3db229ce2 h1:B82qJJgjvYKsXS9jeunTOisW56dUokqW/FOteYJJ/yg=
104106
golang.zx2c4.com/wintun v0.0.0-20230126152724-0fa3db229ce2/go.mod h1:deeaetjYA+DHMHg+sMSMI58GrEteJUUzzw7en6TJQcI=
105107
golang.zx2c4.com/wireguard v0.0.0-20250521234502-f333402bd9cb h1:whnFRlWMcXI9d+ZbWg+4sHnLp52d5yiIPUxMBSt4X9A=
106108
golang.zx2c4.com/wireguard v0.0.0-20250521234502-f333402bd9cb/go.mod h1:rpwXGsirqLqN2L0JDJQlwOboGHmptD5ZD6T2VmcqhTw=
107-
gonum.org/v1/gonum v0.16.0 h1:5+ul4Swaf3ESvrOnidPp4GZbzf0mxVQpDCYUQE7OJfk=
108-
gonum.org/v1/gonum v0.16.0/go.mod h1:fef3am4MQ93R2HHpKnLk4/Tbh/s0+wqD5nfa6Pnwy4E=
109-
google.golang.org/genproto/googleapis/rpc v0.0.0-20251202230838-ff82c1b0f217 h1:gRkg/vSppuSQoDjxyiGfN4Upv/h/DQmIR10ZU8dh4Ww=
110-
google.golang.org/genproto/googleapis/rpc v0.0.0-20251202230838-ff82c1b0f217/go.mod h1:7i2o+ce6H/6BluujYR+kqX3GKH+dChPTQU19wjRPiGk=
111-
google.golang.org/grpc v1.79.3 h1:sybAEdRIEtvcD68Gx7dmnwjZKlyfuc61Dyo9pGXXkKE=
112-
google.golang.org/grpc v1.79.3/go.mod h1:KmT0Kjez+0dde/v2j9vzwoAScgEPx/Bw1CYChhHLrHQ=
109+
golang.zx2c4.com/wireguard/windows v1.0.1 h1:eOxiDVbywPC+ZQqvdCK7x+ZwWXKbYv50TtH8ysFIbw8=
110+
golang.zx2c4.com/wireguard/windows v1.0.1/go.mod h1:+fbT3FFdX4zzYDLwJh5+HPEcNN/3HyNdzhNSVsQM+zs=
111+
gonum.org/v1/gonum v0.17.0 h1:VbpOemQlsSMrYmn7T2OUvQ4dqxQXU+ouZFQsZOx50z4=
112+
gonum.org/v1/gonum v0.17.0/go.mod h1:El3tOrEuMpv2UdMrbNlKEh9vd86bmQ6vqIcDwxEOc1E=
113+
google.golang.org/genproto/googleapis/rpc v0.0.0-20260226221140-a57be14db171 h1:ggcbiqK8WWh6l1dnltU4BgWGIGo+EVYxCaAPih/zQXQ=
114+
google.golang.org/genproto/googleapis/rpc v0.0.0-20260226221140-a57be14db171/go.mod h1:4Hqkh8ycfw05ld/3BWL7rJOSfebL2Q+DVDeRgYgxUU8=
115+
google.golang.org/grpc v1.81.0 h1:W3G9N3KQf3BU+YuCtGKJk0CmxQNbAISICD/9AORxLIw=
116+
google.golang.org/grpc v1.81.0/go.mod h1:xGH9GfzOyMTGIOXBJmXt+BX/V0kcdQbdcuwQ/zNw42I=
113117
google.golang.org/protobuf v1.36.11 h1:fV6ZwhNocDyBLK0dj+fg8ektcVegBBuEolpbTQyBNVE=
114118
google.golang.org/protobuf v1.36.11/go.mod h1:HTf+CrKn2C3g5S8VImy6tdcUvCska2kB7j23XfzDpco=
115119
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=

share/clash_meta_test.go

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -68,10 +68,7 @@ func TestClashHysteria2_WithBandwidthPortHoppingSalamander(t *testing.T) {
6868
assert.Equal(t, conf.Bandwidth("200 mbps"), qp.BrutalDown)
6969

7070
// UdpHop
71-
var portList string
72-
require.NoError(t, json.Unmarshal(qp.UdpHop.PortList, &portList))
73-
assert.Equal(t, "20000-40000", portList)
74-
require.NotNil(t, qp.UdpHop.Interval)
71+
assert.Equal(t, "20000-40000", qp.UdpHop.PortList.String())
7572
assert.Equal(t, int32(30), qp.UdpHop.Interval.From)
7673
assert.Equal(t, int32(30), qp.UdpHop.Interval.To)
7774

@@ -113,7 +110,7 @@ func TestClashHysteria2_BandwidthOnly(t *testing.T) {
113110
assert.Empty(t, ss.FinalMask.Udp)
114111

115112
// No UdpHop
116-
assert.Nil(t, qp.UdpHop.PortList)
113+
assert.Empty(t, qp.UdpHop.PortList.Range)
117114
}
118115

119116
func TestClashHysteria2_SalamanderOnly(t *testing.T) {

share/generate_share.go

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -245,13 +245,10 @@ func streamSettingsQuery(proxy conf.OutboundDetourConfig, link *url.URL) {
245245
if len(qp.BrutalDown) > 0 {
246246
query = addQuery(query, "down", string(qp.BrutalDown))
247247
}
248-
if qp.UdpHop.PortList != nil {
249-
var portList string
250-
if json.Unmarshal(qp.UdpHop.PortList, &portList) == nil && len(portList) > 0 {
251-
query = addQuery(query, "ports", portList)
252-
}
248+
if len(qp.UdpHop.PortList.Range) > 0 {
249+
query = addQuery(query, "ports", qp.UdpHop.PortList.String())
253250
}
254-
if qp.UdpHop.Interval != nil {
251+
if qp.UdpHop.Interval.From != 0 || qp.UdpHop.Interval.To != 0 {
255252
query = addQuery(query, "hop-interval", strconv.FormatInt(int64(qp.UdpHop.Interval.From), 10))
256253
}
257254
}

share/generate_share_test.go

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -65,17 +65,17 @@ func TestGenerate_Hy2_WithBandwidth(t *testing.T) {
6565
func TestGenerate_Hy2_WithSalamanderBandwidthPortHopping(t *testing.T) {
6666
tls := &conf.TLSConfig{ServerName: "example.com"}
6767

68-
portListJSON, err := json.Marshal("20000-40000")
69-
require.NoError(t, err)
68+
var portList conf.PortList
69+
require.NoError(t, json.Unmarshal([]byte(`"20000-40000"`), &portList))
7070

7171
fm := &conf.FinalMask{
7272
QuicParams: &conf.QuicParamsConfig{
7373
Congestion: "brutal",
7474
BrutalUp: conf.Bandwidth("50 mbps"),
7575
BrutalDown: conf.Bandwidth("100 mbps"),
7676
UdpHop: conf.UdpHop{
77-
PortList: portListJSON,
78-
Interval: &conf.Int32Range{Left: 30, Right: 30, From: 30, To: 30},
77+
PortList: portList,
78+
Interval: conf.Int32Range{Left: 30, Right: 30, From: 30, To: 30},
7979
},
8080
},
8181
}

share/hysteria_mask.go

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,10 +26,12 @@ func buildHy2FinalMask(up, down, ports string, hopInterval *int32, obfsType, obf
2626
if err != nil {
2727
return nil, err
2828
}
29-
udpHop.PortList = portListJSON
29+
if err := json.Unmarshal(portListJSON, &udpHop.PortList); err != nil {
30+
return nil, err
31+
}
3032
if hopInterval != nil {
3133
i := *hopInterval
32-
udpHop.Interval = &conf.Int32Range{Left: i, Right: i, From: i, To: i}
34+
udpHop.Interval = conf.Int32Range{Left: i, Right: i, From: i, To: i}
3335
}
3436
quicParams.UdpHop = udpHop
3537
}

share/parse_share_test.go

Lines changed: 2 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -100,10 +100,7 @@ func TestHysteria2_WithEverything(t *testing.T) {
100100
assert.Equal(t, conf.Bandwidth("100 mbps"), qp.BrutalDown)
101101

102102
// UdpHop
103-
var portList string
104-
require.NoError(t, json.Unmarshal(qp.UdpHop.PortList, &portList))
105-
assert.Equal(t, "20000-40000", portList)
106-
require.NotNil(t, qp.UdpHop.Interval)
103+
assert.Equal(t, "20000-40000", qp.UdpHop.PortList.String())
107104
assert.Equal(t, int32(30), qp.UdpHop.Interval.From)
108105
assert.Equal(t, int32(30), qp.UdpHop.Interval.To)
109106

@@ -140,10 +137,7 @@ func TestHysteria2_PortsOnlyNoCongestion(t *testing.T) {
140137
assert.Empty(t, string(qp.BrutalDown))
141138

142139
// UdpHop is set
143-
var portList string
144-
require.NoError(t, json.Unmarshal(qp.UdpHop.PortList, &portList))
145-
assert.Equal(t, "20000-40000", portList)
146-
require.NotNil(t, qp.UdpHop.Interval)
140+
assert.Equal(t, "20000-40000", qp.UdpHop.PortList.String())
147141
assert.Equal(t, int32(10), qp.UdpHop.Interval.From)
148142
assert.Equal(t, int32(10), qp.UdpHop.Interval.To)
149143
}

0 commit comments

Comments
 (0)