2
0
mirror of https://github.com/stefan01/transocks.git synced 2025-02-22 03:30:45 +07:00

fixed support for non-http(s) connections

This commit is contained in:
Stefan Sauer 2023-04-04 10:49:01 +02:00
parent f0aa580aaf
commit 283504b292

View File

@ -126,8 +126,7 @@ func (s *Server) handleConnection(ctx context.Context, conn net.Conn) {
hello, reader_n2, err := peekClientHello(reader) hello, reader_n2, err := peekClientHello(reader)
if err != nil { if err != nil {
fields[log.FnError] = err.Error() fields[log.FnError] = err.Error()
s.logger.Error("peekClientHello failed", fields) s.logger.Warn("peekClientHello failed", fields)
return
} }
if err == nil && hello.ServerName != "" { if err == nil && hello.ServerName != "" {
addr = hello.ServerName + addr[strings.Index(addr, ":"):] addr = hello.ServerName + addr[strings.Index(addr, ":"):]
@ -138,11 +137,11 @@ func (s *Server) handleConnection(ctx context.Context, conn net.Conn) {
host, reader_n3, err := peekHTTP(reader) host, reader_n3, err := peekHTTP(reader)
if err != nil { if err != nil {
fields[log.FnError] = err.Error() fields[log.FnError] = err.Error()
s.logger.Error("peekHTTP failed", fields) s.logger.Warn("peekHTTP failed", fields)
return } else {
} if err == nil && host != "" {
if err == nil && host != "" { addr = host + addr[strings.Index(addr, ":"):]
addr = host + addr[strings.Index(addr, ":"):] }
} }
reader = reader_n3 reader = reader_n3
} }
@ -242,7 +241,7 @@ func peekSSL(reader io.Reader) (bool, io.Reader, error) {
peekedBytes := new(bytes.Buffer) peekedBytes := new(bytes.Buffer)
isTLS, err := isTLS(io.TeeReader(reader, peekedBytes)) isTLS, err := isTLS(io.TeeReader(reader, peekedBytes))
if err != nil { if err != nil {
return false, nil, err return false, io.MultiReader(peekedBytes, reader), err
} }
return isTLS, io.MultiReader(peekedBytes, reader), nil return isTLS, io.MultiReader(peekedBytes, reader), nil
} }
@ -261,7 +260,7 @@ func peekHTTP(reader io.Reader) (string, io.Reader, error) {
peekedBytes := new(bytes.Buffer) peekedBytes := new(bytes.Buffer)
host, err := getHost(io.TeeReader(reader, peekedBytes)) host, err := getHost(io.TeeReader(reader, peekedBytes))
if err != nil { if err != nil {
return "", nil, err return "", io.MultiReader(peekedBytes, reader), err
} }
return host, io.MultiReader(peekedBytes, reader), nil return host, io.MultiReader(peekedBytes, reader), nil
} }