From 77d6f9ae6f12a14f5e69146a2ff10b7e80bc476a Mon Sep 17 00:00:00 2001 From: icpz Date: Thu, 30 Jul 2020 15:54:26 +0800 Subject: [PATCH] Fix: handle snell server reported error message properly (#848) --- component/snell/snell.go | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/component/snell/snell.go b/component/snell/snell.go index 6b40b383..0e629702 100644 --- a/component/snell/snell.go +++ b/component/snell/snell.go @@ -4,6 +4,7 @@ import ( "bytes" "encoding/binary" "errors" + "fmt" "io" "net" "sync" @@ -49,10 +50,16 @@ func (s *Snell) Read(b []byte) (int, error) { } // CommandError + // 1 byte error code if _, err := io.ReadFull(s.Conn, s.buffer[:]); err != nil { return 0, err } + errcode := int(s.buffer[0]) + // 1 byte error message length + if _, err := io.ReadFull(s.Conn, s.buffer[:]); err != nil { + return 0, err + } length := int(s.buffer[0]) msg := make([]byte, length) @@ -60,7 +67,7 @@ func (s *Snell) Read(b []byte) (int, error) { return 0, err } - return 0, errors.New(string(msg)) + return 0, fmt.Errorf("server reported code: %d, message: %s", errcode, string(msg)) } func WriteHeader(conn net.Conn, host string, port uint) error {