diff --git a/.github/update.log b/.github/update.log index 85d57fe50e..f52f08abf0 100644 --- a/.github/update.log +++ b/.github/update.log @@ -1207,3 +1207,4 @@ Update On Sat Dec 6 19:36:39 CET 2025 Update On Sun Dec 7 19:36:46 CET 2025 Update On Mon Dec 8 19:42:31 CET 2025 Update On Tue Dec 9 19:39:21 CET 2025 +Update On Wed Dec 10 19:41:17 CET 2025 diff --git a/clash-meta/adapter/outbound/sudoku.go b/clash-meta/adapter/outbound/sudoku.go index 128dbc98f6..f9313ca39f 100644 --- a/clash-meta/adapter/outbound/sudoku.go +++ b/clash-meta/adapter/outbound/sudoku.go @@ -30,6 +30,7 @@ type SudokuOption struct { TableType string `proxy:"table-type,omitempty"` // "prefer_ascii" or "prefer_entropy" EnablePureDownlink *bool `proxy:"enable-pure-downlink,omitempty"` HTTPMask bool `proxy:"http-mask,omitempty"` + CustomTable string `proxy:"custom-table,omitempty"` // optional custom byte layout, e.g. xpxvvpvv } // DialContext implements C.ProxyAdapter @@ -178,13 +179,17 @@ func NewSudoku(option SudokuOption) (*Sudoku, error) { ServerAddress: net.JoinHostPort(option.Server, strconv.Itoa(option.Port)), Key: option.Key, AEADMethod: defaultConf.AEADMethod, - Table: sudoku.NewTable(sudoku.ClientAEADSeed(option.Key), tableType), PaddingMin: paddingMin, PaddingMax: paddingMax, EnablePureDownlink: enablePureDownlink, HandshakeTimeoutSeconds: defaultConf.HandshakeTimeoutSeconds, DisableHTTPMask: !option.HTTPMask, } + table, err := sudoku.NewTableWithCustom(sudoku.ClientAEADSeed(option.Key), tableType, option.CustomTable) + if err != nil { + return nil, fmt.Errorf("build table failed: %w", err) + } + baseConf.Table = table if option.AEADMethod != "" { baseConf.AEADMethod = option.AEADMethod } diff --git a/clash-meta/adapter/outbound/wireguard.go b/clash-meta/adapter/outbound/wireguard.go index 86f8a61bbf..242d0c9fad 100644 --- a/clash-meta/adapter/outbound/wireguard.go +++ b/clash-meta/adapter/outbound/wireguard.go @@ -609,6 +609,13 @@ func (w *WireGuard) ResolveUDP(ctx context.Context, metadata *C.Metadata) error return nil } +// ProxyInfo implements C.ProxyAdapter +func (w *WireGuard) ProxyInfo() C.ProxyInfo { + info := w.Base.ProxyInfo() + info.DialerProxy = w.option.DialerProxy + return info +} + // IsL3Protocol implements C.ProxyAdapter func (w *WireGuard) IsL3Protocol(metadata *C.Metadata) bool { return true diff --git a/clash-meta/adapter/provider/provider.go b/clash-meta/adapter/provider/provider.go index 71713d8fbf..6ee4fbb110 100644 --- a/clash-meta/adapter/provider/provider.go +++ b/clash-meta/adapter/provider/provider.go @@ -8,6 +8,7 @@ import ( "reflect" "runtime" "strings" + "sync" "time" "github.com/metacubex/mihomo/adapter" @@ -43,6 +44,7 @@ type providerForApi struct { } type baseProvider struct { + mutex sync.RWMutex name string proxies []C.Proxy healthCheck *HealthCheck @@ -54,6 +56,8 @@ func (bp *baseProvider) Name() string { } func (bp *baseProvider) Version() uint32 { + bp.mutex.RLock() + defer bp.mutex.RUnlock() return bp.version } @@ -73,10 +77,14 @@ func (bp *baseProvider) Type() P.ProviderType { } func (bp *baseProvider) Proxies() []C.Proxy { + bp.mutex.RLock() + defer bp.mutex.RUnlock() return bp.proxies } func (bp *baseProvider) Count() int { + bp.mutex.RLock() + defer bp.mutex.RUnlock() return len(bp.proxies) } @@ -93,6 +101,8 @@ func (bp *baseProvider) RegisterHealthCheckTask(url string, expectedStatus utils } func (bp *baseProvider) setProxies(proxies []C.Proxy) { + bp.mutex.Lock() + defer bp.mutex.Unlock() bp.proxies = proxies bp.version += 1 bp.healthCheck.setProxies(proxies) diff --git a/clash-meta/docs/config.yaml b/clash-meta/docs/config.yaml index c9a62fdd31..cb76035fa8 100644 --- a/clash-meta/docs/config.yaml +++ b/clash-meta/docs/config.yaml @@ -1048,8 +1048,9 @@ proxies: # socks5 padding-min: 2 # 最小填充字节数 padding-max: 7 # 最大填充字节数 table-type: prefer_ascii # 可选值:prefer_ascii、prefer_entropy 前者全ascii映射,后者保证熵值(汉明1)低于3 + # custom-table: xpxvvpvv # 可选,自定义字节布局,必须包含2个x、2个p、4个v,可随意组合。启用此处则无需配置`table-type` http-mask: true # 是否启用http掩码 - enable-pure-downlink: false # 是否启用混淆下行,false的情况下能在保证数据安全的前提下极大提升下行速度 + enable-pure-downlink: false # 是否启用混淆下行,false的情况下能在保证数据安全的前提下极大提升下行速度,与服务端端保持相同(如果此处为false,则要求aead不可为none) # anytls - name: anytls @@ -1589,8 +1590,9 @@ listeners: padding-min: 1 # 填充最小长度 padding-max: 15 # 填充最大长度,均不建议过大 table-type: prefer_ascii # 可选值:prefer_ascii、prefer_entropy 前者全ascii映射,后者保证熵值(汉明1)低于3 + # custom-table: xpxvvpvv # 可选,自定义字节布局,必须包含2个x、2个p、4个v handshake-timeout: 5 # optional - enable-pure-downlink: false # 是否启用混淆下行,false的情况下能在保证数据安全的前提下极大提升下行速度,与客户端保持相同 + enable-pure-downlink: false # 是否启用混淆下行,false的情况下能在保证数据安全的前提下极大提升下行速度,与客户端保持相同(如果此处为false,则要求aead不可为none) @@ -1742,4 +1744,3 @@ listeners: # alpn: # - h3 # max-udp-relay-packet-size: 1500 - diff --git a/clash-meta/go.mod b/clash-meta/go.mod index 1f5159d26e..8fb7e51f1f 100644 --- a/clash-meta/go.mod +++ b/clash-meta/go.mod @@ -43,7 +43,7 @@ require ( github.com/mroth/weightedrand/v2 v2.1.0 github.com/openacid/low v0.1.21 github.com/oschwald/maxminddb-golang v1.12.0 // lastest version compatible with golang1.20 - github.com/saba-futai/sudoku v0.0.2-b + github.com/saba-futai/sudoku v0.0.2-c github.com/sagernet/cors v1.2.1 github.com/sagernet/netlink v0.0.0-20240612041022-b9a21c07ac6a github.com/samber/lo v1.52.0 diff --git a/clash-meta/go.sum b/clash-meta/go.sum index b787f888bd..08d1d002a8 100644 --- a/clash-meta/go.sum +++ b/clash-meta/go.sum @@ -171,8 +171,8 @@ github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZN github.com/prashantv/gostub v1.1.0 h1:BTyx3RfQjRHnUWaGF9oQos79AlQ5k8WNktv7VGvVH4g= github.com/quic-go/qpack v0.4.0 h1:Cr9BXA1sQS2SmDUWjSofMPNKmvF6IiIfDRmgU0w1ZCo= github.com/quic-go/qpack v0.4.0/go.mod h1:UZVnYIfi5GRk+zI9UMaCPsmZ2xKJP7XBUvVyT1Knj9A= -github.com/saba-futai/sudoku v0.0.2-b h1:IbBjgZe1IzzD4xjaCSAdAy8ZNrwOusT14AwCYm77NwI= -github.com/saba-futai/sudoku v0.0.2-b/go.mod h1:Rvggsoprp7HQM7bMIZUd1M27bPj8THRsZdY1dGbIAvo= +github.com/saba-futai/sudoku v0.0.2-c h1:0CaoCKx4Br8UL97fnIxn8Y7rnQpflBza7kfaIrdg2rI= +github.com/saba-futai/sudoku v0.0.2-c/go.mod h1:Rvggsoprp7HQM7bMIZUd1M27bPj8THRsZdY1dGbIAvo= github.com/sagernet/cors v1.2.1 h1:Cv5Z8y9YSD6Gm+qSpNrL3LO4lD3eQVvbFYJSG7JCMHQ= github.com/sagernet/cors v1.2.1/go.mod h1:O64VyOjjhrkLmQIjF4KGRrJO/5dVXFdpEmCW/eISRAI= github.com/sagernet/netlink v0.0.0-20240612041022-b9a21c07ac6a h1:ObwtHN2VpqE0ZNjr6sGeT00J8uU7JF4cNUdb44/Duis= diff --git a/clash-meta/listener/config/sudoku.go b/clash-meta/listener/config/sudoku.go index b1ceed08f5..b49e02557f 100644 --- a/clash-meta/listener/config/sudoku.go +++ b/clash-meta/listener/config/sudoku.go @@ -14,6 +14,7 @@ type SudokuServer struct { TableType string `json:"table-type,omitempty"` HandshakeTimeoutSecond *int `json:"handshake-timeout,omitempty"` EnablePureDownlink *bool `json:"enable-pure-downlink,omitempty"` + CustomTable string `json:"custom-table,omitempty"` } func (s SudokuServer) String() string { diff --git a/clash-meta/listener/inbound/sudoku.go b/clash-meta/listener/inbound/sudoku.go index e7cde30856..be69dd395a 100644 --- a/clash-meta/listener/inbound/sudoku.go +++ b/clash-meta/listener/inbound/sudoku.go @@ -20,6 +20,7 @@ type SudokuOption struct { TableType string `inbound:"table-type,omitempty"` // "prefer_ascii" or "prefer_entropy" HandshakeTimeoutSecond *int `inbound:"handshake-timeout,omitempty"` EnablePureDownlink *bool `inbound:"enable-pure-downlink,omitempty"` + CustomTable string `inbound:"custom-table,omitempty"` // optional custom byte layout, e.g. xpxvvpvv } func (o SudokuOption) Equal(config C.InboundConfig) bool { @@ -52,6 +53,7 @@ func NewSudoku(options *SudokuOption) (*Sudoku, error) { TableType: options.TableType, HandshakeTimeoutSecond: options.HandshakeTimeoutSecond, EnablePureDownlink: options.EnablePureDownlink, + CustomTable: options.CustomTable, } return &Sudoku{ diff --git a/clash-meta/listener/inbound/sudoku_test.go b/clash-meta/listener/inbound/sudoku_test.go index f826e66424..c3fbcc6f63 100644 --- a/clash-meta/listener/inbound/sudoku_test.go +++ b/clash-meta/listener/inbound/sudoku_test.go @@ -138,3 +138,27 @@ func TestInboundSudoku_PackedDownlink(t *testing.T) { testInboundSudoku(t, inboundOptions, outboundOptions) }) } + +func TestInboundSudoku_CustomTable(t *testing.T) { + key := "test_key_custom" + custom := "xpxvvpvv" + inboundOptions := inbound.SudokuOption{ + Key: key, + TableType: "prefer_entropy", + CustomTable: custom, + } + outboundOptions := outbound.SudokuOption{ + Key: key, + TableType: "prefer_entropy", + CustomTable: custom, + } + testInboundSudoku(t, inboundOptions, outboundOptions) + + t.Run("ed25519key", func(t *testing.T) { + inboundOptions := inboundOptions + outboundOptions := outboundOptions + inboundOptions.Key = sudokuPublicKey + outboundOptions.Key = sudokuPrivateKey + testInboundSudoku(t, inboundOptions, outboundOptions) + }) +} diff --git a/clash-meta/listener/sudoku/server.go b/clash-meta/listener/sudoku/server.go index a1aa9fd2bd..072f372b0f 100644 --- a/clash-meta/listener/sudoku/server.go +++ b/clash-meta/listener/sudoku/server.go @@ -152,6 +152,12 @@ func New(config LC.SudokuServer, tunnel C.Tunnel, additions ...inbound.Addition) enablePureDownlink = *config.EnablePureDownlink } + table, err := sudoku.NewTableWithCustom(config.Key, tableType, config.CustomTable) + if err != nil { + _ = l.Close() + return nil, err + } + handshakeTimeout := defaultConf.HandshakeTimeoutSeconds if config.HandshakeTimeoutSecond != nil { handshakeTimeout = *config.HandshakeTimeoutSecond @@ -160,7 +166,7 @@ func New(config LC.SudokuServer, tunnel C.Tunnel, additions ...inbound.Addition) protoConf := sudoku.ProtocolConfig{ Key: config.Key, AEADMethod: defaultConf.AEADMethod, - Table: sudoku.NewTable(config.Key, tableType), + Table: table, PaddingMin: paddingMin, PaddingMax: paddingMax, EnablePureDownlink: enablePureDownlink, diff --git a/clash-meta/transport/sudoku/handshake.go b/clash-meta/transport/sudoku/handshake.go index a4f85f29fd..d34fceb40e 100644 --- a/clash-meta/transport/sudoku/handshake.go +++ b/clash-meta/transport/sudoku/handshake.go @@ -146,12 +146,23 @@ func buildHandshakePayload(key string) [16]byte { } func NewTable(key string, tableType string) *sudoku.Table { - start := time.Now() - table := sudoku.NewTable(key, tableType) - log.Infoln("[Sudoku] Tables initialized (%s) in %v", tableType, time.Since(start)) + table, err := NewTableWithCustom(key, tableType, "") + if err != nil { + panic(fmt.Sprintf("[Sudoku] failed to init tables: %v", err)) + } return table } +func NewTableWithCustom(key string, tableType string, customTable string) (*sudoku.Table, error) { + start := time.Now() + table, err := sudoku.NewTableWithCustom(key, tableType, customTable) + if err != nil { + return nil, err + } + log.Infoln("[Sudoku] Tables initialized (%s, custom=%v) in %v", tableType, customTable != "", time.Since(start)) + return table, nil +} + func ClientAEADSeed(key string) string { if recovered, err := crypto.RecoverPublicKey(key); err == nil { return crypto.EncodePoint(recovered) diff --git a/clash-meta/transport/sudoku/handshake_test.go b/clash-meta/transport/sudoku/handshake_test.go index cfe5c75ecb..5d9443dfde 100644 --- a/clash-meta/transport/sudoku/handshake_test.go +++ b/clash-meta/transport/sudoku/handshake_test.go @@ -228,3 +228,22 @@ func runPackedUoTSession(id int, cfg *apis.ProtocolConfig, errCh chan<- error) { return } } + +func TestCustomTableHandshake(t *testing.T) { + table, err := sudokuobfs.NewTableWithCustom("custom-seed", "prefer_entropy", "xpxvvpvv") + if err != nil { + t.Fatalf("build custom table: %v", err) + } + cfg := newPackedConfig(table) + errCh := make(chan error, 2) + + runPackedTCPSession(42, cfg, errCh) + runPackedUoTSession(43, cfg, errCh) + + close(errCh) + for err := range errCh { + if err != nil { + t.Fatalf("custom table handshake failed: %v", err) + } + } +} diff --git a/clash-nyanpasu/manifest/version.json b/clash-nyanpasu/manifest/version.json index fd6956beaf..4692bbf3db 100644 --- a/clash-nyanpasu/manifest/version.json +++ b/clash-nyanpasu/manifest/version.json @@ -3,9 +3,9 @@ "latest": { "mihomo": "v1.19.17", "mihomo_alpha": "alpha-17b8eb8", - "clash_rs": "v0.9.2", + "clash_rs": "v0.9.3", "clash_premium": "2023-09-05-gdcc8d87", - "clash_rs_alpha": "0.9.2-alpha+sha.c9fe9e2" + "clash_rs_alpha": "0.9.3-alpha+sha.a6538ac" }, "arch_template": { "mihomo": { @@ -69,5 +69,5 @@ "linux-armv7hf": "clash-armv7-unknown-linux-gnueabihf" } }, - "updated_at": "2025-12-08T22:21:34.201Z" + "updated_at": "2025-12-09T22:21:41.769Z" } diff --git a/filebrowser/Dockerfile.s6 b/filebrowser/Dockerfile.s6 index 2a1218b23d..8b363cb38e 100644 --- a/filebrowser/Dockerfile.s6 +++ b/filebrowser/Dockerfile.s6 @@ -1,4 +1,4 @@ -FROM ghcr.io/linuxserver/baseimage-alpine:3.22 +FROM ghcr.io/linuxserver/baseimage-alpine:3.23 RUN apk update && \ apk --no-cache add ca-certificates mailcap jq libcap diff --git a/filebrowser/frontend/package.json b/filebrowser/frontend/package.json index f7c9d53169..c405b2f8bc 100644 --- a/filebrowser/frontend/package.json +++ b/filebrowser/frontend/package.json @@ -71,5 +71,5 @@ "vite-plugin-compression2": "^2.3.1", "vue-tsc": "^3.1.3" }, - "packageManager": "pnpm@10.24.0+sha512.01ff8ae71b4419903b65c60fb2dc9d34cf8bb6e06d03bde112ef38f7a34d6904c424ba66bea5cdcf12890230bf39f9580473140ed9c946fef328b6e5238a345a" + "packageManager": "pnpm@10.25.0+sha512.5e82639027af37cf832061bcc6d639c219634488e0f2baebe785028a793de7b525ffcd3f7ff574f5e9860654e098fe852ba8ac5dd5cefe1767d23a020a92f501" } diff --git a/filebrowser/frontend/pnpm-lock.yaml b/filebrowser/frontend/pnpm-lock.yaml index ec1150cbc2..bb10358316 100644 --- a/filebrowser/frontend/pnpm-lock.yaml +++ b/filebrowser/frontend/pnpm-lock.yaml @@ -25,7 +25,7 @@ importers: version: 1.11.19 dompurify: specifier: ^3.2.6 - version: 3.3.0 + version: 3.3.1 epubjs: specifier: ^0.3.93 version: 0.3.93 @@ -107,16 +107,16 @@ importers: version: 4.17.12 '@types/node': specifier: ^24.10.1 - version: 24.10.1 + version: 24.10.2 '@typescript-eslint/eslint-plugin': specifier: ^8.37.0 - version: 8.48.1(@typescript-eslint/parser@8.37.0(eslint@9.39.1)(typescript@5.9.3))(eslint@9.39.1)(typescript@5.9.3) + version: 8.49.0(@typescript-eslint/parser@8.37.0(eslint@9.39.1)(typescript@5.9.3))(eslint@9.39.1)(typescript@5.9.3) '@vitejs/plugin-legacy': specifier: ^7.2.1 - version: 7.2.1(terser@5.44.1)(vite@7.2.6(@types/node@24.10.1)(terser@5.44.1)(yaml@2.7.0)) + version: 7.2.1(terser@5.44.1)(vite@7.2.7(@types/node@24.10.2)(terser@5.44.1)(yaml@2.7.0)) '@vitejs/plugin-vue': specifier: ^6.0.1 - version: 6.0.2(vite@7.2.6(@types/node@24.10.1)(terser@5.44.1)(yaml@2.7.0))(vue@3.5.25(typescript@5.9.3)) + version: 6.0.2(vite@7.2.7(@types/node@24.10.2)(terser@5.44.1)(yaml@2.7.0))(vue@3.5.25(typescript@5.9.3)) '@vue/eslint-config-prettier': specifier: ^10.2.0 version: 10.2.0(eslint@9.39.1)(prettier@3.7.4) @@ -155,13 +155,13 @@ importers: version: 5.9.3 vite: specifier: ^7.2.2 - version: 7.2.6(@types/node@24.10.1)(terser@5.44.1)(yaml@2.7.0) + version: 7.2.7(@types/node@24.10.2)(terser@5.44.1)(yaml@2.7.0) vite-plugin-compression2: specifier: ^2.3.1 - version: 2.3.1(rollup@4.53.3) + version: 2.4.0(rollup@4.53.3) vue-tsc: specifier: ^3.1.3 - version: 3.1.5(typescript@5.9.3) + version: 3.1.8(typescript@5.9.3) packages: @@ -1110,8 +1110,8 @@ packages: '@types/lodash@4.17.13': resolution: {integrity: sha512-lfx+dftrEZcdBPczf9d0Qv0x+j/rfNCMuC6OcfXmO8gkfeNAY88PgKUbvG56whcN23gc27yenwF6oJZXGFpYxg==} - '@types/node@24.10.1': - resolution: {integrity: sha512-GNWcUTRBgIRJD5zj+Tq0fKOJ5XZajIiBroOF0yvj2bSU1WvNdYS/dn9UxwsujGW4JX06dnHyjV2y9rRaybH0iQ==} + '@types/node@24.10.2': + resolution: {integrity: sha512-WOhQTZ4G8xZ1tjJTvKOpyEVSGgOTvJAfDK3FNFgELyaTpzhdgHVHeqW8V+UJvzF5BT+/B54T/1S2K6gd9c7bbA==} '@types/trusted-types@2.0.7': resolution: {integrity: sha512-ScaPdn1dQczgbl0QFTeTOmVHFULt394XJgOQNoyVhZ6r2vLnMLJfBPd53SB52T/3G36VI1/g2MZaX0cwDuXsfw==} @@ -1127,11 +1127,11 @@ packages: eslint: ^8.57.0 || ^9.0.0 typescript: '>=4.8.4 <5.9.0' - '@typescript-eslint/eslint-plugin@8.48.1': - resolution: {integrity: sha512-X63hI1bxl5ohelzr0LY5coufyl0LJNthld+abwxpCoo6Gq+hSqhKwci7MUWkXo67mzgUK6YFByhmaHmUcuBJmA==} + '@typescript-eslint/eslint-plugin@8.49.0': + resolution: {integrity: sha512-JXij0vzIaTtCwu6SxTh8qBc66kmf1xs7pI4UOiMDFVct6q86G0Zs7KRcEoJgY3Cav3x5Tq0MF5jwgpgLqgKG3A==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: - '@typescript-eslint/parser': ^8.48.1 + '@typescript-eslint/parser': ^8.49.0 eslint: ^8.57.0 || ^9.0.0 typescript: '>=4.8.4 <6.0.0' @@ -1154,8 +1154,8 @@ packages: peerDependencies: typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/project-service@8.48.1': - resolution: {integrity: sha512-HQWSicah4s9z2/HifRPQ6b6R7G+SBx64JlFQpgSSHWPKdvCZX57XCbszg/bapbRsOEv42q5tayTYcEFpACcX1w==} + '@typescript-eslint/project-service@8.49.0': + resolution: {integrity: sha512-/wJN0/DKkmRUMXjZUXYZpD1NEQzQAAn9QWfGwo+Ai8gnzqH7tvqS7oNVdTjKqOcPyVIdZdyCMoqN66Ia789e7g==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: typescript: '>=4.8.4 <6.0.0' @@ -1168,8 +1168,8 @@ packages: resolution: {integrity: sha512-tMDbLGXb1wC+McN1M6QeDx7P7c0UWO5z9CXqp7J8E+xGcJuUuevWKxuG8j41FoweS3+L41SkyKKkia16jpX7CA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript-eslint/scope-manager@8.48.1': - resolution: {integrity: sha512-rj4vWQsytQbLxC5Bf4XwZ0/CKd362DkWMUkviT7DCS057SK64D5lH74sSGzhI6PDD2HCEq02xAP9cX68dYyg1w==} + '@typescript-eslint/scope-manager@8.49.0': + resolution: {integrity: sha512-npgS3zi+/30KSOkXNs0LQXtsg9ekZ8OISAOLGWA/ZOEn0ZH74Ginfl7foziV8DT+D98WfQ5Kopwqb/PZOaIJGg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} '@typescript-eslint/tsconfig-utils@8.37.0': @@ -1184,8 +1184,8 @@ packages: peerDependencies: typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/tsconfig-utils@8.48.1': - resolution: {integrity: sha512-k0Jhs4CpEffIBm6wPaCXBAD7jxBtrHjrSgtfCjUvPp9AZ78lXKdTR8fxyZO5y4vWNlOvYXRtngSZNSn+H53Jkw==} + '@typescript-eslint/tsconfig-utils@8.49.0': + resolution: {integrity: sha512-8prixNi1/6nawsRYxet4YOhnbW+W9FK/bQPxsGB1D3ZrDzbJ5FXw5XmzxZv82X3B+ZccuSxo/X8q9nQ+mFecWA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: typescript: '>=4.8.4 <6.0.0' @@ -1197,8 +1197,8 @@ packages: eslint: ^8.57.0 || ^9.0.0 typescript: '>=4.8.4 <5.9.0' - '@typescript-eslint/type-utils@8.48.1': - resolution: {integrity: sha512-1jEop81a3LrJQLTf/1VfPQdhIY4PlGDBc/i67EVWObrtvcziysbLN3oReexHOM6N3jyXgCrkBsZpqwH0hiDOQg==} + '@typescript-eslint/type-utils@8.49.0': + resolution: {integrity: sha512-KTExJfQ+svY8I10P4HdxKzWsvtVnsuCifU5MvXrRwoP2KOlNZ9ADNEWWsQTJgMxLzS5VLQKDjkCT/YzgsnqmZg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 @@ -1212,8 +1212,8 @@ packages: resolution: {integrity: sha512-USjyxm3gQEePdUwJBFjjGNG18xY9A2grDVGuk7/9AkjIF1L+ZrVnwR5VAU5JXtUnBL/Nwt3H31KlRDaksnM7/w==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript-eslint/types@8.48.1': - resolution: {integrity: sha512-+fZ3LZNeiELGmimrujsDCT4CRIbq5oXdHe7chLiW8qzqyPMnn1puNstCrMNVAqwcl2FdIxkuJ4tOs/RFDBVc/Q==} + '@typescript-eslint/types@8.49.0': + resolution: {integrity: sha512-e9k/fneezorUo6WShlQpMxXh8/8wfyc+biu6tnAqA81oWrEic0k21RHzP9uqqpyBBeBKu4T+Bsjy9/b8u7obXQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} '@typescript-eslint/typescript-estree@8.37.0': @@ -1228,8 +1228,8 @@ packages: peerDependencies: typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/typescript-estree@8.48.1': - resolution: {integrity: sha512-/9wQ4PqaefTK6POVTjJaYS0bynCgzh6ClJHGSBj06XEHjkfylzB+A3qvyaXnErEZSaxhIo4YdyBgq6j4RysxDg==} + '@typescript-eslint/typescript-estree@8.49.0': + resolution: {integrity: sha512-jrLdRuAbPfPIdYNppHJ/D0wN+wwNfJ32YTAm10eJVsFmrVpXQnDWBn8niCSMlWjvml8jsce5E/O+86IQtTbJWA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: typescript: '>=4.8.4 <6.0.0' @@ -1241,8 +1241,8 @@ packages: eslint: ^8.57.0 || ^9.0.0 typescript: '>=4.8.4 <5.9.0' - '@typescript-eslint/utils@8.48.1': - resolution: {integrity: sha512-fAnhLrDjiVfey5wwFRwrweyRlCmdz5ZxXz2G/4cLn0YDLjTapmN4gcCsTBR1N2rWnZSDeWpYtgLDsJt+FpmcwA==} + '@typescript-eslint/utils@8.49.0': + resolution: {integrity: sha512-N3W7rJw7Rw+z1tRsHZbK395TWSYvufBXumYtEGzypgMUthlg0/hmCImeA8hgO2d2G4pd7ftpxxul2J8OdtdaFA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 @@ -1256,8 +1256,8 @@ packages: resolution: {integrity: sha512-/++5CYLQqsO9HFGLI7APrxBJYo+5OCMpViuhV8q5/Qa3o5mMrF//eQHks+PXcsAVaLdn817fMuS7zqoXNNZGaw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript-eslint/visitor-keys@8.48.1': - resolution: {integrity: sha512-BmxxndzEWhE4TIEEMBs8lP3MBWN3jFPs/p6gPm/wkv02o41hI6cq9AuSmGAaTTHPtA1FTi2jBre4A9rm5ZmX+Q==} + '@typescript-eslint/visitor-keys@8.49.0': + resolution: {integrity: sha512-LlKaciDe3GmZFphXIc79THF/YYBugZ7FS1pO581E/edlVVNbZKDy93evqmrfQ9/Y4uN0vVhX4iuchq26mK/iiA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} '@videojs/http-streaming@3.17.2': @@ -1287,14 +1287,14 @@ packages: vite: ^5.0.0 || ^6.0.0 || ^7.0.0 vue: ^3.2.25 - '@volar/language-core@2.4.23': - resolution: {integrity: sha512-hEEd5ET/oSmBC6pi1j6NaNYRWoAiDhINbT8rmwtINugR39loROSlufGdYMF9TaKGfz+ViGs1Idi3mAhnuPcoGQ==} + '@volar/language-core@2.4.26': + resolution: {integrity: sha512-hH0SMitMxnB43OZpyF1IFPS9bgb2I3bpCh76m2WEK7BE0A0EzpYsRp0CCH2xNKshr7kacU5TQBLYn4zj7CG60A==} - '@volar/source-map@2.4.23': - resolution: {integrity: sha512-Z1Uc8IB57Lm6k7q6KIDu/p+JWtf3xsXJqAX/5r18hYOTpJyBn0KXUR8oTJ4WFYOcDzWC9n3IflGgHowx6U6z9Q==} + '@volar/source-map@2.4.26': + resolution: {integrity: sha512-JJw0Tt/kSFsIRmgTQF4JSt81AUSI1aEye5Zl65EeZ8H35JHnTvFGmpDOBn5iOxd48fyGE+ZvZBp5FcgAy/1Qhw==} - '@volar/typescript@2.4.23': - resolution: {integrity: sha512-lAB5zJghWxVPqfcStmAP1ZqQacMpe90UrP5RJ3arDyrhy4aCUQqmxPPLB2PWDKugvylmO41ljK7vZ+t6INMTag==} + '@volar/typescript@2.4.26': + resolution: {integrity: sha512-N87ecLD48Sp6zV9zID/5yuS1+5foj0DfuYGdQ6KHj/IbKvyKv1zNX6VCmnKYwtmHadEO6mFc2EKISiu3RDPAvA==} '@vue/compiler-core@3.5.25': resolution: {integrity: sha512-vay5/oQJdsNHmliWoZfHPoVZZRmnSWhug0BYT34njkYTPqClh3DNWLkZNJBVSjsNMrg0CCrBfoKkjZQPM/QVUw==} @@ -1337,8 +1337,8 @@ packages: typescript: optional: true - '@vue/language-core@3.1.5': - resolution: {integrity: sha512-FMcqyzWN+sYBeqRMWPGT2QY0mUasZMVIuHvmb5NT3eeqPrbHBYtCP8JWEUCDCgM+Zr62uuWY/qoeBrPrzfa78w==} + '@vue/language-core@3.1.8': + resolution: {integrity: sha512-PfwAW7BLopqaJbneChNL6cUOTL3GL+0l8paYP5shhgY5toBNidWnMXWM+qDwL7MC9+zDtzCF2enT8r6VPu64iw==} peerDependencies: typescript: '*' peerDependenciesMeta: @@ -1456,8 +1456,8 @@ packages: ajv@6.12.6: resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} - alien-signals@3.1.0: - resolution: {integrity: sha512-yufC6VpSy8tK3I0lO67pjumo5JvDQVQyr38+3OHqe6CHl1t2VZekKZ7EKKZSqk0cRmE7U7tfZbpXiKNzuc+ckg==} + alien-signals@3.1.1: + resolution: {integrity: sha512-ogkIWbVrLwKtHY6oOAXaYkAxP+cTH7V5FZ5+Tm4NZFd8VDZ6uNMDrfzqctTZ42eTMCSR3ne3otpcxmqSnFfPYA==} ansi-styles@4.3.0: resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} @@ -1606,8 +1606,8 @@ packages: dom-walk@0.1.2: resolution: {integrity: sha512-6QvTW9mrGeIegrFXdtQi9pk7O/nSK6lSdXW2eqUspN5LWD7UTji2Fqw5V2YLjBpHEoU9Xl/eUWNpDeZvoyOv2w==} - dompurify@3.3.0: - resolution: {integrity: sha512-r+f6MYR1gGN1eJv0TVQbhA7if/U7P87cdPl3HN5rikqaBSBxLiCb/b9O+2eG0cxz0ghyU+mU1QkbsOwERMYlWQ==} + dompurify@3.3.1: + resolution: {integrity: sha512-qkdCKzLNtrgPFP1Vo+98FRzJnBRGe4ffyCea9IwHB1fyxPOeNTHpLKYGd4Uk9xvNoH0ZoOjwZxNptyMwqrId1Q==} electron-to-chromium@1.5.250: resolution: {integrity: sha512-/5UMj9IiGDMOFBnN4i7/Ry5onJrAGSbOGo3s9FEKmwobGq6xw832ccET0CE3CkkMBZ8GJSlUIesZofpyurqDXw==} @@ -2436,11 +2436,11 @@ packages: videojs-vtt.js@0.15.5: resolution: {integrity: sha512-yZbBxvA7QMYn15Lr/ZfhhLPrNpI/RmCSCqgIff57GC2gIrV5YfyzLfLyZMj0NnZSAz8syB4N0nHXpZg9MyrMOQ==} - vite-plugin-compression2@2.3.1: - resolution: {integrity: sha512-bnhLTsurtvOiiP6EMISIKVsOMCeTAjE6FJbyqQus3W4mtAxF7pCuC4puUIAiCgNs98tOCpqo6GIXJXTLufzIaw==} + vite-plugin-compression2@2.4.0: + resolution: {integrity: sha512-8J4CBF1+dM1I06azba/eXJuJHinLF0Am7lUvRH8AZpu0otJoBaDEnxrIEr5iPZJSwH0AEglJGYCveh7pN52jCg==} - vite@7.2.6: - resolution: {integrity: sha512-tI2l/nFHC5rLh7+5+o7QjKjSR04ivXDF4jcgV0f/bTQ+OJiITy5S6gaynVsEM+7RqzufMnVbIon6Sr5x1SDYaQ==} + vite@7.2.7: + resolution: {integrity: sha512-ITcnkFeR3+fI8P1wMgItjGrR10170d8auB4EpMLPqmx6uxElH3a/hHGQabSHKdqd4FXWO1nFIp9rRn7JQ34ACQ==} engines: {node: ^20.19.0 || >=22.12.0} hasBin: true peerDependencies: @@ -2518,8 +2518,8 @@ packages: peerDependencies: vue: ^3.0.2 - vue-tsc@3.1.5: - resolution: {integrity: sha512-L/G9IUjOWhBU0yun89rv8fKqmKC+T0HfhrFjlIml71WpfBv9eb4E9Bev8FMbyueBIU9vxQqbd+oOsVcDa5amGw==} + vue-tsc@3.1.8: + resolution: {integrity: sha512-deKgwx6exIHeZwF601P1ktZKNF0bepaSN4jBU3AsbldPx9gylUc1JDxYppl82yxgkAgaz0Y0LCLOi+cXe9HMYA==} hasBin: true peerDependencies: typescript: '>=5.0.0' @@ -3550,7 +3550,7 @@ snapshots: '@types/lodash@4.17.13': {} - '@types/node@24.10.1': + '@types/node@24.10.2': dependencies: undici-types: 7.16.0 @@ -3576,16 +3576,15 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/eslint-plugin@8.48.1(@typescript-eslint/parser@8.37.0(eslint@9.39.1)(typescript@5.9.3))(eslint@9.39.1)(typescript@5.9.3)': + '@typescript-eslint/eslint-plugin@8.49.0(@typescript-eslint/parser@8.37.0(eslint@9.39.1)(typescript@5.9.3))(eslint@9.39.1)(typescript@5.9.3)': dependencies: '@eslint-community/regexpp': 4.12.2 '@typescript-eslint/parser': 8.37.0(eslint@9.39.1)(typescript@5.9.3) - '@typescript-eslint/scope-manager': 8.48.1 - '@typescript-eslint/type-utils': 8.48.1(eslint@9.39.1)(typescript@5.9.3) - '@typescript-eslint/utils': 8.48.1(eslint@9.39.1)(typescript@5.9.3) - '@typescript-eslint/visitor-keys': 8.48.1 + '@typescript-eslint/scope-manager': 8.49.0 + '@typescript-eslint/type-utils': 8.49.0(eslint@9.39.1)(typescript@5.9.3) + '@typescript-eslint/utils': 8.49.0(eslint@9.39.1)(typescript@5.9.3) + '@typescript-eslint/visitor-keys': 8.49.0 eslint: 9.39.1 - graphemer: 1.4.0 ignore: 7.0.5 natural-compare: 1.4.0 ts-api-utils: 2.1.0(typescript@5.9.3) @@ -3623,10 +3622,10 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/project-service@8.48.1(typescript@5.9.3)': + '@typescript-eslint/project-service@8.49.0(typescript@5.9.3)': dependencies: - '@typescript-eslint/tsconfig-utils': 8.48.1(typescript@5.9.3) - '@typescript-eslint/types': 8.48.1 + '@typescript-eslint/tsconfig-utils': 8.49.0(typescript@5.9.3) + '@typescript-eslint/types': 8.49.0 debug: 4.4.3 typescript: 5.9.3 transitivePeerDependencies: @@ -3642,10 +3641,10 @@ snapshots: '@typescript-eslint/types': 8.46.4 '@typescript-eslint/visitor-keys': 8.46.4 - '@typescript-eslint/scope-manager@8.48.1': + '@typescript-eslint/scope-manager@8.49.0': dependencies: - '@typescript-eslint/types': 8.48.1 - '@typescript-eslint/visitor-keys': 8.48.1 + '@typescript-eslint/types': 8.49.0 + '@typescript-eslint/visitor-keys': 8.49.0 '@typescript-eslint/tsconfig-utils@8.37.0(typescript@5.9.3)': dependencies: @@ -3655,7 +3654,7 @@ snapshots: dependencies: typescript: 5.9.3 - '@typescript-eslint/tsconfig-utils@8.48.1(typescript@5.9.3)': + '@typescript-eslint/tsconfig-utils@8.49.0(typescript@5.9.3)': dependencies: typescript: 5.9.3 @@ -3671,11 +3670,11 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/type-utils@8.48.1(eslint@9.39.1)(typescript@5.9.3)': + '@typescript-eslint/type-utils@8.49.0(eslint@9.39.1)(typescript@5.9.3)': dependencies: - '@typescript-eslint/types': 8.48.1 - '@typescript-eslint/typescript-estree': 8.48.1(typescript@5.9.3) - '@typescript-eslint/utils': 8.48.1(eslint@9.39.1)(typescript@5.9.3) + '@typescript-eslint/types': 8.49.0 + '@typescript-eslint/typescript-estree': 8.49.0(typescript@5.9.3) + '@typescript-eslint/utils': 8.49.0(eslint@9.39.1)(typescript@5.9.3) debug: 4.4.3 eslint: 9.39.1 ts-api-utils: 2.1.0(typescript@5.9.3) @@ -3687,7 +3686,7 @@ snapshots: '@typescript-eslint/types@8.46.4': {} - '@typescript-eslint/types@8.48.1': {} + '@typescript-eslint/types@8.49.0': {} '@typescript-eslint/typescript-estree@8.37.0(typescript@5.9.3)': dependencies: @@ -3721,12 +3720,12 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/typescript-estree@8.48.1(typescript@5.9.3)': + '@typescript-eslint/typescript-estree@8.49.0(typescript@5.9.3)': dependencies: - '@typescript-eslint/project-service': 8.48.1(typescript@5.9.3) - '@typescript-eslint/tsconfig-utils': 8.48.1(typescript@5.9.3) - '@typescript-eslint/types': 8.48.1 - '@typescript-eslint/visitor-keys': 8.48.1 + '@typescript-eslint/project-service': 8.49.0(typescript@5.9.3) + '@typescript-eslint/tsconfig-utils': 8.49.0(typescript@5.9.3) + '@typescript-eslint/types': 8.49.0 + '@typescript-eslint/visitor-keys': 8.49.0 debug: 4.4.3 minimatch: 9.0.5 semver: 7.7.3 @@ -3747,12 +3746,12 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/utils@8.48.1(eslint@9.39.1)(typescript@5.9.3)': + '@typescript-eslint/utils@8.49.0(eslint@9.39.1)(typescript@5.9.3)': dependencies: '@eslint-community/eslint-utils': 4.9.0(eslint@9.39.1) - '@typescript-eslint/scope-manager': 8.48.1 - '@typescript-eslint/types': 8.48.1 - '@typescript-eslint/typescript-estree': 8.48.1(typescript@5.9.3) + '@typescript-eslint/scope-manager': 8.49.0 + '@typescript-eslint/types': 8.49.0 + '@typescript-eslint/typescript-estree': 8.49.0(typescript@5.9.3) eslint: 9.39.1 typescript: 5.9.3 transitivePeerDependencies: @@ -3768,9 +3767,9 @@ snapshots: '@typescript-eslint/types': 8.46.4 eslint-visitor-keys: 4.2.1 - '@typescript-eslint/visitor-keys@8.48.1': + '@typescript-eslint/visitor-keys@8.49.0': dependencies: - '@typescript-eslint/types': 8.48.1 + '@typescript-eslint/types': 8.49.0 eslint-visitor-keys: 4.2.1 '@videojs/http-streaming@3.17.2(video.js@8.23.4)': @@ -3795,7 +3794,7 @@ snapshots: global: 4.4.0 is-function: 1.0.2 - '@vitejs/plugin-legacy@7.2.1(terser@5.44.1)(vite@7.2.6(@types/node@24.10.1)(terser@5.44.1)(yaml@2.7.0))': + '@vitejs/plugin-legacy@7.2.1(terser@5.44.1)(vite@7.2.7(@types/node@24.10.2)(terser@5.44.1)(yaml@2.7.0))': dependencies: '@babel/core': 7.28.5 '@babel/plugin-transform-dynamic-import': 7.27.1(@babel/core@7.28.5) @@ -3810,25 +3809,25 @@ snapshots: regenerator-runtime: 0.14.1 systemjs: 6.15.1 terser: 5.44.1 - vite: 7.2.6(@types/node@24.10.1)(terser@5.44.1)(yaml@2.7.0) + vite: 7.2.7(@types/node@24.10.2)(terser@5.44.1)(yaml@2.7.0) transitivePeerDependencies: - supports-color - '@vitejs/plugin-vue@6.0.2(vite@7.2.6(@types/node@24.10.1)(terser@5.44.1)(yaml@2.7.0))(vue@3.5.25(typescript@5.9.3))': + '@vitejs/plugin-vue@6.0.2(vite@7.2.7(@types/node@24.10.2)(terser@5.44.1)(yaml@2.7.0))(vue@3.5.25(typescript@5.9.3))': dependencies: '@rolldown/pluginutils': 1.0.0-beta.50 - vite: 7.2.6(@types/node@24.10.1)(terser@5.44.1)(yaml@2.7.0) + vite: 7.2.7(@types/node@24.10.2)(terser@5.44.1)(yaml@2.7.0) vue: 3.5.25(typescript@5.9.3) - '@volar/language-core@2.4.23': + '@volar/language-core@2.4.26': dependencies: - '@volar/source-map': 2.4.23 + '@volar/source-map': 2.4.26 - '@volar/source-map@2.4.23': {} + '@volar/source-map@2.4.26': {} - '@volar/typescript@2.4.23': + '@volar/typescript@2.4.26': dependencies: - '@volar/language-core': 2.4.23 + '@volar/language-core': 2.4.26 path-browserify: 1.0.1 vscode-uri: 3.1.0 @@ -3904,12 +3903,12 @@ snapshots: transitivePeerDependencies: - supports-color - '@vue/language-core@3.1.5(typescript@5.9.3)': + '@vue/language-core@3.1.8(typescript@5.9.3)': dependencies: - '@volar/language-core': 2.4.23 + '@volar/language-core': 2.4.26 '@vue/compiler-dom': 3.5.25 '@vue/shared': 3.5.25 - alien-signals: 3.1.0 + alien-signals: 3.1.1 muggle-string: 0.4.1 path-browserify: 1.0.1 picomatch: 4.0.3 @@ -3993,7 +3992,7 @@ snapshots: json-schema-traverse: 0.4.1 uri-js: 4.4.1 - alien-signals@3.1.0: {} + alien-signals@3.1.1: {} ansi-styles@4.3.0: dependencies: @@ -4136,7 +4135,7 @@ snapshots: dom-walk@0.1.2: {} - dompurify@3.3.0: + dompurify@3.3.1: optionalDependencies: '@types/trusted-types': 2.0.7 @@ -4978,14 +4977,14 @@ snapshots: dependencies: global: 4.4.0 - vite-plugin-compression2@2.3.1(rollup@4.53.3): + vite-plugin-compression2@2.4.0(rollup@4.53.3): dependencies: '@rollup/pluginutils': 5.3.0(rollup@4.53.3) tar-mini: 0.2.0 transitivePeerDependencies: - rollup - vite@7.2.6(@types/node@24.10.1)(terser@5.44.1)(yaml@2.7.0): + vite@7.2.7(@types/node@24.10.2)(terser@5.44.1)(yaml@2.7.0): dependencies: esbuild: 0.25.12 fdir: 6.5.0(picomatch@4.0.3) @@ -4994,7 +4993,7 @@ snapshots: rollup: 4.53.3 tinyglobby: 0.2.15 optionalDependencies: - '@types/node': 24.10.1 + '@types/node': 24.10.2 fsevents: 2.3.3 terser: 5.44.1 yaml: 2.7.0 @@ -5042,10 +5041,10 @@ snapshots: dependencies: vue: 3.5.25(typescript@5.9.3) - vue-tsc@3.1.5(typescript@5.9.3): + vue-tsc@3.1.8(typescript@5.9.3): dependencies: - '@volar/typescript': 2.4.23 - '@vue/language-core': 3.1.5(typescript@5.9.3) + '@volar/typescript': 2.4.26 + '@vue/language-core': 3.1.8(typescript@5.9.3) typescript: 5.9.3 vue@3.5.25(typescript@5.9.3): diff --git a/filebrowser/frontend/src/components/prompts/CreateFilePath.vue b/filebrowser/frontend/src/components/prompts/CreateFilePath.vue index ec470f3abf..166240d030 100644 --- a/filebrowser/frontend/src/components/prompts/CreateFilePath.vue +++ b/filebrowser/frontend/src/components/prompts/CreateFilePath.vue @@ -18,7 +18,7 @@ +<% end %> - updateCount(); + diff --git a/openwrt-passwall2/.github/workflows/Close stale issues and Prs.yml b/openwrt-passwall2/.github/workflows/Close stale issues and Prs.yml index 2e64f5b21c..b30abac827 100644 --- a/openwrt-passwall2/.github/workflows/Close stale issues and Prs.yml +++ b/openwrt-passwall2/.github/workflows/Close stale issues and Prs.yml @@ -7,7 +7,7 @@ jobs: stale: runs-on: ubuntu-22.04 steps: - - uses: actions/stale@v7.0.0 + - uses: actions/stale@v10 with: stale-issue-message: "Stale Issue" stale-pr-message: "Stale PR" diff --git a/sing-box/.github/workflows/build.yml b/sing-box/.github/workflows/build.yml index 3f6d410b22..6c46c1954b 100644 --- a/sing-box/.github/workflows/build.yml +++ b/sing-box/.github/workflows/build.yml @@ -62,20 +62,22 @@ jobs: echo "version=$version" >> "$GITHUB_OUTPUT" build: name: Build binary - if: github.event_name != 'workflow_dispatch' || inputs.build == 'All' || inputs.build == 'Binary' + if: false # TODO: temporarily disabled for testing runs-on: ubuntu-latest needs: - calculate_version strategy: matrix: include: - - { os: linux, arch: amd64, debian: amd64, rpm: x86_64, pacman: x86_64, openwrt: "x86_64" } - - { os: linux, arch: "386", go386: sse2, debian: i386, rpm: i386, openwrt: "i386_pentium4" } + # Linux with naive outbound (CGO enabled with Debian Bullseye sysroot) + - { os: linux, arch: amd64, naive: true, debian: amd64, rpm: x86_64, pacman: x86_64, openwrt: "x86_64", sysroot_sha: "36a164623d03f525e3dfb783a5e9b8a00e98e1ddd2b5cff4e449bd016dd27e50", cc_target: "x86_64-linux-gnu" } + - { os: linux, arch: arm64, naive: true, debian: arm64, rpm: aarch64, pacman: aarch64, openwrt: "aarch64_cortex-a53 aarch64_cortex-a72 aarch64_cortex-a76 aarch64_generic", sysroot_sha: "2f915d821eec27515c0c6d21b69898e23762908d8d7ccc1aa2a8f5f25e8b7e18", cc_target: "aarch64-linux-gnu", cross_pkg: "libc6-dev-arm64-cross" } + - { os: linux, arch: "386", naive: true, go386: sse2, debian: i386, rpm: i386, openwrt: "i386_pentium4", sysroot_sha: "63f0e5128b84f7b0421956a4a40affa472be8da0e58caf27e9acbc84072daee7", cc_target: "i686-linux-gnu", cross_pkg: "libc6-dev-i386-cross" } + - { os: linux, arch: arm, naive: true, goarm: "7", debian: armhf, rpm: armv7hl, pacman: armv7hl, openwrt: "arm_cortex-a5_vfpv4 arm_cortex-a7_neon-vfpv4 arm_cortex-a7_vfpv4 arm_cortex-a8_vfpv3 arm_cortex-a9_neon arm_cortex-a9_vfpv3-d16 arm_cortex-a15_neon-vfpv4", sysroot_sha: "47b3a0b161ca011b2b33d4fc1ef6ef269b8208a0b7e4c900700c345acdfd1814", cc_target: "arm-linux-gnueabihf", cross_pkg: "libc6-dev-armhf-cross", linker: "bfd" } + # Linux without naive outbound (no CGO) - { os: linux, arch: "386", go386: softfloat, openwrt: "i386_pentium-mmx" } - - { os: linux, arch: arm64, debian: arm64, rpm: aarch64, pacman: aarch64, openwrt: "aarch64_cortex-a53 aarch64_cortex-a72 aarch64_cortex-a76 aarch64_generic" } - { os: linux, arch: arm, goarm: "5", openwrt: "arm_arm926ej-s arm_cortex-a7 arm_cortex-a9 arm_fa526 arm_xscale" } - { os: linux, arch: arm, goarm: "6", debian: armel, rpm: armv6hl, openwrt: "arm_arm1176jzf-s_vfp" } - - { os: linux, arch: arm, goarm: "7", debian: armhf, rpm: armv7hl, pacman: armv7hl, openwrt: "arm_cortex-a5_vfpv4 arm_cortex-a7_neon-vfpv4 arm_cortex-a7_vfpv4 arm_cortex-a8_vfpv3 arm_cortex-a9_neon arm_cortex-a9_vfpv3-d16 arm_cortex-a15_neon-vfpv4" } - { os: linux, arch: mips, gomips: softfloat, openwrt: "mips_24kc mips_4kec mips_mips32" } - { os: linux, arch: mipsle, gomips: hardfloat, debian: mipsel, rpm: mipsel, openwrt: "mipsel_24kc_24kf" } - { os: linux, arch: mipsle, gomips: softfloat, openwrt: "mipsel_24kc mipsel_74kc mipsel_mips32" } @@ -86,13 +88,10 @@ jobs: - { os: linux, arch: ppc64le, debian: ppc64el, rpm: ppc64le } - { os: linux, arch: riscv64, debian: riscv64, rpm: riscv64, openwrt: "riscv64_generic" } - { os: linux, arch: loong64, debian: loongarch64, rpm: loongarch64, openwrt: "loongarch64_generic" } - - - { os: windows, arch: amd64 } + # Windows 7 legacy (no naive, no CGO) - { os: windows, arch: amd64, legacy_win7: true, legacy_name: "windows-7" } - - { os: windows, arch: "386" } - { os: windows, arch: "386", legacy_win7: true, legacy_name: "windows-7" } - - { os: windows, arch: arm64 } - + # Android (naive enabled) - { os: android, arch: arm64, ndk: "aarch64-linux-android21" } - { os: android, arch: arm, ndk: "armv7a-linux-androideabi21" } - { os: android, arch: amd64, ndk: "x86_64-linux-android21" } @@ -135,6 +134,19 @@ jobs: with: ndk-version: r28 local-cache: true + - name: Download sysroot (Linux naive) + if: matrix.naive + run: | + set -xeuo pipefail + wget -q "https://commondatastorage.googleapis.com/chrome-linux-sysroot/${{ matrix.sysroot_sha }}" -O sysroot.tar.xz + mkdir -p /tmp/sysroot + tar -xf sysroot.tar.xz -C /tmp/sysroot + - name: Install cross compiler (Linux naive) + if: matrix.naive + run: | + set -xeuo pipefail + sudo apt-get update + sudo apt-get install -y clang lld ${{ matrix.cross_pkg }} - name: Set tag run: |- git ls-remote --exit-code --tags origin v${{ needs.calculate_version.outputs.version }} || echo "PUBLISHED=false" >> "$GITHUB_ENV" @@ -143,12 +155,12 @@ jobs: run: | set -xeuo pipefail TAGS='with_gvisor,with_quic,with_dhcp,with_wireguard,with_utls,with_acme,with_clash_api,with_tailscale,with_ccm,badlinkname,tfogo_checklinkname0' - if [[ "${{ matrix.os }}" == "android" ]]; then + if [[ "${{ matrix.naive }}" == "true" ]] || [[ "${{ matrix.os }}" == "android" ]]; then TAGS="${TAGS},with_naive_outbound" fi echo "BUILD_TAGS=${TAGS}" >> "${GITHUB_ENV}" - name: Build - if: matrix.os != 'android' + if: matrix.os != 'android' && ! matrix.naive run: | set -xeuo pipefail mkdir -p dist @@ -164,6 +176,24 @@ jobs: GOMIPS: ${{ matrix.gomips }} GOMIPS64: ${{ matrix.gomips }} GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + - name: Build Linux with naive + if: matrix.naive + run: | + set -xeuo pipefail + mkdir -p dist + go build -v -trimpath -o dist/sing-box -tags "${BUILD_TAGS}" \ + -ldflags "-s -buildid= -X github.com/sagernet/sing-box/constant.Version=${{ needs.calculate_version.outputs.version }} -checklinkname=0 -linkmode=external -extldflags \"-fuse-ld=${LINKER} --sysroot=/tmp/sysroot\"" \ + ./cmd/sing-box + env: + CGO_ENABLED: "1" + GOOS: linux + GOARCH: ${{ matrix.arch }} + GO386: ${{ matrix.go386 }} + GOARM: ${{ matrix.goarm }} + CC: clang --target=${{ matrix.cc_target }} --sysroot=/tmp/sysroot + CXX: clang++ --target=${{ matrix.cc_target }} --sysroot=/tmp/sysroot + LINKER: ${{ matrix.linker || 'lld' }} + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - name: Build Android if: matrix.os == 'android' run: | @@ -286,7 +316,7 @@ jobs: path: "dist" build_darwin: name: Build Darwin binaries - if: github.event_name != 'workflow_dispatch' || inputs.build == 'All' || inputs.build == 'Binary' + if: false # TODO: temporarily disabled for testing runs-on: macos-latest needs: - calculate_version @@ -318,7 +348,10 @@ jobs: - name: Set build tags run: | set -xeuo pipefail - TAGS='with_gvisor,with_quic,with_dhcp,with_wireguard,with_utls,with_acme,with_clash_api,with_tailscale,with_ccm,with_naive_outbound,badlinkname,tfogo_checklinkname0' + TAGS='with_gvisor,with_quic,with_dhcp,with_wireguard,with_utls,with_acme,with_clash_api,with_tailscale,with_ccm,badlinkname,tfogo_checklinkname0' + if [[ "${{ matrix.legacy_go124 }}" != "true" ]]; then + TAGS="${TAGS},with_naive_outbound" + fi echo "BUILD_TAGS=${TAGS}" >> "${GITHUB_ENV}" - name: Build run: | @@ -355,25 +388,93 @@ jobs: with: name: binary-darwin_${{ matrix.arch }}${{ matrix.legacy_name && format('-legacy-{0}', matrix.legacy_name) }} path: "dist" - build_naive_linux: - name: Build Linux with naive outbound + build_windows: + name: Build Windows binaries if: github.event_name != 'workflow_dispatch' || inputs.build == 'All' || inputs.build == 'Binary' + runs-on: windows-latest + needs: + - calculate_version + strategy: + matrix: + include: + - { arch: amd64, cc: x86_64-w64-mingw32-clang } + - { arch: "386", cc: i686-w64-mingw32-clang } + - { arch: arm64, cc: aarch64-w64-mingw32-clang } + steps: + - name: Checkout + uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5 + with: + fetch-depth: 0 + - name: Setup Go + uses: actions/setup-go@v5 + with: + go-version: ^1.25.4 + - name: Cache llvm-mingw + id: cache-llvm-mingw + uses: actions/cache@v4 + with: + path: ${{ runner.temp }}/llvm-mingw + key: llvm-mingw-ucrt-x86_64 + - name: Setup llvm-mingw + if: steps.cache-llvm-mingw.outputs.cache-hit != 'true' + run: | + $headers = @{ Authorization = "Bearer $env:GITHUB_TOKEN" } + $release = Invoke-RestMethod -Uri "https://api.github.com/repos/mstorsjo/llvm-mingw/releases/latest" -Headers $headers + $asset = $release.assets | Where-Object { $_.name -like "llvm-mingw-*-ucrt-x86_64.zip" } + curl -Lo llvm-mingw.zip $asset.browser_download_url + Expand-Archive llvm-mingw.zip -DestinationPath $env:RUNNER_TEMP/llvm-mingw + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + - name: Setup llvm-mingw PATH + run: | + $extractedDir = Get-ChildItem -Path $env:RUNNER_TEMP/llvm-mingw -Directory | Where-Object { $_.Name -like "llvm-mingw-*" } | Select-Object -First 1 + echo "$($extractedDir.FullName)\bin" | Out-File -FilePath $env:GITHUB_PATH -Encoding utf8 -Append + - name: Set tag + run: |- + git ls-remote --exit-code --tags origin v${{ needs.calculate_version.outputs.version }} || echo "PUBLISHED=false" >> "$env:GITHUB_ENV" + git tag v${{ needs.calculate_version.outputs.version }} -f + - name: Build + run: | + mkdir -p dist + go build -v -trimpath -o dist/sing-box.exe -tags "with_gvisor,with_quic,with_dhcp,with_wireguard,with_utls,with_acme,with_clash_api,with_tailscale,with_ccm,with_naive_outbound,badlinkname,tfogo_checklinkname0" ` + -ldflags "-s -buildid= -X github.com/sagernet/sing-box/constant.Version=${{ needs.calculate_version.outputs.version }} -checklinkname=0" ` + ./cmd/sing-box + env: + CGO_ENABLED: "1" + CGO_LDFLAGS_ALLOW: "-Wl,-Xlink=.*" + GOOS: windows + GOARCH: ${{ matrix.arch }} + CC: ${{ matrix.cc }} + CXX: ${{ matrix.cc }}++ + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + - name: Archive + run: | + $DIR_NAME = "sing-box-${{ needs.calculate_version.outputs.version }}-windows-${{ matrix.arch }}" + mkdir "dist/$DIR_NAME" + Copy-Item LICENSE "dist/$DIR_NAME" + Copy-Item "dist/sing-box.exe" "dist/$DIR_NAME" + Compress-Archive -Path "dist/$DIR_NAME" -DestinationPath "dist/$DIR_NAME.zip" + Remove-Item -Recurse "dist/$DIR_NAME" + - name: Cleanup + run: Remove-Item dist/sing-box.exe + - name: Upload artifact + uses: actions/upload-artifact@v4 + with: + name: binary-windows_${{ matrix.arch }} + path: "dist" + build_linux_musl: + name: Build Linux musl static binaries + if: false # TODO: temporarily disabled for testing runs-on: ubuntu-latest needs: - calculate_version strategy: matrix: include: - # Linux glibc (dynamic linking with Debian Bullseye sysroot) - - { arch: amd64, sysroot_arch: amd64, sysroot_sha: "36a164623d03f525e3dfb783a5e9b8a00e98e1ddd2b5cff4e449bd016dd27e50", cc_target: "x86_64-linux-gnu", suffix: "-naive" } - - { arch: arm64, sysroot_arch: arm64, sysroot_sha: "2f915d821eec27515c0c6d21b69898e23762908d8d7ccc1aa2a8f5f25e8b7e18", cc_target: "aarch64-linux-gnu", suffix: "-naive" } - - { arch: "386", sysroot_arch: i386, sysroot_sha: "63f0e5128b84f7b0421956a4a40affa472be8da0e58caf27e9acbc84072daee7", cc_target: "i686-linux-gnu", suffix: "-naive" } - - { arch: arm, goarm: "7", sysroot_arch: armhf, sysroot_sha: "47b3a0b161ca011b2b33d4fc1ef6ef269b8208a0b7e4c900700c345acdfd1814", cc_target: "arm-linux-gnueabihf", suffix: "-naive" } - # Linux musl (static linking) - - { arch: amd64, musl: true, cc_target: "x86_64-linux-musl", suffix: "-naive-musl" } - - { arch: arm64, musl: true, cc_target: "aarch64-linux-musl", suffix: "-naive-musl" } - - { arch: "386", musl: true, cc_target: "i686-linux-musl", suffix: "-naive-musl" } - - { arch: arm, goarm: "7", musl: true, cc_target: "arm-linux-musleabihf", suffix: "-naive-musl" } + - { arch: amd64, cc_target: "x86_64-linux-musl" } + - { arch: arm64, cc_target: "aarch64-linux-musl" } + - { arch: "386", cc_target: "i686-linux-musl" } + - { arch: arm, goarm: "7", cc_target: "arm-linux-musleabihf" } steps: - name: Checkout uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5 @@ -387,62 +488,16 @@ jobs: run: |- git ls-remote --exit-code --tags origin v${{ needs.calculate_version.outputs.version }} || echo "PUBLISHED=false" >> "$GITHUB_ENV" git tag v${{ needs.calculate_version.outputs.version }} -f - - name: Download sysroot (glibc) - if: ${{ ! matrix.musl }} - run: | - set -xeuo pipefail - wget -q "https://commondatastorage.googleapis.com/chrome-linux-sysroot/${{ matrix.sysroot_sha }}" -O sysroot.tar.xz - mkdir -p /tmp/sysroot - tar -xf sysroot.tar.xz -C /tmp/sysroot - - name: Install cross compiler (glibc) - if: ${{ ! matrix.musl }} - run: | - set -xeuo pipefail - sudo apt-get update - sudo apt-get install -y clang lld - if [[ "${{ matrix.arch }}" == "arm64" ]]; then - sudo apt-get install -y libc6-dev-arm64-cross - elif [[ "${{ matrix.arch }}" == "386" ]]; then - sudo apt-get install -y libc6-dev-i386-cross - elif [[ "${{ matrix.arch }}" == "arm" ]]; then - sudo apt-get install -y libc6-dev-armhf-cross - fi - name: Install musl cross compiler - if: matrix.musl run: | set -xeuo pipefail .github/setup_musl_cross.sh "${{ matrix.cc_target }}" echo "PATH=$HOME/musl-cross/bin:$PATH" >> $GITHUB_ENV - - name: Set build tags - run: | - set -xeuo pipefail - TAGS='with_gvisor,with_quic,with_dhcp,with_wireguard,with_utls,with_acme,with_clash_api,with_tailscale,with_ccm,with_naive_outbound,badlinkname,tfogo_checklinkname0' - if [[ "${{ matrix.musl }}" == "true" ]]; then - TAGS="${TAGS},with_musl" - fi - echo "BUILD_TAGS=${TAGS}" >> "${GITHUB_ENV}" - - name: Build (glibc) - if: ${{ ! matrix.musl }} + - name: Build run: | set -xeuo pipefail mkdir -p dist - go build -v -trimpath -o dist/sing-box -tags "${BUILD_TAGS}" \ - -ldflags '-s -buildid= -X github.com/sagernet/sing-box/constant.Version=${{ needs.calculate_version.outputs.version }} -checklinkname=0 -linkmode=external -extldflags "-fuse-ld=lld --sysroot=/tmp/sysroot"' \ - ./cmd/sing-box - env: - CGO_ENABLED: "1" - GOOS: linux - GOARCH: ${{ matrix.arch }} - GOARM: ${{ matrix.goarm }} - CC: "clang --target=${{ matrix.cc_target }} --sysroot=/tmp/sysroot" - CXX: "clang++ --target=${{ matrix.cc_target }} --sysroot=/tmp/sysroot" - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - - name: Build (musl) - if: matrix.musl - run: | - set -xeuo pipefail - mkdir -p dist - go build -v -trimpath -o dist/sing-box -tags "${BUILD_TAGS}" \ + go build -v -trimpath -o dist/sing-box -tags 'with_gvisor,with_quic,with_dhcp,with_wireguard,with_utls,with_acme,with_clash_api,with_tailscale,with_ccm,with_naive_outbound,with_musl,badlinkname,tfogo_checklinkname0' \ -ldflags '-s -buildid= -X github.com/sagernet/sing-box/constant.Version=${{ needs.calculate_version.outputs.version }} -checklinkname=0 -linkmode=external -extldflags "-static"' \ ./cmd/sing-box env: @@ -459,7 +514,7 @@ jobs: if [[ -n "${{ matrix.goarm }}" ]]; then DIR_NAME="${DIR_NAME}v${{ matrix.goarm }}" fi - DIR_NAME="${DIR_NAME}${{ matrix.suffix }}" + DIR_NAME="${DIR_NAME}-musl" echo "DIR_NAME=${DIR_NAME}" >> "${GITHUB_ENV}" - name: Archive run: | @@ -475,11 +530,11 @@ jobs: - name: Upload artifact uses: actions/upload-artifact@v4 with: - name: binary-linux_${{ matrix.arch }}${{ matrix.goarm && format('v{0}', matrix.goarm) }}${{ matrix.suffix }} + name: binary-linux_${{ matrix.arch }}${{ matrix.goarm && format('v{0}', matrix.goarm) }}-musl path: "dist" build_android: name: Build Android - if: github.event_name != 'workflow_dispatch' || inputs.build == 'All' || inputs.build == 'Android' + if: false # TODO: temporarily disabled for testing runs-on: ubuntu-latest needs: - calculate_version @@ -559,7 +614,7 @@ jobs: path: 'dist' publish_android: name: Publish Android - if: github.event_name == 'workflow_dispatch' && inputs.build == 'publish-android' + if: false # TODO: temporarily disabled for testing runs-on: ubuntu-latest needs: - calculate_version @@ -806,13 +861,14 @@ jobs: path: 'dist' upload: name: Upload builds - if: "!failure() && github.event_name == 'workflow_dispatch' && (inputs.build == 'All' || inputs.build == 'Binary' || inputs.build == 'Android' || inputs.build == 'Apple' || inputs.build == 'macOS-standalone')" + if: false # TODO: temporarily disabled for testing runs-on: ubuntu-latest needs: - calculate_version - build - build_darwin - - build_naive_linux + - build_windows + - build_linux_musl - build_android - build_apple steps: diff --git a/sing-box/go.mod b/sing-box/go.mod index cc1e824e70..a7f66e6c2e 100644 --- a/sing-box/go.mod +++ b/sing-box/go.mod @@ -25,8 +25,8 @@ require ( github.com/sagernet/asc-go v0.0.0-20241217030726-d563060fe4e1 github.com/sagernet/bbolt v0.0.0-20231014093535-ea5cb2fe9f0a github.com/sagernet/cors v1.2.1 - github.com/sagernet/cronet-go v0.0.0-20251209163619-43499a42c286 - github.com/sagernet/cronet-go/all v0.0.0-20251209163943-9ad85d71d2e3 + github.com/sagernet/cronet-go v0.0.0-20251210132647-15dd6a9ee4bc + github.com/sagernet/cronet-go/all v0.0.0-20251210133029-b0d1058a9fcf github.com/sagernet/fswatch v0.1.1 github.com/sagernet/gomobile v0.1.8 github.com/sagernet/gvisor v0.0.0-20250811.0-sing-box-mod.1 @@ -106,24 +106,24 @@ require ( github.com/prometheus-community/pro-bing v0.4.0 // indirect github.com/quic-go/qpack v0.6.0 // indirect github.com/safchain/ethtool v0.3.0 // indirect - github.com/sagernet/cronet-go/lib/android_386 v0.0.0-20251209163619-43499a42c286 // indirect - github.com/sagernet/cronet-go/lib/android_amd64 v0.0.0-20251209163619-43499a42c286 // indirect - github.com/sagernet/cronet-go/lib/android_arm v0.0.0-20251209163619-43499a42c286 // indirect - github.com/sagernet/cronet-go/lib/android_arm64 v0.0.0-20251209163619-43499a42c286 // indirect - github.com/sagernet/cronet-go/lib/darwin_amd64 v0.0.0-20251209163619-43499a42c286 // indirect - github.com/sagernet/cronet-go/lib/darwin_arm64 v0.0.0-20251209163619-43499a42c286 // indirect - github.com/sagernet/cronet-go/lib/ios_arm64 v0.0.0-20251209163619-43499a42c286 // indirect - github.com/sagernet/cronet-go/lib/linux_386 v0.0.0-20251209163619-43499a42c286 // indirect - github.com/sagernet/cronet-go/lib/linux_386_musl v0.0.0-20251209163619-43499a42c286 // indirect - github.com/sagernet/cronet-go/lib/linux_amd64 v0.0.0-20251209163619-43499a42c286 // indirect - github.com/sagernet/cronet-go/lib/linux_amd64_musl v0.0.0-20251209163619-43499a42c286 // indirect - github.com/sagernet/cronet-go/lib/linux_arm v0.0.0-20251209163619-43499a42c286 // indirect - github.com/sagernet/cronet-go/lib/linux_arm64 v0.0.0-20251209163619-43499a42c286 // indirect - github.com/sagernet/cronet-go/lib/linux_arm64_musl v0.0.0-20251209163619-43499a42c286 // indirect - github.com/sagernet/cronet-go/lib/linux_arm_musl v0.0.0-20251209163619-43499a42c286 // indirect - github.com/sagernet/cronet-go/lib/windows_386 v0.0.0-20251209163619-43499a42c286 // indirect - github.com/sagernet/cronet-go/lib/windows_amd64 v0.0.0-20251209163619-43499a42c286 // indirect - github.com/sagernet/cronet-go/lib/windows_arm64 v0.0.0-20251209163619-43499a42c286 // indirect + github.com/sagernet/cronet-go/lib/android_386 v0.0.0-20251210132647-15dd6a9ee4bc // indirect + github.com/sagernet/cronet-go/lib/android_amd64 v0.0.0-20251210132647-15dd6a9ee4bc // indirect + github.com/sagernet/cronet-go/lib/android_arm v0.0.0-20251210132647-15dd6a9ee4bc // indirect + github.com/sagernet/cronet-go/lib/android_arm64 v0.0.0-20251210132647-15dd6a9ee4bc // indirect + github.com/sagernet/cronet-go/lib/darwin_amd64 v0.0.0-20251210132647-15dd6a9ee4bc // indirect + github.com/sagernet/cronet-go/lib/darwin_arm64 v0.0.0-20251210132647-15dd6a9ee4bc // indirect + github.com/sagernet/cronet-go/lib/ios_arm64 v0.0.0-20251210132647-15dd6a9ee4bc // indirect + github.com/sagernet/cronet-go/lib/linux_386 v0.0.0-20251210132647-15dd6a9ee4bc // indirect + github.com/sagernet/cronet-go/lib/linux_386_musl v0.0.0-20251210132647-15dd6a9ee4bc // indirect + github.com/sagernet/cronet-go/lib/linux_amd64 v0.0.0-20251210132647-15dd6a9ee4bc // indirect + github.com/sagernet/cronet-go/lib/linux_amd64_musl v0.0.0-20251210132647-15dd6a9ee4bc // indirect + github.com/sagernet/cronet-go/lib/linux_arm v0.0.0-20251210132647-15dd6a9ee4bc // indirect + github.com/sagernet/cronet-go/lib/linux_arm64 v0.0.0-20251210132647-15dd6a9ee4bc // indirect + github.com/sagernet/cronet-go/lib/linux_arm64_musl v0.0.0-20251210132647-15dd6a9ee4bc // indirect + github.com/sagernet/cronet-go/lib/linux_arm_musl v0.0.0-20251210132647-15dd6a9ee4bc // indirect + github.com/sagernet/cronet-go/lib/windows_386 v0.0.0-20251210132647-15dd6a9ee4bc // indirect + github.com/sagernet/cronet-go/lib/windows_amd64 v0.0.0-20251210132647-15dd6a9ee4bc // indirect + github.com/sagernet/cronet-go/lib/windows_arm64 v0.0.0-20251210132647-15dd6a9ee4bc // indirect github.com/sagernet/netlink v0.0.0-20240612041022-b9a21c07ac6a // indirect github.com/sagernet/nftables v0.3.0-beta.4 // indirect github.com/spf13/pflag v1.0.6 // indirect diff --git a/sing-box/go.sum b/sing-box/go.sum index 4fe8031544..12190ff9ca 100644 --- a/sing-box/go.sum +++ b/sing-box/go.sum @@ -150,46 +150,46 @@ github.com/sagernet/bbolt v0.0.0-20231014093535-ea5cb2fe9f0a h1:+NkI2670SQpQWvkk github.com/sagernet/bbolt v0.0.0-20231014093535-ea5cb2fe9f0a/go.mod h1:63s7jpZqcDAIpj8oI/1v4Izok+npJOHACFCU6+huCkM= github.com/sagernet/cors v1.2.1 h1:Cv5Z8y9YSD6Gm+qSpNrL3LO4lD3eQVvbFYJSG7JCMHQ= github.com/sagernet/cors v1.2.1/go.mod h1:O64VyOjjhrkLmQIjF4KGRrJO/5dVXFdpEmCW/eISRAI= -github.com/sagernet/cronet-go v0.0.0-20251209163619-43499a42c286 h1:T3l7r/FRNyf6AS1ZZfvFMYtTCozKWgm/mNXjmg/HqOw= -github.com/sagernet/cronet-go v0.0.0-20251209163619-43499a42c286/go.mod h1:l5IZJLEWpDGJbrF0qBHgxAVBPsAxKOLa1BYDh6B2sdI= -github.com/sagernet/cronet-go/all v0.0.0-20251209163943-9ad85d71d2e3 h1:a6/HHQ2bBrX4humT9jSACAD9kj4ucgal5tYWjOpxsXA= -github.com/sagernet/cronet-go/all v0.0.0-20251209163943-9ad85d71d2e3/go.mod h1:bq4r/IRzbgNUWfcWxJTyex/jKzI6WCSPfrCK3ns4O3A= -github.com/sagernet/cronet-go/lib/android_386 v0.0.0-20251209163619-43499a42c286 h1:sZFASnzhbYtPJoz+7OAx7IC85161iROwEkmHVQcaHS0= -github.com/sagernet/cronet-go/lib/android_386 v0.0.0-20251209163619-43499a42c286/go.mod h1:XXDwdjX/T8xftoeJxQmbBoYXZp8MAPFR2CwbFuTpEtw= -github.com/sagernet/cronet-go/lib/android_amd64 v0.0.0-20251209163619-43499a42c286 h1:XmPpSRMDde4Oi5XzYBuOqWAvzPQsNjmKQfft98OlvLg= -github.com/sagernet/cronet-go/lib/android_amd64 v0.0.0-20251209163619-43499a42c286/go.mod h1:iNiUGoLtnr8/JTuVNj7XJbmpOAp2C6+B81KDrPxwaZM= -github.com/sagernet/cronet-go/lib/android_arm v0.0.0-20251209163619-43499a42c286 h1:EEn7N5sCLZwnmlZjYb63Ewt2SjfYKTQwlQqEaC0zyF8= -github.com/sagernet/cronet-go/lib/android_arm v0.0.0-20251209163619-43499a42c286/go.mod h1:19ILNUOGIzRdOqa2mq+iY0JoHxuieB7/lnjYeaA2vEc= -github.com/sagernet/cronet-go/lib/android_arm64 v0.0.0-20251209163619-43499a42c286 h1:UA4/kKm8qA694fO7Y9EAe9csHecdBgAoKyn5CzUdAig= -github.com/sagernet/cronet-go/lib/android_arm64 v0.0.0-20251209163619-43499a42c286/go.mod h1:JxzGyQf94Cr6sBShKqODGDyRUlESfJK/Njcz9Lz6qMQ= -github.com/sagernet/cronet-go/lib/darwin_amd64 v0.0.0-20251209163619-43499a42c286 h1:Cz1iXs54Urg23BRtdkikDUzaifE72lNwq3D+DHZTVXE= -github.com/sagernet/cronet-go/lib/darwin_amd64 v0.0.0-20251209163619-43499a42c286/go.mod h1:KN+9T9TBycGOLzmKU4QdcHAJEj6Nlx48ifnlTvvHMvs= -github.com/sagernet/cronet-go/lib/darwin_arm64 v0.0.0-20251209163619-43499a42c286 h1:9f7dGYztdhJHqnGxAfg6e3pwiQc7gCIFfbnpYUG8+l4= -github.com/sagernet/cronet-go/lib/darwin_arm64 v0.0.0-20251209163619-43499a42c286/go.mod h1:kojvtUc29KKnk8hs2QIANynVR59921SnGWA9kXohHc0= -github.com/sagernet/cronet-go/lib/ios_arm64 v0.0.0-20251209163619-43499a42c286 h1:cVnXsYi+qvBGxtv5i5qzx05Ol0go4/ZVhEB/nwKdZxE= -github.com/sagernet/cronet-go/lib/ios_arm64 v0.0.0-20251209163619-43499a42c286/go.mod h1:tzVJFTOm66UxLxy6K0ZN5Ic2PC79e+sKKnt+V9puEa4= -github.com/sagernet/cronet-go/lib/linux_386 v0.0.0-20251209163619-43499a42c286 h1:L/M8nypnkrbv+zSFBEzoU3E2WVYoL/+BiF7W/ZGOkcE= -github.com/sagernet/cronet-go/lib/linux_386 v0.0.0-20251209163619-43499a42c286/go.mod h1:cGh5hO6eljCo6KMQ/Cel8Xgq4+etL0awZLRBDVG1EZQ= -github.com/sagernet/cronet-go/lib/linux_386_musl v0.0.0-20251209163619-43499a42c286 h1:UcNkxALcHUpo49DBHr2epN00hTRRiijwh4qv1fdXgRQ= -github.com/sagernet/cronet-go/lib/linux_386_musl v0.0.0-20251209163619-43499a42c286/go.mod h1:JFE0/cxaKkx0wqPMZU7MgaplQlU0zudv82dROJjClKU= -github.com/sagernet/cronet-go/lib/linux_amd64 v0.0.0-20251209163619-43499a42c286 h1:R68J9khidtJRKka3J2dNVKVGrBq0ieevNRS3P8vijMw= -github.com/sagernet/cronet-go/lib/linux_amd64 v0.0.0-20251209163619-43499a42c286/go.mod h1:vU8VftFeSt7fURCa3JXD6+k6ss1YAX+idQjPvHmJ2tI= -github.com/sagernet/cronet-go/lib/linux_amd64_musl v0.0.0-20251209163619-43499a42c286 h1:aDxXLIVS219vxa56UN1ak9Grju6UWKhX0ULw7RGDIgs= -github.com/sagernet/cronet-go/lib/linux_amd64_musl v0.0.0-20251209163619-43499a42c286/go.mod h1:vCe4OUuL+XOUge9v3MyTD45BnuAXiH+DkjN9quDXJzQ= -github.com/sagernet/cronet-go/lib/linux_arm v0.0.0-20251209163619-43499a42c286 h1:r4eaHyVT7KWguRhYTudhq+RHsd0pq7HHP/xLn3v/NuI= -github.com/sagernet/cronet-go/lib/linux_arm v0.0.0-20251209163619-43499a42c286/go.mod h1:w9amBWrvjtohQzBGCKJ7LCh22LhTIJs4sE7cYaKQzM0= -github.com/sagernet/cronet-go/lib/linux_arm64 v0.0.0-20251209163619-43499a42c286 h1:TYxTK8434FqUokQKzg5Qs8xpjU8ws2VVn7J4gfL0jY0= -github.com/sagernet/cronet-go/lib/linux_arm64 v0.0.0-20251209163619-43499a42c286/go.mod h1:TqlsFtcYS/etTeck46kHBeT8Le0Igw1Q/AV88UnMS3s= -github.com/sagernet/cronet-go/lib/linux_arm64_musl v0.0.0-20251209163619-43499a42c286 h1:2dysrFpUGjR/BePrJYoGyl8UmqlEY67g8ySyI2p1cjA= -github.com/sagernet/cronet-go/lib/linux_arm64_musl v0.0.0-20251209163619-43499a42c286/go.mod h1:B6Qd0vys8sv9OKVRN6J9RqDzYRGE938Fb2zrYdBDyTQ= -github.com/sagernet/cronet-go/lib/linux_arm_musl v0.0.0-20251209163619-43499a42c286 h1:edRSfV1xEloFgpdiordf0S653D5r0exHN4X85BT06nk= -github.com/sagernet/cronet-go/lib/linux_arm_musl v0.0.0-20251209163619-43499a42c286/go.mod h1:3tXMMFY7AHugOVBZ5Al7cL7JKsnFOe5bMVr0hZPk3ow= -github.com/sagernet/cronet-go/lib/windows_386 v0.0.0-20251209163619-43499a42c286 h1:CUWmGJ8PslWMJHanzgxF9+CuN4fk4NigKwxw1tjpdRY= -github.com/sagernet/cronet-go/lib/windows_386 v0.0.0-20251209163619-43499a42c286/go.mod h1:rnS7D+ULJX2PrP0Cy+05GS0mRZ2PP6+gVSroZKt8fjk= -github.com/sagernet/cronet-go/lib/windows_amd64 v0.0.0-20251209163619-43499a42c286 h1:2/fTHNBvTGgxWALqogKGpzKw1zLgc5lSidMRchLcoqk= -github.com/sagernet/cronet-go/lib/windows_amd64 v0.0.0-20251209163619-43499a42c286/go.mod h1:lm9w/oCCRyBiUa3G8lDQTT8x/ONUvgVR2iV9fVzUZB8= -github.com/sagernet/cronet-go/lib/windows_arm64 v0.0.0-20251209163619-43499a42c286 h1:J1nQYpbALQGlCOuErF0/lI3SnwPd0egy/iUxhgRK76g= -github.com/sagernet/cronet-go/lib/windows_arm64 v0.0.0-20251209163619-43499a42c286/go.mod h1:n34YyLgapgjWdKa0IoeczjAFCwD3/dxbsH5sucKw0bw= +github.com/sagernet/cronet-go v0.0.0-20251210132647-15dd6a9ee4bc h1:TeUwtjNOirI7QW6RUGmzovZHiImdyysxdXii8tj2pjE= +github.com/sagernet/cronet-go v0.0.0-20251210132647-15dd6a9ee4bc/go.mod h1:l5IZJLEWpDGJbrF0qBHgxAVBPsAxKOLa1BYDh6B2sdI= +github.com/sagernet/cronet-go/all v0.0.0-20251210133029-b0d1058a9fcf h1:9HfW4vwWSXSOBcxT3s7MAyxGnAxPpcFiRHW/9ImtlFA= +github.com/sagernet/cronet-go/all v0.0.0-20251210133029-b0d1058a9fcf/go.mod h1:hljs4OQivwLEGy9ijqAQ7/bKfdfIOnudIuBKVWGpuNU= +github.com/sagernet/cronet-go/lib/android_386 v0.0.0-20251210132647-15dd6a9ee4bc h1:7RwE5fT6D/bH8g/Sp/+bFPTTgYEHk8mI3wcP9nfOkfc= +github.com/sagernet/cronet-go/lib/android_386 v0.0.0-20251210132647-15dd6a9ee4bc/go.mod h1:XXDwdjX/T8xftoeJxQmbBoYXZp8MAPFR2CwbFuTpEtw= +github.com/sagernet/cronet-go/lib/android_amd64 v0.0.0-20251210132647-15dd6a9ee4bc h1:5ABO0dzl0FREp4yOj8tRUil8Rnr+UxAbgHm6/1/GaUs= +github.com/sagernet/cronet-go/lib/android_amd64 v0.0.0-20251210132647-15dd6a9ee4bc/go.mod h1:iNiUGoLtnr8/JTuVNj7XJbmpOAp2C6+B81KDrPxwaZM= +github.com/sagernet/cronet-go/lib/android_arm v0.0.0-20251210132647-15dd6a9ee4bc h1:6RWqk2JxL/JoyxeahfV6nWj0HpRJXKM42hAZAobprLk= +github.com/sagernet/cronet-go/lib/android_arm v0.0.0-20251210132647-15dd6a9ee4bc/go.mod h1:19ILNUOGIzRdOqa2mq+iY0JoHxuieB7/lnjYeaA2vEc= +github.com/sagernet/cronet-go/lib/android_arm64 v0.0.0-20251210132647-15dd6a9ee4bc h1:GHUnWWlndwxHw4pEvw40ISO7xrMq+h+P+FQ3KrGlghQ= +github.com/sagernet/cronet-go/lib/android_arm64 v0.0.0-20251210132647-15dd6a9ee4bc/go.mod h1:JxzGyQf94Cr6sBShKqODGDyRUlESfJK/Njcz9Lz6qMQ= +github.com/sagernet/cronet-go/lib/darwin_amd64 v0.0.0-20251210132647-15dd6a9ee4bc h1:urmRC1HxIetnZuyaPkHketyrhWBhwvRr74XXEHmqgLc= +github.com/sagernet/cronet-go/lib/darwin_amd64 v0.0.0-20251210132647-15dd6a9ee4bc/go.mod h1:KN+9T9TBycGOLzmKU4QdcHAJEj6Nlx48ifnlTvvHMvs= +github.com/sagernet/cronet-go/lib/darwin_arm64 v0.0.0-20251210132647-15dd6a9ee4bc h1:EN57YqGy2cbeQexLBb6vf1IcCEjNmz6sSoMNOik8DJQ= +github.com/sagernet/cronet-go/lib/darwin_arm64 v0.0.0-20251210132647-15dd6a9ee4bc/go.mod h1:kojvtUc29KKnk8hs2QIANynVR59921SnGWA9kXohHc0= +github.com/sagernet/cronet-go/lib/ios_arm64 v0.0.0-20251210132647-15dd6a9ee4bc h1:aRFCWKVFt5aTbcHQ7rUWLtfpxVtUbB1t1VDEgMm1LdY= +github.com/sagernet/cronet-go/lib/ios_arm64 v0.0.0-20251210132647-15dd6a9ee4bc/go.mod h1:tzVJFTOm66UxLxy6K0ZN5Ic2PC79e+sKKnt+V9puEa4= +github.com/sagernet/cronet-go/lib/linux_386 v0.0.0-20251210132647-15dd6a9ee4bc h1:txzvlKqPSL3yUVQs0DOx1bc0ONEuiWqIEoaQvMJNqdk= +github.com/sagernet/cronet-go/lib/linux_386 v0.0.0-20251210132647-15dd6a9ee4bc/go.mod h1:cGh5hO6eljCo6KMQ/Cel8Xgq4+etL0awZLRBDVG1EZQ= +github.com/sagernet/cronet-go/lib/linux_386_musl v0.0.0-20251210132647-15dd6a9ee4bc h1:DdYm5omtBr6/0DyCG5cTS4fK8hXoPXeEWiaBhDdUqac= +github.com/sagernet/cronet-go/lib/linux_386_musl v0.0.0-20251210132647-15dd6a9ee4bc/go.mod h1:JFE0/cxaKkx0wqPMZU7MgaplQlU0zudv82dROJjClKU= +github.com/sagernet/cronet-go/lib/linux_amd64 v0.0.0-20251210132647-15dd6a9ee4bc h1:qZ5koP16Y5Wbzi89bRA3c2C9vUlZPk7uz5ZLBAd/4h4= +github.com/sagernet/cronet-go/lib/linux_amd64 v0.0.0-20251210132647-15dd6a9ee4bc/go.mod h1:vU8VftFeSt7fURCa3JXD6+k6ss1YAX+idQjPvHmJ2tI= +github.com/sagernet/cronet-go/lib/linux_amd64_musl v0.0.0-20251210132647-15dd6a9ee4bc h1:nz3DMrICKuhS9ht7Hx1Hc1Al4LtfPADK/SbKrJ/UXKc= +github.com/sagernet/cronet-go/lib/linux_amd64_musl v0.0.0-20251210132647-15dd6a9ee4bc/go.mod h1:vCe4OUuL+XOUge9v3MyTD45BnuAXiH+DkjN9quDXJzQ= +github.com/sagernet/cronet-go/lib/linux_arm v0.0.0-20251210132647-15dd6a9ee4bc h1:5OLCnge+qhMLS1HBz/KY803Pd3IRC7Q9KP71GZMM+p0= +github.com/sagernet/cronet-go/lib/linux_arm v0.0.0-20251210132647-15dd6a9ee4bc/go.mod h1:w9amBWrvjtohQzBGCKJ7LCh22LhTIJs4sE7cYaKQzM0= +github.com/sagernet/cronet-go/lib/linux_arm64 v0.0.0-20251210132647-15dd6a9ee4bc h1:pg9jxoJQsiSxRBCTsFHXATGmSLMpsdvdCvVNhpMEdDA= +github.com/sagernet/cronet-go/lib/linux_arm64 v0.0.0-20251210132647-15dd6a9ee4bc/go.mod h1:TqlsFtcYS/etTeck46kHBeT8Le0Igw1Q/AV88UnMS3s= +github.com/sagernet/cronet-go/lib/linux_arm64_musl v0.0.0-20251210132647-15dd6a9ee4bc h1:gAnasnvsCH8seCtYsfFoWsHeldBZUKPvarSjt9bKIak= +github.com/sagernet/cronet-go/lib/linux_arm64_musl v0.0.0-20251210132647-15dd6a9ee4bc/go.mod h1:B6Qd0vys8sv9OKVRN6J9RqDzYRGE938Fb2zrYdBDyTQ= +github.com/sagernet/cronet-go/lib/linux_arm_musl v0.0.0-20251210132647-15dd6a9ee4bc h1:YVBUW8D3w/c0F5N3F+5rnXyNPNDODFPVw1NAWfsQv2Q= +github.com/sagernet/cronet-go/lib/linux_arm_musl v0.0.0-20251210132647-15dd6a9ee4bc/go.mod h1:3tXMMFY7AHugOVBZ5Al7cL7JKsnFOe5bMVr0hZPk3ow= +github.com/sagernet/cronet-go/lib/windows_386 v0.0.0-20251210132647-15dd6a9ee4bc h1:8w1wlyIpIcH3/1LPe6NMxZxLpsTq+00FEoSrMl+o03o= +github.com/sagernet/cronet-go/lib/windows_386 v0.0.0-20251210132647-15dd6a9ee4bc/go.mod h1:rnS7D+ULJX2PrP0Cy+05GS0mRZ2PP6+gVSroZKt8fjk= +github.com/sagernet/cronet-go/lib/windows_amd64 v0.0.0-20251210132647-15dd6a9ee4bc h1:Qwof0qMpoRXycadI1OWgwj7OTaCZQqoYbwqVAKd4rrs= +github.com/sagernet/cronet-go/lib/windows_amd64 v0.0.0-20251210132647-15dd6a9ee4bc/go.mod h1:lm9w/oCCRyBiUa3G8lDQTT8x/ONUvgVR2iV9fVzUZB8= +github.com/sagernet/cronet-go/lib/windows_arm64 v0.0.0-20251210132647-15dd6a9ee4bc h1:/2D4fyTJjYwf5NzgnOuTElGpX6fFN2dFAf/x0L0w1pI= +github.com/sagernet/cronet-go/lib/windows_arm64 v0.0.0-20251210132647-15dd6a9ee4bc/go.mod h1:n34YyLgapgjWdKa0IoeczjAFCwD3/dxbsH5sucKw0bw= github.com/sagernet/fswatch v0.1.1 h1:YqID+93B7VRfqIH3PArW/XpJv5H4OLEVWDfProGoRQs= github.com/sagernet/fswatch v0.1.1/go.mod h1:nz85laH0mkQqJfaOrqPpkwtU1znMFNVTpT/5oRsVz/o= github.com/sagernet/gomobile v0.1.8 h1:vXgoN0pjsMONAaYCTdsKBX2T1kxuS7sbT/mZ7PElGoo= diff --git a/small/luci-app-passwall/luasrc/passwall/util_sing-box.lua b/small/luci-app-passwall/luasrc/passwall/util_sing-box.lua index 04c9618265..8a81cdc063 100644 --- a/small/luci-app-passwall/luasrc/passwall/util_sing-box.lua +++ b/small/luci-app-passwall/luasrc/passwall/util_sing-box.lua @@ -206,9 +206,9 @@ function gen_outbound(flag, node, tag, proxy_table) local first = node.tcp_guise_http_path[1] return (first == "" or not first) and "/" or first end)() or "/", - headers = { - ["User-Agent"] = node.tcp_guise_http_user_agent or nil - }, + headers = node.tcp_guise_http_user_agent and { + ["User-Agent"] = node.tcp_guise_http_user_agent + } or nil, idle_timeout = (node.http_h2_health_check == "1") and node.http_h2_read_idle_timeout or nil, ping_timeout = (node.http_h2_health_check == "1") and node.http_h2_health_check_timeout or nil, } @@ -220,9 +220,9 @@ function gen_outbound(flag, node, tag, proxy_table) type = "http", host = node.http_host or {}, path = node.http_path or "/", - headers = { - ["User-Agent"] = node.http_user_agent or nil - }, + headers = node.http_user_agent and { + ["User-Agent"] = node.http_user_agent + } or nil, idle_timeout = (node.http_h2_health_check == "1") and node.http_h2_read_idle_timeout or nil, ping_timeout = (node.http_h2_health_check == "1") and node.http_h2_health_check_timeout or nil, } @@ -233,10 +233,10 @@ function gen_outbound(flag, node, tag, proxy_table) v2ray_transport = { type = "ws", path = node.ws_path or "/", - headers = { - Host = node.ws_host or nil, - ["User-Agent"] = node.ws_user_agent or nil - }, + headers = (node.ws_host or node.ws_user_agent) and { + Host = node.ws_host, + ["User-Agent"] = node.ws_user_agent + } or nil, max_early_data = tonumber(node.ws_maxEarlyData) or nil, early_data_header_name = (node.ws_earlyDataHeaderName) and node.ws_earlyDataHeaderName or nil --要与 Xray-core 兼容,请将其设置为 Sec-WebSocket-Protocol。它需要与服务器保持一致。 } @@ -247,9 +247,9 @@ function gen_outbound(flag, node, tag, proxy_table) type = "httpupgrade", host = node.httpupgrade_host, path = node.httpupgrade_path or "/", - headers = { - ["User-Agent"] = node.httpupgrade_user_agent or nil - } + headers = node.httpupgrade_user_agent and { + ["User-Agent"] = node.httpupgrade_user_agent + } or nil } end diff --git a/small/luci-app-passwall/luasrc/passwall/util_xray.lua b/small/luci-app-passwall/luasrc/passwall/util_xray.lua index 77be6be021..7b7be7cee9 100644 --- a/small/luci-app-passwall/luasrc/passwall/util_xray.lua +++ b/small/luci-app-passwall/luasrc/passwall/util_xray.lua @@ -178,10 +178,10 @@ function gen_outbound(flag, node, tag, proxy_table) end return r end)() or {"/"}, - headers = { - Host = node.tcp_guise_http_host or {}, + headers = (node.tcp_guise_http_host or node.tcp_guise_http_user_agent) and { + Host = node.tcp_guise_http_host, ["User-Agent"] = node.tcp_guise_http_user_agent and {node.tcp_guise_http_user_agent} or nil - } + } or nil } or nil } } or nil, @@ -201,10 +201,10 @@ function gen_outbound(flag, node, tag, proxy_table) } or nil, wsSettings = (node.transport == "ws") and { path = node.ws_path or "/", - headers = { - Host = node.ws_host or nil, - ["User-Agent"] = node.ws_user_agent or nil - }, + headers = (node.ws_host or node.ws_user_agent) and { + Host = node.ws_host, + ["User-Agent"] = node.ws_user_agent + } or nil, maxEarlyData = tonumber(node.ws_maxEarlyData) or nil, earlyDataHeaderName = (node.ws_earlyDataHeaderName) and node.ws_earlyDataHeaderName or nil, heartbeatPeriod = tonumber(node.ws_heartbeatPeriod) or nil @@ -220,9 +220,9 @@ function gen_outbound(flag, node, tag, proxy_table) httpupgradeSettings = (node.transport == "httpupgrade") and { path = node.httpupgrade_path or "/", host = node.httpupgrade_host, - headers = { - ["User-Agent"] = node.httpupgrade_user_agent or nil - } + headers = node.httpupgrade_user_agent and { + ["User-Agent"] = node.httpupgrade_user_agent + } or nil } or nil, xhttpSettings = (node.transport == "xhttp") and { mode = node.xhttp_mode or "auto", diff --git a/v2rayn/v2rayN/ServiceLib/Resx/ResUI.fr.resx b/v2rayn/v2rayN/ServiceLib/Resx/ResUI.fr.resx index e17f56b9b9..a669fabab6 100644 --- a/v2rayn/v2rayN/ServiceLib/Resx/ResUI.fr.resx +++ b/v2rayn/v2rayN/ServiceLib/Resx/ResUI.fr.resx @@ -1636,9 +1636,9 @@ Si un certificat auto-signé est utilisé ou si le système contient une CA non Afficher dans le Dock de macOS (redém. requis) - Configuration Item 2, Select and add from self-built + Élément de config 2 : choisir et ajouter depuis self-hosted - ALPN must contain 'http/1.1' when using WebSocket with TLS. + Avec WebSocket et TLS, l’ALPN doit inclure ‘http/1.1’. - \ No newline at end of file + diff --git a/xray-core/app/dns/fakedns/fake.go b/xray-core/app/dns/fakedns/fake.go index 20e4bffa60..33bf63ccc4 100644 --- a/xray-core/app/dns/fakedns/fake.go +++ b/xray-core/app/dns/fakedns/fake.go @@ -4,7 +4,6 @@ import ( "context" "math" "math/big" - gonet "net" "sync" "time" @@ -17,7 +16,7 @@ import ( type Holder struct { domainToIP cache.Lru - ipRange *gonet.IPNet + ipRange *net.IPNet mu *sync.Mutex config *FakeDnsPool @@ -79,10 +78,10 @@ func (fkdns *Holder) initializeFromConfig() error { } func (fkdns *Holder) initialize(ipPoolCidr string, lruSize int) error { - var ipRange *gonet.IPNet + var ipRange *net.IPNet var err error - if _, ipRange, err = gonet.ParseCIDR(ipPoolCidr); err != nil { + if _, ipRange, err = net.ParseCIDR(ipPoolCidr); err != nil { return errors.New("Unable to parse CIDR for Fake DNS IP assignment").Base(err).AtError() } diff --git a/xray-core/app/dns/fakedns/fakedns_test.go b/xray-core/app/dns/fakedns/fakedns_test.go index 76ccbca67b..f9a8449c43 100644 --- a/xray-core/app/dns/fakedns/fakedns_test.go +++ b/xray-core/app/dns/fakedns/fakedns_test.go @@ -1,7 +1,6 @@ package fakedns import ( - gonet "net" "strconv" "testing" @@ -155,7 +154,7 @@ func TestFakeDNSMulti(t *testing.T) { assert.True(t, inPool) }) t.Run("ipv6", func(t *testing.T) { - ip, err := gonet.ResolveIPAddr("ip", "fddd:c5b4:ff5f:f4f0::5") + ip, err := net.ResolveIPAddr("ip", "fddd:c5b4:ff5f:f4f0::5") assert.Nil(t, err) inPool := fakeMulti.IsIPInIPPool(net.IPAddress(ip.IP)) assert.True(t, inPool) @@ -165,7 +164,7 @@ func TestFakeDNSMulti(t *testing.T) { assert.False(t, inPool) }) t.Run("ipv6_inverse", func(t *testing.T) { - ip, err := gonet.ResolveIPAddr("ip", "fcdd:c5b4:ff5f:f4f0::5") + ip, err := net.ResolveIPAddr("ip", "fcdd:c5b4:ff5f:f4f0::5") assert.Nil(t, err) inPool := fakeMulti.IsIPInIPPool(net.IPAddress(ip.IP)) assert.False(t, inPool) diff --git a/xray-core/app/proxyman/inbound/worker.go b/xray-core/app/proxyman/inbound/worker.go index 42b5c3e9b2..ef454d2119 100644 --- a/xray-core/app/proxyman/inbound/worker.go +++ b/xray-core/app/proxyman/inbound/worker.go @@ -2,7 +2,6 @@ package inbound import ( "context" - gonet "net" "sync" "sync/atomic" "time" @@ -565,12 +564,12 @@ func (w *dsWorker) Close() error { } func IsLocal(ip net.IP) bool { - addrs, err := gonet.InterfaceAddrs() + addrs, err := net.InterfaceAddrs() if err != nil { return false } for _, addr := range addrs { - if ipnet, ok := addr.(*gonet.IPNet); ok { + if ipnet, ok := addr.(*net.IPNet); ok { if ipnet.IP.Equal(ip) { return true } diff --git a/xray-core/app/proxyman/outbound/handler.go b/xray-core/app/proxyman/outbound/handler.go index eaa1b0b2f2..62902c60dc 100644 --- a/xray-core/app/proxyman/outbound/handler.go +++ b/xray-core/app/proxyman/outbound/handler.go @@ -6,7 +6,6 @@ import ( goerrors "errors" "io" "math/big" - gonet "net" "os" "github.com/xtls/xray-core/common/dice" @@ -398,7 +397,7 @@ func (h *Handler) ProxySettings() *serial.TypedMessage { func ParseRandomIP(addr net.Address, prefix string) net.Address { - _, ipnet, _ := gonet.ParseCIDR(addr.IP().String() + "/" + prefix) + _, ipnet, _ := net.ParseCIDR(addr.IP().String() + "/" + prefix) ones, bits := ipnet.Mask.Size() subnetSize := new(big.Int).Lsh(big.NewInt(1), uint(bits-ones)) @@ -412,5 +411,5 @@ func ParseRandomIP(addr net.Address, prefix string) net.Address { padded := make([]byte, len(ipnet.IP)) copy(padded[len(padded)-len(rndBytes):], rndBytes) - return net.ParseAddress(gonet.IP(padded).String()) + return net.ParseAddress(net.IP(padded).String()) } diff --git a/xray-core/common/net/system.go b/xray-core/common/net/system.go index 7e1c4b01a3..136da0c18b 100644 --- a/xray-core/common/net/system.go +++ b/xray-core/common/net/system.go @@ -12,6 +12,8 @@ var ( type ListenConfig = net.ListenConfig +type KeepAliveConfig = net.KeepAliveConfig + var ( Listen = net.Listen ListenTCP = net.ListenTCP @@ -26,6 +28,12 @@ var FileConn = net.FileConn // ParseIP is an alias of net.ParseIP var ParseIP = net.ParseIP +var ParseCIDR = net.ParseCIDR + +var ResolveIPAddr = net.ResolveIPAddr + +var InterfaceByName = net.InterfaceByName + var SplitHostPort = net.SplitHostPort var CIDRMask = net.CIDRMask @@ -51,6 +59,8 @@ type ( UnixConn = net.UnixConn ) +type IPAddr = net.IPAddr + // IP is an alias for net.IP. type ( IP = net.IP @@ -82,3 +92,11 @@ var ( ) type Resolver = net.Resolver + +var DefaultResolver = net.DefaultResolver + +var JoinHostPort = net.JoinHostPort + +var InterfaceAddrs = net.InterfaceAddrs + +var Interfaces = net.Interfaces diff --git a/xray-core/go.mod b/xray-core/go.mod index 69816eb415..1014ca7485 100644 --- a/xray-core/go.mod +++ b/xray-core/go.mod @@ -21,10 +21,10 @@ require ( github.com/vishvananda/netlink v1.3.1 github.com/xtls/reality v0.0.0-20251014195629-e4eec4520535 go4.org/netipx v0.0.0-20231129151722-fdeea329fbba - golang.org/x/crypto v0.44.0 - golang.org/x/net v0.47.0 - golang.org/x/sync v0.18.0 - golang.org/x/sys v0.38.0 + golang.org/x/crypto v0.46.0 + golang.org/x/net v0.48.0 + golang.org/x/sync v0.19.0 + golang.org/x/sys v0.39.0 golang.zx2c4.com/wireguard v0.0.0-20231211153847-12269c276173 google.golang.org/grpc v1.77.0 google.golang.org/protobuf v1.36.10 @@ -46,10 +46,10 @@ require ( github.com/quic-go/qpack v0.6.0 // indirect github.com/riobard/go-bloom v0.0.0-20200614022211-cdc8013cb5b3 // indirect github.com/vishvananda/netns v0.0.5 // indirect - golang.org/x/mod v0.29.0 // indirect - golang.org/x/text v0.31.0 // indirect + golang.org/x/mod v0.30.0 // indirect + golang.org/x/text v0.32.0 // indirect golang.org/x/time v0.12.0 // indirect - golang.org/x/tools v0.38.0 // indirect + golang.org/x/tools v0.39.0 // indirect golang.zx2c4.com/wintun v0.0.0-20230126152724-0fa3db229ce2 // indirect google.golang.org/genproto/googleapis/rpc v0.0.0-20251022142026-3a174f9686a8 // indirect gopkg.in/yaml.v2 v2.4.0 // indirect diff --git a/xray-core/go.sum b/xray-core/go.sum index 62af764362..4938d05146 100644 --- a/xray-core/go.sum +++ b/xray-core/go.sum @@ -95,20 +95,20 @@ go4.org/netipx v0.0.0-20231129151722-fdeea329fbba h1:0b9z3AuHCjxk0x/opv64kcgZLBs go4.org/netipx v0.0.0-20231129151722-fdeea329fbba/go.mod h1:PLyyIXexvUFg3Owu6p/WfdlivPbZJsZdgWZlrGope/Y= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= -golang.org/x/crypto v0.44.0 h1:A97SsFvM3AIwEEmTBiaxPPTYpDC47w720rdiiUvgoAU= -golang.org/x/crypto v0.44.0/go.mod h1:013i+Nw79BMiQiMsOPcVCB5ZIJbYkerPrGnOa00tvmc= +golang.org/x/crypto v0.46.0 h1:cKRW/pmt1pKAfetfu+RCEvjvZkA9RimPbh7bhFjGVBU= +golang.org/x/crypto v0.46.0/go.mod h1:Evb/oLKmMraqjZ2iQTwDwvCtJkczlDuTmdJXoZVzqU0= golang.org/x/mod v0.5.1/go.mod h1:5OXOZSfqPIIbmVBIIKWRFfZjPR0E5r58TLhUjH0a2Ro= -golang.org/x/mod v0.29.0 h1:HV8lRxZC4l2cr3Zq1LvtOsi/ThTgWnUk/y64QSs8GwA= -golang.org/x/mod v0.29.0/go.mod h1:NyhrlYXJ2H4eJiRy/WDBO6HMqZQ6q9nk4JzS3NuCK+w= +golang.org/x/mod v0.30.0 h1:fDEXFVZ/fmCKProc/yAXXUijritrDzahmwwefnjoPFk= +golang.org/x/mod v0.30.0/go.mod h1:lAsf5O2EvJeSFMiBxXDki7sCgAxEUcZHXoXMKT4GJKc= golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20211015210444-4f30a5c0130f/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= -golang.org/x/net v0.47.0 h1:Mx+4dIFzqraBXUugkia1OOvlD6LemFo1ALMHjrXDOhY= -golang.org/x/net v0.47.0/go.mod h1:/jNxtkgq5yWUGYkaZGqo27cfGZ1c5Nen03aYrrKpVRU= +golang.org/x/net v0.48.0 h1:zyQRTTrjc33Lhh0fBgT/H3oZq9WuvRR5gPC70xpDiQU= +golang.org/x/net v0.48.0/go.mod h1:+ndRgGjkh8FGtu1w1FGbEC31if4VrNVMuKTgcAAnQRY= golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.18.0 h1:kr88TuHDroi+UVf+0hZnirlk8o8T+4MrK6mr60WkH/I= -golang.org/x/sync v0.18.0/go.mod h1:9KTHXmSnoGruLpwFjVSX0lNNA75CykiMECbovNTZqGI= +golang.org/x/sync v0.19.0 h1:vV+1eWNmZ5geRlYjzm2adRgW2/mcpevXNg50YZtPCE4= +golang.org/x/sync v0.19.0/go.mod h1:9KTHXmSnoGruLpwFjVSX0lNNA75CykiMECbovNTZqGI= golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= @@ -116,21 +116,21 @@ golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20211019181941-9d821ace8654/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.2.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.10.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.38.0 h1:3yZWxaJjBmCWXqhN1qh02AkOnCQ1poK6oF+a7xWL6Gc= -golang.org/x/sys v0.38.0/go.mod h1:OgkHotnGiDImocRcuBABYBEXf8A9a87e/uXjp9XT3ks= +golang.org/x/sys v0.39.0 h1:CvCKL8MeisomCi6qNZ+wbb0DN9E5AATixKsvNtMoMFk= +golang.org/x/sys v0.39.0/go.mod h1:OgkHotnGiDImocRcuBABYBEXf8A9a87e/uXjp9XT3ks= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= -golang.org/x/text v0.31.0 h1:aC8ghyu4JhP8VojJ2lEHBnochRno1sgL6nEi9WGFGMM= -golang.org/x/text v0.31.0/go.mod h1:tKRAlv61yKIjGGHX/4tP1LTbc13YSec1pxVEWXzfoeM= +golang.org/x/text v0.32.0 h1:ZD01bjUt1FQ9WJ0ClOL5vxgxOI/sVCNgX1YtKwcY0mU= +golang.org/x/text v0.32.0/go.mod h1:o/rUWzghvpD5TXrTIBuJU77MTaN0ljMWE47kxGJQ7jY= golang.org/x/time v0.12.0 h1:ScB/8o8olJvc+CQPWrK3fPZNfh7qgwCrY0zJmoEQLSE= golang.org/x/time v0.12.0/go.mod h1:CDIdPxbZBQxdj6cxyCIdrNogrJKMJ7pr37NYpMcMDSg= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.1.8/go.mod h1:nABZi5QlRsZVlzPpHl034qft6wpY4eDcsTt5AaioBiU= -golang.org/x/tools v0.38.0 h1:Hx2Xv8hISq8Lm16jvBZ2VQf+RLmbd7wVUsALibYI/IQ= -golang.org/x/tools v0.38.0/go.mod h1:yEsQ/d/YK8cjh0L6rZlY8tgtlKiBNTL14pGDJPJpYQs= +golang.org/x/tools v0.39.0 h1:ik4ho21kwuQln40uelmciQPp9SipgNDdrafrYA4TmQQ= +golang.org/x/tools v0.39.0/go.mod h1:JnefbkDPyD8UU2kI5fuf8ZX4/yUeh9W877ZeBONxUqQ= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= diff --git a/xray-core/proxy/wireguard/bind.go b/xray-core/proxy/wireguard/bind.go index 07ec85ef8a..515afaa593 100644 --- a/xray-core/proxy/wireguard/bind.go +++ b/xray-core/proxy/wireguard/bind.go @@ -3,14 +3,13 @@ package wireguard import ( "context" "errors" - "net" "net/netip" "strconv" "sync" "golang.zx2c4.com/wireguard/conn" - xnet "github.com/xtls/xray-core/common/net" + "github.com/xtls/xray-core/common/net" "github.com/xtls/xray-core/features/dns" "github.com/xtls/xray-core/transport/internet" ) @@ -51,21 +50,21 @@ func (n *netBind) ParseEndpoint(s string) (conn.Endpoint, error) { return nil, err } - addr := xnet.ParseAddress(ipStr) - if addr.Family() == xnet.AddressFamilyDomain { + addr := net.ParseAddress(ipStr) + if addr.Family() == net.AddressFamilyDomain { ips, _, err := n.dns.LookupIP(addr.Domain(), n.dnsOption) if err != nil { return nil, err } else if len(ips) == 0 { return nil, dns.ErrEmptyResponse } - addr = xnet.IPAddress(ips[0]) + addr = net.IPAddress(ips[0]) } - dst := xnet.Destination{ + dst := net.Destination{ Address: addr, - Port: xnet.Port(portNum), - Network: xnet.Network_UDP, + Port: net.Port(portNum), + Network: net.Network_UDP, } return &netEndpoint{ @@ -214,7 +213,7 @@ func (bind *netBindServer) Send(buff [][]byte, endpoint conn.Endpoint) error { } type netEndpoint struct { - dst xnet.Destination + dst net.Destination conn net.Conn } @@ -247,7 +246,7 @@ func (e netEndpoint) SrcToString() string { return "" } -func toNetIpAddr(addr xnet.Address) netip.Addr { +func toNetIpAddr(addr net.Address) netip.Addr { if addr.Family().IsIPv4() { ip := addr.IP() return netip.AddrFrom4([4]byte{ip[0], ip[1], ip[2], ip[3]}) diff --git a/xray-core/proxy/wireguard/tun.go b/xray-core/proxy/wireguard/tun.go index 74a3b71d87..bd20fab212 100644 --- a/xray-core/proxy/wireguard/tun.go +++ b/xray-core/proxy/wireguard/tun.go @@ -3,7 +3,6 @@ package wireguard import ( "context" "fmt" - "net" "net/netip" "runtime" "strconv" @@ -13,7 +12,7 @@ import ( "github.com/xtls/xray-core/common/errors" "github.com/xtls/xray-core/common/log" - xnet "github.com/xtls/xray-core/common/net" + "github.com/xtls/xray-core/common/net" "github.com/xtls/xray-core/proxy/wireguard/gvisortun" "gvisor.dev/gvisor/pkg/tcpip" "gvisor.dev/gvisor/pkg/tcpip/adapters/gonet" @@ -28,7 +27,7 @@ import ( type tunCreator func(localAddresses []netip.Addr, mtu int, handler promiscuousModeHandler) (Tunnel, error) -type promiscuousModeHandler func(dest xnet.Destination, conn net.Conn) +type promiscuousModeHandler func(dest net.Destination, conn net.Conn) type Tunnel interface { BuildDevice(ipc string, bind conn.Bind) error @@ -169,7 +168,7 @@ func createGVisorTun(localAddresses []netip.Addr, mtu int, handler promiscuousMo ep.SocketOptions().SetKeepAlive(true) // local address is actually destination - handler(xnet.TCPDestination(xnet.IPAddress(id.LocalAddress.AsSlice()), xnet.Port(id.LocalPort)), gonet.NewTCPConn(&wq, ep)) + handler(net.TCPDestination(net.IPAddress(id.LocalAddress.AsSlice()), net.Port(id.LocalPort)), gonet.NewTCPConn(&wq, ep)) }(r) }) stack.SetTransportProtocolHandler(tcp.ProtocolNumber, tcpForwarder.HandlePacket) @@ -194,7 +193,7 @@ func createGVisorTun(localAddresses []netip.Addr, mtu int, handler promiscuousMo Timeout: 15 * time.Second, }) - handler(xnet.UDPDestination(xnet.IPAddress(id.LocalAddress.AsSlice()), xnet.Port(id.LocalPort)), gonet.NewUDPConn(&wq, ep)) + handler(net.UDPDestination(net.IPAddress(id.LocalAddress.AsSlice()), net.Port(id.LocalPort)), gonet.NewUDPConn(&wq, ep)) }(r) }) stack.SetTransportProtocolHandler(udp.ProtocolNumber, udpForwarder.HandlePacket) diff --git a/xray-core/transport/internet/dialer.go b/xray-core/transport/internet/dialer.go index e0da30c2ad..9342f26f5f 100644 --- a/xray-core/transport/internet/dialer.go +++ b/xray-core/transport/internet/dialer.go @@ -3,7 +3,6 @@ package internet import ( "context" "fmt" - gonet "net" "strings" "github.com/xtls/xray-core/common" @@ -183,7 +182,7 @@ func checkAddressPortStrategy(ctx context.Context, dest net.Destination, sockopt if len(parts) != 3 { return nil, errors.New("invalid address format", dest.Address.String()) } - _, srvRecords, err := gonet.DefaultResolver.LookupSRV(context.Background(), parts[0][1:], parts[1][1:], parts[2]) + _, srvRecords, err := net.DefaultResolver.LookupSRV(context.Background(), parts[0][1:], parts[1][1:], parts[2]) if err != nil { return nil, errors.New("failed to lookup SRV record").Base(err) } @@ -198,7 +197,7 @@ func checkAddressPortStrategy(ctx context.Context, dest net.Destination, sockopt } if OverrideBy == "txt" { errors.LogDebug(ctx, "query TXT record for "+dest.Address.String()) - txtRecords, err := gonet.DefaultResolver.LookupTXT(ctx, dest.Address.String()) + txtRecords, err := net.DefaultResolver.LookupTXT(ctx, dest.Address.String()) if err != nil { errors.LogError(ctx, "failed to lookup SRV record: "+err.Error()) return nil, errors.New("failed to lookup SRV record").Base(err) diff --git a/xray-core/transport/internet/grpc/dial.go b/xray-core/transport/internet/grpc/dial.go index b8740daea3..454b328088 100644 --- a/xray-core/transport/internet/grpc/dial.go +++ b/xray-core/transport/internet/grpc/dial.go @@ -2,7 +2,6 @@ package grpc import ( "context" - gonet "net" "sync" "time" @@ -99,7 +98,7 @@ func getGrpcClient(ctx context.Context, dest net.Destination, streamSettings *in }, MinConnectTimeout: 5 * time.Second, }), - grpc.WithContextDialer(func(gctx context.Context, s string) (gonet.Conn, error) { + grpc.WithContextDialer(func(gctx context.Context, s string) (net.Conn, error) { select { case <-gctx.Done(): return nil, gctx.Err() @@ -180,7 +179,7 @@ func getGrpcClient(ctx context.Context, dest net.Destination, streamSettings *in } conn, err := grpc.Dial( - gonet.JoinHostPort(grpcDestHost, dest.Port.String()), + net.JoinHostPort(grpcDestHost, dest.Port.String()), dialOptions..., ) globalDialerMap[dialerConf{dest, streamSettings}] = conn diff --git a/xray-core/transport/internet/grpc/encoding/hunkconn.go b/xray-core/transport/internet/grpc/encoding/hunkconn.go index f295f33a6b..f1155de8a3 100644 --- a/xray-core/transport/internet/grpc/encoding/hunkconn.go +++ b/xray-core/transport/internet/grpc/encoding/hunkconn.go @@ -3,11 +3,10 @@ package encoding import ( "context" "io" - "net" "github.com/xtls/xray-core/common/buf" "github.com/xtls/xray-core/common/errors" - xnet "github.com/xtls/xray-core/common/net" + "github.com/xtls/xray-core/common/net" "github.com/xtls/xray-core/common/net/cnc" "github.com/xtls/xray-core/common/signal/done" "google.golang.org/grpc/metadata" @@ -55,7 +54,7 @@ func NewHunkConn(hc HunkConn, cancel context.CancelFunc) net.Conn { if ok { header := md.Get("x-real-ip") if len(header) > 0 { - realip := xnet.ParseAddress(header[0]) + realip := net.ParseAddress(header[0]) if realip.Family().IsIP() { rAddr = &net.TCPAddr{ IP: realip.IP(), diff --git a/xray-core/transport/internet/sockopt_darwin.go b/xray-core/transport/internet/sockopt_darwin.go index 2c8272149a..bcae2f3fd2 100644 --- a/xray-core/transport/internet/sockopt_darwin.go +++ b/xray-core/transport/internet/sockopt_darwin.go @@ -2,7 +2,6 @@ package internet import ( "context" - gonet "net" "os" "runtime" "strconv" @@ -135,7 +134,7 @@ func applyOutboundSocketOptions(network string, address string, fd uintptr, conf } if config.Interface != "" { - iface, err := gonet.InterfaceByName(config.Interface) + iface, err := net.InterfaceByName(config.Interface) if err != nil { return errors.New("failed to get interface ", config.Interface).Base(err) @@ -226,7 +225,7 @@ func applyInboundSocketOptions(network string, fd uintptr, config *SocketConfig) } if config.Interface != "" { - iface, err := gonet.InterfaceByName(config.Interface) + iface, err := net.InterfaceByName(config.Interface) if err != nil { return errors.New("failed to get interface ", config.Interface).Base(err) diff --git a/xray-core/transport/internet/splithttp/browser_client.go b/xray-core/transport/internet/splithttp/browser_client.go index e4317aa207..6e0a5302a5 100644 --- a/xray-core/transport/internet/splithttp/browser_client.go +++ b/xray-core/transport/internet/splithttp/browser_client.go @@ -3,9 +3,9 @@ package splithttp import ( "context" "io" - gonet "net" "github.com/xtls/xray-core/common/errors" + "github.com/xtls/xray-core/common/net" "github.com/xtls/xray-core/transport/internet/browser_dialer" "github.com/xtls/xray-core/transport/internet/websocket" ) @@ -19,13 +19,13 @@ func (c *BrowserDialerClient) IsClosed() bool { panic("not implemented yet") } -func (c *BrowserDialerClient) OpenStream(ctx context.Context, url string, body io.Reader, uploadOnly bool) (io.ReadCloser, gonet.Addr, gonet.Addr, error) { +func (c *BrowserDialerClient) OpenStream(ctx context.Context, url string, body io.Reader, uploadOnly bool) (io.ReadCloser, net.Addr, net.Addr, error) { if body != nil { return nil, nil, nil, errors.New("bidirectional streaming for browser dialer not implemented yet") } conn, err := browser_dialer.DialGet(url, c.transportConfig.GetRequestHeader(url)) - dummyAddr := &gonet.IPAddr{} + dummyAddr := &net.IPAddr{} if err != nil { return nil, dummyAddr, dummyAddr, err } diff --git a/xray-core/transport/internet/splithttp/client.go b/xray-core/transport/internet/splithttp/client.go index 0f80983809..3eeab6eb43 100644 --- a/xray-core/transport/internet/splithttp/client.go +++ b/xray-core/transport/internet/splithttp/client.go @@ -5,7 +5,6 @@ import ( "context" "fmt" "io" - gonet "net" "net/http" "net/http/httptrace" "sync" @@ -42,7 +41,7 @@ func (c *DefaultDialerClient) IsClosed() bool { return c.closed } -func (c *DefaultDialerClient) OpenStream(ctx context.Context, url string, body io.Reader, uploadOnly bool) (wrc io.ReadCloser, remoteAddr, localAddr gonet.Addr, err error) { +func (c *DefaultDialerClient) OpenStream(ctx context.Context, url string, body io.Reader, uploadOnly bool) (wrc io.ReadCloser, remoteAddr, localAddr net.Addr, err error) { // this is done when the TCP/UDP connection to the server was established, // and we can unblock the Dial function and print correct net addresses in // logs diff --git a/xray-core/transport/internet/system_dialer.go b/xray-core/transport/internet/system_dialer.go index ceb6ebc9e5..27f3c9a927 100644 --- a/xray-core/transport/internet/system_dialer.go +++ b/xray-core/transport/internet/system_dialer.go @@ -3,7 +3,6 @@ package internet import ( "context" "math/rand" - gonet "net" "syscall" "time" @@ -89,7 +88,7 @@ func (d *DefaultSystemDialer) Dial(ctx context.Context, src net.Address, dest ne }, nil } // Chrome defaults - keepAliveConfig := gonet.KeepAliveConfig{ + keepAliveConfig := net.KeepAliveConfig{ Enable: true, Idle: 45 * time.Second, Interval: 45 * time.Second, diff --git a/xray-core/transport/internet/system_listener.go b/xray-core/transport/internet/system_listener.go index 0cb6cd06b3..2ac28eda9c 100644 --- a/xray-core/transport/internet/system_listener.go +++ b/xray-core/transport/internet/system_listener.go @@ -2,7 +2,6 @@ package internet import ( "context" - gonet "net" "os" "runtime" "strconv" @@ -95,7 +94,7 @@ func (dl *DefaultListener) Listen(ctx context.Context, addr net.Addr, sockopt *S if sockopt.TcpKeepAliveIdle*sockopt.TcpKeepAliveInterval < 0 { return nil, errors.New("invalid TcpKeepAliveIdle or TcpKeepAliveInterval value: ", sockopt.TcpKeepAliveIdle, " ", sockopt.TcpKeepAliveInterval) } - lc.KeepAliveConfig = gonet.KeepAliveConfig{ + lc.KeepAliveConfig = net.KeepAliveConfig{ Enable: false, Idle: -1, Interval: -1, diff --git a/xray-core/transport/internet/websocket/dialer.go b/xray-core/transport/internet/websocket/dialer.go index 60330fd7f4..5e41389304 100644 --- a/xray-core/transport/internet/websocket/dialer.go +++ b/xray-core/transport/internet/websocket/dialer.go @@ -5,7 +5,6 @@ import ( _ "embed" "encoding/base64" "io" - gonet "net" "time" "github.com/gorilla/websocket" @@ -64,7 +63,7 @@ func dialWebSocket(ctx context.Context, dest net.Destination, streamSettings *in tlsConfig := tConfig.GetTLSConfig(tls.WithDestination(dest), tls.WithNextProto("http/1.1")) dialer.TLSClientConfig = tlsConfig if fingerprint := tls.GetFingerprint(tConfig.Fingerprint); fingerprint != nil { - dialer.NetDialTLSContext = func(_ context.Context, _, addr string) (gonet.Conn, error) { + dialer.NetDialTLSContext = func(_ context.Context, _, addr string) (net.Conn, error) { // Like the NetDial in the dialer pconn, err := internet.DialSystem(ctx, dest, streamSettings.SocketSettings) if err != nil { diff --git a/yt-dlp/yt_dlp/extractor/archiveorg.py b/yt-dlp/yt_dlp/extractor/archiveorg.py index 02c39beb68..7bf5199bc9 100644 --- a/yt-dlp/yt_dlp/extractor/archiveorg.py +++ b/yt-dlp/yt_dlp/extractor/archiveorg.py @@ -279,7 +279,7 @@ class ArchiveOrgIE(InfoExtractor): 'url': 'https://archive.org/' + track['file'].lstrip('/'), } - metadata = self._download_json('http://archive.org/metadata/' + identifier, identifier) + metadata = self._download_json(f'https://archive.org/metadata/{identifier}', identifier) m = metadata['metadata'] identifier = m['identifier']