From b8e06d45430fbc60020150f3e002d2f7ec98818e Mon Sep 17 00:00:00 2001 From: saba Date: Wed, 3 Dec 2025 21:52:56 +0800 Subject: [PATCH] feat. add uot for sudoku --- adapter/outbound/sudoku.go | 14 +++++++------- listener/sudoku/server.go | 12 ++++++------ transport/{sudotun => sudoku}/handshake.go | 2 +- transport/{sudotun => sudoku}/uot.go | 2 +- 4 files changed, 15 insertions(+), 15 deletions(-) rename transport/{sudotun => sudoku}/handshake.go (99%) rename transport/{sudotun => sudoku}/uot.go (99%) diff --git a/adapter/outbound/sudoku.go b/adapter/outbound/sudoku.go index f380f8ea..71dac311 100644 --- a/adapter/outbound/sudoku.go +++ b/adapter/outbound/sudoku.go @@ -14,18 +14,18 @@ import ( "github.com/saba-futai/sudoku/apis" "github.com/saba-futai/sudoku/pkg/crypto" "github.com/saba-futai/sudoku/pkg/obfs/httpmask" - "github.com/saba-futai/sudoku/pkg/obfs/sudoku" + sudokuobfs "github.com/saba-futai/sudoku/pkg/obfs/sudoku" N "github.com/metacubex/mihomo/common/net" C "github.com/metacubex/mihomo/constant" "github.com/metacubex/mihomo/log" - "github.com/metacubex/mihomo/transport/sudotun" + ts "github.com/metacubex/mihomo/transport/sudoku" ) type Sudoku struct { *Base option *SudokuOption - table *sudoku.Table + table *sudokuobfs.Table baseConf apis.ProtocolConfig } @@ -101,12 +101,12 @@ func (s *Sudoku) ListenPacketContext(ctx context.Context, metadata *C.Metadata) return nil, err } - if err = sudotun.WritePreface(c); err != nil { + if err = ts.WritePreface(c); err != nil { _ = c.Close() return nil, fmt.Errorf("send uot preface failed: %w", err) } - return newPacketConn(N.NewThreadSafePacketConn(sudotun.NewUoTPacketConn(c)), s), nil + return newPacketConn(N.NewThreadSafePacketConn(ts.NewUoTPacketConn(c)), s), nil } // SupportUOT implements C.ProxyAdapter @@ -142,7 +142,7 @@ func (s *Sudoku) handshakeConn(rawConn net.Conn, cfg *apis.ProtocolConfig) (_ ne } } - obfsConn := sudoku.NewConn(rawConn, cfg.Table, cfg.PaddingMin, cfg.PaddingMax, false) + obfsConn := sudokuobfs.NewConn(rawConn, cfg.Table, cfg.PaddingMin, cfg.PaddingMax, false) cConn, err := crypto.NewAEADConn(obfsConn, cfg.Key, cfg.AEADMethod) if err != nil { return nil, fmt.Errorf("setup crypto failed: %w", err) @@ -196,7 +196,7 @@ func NewSudoku(option SudokuOption) (*Sudoku, error) { } start := time.Now() - table := sudoku.NewTable(seed, tableType) + table := sudokuobfs.NewTable(seed, tableType) log.Infoln("[Sudoku] Tables initialized (%s) in %v", tableType, time.Since(start)) defaultConf := apis.DefaultConfig() diff --git a/listener/sudoku/server.go b/listener/sudoku/server.go index 7990dda5..1755a040 100644 --- a/listener/sudoku/server.go +++ b/listener/sudoku/server.go @@ -14,7 +14,7 @@ import ( LC "github.com/metacubex/mihomo/listener/config" "github.com/metacubex/mihomo/log" "github.com/metacubex/mihomo/transport/socks5" - "github.com/metacubex/mihomo/transport/sudotun" + ts "github.com/metacubex/mihomo/transport/sudoku" ) type Listener struct { @@ -47,14 +47,14 @@ func (l *Listener) Close() error { } func (l *Listener) handleConn(conn net.Conn, tunnel C.Tunnel, additions ...inbound.Addition) { - session, err := sudotun.ServerHandshake(conn, &l.protoConf) + session, err := ts.ServerHandshake(conn, &l.protoConf) if err != nil { _ = conn.Close() return } switch session.Type { - case sudotun.SessionTypeUoT: + case ts.SessionTypeUoT: l.handleUoTSession(session.Conn, tunnel, additions...) default: targetAddr := socks5.ParseAddr(session.Target) @@ -67,11 +67,11 @@ func (l *Listener) handleConn(conn net.Conn, tunnel C.Tunnel, additions ...inbou } func (l *Listener) handleUoTSession(conn net.Conn, tunnel C.Tunnel, additions ...inbound.Addition) { - writer := sudotun.NewUoTPacketConn(conn) + writer := ts.NewUoTPacketConn(conn) remoteAddr := conn.RemoteAddr() for { - addrStr, payload, err := sudotun.ReadDatagram(conn) + addrStr, payload, err := ts.ReadDatagram(conn) if err != nil { if !errors.Is(err, io.EOF) { log.Debugln("[Sudoku][UoT] session closed: %v", err) @@ -97,7 +97,7 @@ func (l *Listener) handleUoTSession(conn net.Conn, tunnel C.Tunnel, additions .. type uotPacket struct { payload []byte - writer *sudotun.UoTPacketConn + writer *ts.UoTPacketConn rAddr net.Addr } diff --git a/transport/sudotun/handshake.go b/transport/sudoku/handshake.go similarity index 99% rename from transport/sudotun/handshake.go rename to transport/sudoku/handshake.go index 5a922a70..0c65ae25 100644 --- a/transport/sudotun/handshake.go +++ b/transport/sudoku/handshake.go @@ -1,4 +1,4 @@ -package sudotun +package sudoku import ( "bufio" diff --git a/transport/sudotun/uot.go b/transport/sudoku/uot.go similarity index 99% rename from transport/sudotun/uot.go rename to transport/sudoku/uot.go index 0e14595e..97a5bb48 100644 --- a/transport/sudotun/uot.go +++ b/transport/sudoku/uot.go @@ -1,4 +1,4 @@ -package sudotun +package sudoku import ( "bytes"