Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package v2ray-core for openSUSE:Factory checked in at 2021-11-11 21:38:04 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/v2ray-core (Old) and /work/SRC/openSUSE:Factory/.v2ray-core.new.1890 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "v2ray-core" Thu Nov 11 21:38:04 2021 rev:16 rq:930774 version:4.43.0 Changes: -------- --- /work/SRC/openSUSE:Factory/v2ray-core/v2ray-core.changes 2021-09-22 22:13:09.464333030 +0200 +++ /work/SRC/openSUSE:Factory/.v2ray-core.new.1890/v2ray-core.changes 2021-11-11 21:39:09.933008708 +0100 @@ -1,0 +2,13 @@ +Thu Nov 11 02:55:40 UTC 2021 - opensuse-packaging <[email protected]> + +- Update version to 4.43.0 + * Send Shadowsocks handshake with payload data if available + * Custom TCP Fast Open queue length support + * Fix Trojan fallback cannot get ALPN + * Fix QueryStrategy ignored + * Fix UDP connection transport connection terminated unnecessarily + * refactor: move from io/ioutil to io and os package + * Fix some tests to use udp.PickPort() + * Fix flaky TestVMessDynamicPort + +------------------------------------------------------------------- Old: ---- v2ray-core-4.42.2.tar.gz New: ---- v2ray-core-4.43.0.tar.gz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ v2ray-core.spec ++++++ --- /var/tmp/diff_new_pack.FfGjgU/_old 2021-11-11 21:39:13.897011599 +0100 +++ /var/tmp/diff_new_pack.FfGjgU/_new 2021-11-11 21:39:13.901011602 +0100 @@ -25,7 +25,7 @@ %define import_path github.com/v2fly/v2ray-core/v4 Name: v2ray-core -Version: 4.42.2 +Version: 4.43.0 Release: 0 Summary: Network tools for building a computer network License: MIT @@ -43,8 +43,8 @@ BuildRequires: golang-packaging BuildRequires: systemd-rpm-macros # This package (v4.37.3+) can not be built with go version < 1.16 -BuildRequires: golang(API) = 1.16 BuildRequires: unzip +BuildRequires: golang(API) = 1.16 BuildRequires: pkgconfig(systemd) AutoReqProv: Off Provides: v2ray = %{version}-%{release} ++++++ v2ray-core-4.42.2.tar.gz -> v2ray-core-4.43.0.tar.gz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/v2ray-core-4.42.2/.github/workflows/deb.yml new/v2ray-core-4.43.0/.github/workflows/deb.yml --- old/v2ray-core-4.42.2/.github/workflows/deb.yml 2021-09-17 15:23:08.000000000 +0200 +++ new/v2ray-core-4.43.0/.github/workflows/deb.yml 2021-10-02 18:07:52.000000000 +0200 @@ -21,18 +21,16 @@ package: if: github.repository == 'v2fly/v2ray-core' runs-on: ubuntu-latest - container: debian:sid + container: golang:1.17-bullseye steps: - - name: Install git + - name: Update & install dependencies run: | apt-get update apt-get install -y git wget - name: Checkout codebase uses: actions/checkout@v2 - with: - submodules: "recursive" - name: Download geo files run: | @@ -42,11 +40,7 @@ - name: Install build dependencies run: | - apt-get install -y build-essential dh-golang golang-1.17 reprepro - - - name: Set environment variable - run: | - echo "PATH=/usr/lib/go-1.17/bin:${PATH}" >> $GITHUB_ENV + apt-get install -y build-essential dh-golang reprepro - name: Build run: | diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/v2ray-core-4.42.2/.github/workflows/release.yml new/v2ray-core-4.43.0/.github/workflows/release.yml --- old/v2ray-core-4.42.2/.github/workflows/release.yml 2021-09-17 15:23:08.000000000 +0200 +++ new/v2ray-core-4.43.0/.github/workflows/release.yml 2021-10-02 18:07:52.000000000 +0200 @@ -100,7 +100,7 @@ - name: Set up Go uses: actions/setup-go@v2 with: - go-version: ^1.17.1 + go-version: ^1.17 - name: Get project dependencies run: go mod download diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/v2ray-core-4.42.2/.github/workflows/test.yml new/v2ray-core-4.43.0/.github/workflows/test.yml --- old/v2ray-core-4.42.2/.github/workflows/test.yml 2021-09-17 15:23:08.000000000 +0200 +++ new/v2ray-core-4.43.0/.github/workflows/test.yml 2021-10-02 18:07:52.000000000 +0200 @@ -30,7 +30,7 @@ - name: Set up Go 1.x uses: actions/setup-go@v2 with: - go-version: ^1.17.1 + go-version: ^1.17 - name: Checkout codebase uses: actions/checkout@v2 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/v2ray-core-4.42.2/app/dns/dns.go new/v2ray-core-4.43.0/app/dns/dns.go --- old/v2ray-core-4.42.2/app/dns/dns.go 2021-09-17 15:23:08.000000000 +0200 +++ new/v2ray-core-4.43.0/app/dns/dns.go 2021-10-02 18:07:52.000000000 +0200 @@ -172,29 +172,27 @@ // LookupIP implements dns.Client. func (s *DNS) LookupIP(domain string) ([]net.IP, error) { - return s.lookupIPInternal(domain, dns.IPOption{ - IPv4Enable: true, - IPv6Enable: true, - FakeEnable: s.ipOption.FakeEnable, - }) + return s.lookupIPInternal(domain, *s.ipOption) } // LookupIPv4 implements dns.IPv4Lookup. func (s *DNS) LookupIPv4(domain string) ([]net.IP, error) { - return s.lookupIPInternal(domain, dns.IPOption{ - IPv4Enable: true, - IPv6Enable: false, - FakeEnable: s.ipOption.FakeEnable, - }) + if !s.ipOption.IPv4Enable { + return nil, dns.ErrEmptyResponse + } + o := *s.ipOption + o.IPv6Enable = false + return s.lookupIPInternal(domain, o) } // LookupIPv6 implements dns.IPv6Lookup. func (s *DNS) LookupIPv6(domain string) ([]net.IP, error) { - return s.lookupIPInternal(domain, dns.IPOption{ - IPv4Enable: false, - IPv6Enable: true, - FakeEnable: s.ipOption.FakeEnable, - }) + if !s.ipOption.IPv6Enable { + return nil, dns.ErrEmptyResponse + } + o := *s.ipOption + o.IPv4Enable = false + return s.lookupIPInternal(domain, o) } func (s *DNS) lookupIPInternal(domain string, option dns.IPOption) ([]net.IP, error) { diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/v2ray-core-4.42.2/app/dns/nameserver_doh.go new/v2ray-core-4.43.0/app/dns/nameserver_doh.go --- old/v2ray-core-4.42.2/app/dns/nameserver_doh.go 2021-09-17 15:23:08.000000000 +0200 +++ new/v2ray-core-4.43.0/app/dns/nameserver_doh.go 2021-10-02 18:07:52.000000000 +0200 @@ -8,7 +8,6 @@ "context" "fmt" "io" - "io/ioutil" "net/http" "net/url" "sync" @@ -283,11 +282,11 @@ defer resp.Body.Close() if resp.StatusCode != http.StatusOK { - io.Copy(ioutil.Discard, resp.Body) // flush resp.Body so that the conn is reusable + io.Copy(io.Discard, resp.Body) // flush resp.Body so that the conn is reusable return nil, fmt.Errorf("DOH server returned code %d", resp.StatusCode) } - return ioutil.ReadAll(resp.Body) + return io.ReadAll(resp.Body) } func (s *DoHNameServer) findIPsForDomain(domain string, option dns_feature.IPOption) ([]net.IP, error) { diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/v2ray-core-4.42.2/app/proxyman/inbound/worker.go new/v2ray-core-4.43.0/app/proxyman/inbound/worker.go --- old/v2ray-core-4.42.2/app/proxyman/inbound/worker.go 2021-09-17 15:23:08.000000000 +0200 +++ new/v2ray-core-4.43.0/app/proxyman/inbound/worker.go 2021-10-02 18:07:52.000000000 +0200 @@ -153,6 +153,11 @@ done *done.Instance uplink stats.Counter downlink stats.Counter + inactive bool +} + +func (c *udpConn) setInactive() { + c.inactive = true } func (c *udpConn) updateActivity() { @@ -315,7 +320,11 @@ newError("connection ends").Base(err).WriteToLog(session.ExportIDToError(ctx)) } conn.Close() - w.removeConn(id) + // conn not removed by checker TODO may be lock worker here is better + if !conn.inactive { + conn.setInactive() + w.removeConn(id) + } }() } } @@ -344,7 +353,10 @@ for addr, conn := range w.activeConn { if nowSec-atomic.LoadInt64(&conn.lastActivityTime) > 8 { // TODO Timeout too small - delete(w.activeConn, addr) + if !conn.inactive { + conn.setInactive() + delete(w.activeConn, addr) + } conn.Close() } } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/v2ray-core-4.42.2/common/buf/multi_buffer_test.go new/v2ray-core-4.43.0/common/buf/multi_buffer_test.go --- old/v2ray-core-4.42.2/common/buf/multi_buffer_test.go 2021-09-17 15:23:08.000000000 +0200 +++ new/v2ray-core-4.43.0/common/buf/multi_buffer_test.go 2021-10-02 18:07:52.000000000 +0200 @@ -4,7 +4,6 @@ "bytes" "crypto/rand" "io" - "io/ioutil" "os" "testing" @@ -120,7 +119,7 @@ common.Must(err) f.Close() - cnt, err := ioutil.ReadFile(dat) + cnt, err := os.ReadFile(dat) common.Must(err) if d := cmp.Diff(buf2, cnt); d != "" { diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/v2ray-core-4.42.2/common/common.go new/v2ray-core-4.43.0/common/common.go --- old/v2ray-core-4.42.2/common/common.go 2021-09-17 15:23:08.000000000 +0200 +++ new/v2ray-core-4.43.0/common/common.go 2021-10-02 18:07:52.000000000 +0200 @@ -5,7 +5,7 @@ import ( "fmt" "go/build" - "io/ioutil" + "io" "net/http" "net/url" "os" @@ -70,7 +70,7 @@ } var data []byte var runtimeEnv string - data, readErr := ioutil.ReadFile(file) + data, readErr := os.ReadFile(file) if readErr != nil { return "", readErr } @@ -153,7 +153,7 @@ return nil, newError("unexpected HTTP status code: ", resp.StatusCode) } - content, err := ioutil.ReadAll(resp.Body) + content, err := io.ReadAll(resp.Body) if err != nil { return nil, newError("failed to read HTTP response").Base(err) } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/v2ray-core-4.42.2/common/drain/drainer.go new/v2ray-core-4.43.0/common/drain/drainer.go --- old/v2ray-core-4.42.2/common/drain/drainer.go 2021-09-17 15:23:08.000000000 +0200 +++ new/v2ray-core-4.43.0/common/drain/drainer.go 2021-10-02 18:07:52.000000000 +0200 @@ -2,7 +2,6 @@ import ( "io" - "io/ioutil" "github.com/v2fly/v2ray-core/v4/common/dice" ) @@ -36,7 +35,7 @@ } func drainReadN(reader io.Reader, n int) error { - _, err := io.CopyN(ioutil.Discard, reader, int64(n)) + _, err := io.CopyN(io.Discard, reader, int64(n)) return err } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/v2ray-core-4.42.2/common/log/logger_test.go new/v2ray-core-4.43.0/common/log/logger_test.go --- old/v2ray-core-4.42.2/common/log/logger_test.go 2021-09-17 15:23:08.000000000 +0200 +++ new/v2ray-core-4.43.0/common/log/logger_test.go 2021-10-02 18:07:52.000000000 +0200 @@ -1,7 +1,6 @@ package log_test import ( - "io/ioutil" "os" "strings" "testing" @@ -13,7 +12,7 @@ ) func TestFileLogger(t *testing.T) { - f, err := ioutil.TempFile("", "vtest") + f, err := os.CreateTemp("", "vtest") common.Must(err) path := f.Name() common.Must(f.Close()) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/v2ray-core-4.42.2/core.go new/v2ray-core-4.43.0/core.go --- old/v2ray-core-4.42.2/core.go 2021-09-17 15:23:08.000000000 +0200 +++ new/v2ray-core-4.43.0/core.go 2021-10-02 18:07:52.000000000 +0200 @@ -18,7 +18,7 @@ ) var ( - version = "4.42.2" + version = "4.43.0" build = "Custom" codename = "V2Fly, a community-driven edition of V2Ray." intro = "A unified platform for anti-censorship." diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/v2ray-core-4.42.2/go.mod new/v2ray-core-4.43.0/go.mod --- old/v2ray-core-4.42.2/go.mod 2021-09-17 15:23:08.000000000 +0200 +++ new/v2ray-core-4.43.0/go.mod 2021-10-02 18:07:52.000000000 +0200 @@ -21,7 +21,7 @@ golang.org/x/net v0.0.0-20210903162142-ad29c8ab022f golang.org/x/sync v0.0.0-20210220032951-036812b2e83c golang.org/x/sys v0.0.0-20210903071746-97244b99971b - google.golang.org/grpc v1.40.0 + google.golang.org/grpc v1.41.0 google.golang.org/protobuf v1.27.1 h12.io/socks v1.0.3 inet.af/netaddr v0.0.0-20210903134321-85fa6c94624e diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/v2ray-core-4.42.2/go.sum new/v2ray-core-4.43.0/go.sum --- old/v2ray-core-4.42.2/go.sum 2021-09-17 15:23:08.000000000 +0200 +++ new/v2ray-core-4.43.0/go.sum 2021-10-02 18:07:52.000000000 +0200 @@ -36,6 +36,7 @@ github.com/buger/jsonparser v0.0.0-20181115193947-bf1c66bbce23/go.mod h1:bbYlZJ7hK1yFx9hf58LP0zeX7UjIGs20ufpu3evjr+s= github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= github.com/cespare/xxhash v1.1.0/go.mod h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghfAqPWnc= +github.com/cespare/xxhash/v2 v2.1.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= github.com/cheekybits/genny v1.0.0 h1:uGGa4nei+j20rOSeDeP5Of12XVm7TGUd4dJA9RDitfE= github.com/cheekybits/genny v1.0.0/go.mod h1:+tQajlRqAUrPI7DOSpB0XAqZYtQakVtB7wXkRAgjxjQ= github.com/chzyer/logex v1.1.10/go.mod h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWRnGsAI= @@ -44,7 +45,7 @@ github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc= github.com/cncf/udpa/go v0.0.0-20201120205902-5459f2c99403/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk= -github.com/cncf/xds/go v0.0.0-20210312221358-fbca930ec8ed/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= +github.com/cncf/xds/go v0.0.0-20210805033703-aa0b78936158/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= github.com/coreos/bbolt v1.3.2/go.mod h1:iRUV2dpdMOn7Bo10OQBFzIJO9kkE559Wcmn+qkEiiKk= github.com/coreos/etcd v3.3.13+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc32PjwdhPthX9715RE= github.com/coreos/go-semver v0.3.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk= @@ -67,7 +68,7 @@ github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98= github.com/envoyproxy/go-control-plane v0.9.9-0.20201210154907-fd9021fe5dad/go.mod h1:cXg6YxExXjJnVBQHBLXeUAgxn2UodCpnH306RInaBQk= -github.com/envoyproxy/go-control-plane v0.9.9-0.20210512163311-63b5d3c536b0/go.mod h1:hliV/p42l8fGbc6Y9bQ70uLwIvmJyVE5k4iMKlh8wCQ= +github.com/envoyproxy/go-control-plane v0.9.10-0.20210907150352-cf90f659a021/go.mod h1:AFq3mo9L8Lqqiid3OhADV3RfLJnjiw63cSpi+fDTRC0= github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4= github.com/flynn/go-shlex v0.0.0-20150515145356-3f9db97f8568/go.mod h1:xEzjJPgXI435gkrCt3MPfRiAkVrwSbHsst4LCFVfpJc= @@ -556,8 +557,8 @@ google.golang.org/grpc v1.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= google.golang.org/grpc v1.33.1/go.mod h1:fr5YgcSWrqhRRxogOsw7RzIpsmvOZ6IcH4kBYTpR3n0= google.golang.org/grpc v1.36.0/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU= -google.golang.org/grpc v1.40.0 h1:AGJ0Ih4mHjSeibYkFGh1dD9KJ/eOtZ93I6hoHhukQ5Q= -google.golang.org/grpc v1.40.0/go.mod h1:ogyxbiOoUXAkP+4+xa6PZSE9DZgIHtSpzjDTB9KAK34= +google.golang.org/grpc v1.41.0 h1:f+PlOh7QV4iIJkPrx5NQ7qaNGFQ3OTse67yaDHfju4E= +google.golang.org/grpc v1.41.0/go.mod h1:U3l9uK9J0sini8mHphKoXyaqDA/8VyGnDee1zzIUK6k= google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8= google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0= google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM= diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/v2ray-core-4.42.2/infra/conf/geodata/memconservative/cache.go new/v2ray-core-4.43.0/infra/conf/geodata/memconservative/cache.go --- old/v2ray-core-4.42.2/infra/conf/geodata/memconservative/cache.go 2021-09-17 15:23:08.000000000 +0200 +++ new/v2ray-core-4.43.0/infra/conf/geodata/memconservative/cache.go 2021-10-02 18:07:52.000000000 +0200 @@ -1,7 +1,7 @@ package memconservative import ( - "io/ioutil" + "os" "strings" "google.golang.org/protobuf/proto" @@ -53,7 +53,7 @@ case errFailedToReadBytes, errFailedToReadExpectedLenBytes, errInvalidGeodataFile, errInvalidGeodataVarintLength: newError("failed to decode geoip file: ", filename, ", fallback to the original ReadFile method") - geoipBytes, err = ioutil.ReadFile(asset) + geoipBytes, err = os.ReadFile(asset) if err != nil { return nil, err } @@ -118,7 +118,7 @@ case errFailedToReadBytes, errFailedToReadExpectedLenBytes, errInvalidGeodataFile, errInvalidGeodataVarintLength: newError("failed to decode geoip file: ", filename, ", fallback to the original ReadFile method") - geositeBytes, err = ioutil.ReadFile(asset) + geositeBytes, err = os.ReadFile(asset) if err != nil { return nil, err } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/v2ray-core-4.42.2/infra/conf/transport_internet.go new/v2ray-core-4.43.0/infra/conf/transport_internet.go --- old/v2ray-core-4.42.2/infra/conf/transport_internet.go 2021-09-17 15:23:08.000000000 +0200 +++ new/v2ray-core-4.43.0/infra/conf/transport_internet.go 2021-10-02 18:07:52.000000000 +0200 @@ -387,6 +387,7 @@ type SocketConfig struct { Mark uint32 `json:"mark"` TFO *bool `json:"tcpFastOpen"` + TFOQueueLength uint32 `json:"tcpFastOpenQueueLength"` TProxy string `json:"tproxy"` AcceptProxyProtocol bool `json:"acceptProxyProtocol"` TCPKeepAliveInterval int32 `json:"tcpKeepAliveInterval"` @@ -402,6 +403,12 @@ tfoSettings = internet.SocketConfig_Disable } } + + tfoQueueLength := c.TFOQueueLength + if tfoQueueLength == 0 { + tfoQueueLength = 4096 + } + var tproxy internet.SocketConfig_TProxyMode switch strings.ToLower(c.TProxy) { case "tproxy": @@ -415,6 +422,7 @@ return &internet.SocketConfig{ Mark: c.Mark, Tfo: tfoSettings, + TfoQueueLength: tfoQueueLength, Tproxy: tproxy, AcceptProxyProtocol: c.AcceptProxyProtocol, TcpKeepAliveInterval: c.TCPKeepAliveInterval, diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/v2ray-core-4.42.2/infra/conf/transport_test.go new/v2ray-core-4.43.0/infra/conf/transport_test.go --- old/v2ray-core-4.42.2/infra/conf/transport_test.go 2021-09-17 15:23:08.000000000 +0200 +++ new/v2ray-core-4.43.0/infra/conf/transport_test.go 2021-10-02 18:07:52.000000000 +0200 @@ -35,12 +35,14 @@ { Input: `{ "mark": 1, - "tcpFastOpen": true + "tcpFastOpen": true, + "tcpFastOpenQueueLength": 1024 }`, Parser: createParser(), Output: &internet.SocketConfig{ - Mark: 1, - Tfo: internet.SocketConfig_Enable, + Mark: 1, + Tfo: internet.SocketConfig_Enable, + TfoQueueLength: 1024, }, }, }) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/v2ray-core-4.42.2/infra/control/certchainhash.go new/v2ray-core-4.43.0/infra/control/certchainhash.go --- old/v2ray-core-4.42.2/infra/control/certchainhash.go 2021-09-17 15:23:08.000000000 +0200 +++ new/v2ray-core-4.43.0/infra/control/certchainhash.go 2021-10-02 18:07:52.000000000 +0200 @@ -3,7 +3,7 @@ import ( "flag" "fmt" - "io/ioutil" + "os" v2tls "github.com/v2fly/v2ray-core/v4/transport/internet/tls" ) @@ -30,7 +30,7 @@ if err := fs.Parse(args); err != nil { return err } - certContent, err := ioutil.ReadFile(*cert) + certContent, err := os.ReadFile(*cert) if err != nil { return err } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/v2ray-core-4.42.2/infra/control/config.go new/v2ray-core-4.43.0/infra/control/config.go --- old/v2ray-core-4.42.2/infra/control/config.go 2021-09-17 15:23:08.000000000 +0200 +++ new/v2ray-core-4.43.0/infra/control/config.go 2021-10-02 18:07:52.000000000 +0200 @@ -3,7 +3,6 @@ import ( "bytes" "io" - "io/ioutil" "os" "strings" @@ -73,10 +72,10 @@ data, err = FetchHTTPContent(arg) case arg == "stdin:": - data, err = ioutil.ReadAll(os.Stdin) + data, err = io.ReadAll(os.Stdin) default: - data, err = ioutil.ReadFile(arg) + data, err = os.ReadFile(arg) } if err != nil { diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/v2ray-core-4.42.2/infra/vprotogen/main.go new/v2ray-core-4.43.0/infra/vprotogen/main.go --- old/v2ray-core-4.42.2/infra/vprotogen/main.go 2021-09-17 15:23:08.000000000 +0200 +++ new/v2ray-core-4.43.0/infra/vprotogen/main.go 2021-10-02 18:07:52.000000000 +0200 @@ -4,7 +4,6 @@ "fmt" "go/build" "io" - "io/ioutil" "net/http" "os" "os/exec" @@ -46,7 +45,7 @@ } var data []byte var runtimeEnv string - data, readErr := ioutil.ReadFile(file) + data, readErr := os.ReadFile(file) if readErr != nil { return "", readErr } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/v2ray-core-4.42.2/main/confloader/external/external.go new/v2ray-core-4.43.0/main/confloader/external/external.go --- old/v2ray-core-4.42.2/main/confloader/external/external.go 2021-09-17 15:23:08.000000000 +0200 +++ new/v2ray-core-4.43.0/main/confloader/external/external.go 2021-10-02 18:07:52.000000000 +0200 @@ -5,7 +5,6 @@ import ( "bytes" "io" - "io/ioutil" "net/http" "net/url" "os" @@ -24,10 +23,10 @@ data, err = FetchHTTPContent(arg) case arg == "stdin:": - data, err = ioutil.ReadAll(os.Stdin) + data, err = io.ReadAll(os.Stdin) default: - data, err = ioutil.ReadFile(arg) + data, err = os.ReadFile(arg) } if err != nil { diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/v2ray-core-4.42.2/main/main.go new/v2ray-core-4.43.0/main/main.go --- old/v2ray-core-4.42.2/main/main.go 2021-09-17 15:23:08.000000000 +0200 +++ new/v2ray-core-4.43.0/main/main.go 2021-10-02 18:07:52.000000000 +0200 @@ -5,7 +5,6 @@ import ( "flag" "fmt" - "io/ioutil" "log" "os" "os/signal" @@ -54,7 +53,7 @@ } func readConfDir(dirPath string) { - confs, err := ioutil.ReadDir(dirPath) + confs, err := os.ReadDir(dirPath) if err != nil { log.Fatalln(err) } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/v2ray-core-4.42.2/proxy/shadowsocks/client.go new/v2ray-core-4.43.0/proxy/shadowsocks/client.go --- old/v2ray-core-4.42.2/proxy/shadowsocks/client.go 2021-09-17 15:23:08.000000000 +0200 +++ new/v2ray-core-4.43.0/proxy/shadowsocks/client.go 2021-10-02 18:07:52.000000000 +0200 @@ -5,6 +5,7 @@ import ( "context" + "time" core "github.com/v2fly/v2ray-core/v4" "github.com/v2fly/v2ray-core/v4/common" @@ -102,18 +103,22 @@ timer := signal.CancelAfterInactivity(ctx, cancel, sessionPolicy.Timeouts.ConnectionIdle) if request.Command == protocol.RequestCommandTCP { - bufferedWriter := buf.NewBufferedWriter(buf.NewWriter(conn)) - bodyWriter, err := WriteTCPRequest(request, bufferedWriter) - if err != nil { - return newError("failed to write request").Base(err) - } - - if err := bufferedWriter.SetBuffered(false); err != nil { - return err - } - requestDone := func() error { defer timer.SetTimeout(sessionPolicy.Timeouts.DownlinkOnly) + bufferedWriter := buf.NewBufferedWriter(buf.NewWriter(conn)) + bodyWriter, err := WriteTCPRequest(request, bufferedWriter) + if err != nil { + return newError("failed to write request").Base(err) + } + + if err = buf.CopyOnceTimeout(link.Reader, bodyWriter, time.Millisecond*100); err != nil && err != buf.ErrNotTimeoutReader && err != buf.ErrReadTimeout { + return newError("failed to write A request payload").Base(err).AtWarning() + } + + if err := bufferedWriter.SetBuffered(false); err != nil { + return err + } + return buf.Copy(link.Reader, bodyWriter, buf.UpdateActivity(timer)) } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/v2ray-core-4.42.2/proxy/trojan/server.go new/v2ray-core-4.43.0/proxy/trojan/server.go --- old/v2ray-core-4.42.2/proxy/trojan/server.go 2021-09-17 15:23:08.000000000 +0200 +++ new/v2ray-core-4.43.0/proxy/trojan/server.go 2021-10-02 18:07:52.000000000 +0200 @@ -5,7 +5,6 @@ import ( "context" - "crypto/tls" "io" "strconv" "time" @@ -25,6 +24,7 @@ "github.com/v2fly/v2ray-core/v4/features/policy" "github.com/v2fly/v2ray-core/v4/features/routing" "github.com/v2fly/v2ray-core/v4/transport/internet" + "github.com/v2fly/v2ray-core/v4/transport/internet/tls" "github.com/v2fly/v2ray-core/v4/transport/internet/udp" ) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/v2ray-core-4.42.2/release/debian/changelog new/v2ray-core-4.43.0/release/debian/changelog --- old/v2ray-core-4.42.2/release/debian/changelog 2021-09-17 15:23:08.000000000 +0200 +++ new/v2ray-core-4.43.0/release/debian/changelog 2021-10-02 18:07:52.000000000 +0200 @@ -1,3 +1,14 @@ +v2ray-core (4.42.2-2) unstable; urgency=medium + + * Support Windows ARM64 + * TLS: support client certificate authentication + * GeoIP asset: add trimmed GeoIP file `geoip-only-cn-private.dat` to zip package for ROM/RAM insufficient devices + * Socks: support 4/4a version of the socks protocol + * DNS: add option `disableFallbackIfMatch` for DNS + * More details in https://github.com/v2fly/v2ray-core/releases/tag/v4.42.2 + + -- V2Fly <[email protected]> Mon, 20 Sep 2021 11:00:00 +0800 + v2ray-core (4.41.1-1) unstable; urgency=medium * VMess: added two VMess experiments: AuthenticatedLength & NoTerminationSignal diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/v2ray-core-4.42.2/release/debian/control new/v2ray-core-4.43.0/release/debian/control --- old/v2ray-core-4.42.2/release/debian/control 2021-09-17 15:23:08.000000000 +0200 +++ new/v2ray-core-4.43.0/release/debian/control 2021-10-02 18:07:52.000000000 +0200 @@ -4,7 +4,6 @@ Maintainer: ymshenyu <[email protected]> Build-Depends: debhelper-compat (= 12), dh-golang, - golang-1.17 Standards-Version: 4.5.0 Homepage: https://github.com/v2fly/v2ray-core #Vcs-Browser: https://salsa.debian.org/debian/v2ray-core @@ -16,7 +15,8 @@ Architecture: any Depends: ${shlibs:Depends}, ${misc:Depends} Recommends: v2ray-domain-list-community, - v2ray-geoip + v2ray-geoip, + v2ray-geoip-only-cn-private Description: Library platform for building proxies in golang Project V2Ray is a set of network tools that help you to build your own computer network. It secures your network connections and thus @@ -34,6 +34,14 @@ Architecture: any Depends: ${shlibs:Depends}, ${misc:Depends} Description: Library platform for building proxies in golang (routing file) + Project V2Ray is a set of network tools that help you to build your + own computer network. It secures your network connections and thus + protects your privacy. + +Package: v2ray-geoip-only-cn-private +Architecture: any +Depends: ${shlibs:Depends}, ${misc:Depends} +Description: Library platform for building proxies in golang (routing file) Project V2Ray is a set of network tools that help you to build your own computer network. It secures your network connections and thus protects your privacy. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/v2ray-core-4.42.2/release/debian/copyright new/v2ray-core-4.43.0/release/debian/copyright --- old/v2ray-core-4.42.2/release/debian/copyright 2021-09-17 15:23:08.000000000 +0200 +++ new/v2ray-core-4.43.0/release/debian/copyright 2021-10-02 18:07:52.000000000 +0200 @@ -11,6 +11,10 @@ Copyright: 2015-2020 V2Fly Community License: CC-BY-SA-4.0 +Files: release/config/geoip-only-cn-private.dat +Copyright: 2015-2020 V2Fly Community +License: CC-BY-SA-4.0 + Files: release/debian/* Copyright: 2020 ymshenyu <[email protected]> License: Expat diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/v2ray-core-4.42.2/release/debian/rules new/v2ray-core-4.43.0/release/debian/rules --- old/v2ray-core-4.42.2/release/debian/rules 2021-09-17 15:23:08.000000000 +0200 +++ new/v2ray-core-4.43.0/release/debian/rules 2021-10-02 18:07:52.000000000 +0200 @@ -5,16 +5,12 @@ BUILDDIR=_build %: - dh $@ --builddirectory=$(BUILDDIR) --buildsystem=golang --with=golang + dh $@ --builddirectory=$(BUILDDIR) --buildsystem=golang execute_after_dh_auto_configure: go mod vendor cp -r vendor/* _build/src -override_dh_auto_clean: - dh_auto_clean - rm -rf vendor - override_dh_auto_build: DH_GOPKG="github.com/v2fly/v2ray-core/v4/main" dh_auto_build -- -ldflags "-s -w" cd $(BUILDDIR); mv bin/main bin/v2ray diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/v2ray-core-4.42.2/release/debian/v2ray-geoip-only-cn-private.install new/v2ray-core-4.43.0/release/debian/v2ray-geoip-only-cn-private.install --- old/v2ray-core-4.42.2/release/debian/v2ray-geoip-only-cn-private.install 1970-01-01 01:00:00.000000000 +0100 +++ new/v2ray-core-4.43.0/release/debian/v2ray-geoip-only-cn-private.install 2021-10-02 18:07:52.000000000 +0200 @@ -0,0 +1 @@ +release/config/geoip-only-cn-private.dat usr/share/v2ray diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/v2ray-core-4.42.2/testing/scenarios/common.go new/v2ray-core-4.43.0/testing/scenarios/common.go --- old/v2ray-core-4.42.2/testing/scenarios/common.go 2021-09-17 15:23:08.000000000 +0200 +++ new/v2ray-core-4.43.0/testing/scenarios/common.go 2021-10-02 18:07:52.000000000 +0200 @@ -5,7 +5,7 @@ "crypto/rand" "fmt" "io" - "io/ioutil" + "os" "os/exec" "path/filepath" "runtime" @@ -102,7 +102,7 @@ testBinaryPathGen.Do(func() { var tempDir string common.Must(retry.Timed(5, 100).On(func() error { - dir, err := ioutil.TempDir("", "v2ray") + dir, err := os.MkdirTemp("", "v2ray") if err != nil { return err } @@ -143,6 +143,23 @@ }) } +func CloseServer(server *exec.Cmd) { + log.Record(&log.GeneralMessage{ + Severity: log.Severity_Info, + Content: "Closing server.", + }) + if runtime.GOOS == "windows" { + server.Process.Kill() + } else { + server.Process.Signal(syscall.SIGTERM) + } + server.Process.Wait() + log.Record(&log.GeneralMessage{ + Severity: log.Severity_Info, + Content: "Server closed.", + }) +} + func withDefaultApps(config *core.Config) *core.Config { config.App = append(config.App, serial.ToTypedMessage(&dispatcher.Config{})) config.App = append(config.App, serial.ToTypedMessage(&proxyman.InboundConfig{})) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/v2ray-core-4.42.2/testing/scenarios/dokodemo_test.go new/v2ray-core-4.43.0/testing/scenarios/dokodemo_test.go --- old/v2ray-core-4.42.2/testing/scenarios/dokodemo_test.go 2021-09-17 15:23:08.000000000 +0200 +++ new/v2ray-core-4.43.0/testing/scenarios/dokodemo_test.go 2021-10-02 18:07:52.000000000 +0200 @@ -156,7 +156,7 @@ }, } - clientPort := uint32(tcp.PickPort()) + clientPort := uint32(udp.PickPort()) clientPortRange := uint32(5) clientConfig := &core.Config{ Inbound: []*core.InboundHandlerConfig{ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/v2ray-core-4.42.2/testing/scenarios/feature_test.go new/v2ray-core-4.43.0/testing/scenarios/feature_test.go --- old/v2ray-core-4.42.2/testing/scenarios/feature_test.go 2021-09-17 15:23:08.000000000 +0200 +++ new/v2ray-core-4.43.0/testing/scenarios/feature_test.go 2021-10-02 18:07:52.000000000 +0200 @@ -2,7 +2,7 @@ import ( "context" - "io/ioutil" + "io" "net/http" "net/url" "testing" @@ -512,7 +512,7 @@ common.Must(err) defer udpServer.Close() - clientPort := tcp.PickPort() + clientPort := udp.PickPort() clientConfig := &core.Config{ Inbound: []*core.InboundHandlerConfig{ { @@ -643,7 +643,7 @@ if resp.StatusCode != 200 { t.Error("unexpected status code: ", resp.StatusCode) } - common.Must(resp.Write(ioutil.Discard)) + common.Must(resp.Write(io.Discard)) } } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/v2ray-core-4.42.2/testing/scenarios/http_test.go new/v2ray-core-4.43.0/testing/scenarios/http_test.go --- old/v2ray-core-4.42.2/testing/scenarios/http_test.go 2021-09-17 15:23:08.000000000 +0200 +++ new/v2ray-core-4.43.0/testing/scenarios/http_test.go 2021-10-02 18:07:52.000000000 +0200 @@ -5,7 +5,6 @@ "context" "crypto/rand" "io" - "io/ioutil" "net/http" "net/url" "testing" @@ -75,7 +74,7 @@ t.Fatal("status: ", resp.StatusCode) } - content, err := ioutil.ReadAll(resp.Body) + content, err := io.ReadAll(resp.Body) common.Must(err) if string(content) != "Home" { t.Fatal("body: ", string(content)) @@ -271,7 +270,7 @@ t.Fatal("status: ", resp.StatusCode) } - content, err := ioutil.ReadAll(resp.Body) + content, err := io.ReadAll(resp.Body) common.Must(err) if r := cmp.Diff(content, xor(payload)); r != "" { t.Fatal(r) @@ -368,7 +367,7 @@ t.Fatal("status: ", resp.StatusCode) } - content, err := ioutil.ReadAll(resp.Body) + content, err := io.ReadAll(resp.Body) common.Must(err) if string(content) != "Home" { t.Fatal("body: ", string(content)) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/v2ray-core-4.42.2/testing/scenarios/shadowsocks_test.go new/v2ray-core-4.43.0/testing/scenarios/shadowsocks_test.go --- old/v2ray-core-4.42.2/testing/scenarios/shadowsocks_test.go 2021-09-17 15:23:08.000000000 +0200 +++ new/v2ray-core-4.43.0/testing/scenarios/shadowsocks_test.go 2021-10-02 18:07:52.000000000 +0200 @@ -215,7 +215,7 @@ CipherType: shadowsocks.CipherType_AES_128_GCM, }) - serverPort := tcp.PickPort() + serverPort := udp.PickPort() serverConfig := &core.Config{ App: []*serial.TypedMessage{ serial.ToTypedMessage(&log.Config{ @@ -245,7 +245,7 @@ }, } - clientPort := tcp.PickPort() + clientPort := udp.PickPort() clientConfig := &core.Config{ App: []*serial.TypedMessage{ serial.ToTypedMessage(&log.Config{ @@ -341,7 +341,7 @@ }, } - clientPort := tcp.PickPort() + clientPort := udp.PickPort() clientConfig := &core.Config{ App: []*serial.TypedMessage{ serial.ToTypedMessage(&log.Config{ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/v2ray-core-4.42.2/testing/scenarios/transport_test.go new/v2ray-core-4.43.0/testing/scenarios/transport_test.go --- old/v2ray-core-4.42.2/testing/scenarios/transport_test.go 2021-09-17 15:23:08.000000000 +0200 +++ new/v2ray-core-4.43.0/testing/scenarios/transport_test.go 2021-10-02 18:07:52.000000000 +0200 @@ -23,6 +23,7 @@ "github.com/v2fly/v2ray-core/v4/proxy/vmess/inbound" "github.com/v2fly/v2ray-core/v4/proxy/vmess/outbound" "github.com/v2fly/v2ray-core/v4/testing/servers/tcp" + "github.com/v2fly/v2ray-core/v4/testing/servers/udp" "github.com/v2fly/v2ray-core/v4/transport/internet" "github.com/v2fly/v2ray-core/v4/transport/internet/domainsocket" "github.com/v2fly/v2ray-core/v4/transport/internet/headers/http" @@ -257,7 +258,7 @@ defer tcpServer.Close() userID := protocol.NewID(uuid.New()) - serverPort := tcp.PickPort() + serverPort := udp.PickPort() serverConfig := &core.Config{ App: []*serial.TypedMessage{ serial.ToTypedMessage(&log.Config{ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/v2ray-core-4.42.2/testing/scenarios/vmess_test.go new/v2ray-core-4.43.0/testing/scenarios/vmess_test.go --- old/v2ray-core-4.42.2/testing/scenarios/vmess_test.go 2021-09-17 15:23:08.000000000 +0200 +++ new/v2ray-core-4.43.0/testing/scenarios/vmess_test.go 2021-10-02 18:07:52.000000000 +0200 @@ -36,59 +36,87 @@ defer tcpServer.Close() userID := protocol.NewID(uuid.New()) + + retry := 1 serverPort := tcp.PickPort() - serverConfig := &core.Config{ - App: []*serial.TypedMessage{ - serial.ToTypedMessage(&log.Config{ - ErrorLogLevel: clog.Severity_Debug, - ErrorLogType: log.LogType_Console, - }), - }, - Inbound: []*core.InboundHandlerConfig{ - { - ReceiverSettings: serial.ToTypedMessage(&proxyman.ReceiverConfig{ - PortRange: net.SinglePortRange(serverPort), - Listen: net.NewIPOrDomain(net.LocalHostIP), - }), - ProxySettings: serial.ToTypedMessage(&inbound.Config{ - User: []*protocol.User{ - { - Account: serial.ToTypedMessage(&vmess.Account{ - Id: userID.String(), - }), + for { + serverConfig := &core.Config{ + App: []*serial.TypedMessage{ + serial.ToTypedMessage(&log.Config{ + ErrorLogLevel: clog.Severity_Debug, + ErrorLogType: log.LogType_Console, + }), + }, + Inbound: []*core.InboundHandlerConfig{ + { + ReceiverSettings: serial.ToTypedMessage(&proxyman.ReceiverConfig{ + PortRange: net.SinglePortRange(serverPort), + Listen: net.NewIPOrDomain(net.LocalHostIP), + }), + ProxySettings: serial.ToTypedMessage(&inbound.Config{ + User: []*protocol.User{ + { + Account: serial.ToTypedMessage(&vmess.Account{ + Id: userID.String(), + }), + }, }, - }, - Detour: &inbound.DetourConfig{ - To: "detour", - }, - }), - }, - { - ReceiverSettings: serial.ToTypedMessage(&proxyman.ReceiverConfig{ - PortRange: &net.PortRange{ - From: uint32(serverPort + 1), - To: uint32(serverPort + 100), - }, - Listen: net.NewIPOrDomain(net.LocalHostIP), - AllocationStrategy: &proxyman.AllocationStrategy{ - Type: proxyman.AllocationStrategy_Random, - Concurrency: &proxyman.AllocationStrategy_AllocationStrategyConcurrency{ - Value: 2, + Detour: &inbound.DetourConfig{ + To: "detour", }, - Refresh: &proxyman.AllocationStrategy_AllocationStrategyRefresh{ - Value: 5, + }), + }, + { + ReceiverSettings: serial.ToTypedMessage(&proxyman.ReceiverConfig{ + PortRange: net.SinglePortRange(serverPort + 100), + Listen: net.NewIPOrDomain(net.LocalHostIP), + }), + ProxySettings: serial.ToTypedMessage(&dokodemo.Config{ + Address: net.NewIPOrDomain(dest.Address), + Port: uint32(dest.Port), + NetworkList: &net.NetworkList{ + Network: []net.Network{net.Network_TCP}, }, - }, - }), - ProxySettings: serial.ToTypedMessage(&inbound.Config{}), - Tag: "detour", - }, - }, - Outbound: []*core.OutboundHandlerConfig{ - { - ProxySettings: serial.ToTypedMessage(&freedom.Config{}), + }), + }, + { + ReceiverSettings: serial.ToTypedMessage(&proxyman.ReceiverConfig{ + PortRange: &net.PortRange{ + From: uint32(serverPort + 1), + To: uint32(serverPort + 99), + }, + Listen: net.NewIPOrDomain(net.LocalHostIP), + AllocationStrategy: &proxyman.AllocationStrategy{ + Type: proxyman.AllocationStrategy_Random, + Concurrency: &proxyman.AllocationStrategy_AllocationStrategyConcurrency{ + Value: 2, + }, + Refresh: &proxyman.AllocationStrategy_AllocationStrategyRefresh{ + Value: 5, + }, + }, + }), + ProxySettings: serial.ToTypedMessage(&inbound.Config{}), + Tag: "detour", + }, + }, + Outbound: []*core.OutboundHandlerConfig{ + { + ProxySettings: serial.ToTypedMessage(&freedom.Config{}), + }, }, - }, + } + + server, _ := InitializeServerConfig(serverConfig) + if server != nil && tcpConnAvailableAtPort(t, serverPort+100) { + defer CloseServer(server) + break + } + retry++ + if retry > 5 { + t.Fatal("All attempts failed to start server") + } + serverPort = tcp.PickPort() } clientPort := tcp.PickPort() @@ -135,15 +163,30 @@ }, } - servers, err := InitializeServerConfigs(serverConfig, clientConfig) + server, err := InitializeServerConfig(clientConfig) common.Must(err) - defer CloseAllServers(servers) + defer CloseServer(server) - for i := 0; i < 10; i++ { - if err := testTCPConn(clientPort, 1024, time.Second*2)(); err != nil { - t.Error(err) + if !tcpConnAvailableAtPort(t, clientPort) { + t.Fail() + } +} + +func tcpConnAvailableAtPort(t *testing.T, port net.Port) bool { + for i := 1; ; i++ { + if i > 10 { + t.Log("All attempts failed to test tcp conn") + return false + } + time.Sleep(time.Millisecond * 10) + if err := testTCPConn(port, 1024, time.Second*2)(); err != nil { + t.Log("err ", err) + } else { + t.Log("success with", i, "attempts") + break } } + return true } func TestVMessGCM(t *testing.T) { @@ -403,7 +446,7 @@ }, } - clientPort := tcp.PickPort() + clientPort := udp.PickPort() clientConfig := &core.Config{ App: []*serial.TypedMessage{ serial.ToTypedMessage(&log.Config{ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/v2ray-core-4.42.2/transport/internet/config.pb.go new/v2ray-core-4.43.0/transport/internet/config.pb.go --- old/v2ray-core-4.42.2/transport/internet/config.pb.go 2021-09-17 15:23:08.000000000 +0200 +++ new/v2ray-core-4.43.0/transport/internet/config.pb.go 2021-10-02 18:07:52.000000000 +0200 @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: // protoc-gen-go v1.27.1 -// protoc v3.18.0--rc2 +// protoc v3.18.0 // source: transport/internet/config.proto package internet @@ -421,6 +421,7 @@ BindPort uint32 `protobuf:"varint,6,opt,name=bind_port,json=bindPort,proto3" json:"bind_port,omitempty"` AcceptProxyProtocol bool `protobuf:"varint,7,opt,name=accept_proxy_protocol,json=acceptProxyProtocol,proto3" json:"accept_proxy_protocol,omitempty"` TcpKeepAliveInterval int32 `protobuf:"varint,8,opt,name=tcp_keep_alive_interval,json=tcpKeepAliveInterval,proto3" json:"tcp_keep_alive_interval,omitempty"` + TfoQueueLength uint32 `protobuf:"varint,9,opt,name=tfo_queue_length,json=tfoQueueLength,proto3" json:"tfo_queue_length,omitempty"` } func (x *SocketConfig) Reset() { @@ -511,6 +512,13 @@ return 0 } +func (x *SocketConfig) GetTfoQueueLength() uint32 { + if x != nil { + return x.TfoQueueLength + } + return 0 +} + var File_transport_internet_config_proto protoreflect.FileDescriptor var file_transport_internet_config_proto_rawDesc = []byte{ @@ -565,7 +573,7 @@ 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x74, 0x61, 0x67, 0x12, 0x30, 0x0a, 0x13, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x70, 0x6f, 0x72, 0x74, 0x4c, 0x61, 0x79, 0x65, 0x72, 0x50, 0x72, 0x6f, 0x78, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x13, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x70, 0x6f, - 0x72, 0x74, 0x4c, 0x61, 0x79, 0x65, 0x72, 0x50, 0x72, 0x6f, 0x78, 0x79, 0x22, 0x98, 0x04, 0x0a, + 0x72, 0x74, 0x4c, 0x61, 0x79, 0x65, 0x72, 0x50, 0x72, 0x6f, 0x78, 0x79, 0x22, 0xc2, 0x04, 0x0a, 0x0c, 0x53, 0x6f, 0x63, 0x6b, 0x65, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x12, 0x0a, 0x04, 0x6d, 0x61, 0x72, 0x6b, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x04, 0x6d, 0x61, 0x72, 0x6b, 0x12, 0x4e, 0x0a, 0x03, 0x74, 0x66, 0x6f, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x3c, @@ -592,28 +600,30 @@ 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x12, 0x35, 0x0a, 0x17, 0x74, 0x63, 0x70, 0x5f, 0x6b, 0x65, 0x65, 0x70, 0x5f, 0x61, 0x6c, 0x69, 0x76, 0x65, 0x5f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x76, 0x61, 0x6c, 0x18, 0x08, 0x20, 0x01, 0x28, 0x05, 0x52, 0x14, 0x74, 0x63, 0x70, 0x4b, 0x65, - 0x65, 0x70, 0x41, 0x6c, 0x69, 0x76, 0x65, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x76, 0x61, 0x6c, 0x22, - 0x35, 0x0a, 0x10, 0x54, 0x43, 0x50, 0x46, 0x61, 0x73, 0x74, 0x4f, 0x70, 0x65, 0x6e, 0x53, 0x74, - 0x61, 0x74, 0x65, 0x12, 0x08, 0x0a, 0x04, 0x41, 0x73, 0x49, 0x73, 0x10, 0x00, 0x12, 0x0a, 0x0a, - 0x06, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x10, 0x01, 0x12, 0x0b, 0x0a, 0x07, 0x44, 0x69, 0x73, - 0x61, 0x62, 0x6c, 0x65, 0x10, 0x02, 0x22, 0x2f, 0x0a, 0x0a, 0x54, 0x50, 0x72, 0x6f, 0x78, 0x79, - 0x4d, 0x6f, 0x64, 0x65, 0x12, 0x07, 0x0a, 0x03, 0x4f, 0x66, 0x66, 0x10, 0x00, 0x12, 0x0a, 0x0a, - 0x06, 0x54, 0x50, 0x72, 0x6f, 0x78, 0x79, 0x10, 0x01, 0x12, 0x0c, 0x0a, 0x08, 0x52, 0x65, 0x64, - 0x69, 0x72, 0x65, 0x63, 0x74, 0x10, 0x02, 0x2a, 0x5a, 0x0a, 0x11, 0x54, 0x72, 0x61, 0x6e, 0x73, - 0x70, 0x6f, 0x72, 0x74, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x12, 0x07, 0x0a, 0x03, - 0x54, 0x43, 0x50, 0x10, 0x00, 0x12, 0x07, 0x0a, 0x03, 0x55, 0x44, 0x50, 0x10, 0x01, 0x12, 0x08, - 0x0a, 0x04, 0x4d, 0x4b, 0x43, 0x50, 0x10, 0x02, 0x12, 0x0d, 0x0a, 0x09, 0x57, 0x65, 0x62, 0x53, - 0x6f, 0x63, 0x6b, 0x65, 0x74, 0x10, 0x03, 0x12, 0x08, 0x0a, 0x04, 0x48, 0x54, 0x54, 0x50, 0x10, - 0x04, 0x12, 0x10, 0x0a, 0x0c, 0x44, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x53, 0x6f, 0x63, 0x6b, 0x65, - 0x74, 0x10, 0x05, 0x42, 0x78, 0x0a, 0x21, 0x63, 0x6f, 0x6d, 0x2e, 0x76, 0x32, 0x72, 0x61, 0x79, - 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x70, 0x6f, 0x72, 0x74, 0x2e, - 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x65, 0x74, 0x50, 0x01, 0x5a, 0x31, 0x67, 0x69, 0x74, 0x68, - 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x76, 0x32, 0x66, 0x6c, 0x79, 0x2f, 0x76, 0x32, 0x72, - 0x61, 0x79, 0x2d, 0x63, 0x6f, 0x72, 0x65, 0x2f, 0x76, 0x34, 0x2f, 0x74, 0x72, 0x61, 0x6e, 0x73, - 0x70, 0x6f, 0x72, 0x74, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x65, 0x74, 0xaa, 0x02, 0x1d, - 0x56, 0x32, 0x52, 0x61, 0x79, 0x2e, 0x43, 0x6f, 0x72, 0x65, 0x2e, 0x54, 0x72, 0x61, 0x6e, 0x73, - 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x65, 0x74, 0x62, 0x06, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x65, 0x70, 0x41, 0x6c, 0x69, 0x76, 0x65, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x76, 0x61, 0x6c, 0x12, + 0x28, 0x0a, 0x10, 0x74, 0x66, 0x6f, 0x5f, 0x71, 0x75, 0x65, 0x75, 0x65, 0x5f, 0x6c, 0x65, 0x6e, + 0x67, 0x74, 0x68, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0e, 0x74, 0x66, 0x6f, 0x51, 0x75, + 0x65, 0x75, 0x65, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x22, 0x35, 0x0a, 0x10, 0x54, 0x43, 0x50, + 0x46, 0x61, 0x73, 0x74, 0x4f, 0x70, 0x65, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x08, 0x0a, + 0x04, 0x41, 0x73, 0x49, 0x73, 0x10, 0x00, 0x12, 0x0a, 0x0a, 0x06, 0x45, 0x6e, 0x61, 0x62, 0x6c, + 0x65, 0x10, 0x01, 0x12, 0x0b, 0x0a, 0x07, 0x44, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x10, 0x02, + 0x22, 0x2f, 0x0a, 0x0a, 0x54, 0x50, 0x72, 0x6f, 0x78, 0x79, 0x4d, 0x6f, 0x64, 0x65, 0x12, 0x07, + 0x0a, 0x03, 0x4f, 0x66, 0x66, 0x10, 0x00, 0x12, 0x0a, 0x0a, 0x06, 0x54, 0x50, 0x72, 0x6f, 0x78, + 0x79, 0x10, 0x01, 0x12, 0x0c, 0x0a, 0x08, 0x52, 0x65, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x10, + 0x02, 0x2a, 0x5a, 0x0a, 0x11, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x70, 0x6f, 0x72, 0x74, 0x50, 0x72, + 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x12, 0x07, 0x0a, 0x03, 0x54, 0x43, 0x50, 0x10, 0x00, 0x12, + 0x07, 0x0a, 0x03, 0x55, 0x44, 0x50, 0x10, 0x01, 0x12, 0x08, 0x0a, 0x04, 0x4d, 0x4b, 0x43, 0x50, + 0x10, 0x02, 0x12, 0x0d, 0x0a, 0x09, 0x57, 0x65, 0x62, 0x53, 0x6f, 0x63, 0x6b, 0x65, 0x74, 0x10, + 0x03, 0x12, 0x08, 0x0a, 0x04, 0x48, 0x54, 0x54, 0x50, 0x10, 0x04, 0x12, 0x10, 0x0a, 0x0c, 0x44, + 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x53, 0x6f, 0x63, 0x6b, 0x65, 0x74, 0x10, 0x05, 0x42, 0x78, 0x0a, + 0x21, 0x63, 0x6f, 0x6d, 0x2e, 0x76, 0x32, 0x72, 0x61, 0x79, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, + 0x74, 0x72, 0x61, 0x6e, 0x73, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, + 0x65, 0x74, 0x50, 0x01, 0x5a, 0x31, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, + 0x2f, 0x76, 0x32, 0x66, 0x6c, 0x79, 0x2f, 0x76, 0x32, 0x72, 0x61, 0x79, 0x2d, 0x63, 0x6f, 0x72, + 0x65, 0x2f, 0x76, 0x34, 0x2f, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x70, 0x6f, 0x72, 0x74, 0x2f, 0x69, + 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x65, 0x74, 0xaa, 0x02, 0x1d, 0x56, 0x32, 0x52, 0x61, 0x79, 0x2e, + 0x43, 0x6f, 0x72, 0x65, 0x2e, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x49, + 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x65, 0x74, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/v2ray-core-4.42.2/transport/internet/config.proto new/v2ray-core-4.43.0/transport/internet/config.proto --- old/v2ray-core-4.42.2/transport/internet/config.proto 2021-09-17 15:23:08.000000000 +0200 +++ new/v2ray-core-4.43.0/transport/internet/config.proto 2021-10-02 18:07:52.000000000 +0200 @@ -93,4 +93,6 @@ bool accept_proxy_protocol = 7; int32 tcp_keep_alive_interval = 8; + + uint32 tfo_queue_length = 9; } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/v2ray-core-4.42.2/transport/internet/sockopt_linux.go new/v2ray-core-4.43.0/transport/internet/sockopt_linux.go --- old/v2ray-core-4.42.2/transport/internet/sockopt_linux.go 2021-09-17 15:23:08.000000000 +0200 +++ new/v2ray-core-4.43.0/transport/internet/sockopt_linux.go 2021-10-02 18:07:52.000000000 +0200 @@ -84,8 +84,8 @@ if isTCPSocket(network) { switch config.Tfo { case SocketConfig_Enable: - if err := syscall.SetsockoptInt(int(fd), syscall.SOL_TCP, TCP_FASTOPEN, 1); err != nil { - return newError("failed to set TCP_FASTOPEN=1").Base(err) + if err := syscall.SetsockoptInt(int(fd), syscall.SOL_TCP, TCP_FASTOPEN, int(config.TfoQueueLength)); err != nil { + return newError("failed to set TCP_FASTOPEN=", config.TfoQueueLength).Base(err) } case SocketConfig_Disable: if err := syscall.SetsockoptInt(int(fd), syscall.SOL_TCP, TCP_FASTOPEN, 0); err != nil { ++++++ v2ray-extra.zip ++++++ Binary files /var/tmp/diff_new_pack.FfGjgU/_old and /var/tmp/diff_new_pack.FfGjgU/_new differ ++++++ vendor.tar.gz ++++++ /work/SRC/openSUSE:Factory/v2ray-core/vendor.tar.gz /work/SRC/openSUSE:Factory/.v2ray-core.new.1890/vendor.tar.gz differ: char 1, line 1
