From 99540014d0c5e6abf7e44632e42e47f25880a6f3 Mon Sep 17 00:00:00 2001 From: ginuerzh Date: Sun, 1 May 2022 17:08:57 +0800 Subject: [PATCH] fix shadowsocks connector --- dialer/icmp/conn.go | 2 +- dialer/icmp/dialer.go | 2 +- internal/util/ss/ss.go | 9 +++++---- listener/icmp/listener.go | 6 +++--- 4 files changed, 10 insertions(+), 9 deletions(-) diff --git a/dialer/icmp/conn.go b/dialer/icmp/conn.go index 95a4d90..39419fb 100644 --- a/dialer/icmp/conn.go +++ b/dialer/icmp/conn.go @@ -8,7 +8,7 @@ import ( ) type quicSession struct { - session quic.Connection + session quic.EarlyConnection } func (session *quicSession) GetConn() (*quicConn, error) { diff --git a/dialer/icmp/dialer.go b/dialer/icmp/dialer.go index 24f8b39..9edcd60 100644 --- a/dialer/icmp/dialer.go +++ b/dialer/icmp/dialer.go @@ -117,7 +117,7 @@ func (d *icmpDialer) initSession(ctx context.Context, addr net.Addr, conn net.Pa tlsCfg := d.options.TLSConfig tlsCfg.NextProtos = []string{"http/3", "quic/v1"} - session, err := quic.DialContext(ctx, conn, addr, addr.String(), tlsCfg, quicConfig) + session, err := quic.DialEarlyContext(ctx, conn, addr, addr.String(), tlsCfg, quicConfig) if err != nil { return nil, err } diff --git a/internal/util/ss/ss.go b/internal/util/ss/ss.go index 1a26bb3..16433ee 100644 --- a/internal/util/ss/ss.go +++ b/internal/util/ss/ss.go @@ -21,7 +21,7 @@ func (c *shadowCipher) PacketConn(conn net.PacketConn) net.PacketConn { } func ShadowCipher(method, password string, key string) (core.Cipher, error) { - if method == "" && password == "" { + if method == "" || password == "" { return nil, nil } @@ -37,14 +37,15 @@ func ShadowCipher(method, password string, key string) (core.Cipher, error) { // we wrap around it to make io.Copy happy. type shadowConn struct { net.Conn - wbuf *bytes.Buffer + wbuf bytes.Buffer } func ShadowConn(conn net.Conn, header []byte) net.Conn { - return &shadowConn{ + c := &shadowConn{ Conn: conn, - wbuf: bytes.NewBuffer(header), } + c.wbuf.Write(header) + return c } func (c *shadowConn) Write(b []byte) (n int, err error) { diff --git a/listener/icmp/listener.go b/listener/icmp/listener.go index d484082..710b669 100644 --- a/listener/icmp/listener.go +++ b/listener/icmp/listener.go @@ -20,7 +20,7 @@ func init() { } type icmpListener struct { - ln quic.Listener + ln quic.EarlyListener cqueue chan net.Conn errChan chan error logger logger.Logger @@ -71,7 +71,7 @@ func (l *icmpListener) Init(md md.Metadata) (err error) { tlsCfg := l.options.TLSConfig tlsCfg.NextProtos = []string{"http/3", "quic/v1"} - ln, err := quic.Listen(conn, tlsCfg, config) + ln, err := quic.ListenEarly(conn, tlsCfg, config) if err != nil { return } @@ -120,7 +120,7 @@ func (l *icmpListener) listenLoop() { } } -func (l *icmpListener) mux(ctx context.Context, session quic.Connection) { +func (l *icmpListener) mux(ctx context.Context, session quic.EarlyConnection) { defer session.CloseWithError(0, "closed") for {