From e76c1b65ca5105b36edffee61297dba5e9993934 Mon Sep 17 00:00:00 2001 From: anytls Date: Tue, 25 Mar 2025 14:00:37 +0900 Subject: [PATCH] chore: update anytls --- transport/anytls/padding/padding.go | 6 +++--- transport/anytls/session/session.go | 10 ++++++---- transport/anytls/session/stream.go | 19 +++++++------------ 3 files changed, 16 insertions(+), 19 deletions(-) diff --git a/transport/anytls/padding/padding.go b/transport/anytls/padding/padding.go index addd47c2..498feb05 100644 --- a/transport/anytls/padding/padding.go +++ b/transport/anytls/padding/padding.go @@ -15,10 +15,10 @@ import ( const CheckMark = -1 var DefaultPaddingScheme = []byte(`stop=8 -0=34-120 +0=30-30 1=100-400 -2=400-500,c,500-1000,c,400-500,c,500-1000,c,500-1000,c,400-500 -3=500-1000 +2=400-500,c,500-1000,c,500-1000,c,500-1000,c,500-1000 +3=9-9,500-1000 4=500-1000 5=500-1000 6=500-1000 diff --git a/transport/anytls/session/session.go b/transport/anytls/session/session.go index 963533ea..85d82353 100644 --- a/transport/anytls/session/session.go +++ b/transport/anytls/session/session.go @@ -105,15 +105,15 @@ func (s *Session) Close() error { close(s.die) once = true }) - if once { if s.dieHook != nil { s.dieHook() } s.streamLock.Lock() for k := range s.streams { - s.streams[k].sessionClose() + s.streams[k].Close() } + s.streams = make(map[uint32]*Stream) s.streamLock.Unlock() return s.conn.Close() } else { @@ -265,7 +265,7 @@ func (s *Session) recvLoop() error { } if s.isClient { if padding.UpdatePaddingScheme(rawScheme, s.padding) { - log.Infoln("[Update padding succeed] %x\n", md5.Sum(rawScheme)) + log.Debugln("[Update padding succeed] %x\n", md5.Sum(rawScheme)) } else { log.Warnln("[Update padding failed] %x\n", md5.Sum(rawScheme)) } @@ -280,8 +280,10 @@ func (s *Session) recvLoop() error { } } -// notify the session that a stream has closed func (s *Session) streamClosed(sid uint32) error { + if s.IsClosed() { + return io.ErrClosedPipe + } _, err := s.writeFrame(newFrame(cmdFIN, sid)) s.streamLock.Lock() delete(s.streams, sid) diff --git a/transport/anytls/session/stream.go b/transport/anytls/session/stream.go index 9f21ff04..83edc736 100644 --- a/transport/anytls/session/stream.go +++ b/transport/anytls/session/stream.go @@ -54,25 +54,20 @@ func (s *Stream) Write(b []byte) (n int, err error) { // Close implements net.Conn func (s *Stream) Close() error { - if s.sessionClose() { - // notify remote - return s.sess.streamClosed(s.id) - } else { - return io.ErrClosedPipe - } -} - -// sessionClose close stream from session side, do not notify remote -func (s *Stream) sessionClose() (once bool) { + var once bool s.dieOnce.Do(func() { s.pipeR.Close() once = true + }) + if once { if s.dieHook != nil { s.dieHook() s.dieHook = nil } - }) - return + return s.sess.streamClosed(s.id) + } else { + return io.ErrClosedPipe + } } func (s *Stream) SetReadDeadline(t time.Time) error {