From c060f9f11fa9eadd16e3750b73e87c223c422875 Mon Sep 17 00:00:00 2001 From: vcptr <51714622+vcptr@users.noreply.github.com> Date: Wed, 27 Nov 2019 09:12:02 +0800 Subject: [PATCH 1/4] fix test read buf --- ....dat => test_MultiBufferReadAllToByte.dat} | 0 common/buf/multi_buffer_test.go | 35 +++++++++++++++---- common/buf/reader_test.go | 20 ----------- 3 files changed, 28 insertions(+), 27 deletions(-) rename common/buf/data/{test_ReadBuffer.dat => test_MultiBufferReadAllToByte.dat} (100%) diff --git a/common/buf/data/test_ReadBuffer.dat b/common/buf/data/test_MultiBufferReadAllToByte.dat similarity index 100% rename from common/buf/data/test_ReadBuffer.dat rename to common/buf/data/test_MultiBufferReadAllToByte.dat diff --git a/common/buf/multi_buffer_test.go b/common/buf/multi_buffer_test.go index 6d8387043..add7a1e19 100644 --- a/common/buf/multi_buffer_test.go +++ b/common/buf/multi_buffer_test.go @@ -7,6 +7,8 @@ import ( "testing" "github.com/google/go-cmp/cmp" + "io/ioutil" + "os" "v2ray.com/core/common" . "v2ray.com/core/common/buf" @@ -98,14 +100,33 @@ func TestMultiBufferSplitFirst(t *testing.T) { } func TestMultiBufferReadAllToByte(t *testing.T) { - lb := make([]byte, 8*1024) - common.Must2(io.ReadFull(rand.Reader, lb)) - rd := bytes.NewBuffer(lb) - b, err := ReadAllToBytes(rd) - common.Must(err) + { + lb := make([]byte, 8*1024) + common.Must2(io.ReadFull(rand.Reader, lb)) + rd := bytes.NewBuffer(lb) + b, err := ReadAllToBytes(rd) + common.Must(err) - if l := len(b); l != 8*1024 { - t.Error("unexpceted length from ReadAllToBytes", l) + if l := len(b); l != 8*1024 { + t.Error("unexpceted length from ReadAllToBytes", l) + } + + } + { + const dat = "data/test_MultiBufferReadAllToByte.dat" + f, err := os.Open(dat) + common.Must(err) + + buf2, err := ReadAllToBytes(f) + common.Must(err) + f.Close() + + cnt, err := ioutil.ReadFile(dat) + common.Must(err) + + if d := cmp.Diff(buf2, cnt); d != "" { + t.Error("fail to read from file: ", d) + } } } diff --git a/common/buf/reader_test.go b/common/buf/reader_test.go index 74e4fd541..95622eefe 100644 --- a/common/buf/reader_test.go +++ b/common/buf/reader_test.go @@ -3,12 +3,9 @@ package buf_test import ( "bytes" "io" - "io/ioutil" - "os" "strings" "testing" - "github.com/google/go-cmp/cmp" "v2ray.com/core/common" . "v2ray.com/core/common/buf" "v2ray.com/core/transport/pipe" @@ -92,23 +89,6 @@ func TestReadBuffer(t *testing.T) { buf.Release() } - { - const dat = "data/test_ReadBuffer.dat" - f, err := os.Open(dat) - common.Must(err) - defer f.Close() - - buf2, err := ReadBuffer(f) - common.Must(err) - - cnt, err := ioutil.ReadFile(dat) - common.Must(err) - - if cmp.Diff(buf2.Bytes(), cnt) != "" { - t.Error("fail to read from file") - } - buf2.Release() - } } func TestReadAtMost(t *testing.T) { From 47660bfee269dbe31105acf05e5a1797169ed9f1 Mon Sep 17 00:00:00 2001 From: vcptr <51714622+vcptr@users.noreply.github.com> Date: Wed, 27 Nov 2019 11:24:40 +0800 Subject: [PATCH 2/4] fix win test error; dont use ReadV on file --- common/buf/io.go | 12 +++------ common/buf/readv_constraint_other.go | 9 ------- common/buf/readv_constraint_windows.go | 37 -------------------------- 3 files changed, 4 insertions(+), 54 deletions(-) delete mode 100644 common/buf/readv_constraint_other.go delete mode 100644 common/buf/readv_constraint_windows.go diff --git a/common/buf/io.go b/common/buf/io.go index cf27ba892..2a4cd6705 100644 --- a/common/buf/io.go +++ b/common/buf/io.go @@ -3,6 +3,7 @@ package buf import ( "io" "net" + "os" "syscall" "time" ) @@ -57,19 +58,14 @@ func NewReader(reader io.Reader) Reader { } } - if useReadv { + _, isFile := reader.(*os.File) + if !isFile && useReadv { if sc, ok := reader.(syscall.Conn); ok { rawConn, err := sc.SyscallConn() if err != nil { newError("failed to get sysconn").Base(err).WriteToLog() } else { - /* - Check if ReadVReader Can be used on this reader first - Fix https://github.com/v2ray/v2ray-core/issues/1666 - */ - if ok, _ := checkReadVConstraint(rawConn); ok { - return NewReadVReader(reader, rawConn) - } + return NewReadVReader(reader, rawConn) } } } diff --git a/common/buf/readv_constraint_other.go b/common/buf/readv_constraint_other.go deleted file mode 100644 index 315ce61fd..000000000 --- a/common/buf/readv_constraint_other.go +++ /dev/null @@ -1,9 +0,0 @@ -// +build !windows - -package buf - -import "syscall" - -func checkReadVConstraint(conn syscall.RawConn) (bool, error) { - return true, nil -} diff --git a/common/buf/readv_constraint_windows.go b/common/buf/readv_constraint_windows.go deleted file mode 100644 index d78cbaa8d..000000000 --- a/common/buf/readv_constraint_windows.go +++ /dev/null @@ -1,37 +0,0 @@ -// +build windows -package buf - -import ( - "syscall" -) - -func checkReadVConstraint(conn syscall.RawConn) (bool, error) { - var isSocketReady = false - var reason error - /* - In Windows, WSARecv system call only support socket connection. - - It it required to check if the given fd is of a socket type - - Fix https://github.com/v2ray/v2ray-core/issues/1666 - - Additional Information: - https://docs.microsoft.com/en-us/windows/desktop/api/winsock2/nf-winsock2-wsarecv - https://docs.microsoft.com/en-us/windows/desktop/api/winsock/nf-winsock-getsockopt - https://docs.microsoft.com/en-us/windows/desktop/WinSock/sol-socket-socket-options - - */ - err := conn.Control(func(fd uintptr) { - var val [4]byte - var le = int32(len(val)) - err := syscall.Getsockopt(syscall.Handle(fd), syscall.SOL_SOCKET, syscall.SO_RCVBUF, &val[0], &le) - if err != nil { - isSocketReady = false - } else { - isSocketReady = true - } - reason = err - }) - - return isSocketReady, err -} From 60603abee785f54f03f30d9370a87b70c93e7cfd Mon Sep 17 00:00:00 2001 From: vcptr <51714622+vcptr@users.noreply.github.com> Date: Wed, 27 Nov 2019 13:06:08 +0800 Subject: [PATCH 3/4] fix: dns test default timeout too short --- proxy/dns/dns_test.go | 1 + 1 file changed, 1 insertion(+) diff --git a/proxy/dns/dns_test.go b/proxy/dns/dns_test.go index da9175968..441979433 100644 --- a/proxy/dns/dns_test.go +++ b/proxy/dns/dns_test.go @@ -162,6 +162,7 @@ func TestUDPDNSTunnel(t *testing.T) { m1.Question[0] = dns.Question{"ipv4only.google.com.", dns.TypeAAAA, dns.ClassINET} c := new(dns.Client) + c.Timeout = 10 * time.Second in, _, err := c.Exchange(m1, "127.0.0.1:"+strconv.Itoa(int(serverPort))) common.Must(err) From 2a78af34fdc9a59dc245d1567798d3e9d3167905 Mon Sep 17 00:00:00 2001 From: vcptr <51714622+vcptr@users.noreply.github.com> Date: Wed, 27 Nov 2019 14:40:28 +0800 Subject: [PATCH 4/4] fix: KCPLarge buffer size too small --- testing/scenarios/vmess_test.go | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/testing/scenarios/vmess_test.go b/testing/scenarios/vmess_test.go index 413da2e8a..d6f4306a3 100644 --- a/testing/scenarios/vmess_test.go +++ b/testing/scenarios/vmess_test.go @@ -810,10 +810,10 @@ func TestVMessKCPLarge(t *testing.T) { Protocol: internet.TransportProtocol_MKCP, Settings: serial.ToTypedMessage(&kcp.Config{ ReadBuffer: &kcp.ReadBuffer{ - Size: 4096, + Size: 512 * 1024, }, WriteBuffer: &kcp.WriteBuffer{ - Size: 4096, + Size: 512 * 1024, }, UplinkCapacity: &kcp.UplinkCapacity{ Value: 20, @@ -897,10 +897,10 @@ func TestVMessKCPLarge(t *testing.T) { Protocol: internet.TransportProtocol_MKCP, Settings: serial.ToTypedMessage(&kcp.Config{ ReadBuffer: &kcp.ReadBuffer{ - Size: 4096, + Size: 512 * 1024, }, WriteBuffer: &kcp.WriteBuffer{ - Size: 4096, + Size: 512 * 1024, }, UplinkCapacity: &kcp.UplinkCapacity{ Value: 20,