Skip to content

Commit

Permalink
chore: tradition shadowsocks server could handle smux
Browse files Browse the repository at this point in the history
  • Loading branch information
wwqgtxx committed Feb 24, 2025
1 parent 5830afc commit e23f40a
Show file tree
Hide file tree
Showing 4 changed files with 49 additions and 22 deletions.
17 changes: 15 additions & 2 deletions listener/shadowsocks/tcp.go
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ import (
N "github.com/metacubex/mihomo/common/net"
C "github.com/metacubex/mihomo/constant"
LC "github.com/metacubex/mihomo/listener/config"
"github.com/metacubex/mihomo/listener/sing"
"github.com/metacubex/mihomo/transport/shadowsocks/core"
"github.com/metacubex/mihomo/transport/socks5"
)
Expand All @@ -18,6 +19,7 @@ type Listener struct {
listeners []net.Listener
udpListeners []*UDPListener
pickCipher core.Cipher
handler *sing.ListenerHandler
}

var _listener *Listener
Expand All @@ -28,7 +30,17 @@ func New(config LC.ShadowsocksServer, tunnel C.Tunnel, additions ...inbound.Addi
return nil, err
}

sl := &Listener{false, config, nil, nil, pickCipher}
h, err := sing.NewListenerHandler(sing.ListenerConfig{
Tunnel: tunnel,
Type: C.SHADOWSOCKS,
Additions: additions,
MuxOption: config.MuxOption,
})
if err != nil {
return nil, err
}

sl := &Listener{false, config, nil, nil, pickCipher, h}
_listener = sl

for _, addr := range strings.Split(config.Listen, ",") {
Expand Down Expand Up @@ -107,7 +119,8 @@ func (l *Listener) HandleConn(conn net.Conn, tunnel C.Tunnel, additions ...inbou
_ = conn.Close()
return
}
tunnel.HandleTCPConn(inbound.NewSocket(target, conn, C.SHADOWSOCKS, additions...))
l.handler.HandleSocket(target, conn, additions...)
//tunnel.HandleTCPConn(inbound.NewSocket(target, conn, C.SHADOWSOCKS, additions...))
}

func HandleShadowSocks(conn net.Conn, tunnel C.Tunnel, additions ...inbound.Addition) bool {
Expand Down
4 changes: 2 additions & 2 deletions listener/sing/sing.go
Original file line number Diff line number Diff line change
Expand Up @@ -136,8 +136,8 @@ func (h *ListenerHandler) NewConnection(ctx context.Context, conn net.Conn, meta
cMetadata.RawDstAddr = metadata.Destination.Unwrap().TCPAddr()
}
inbound.ApplyAdditions(cMetadata, inbound.WithDstAddr(metadata.Destination), inbound.WithSrcAddr(metadata.Source), inbound.WithInAddr(conn.LocalAddr()))
inbound.ApplyAdditions(cMetadata, getAdditions(ctx)...)
inbound.ApplyAdditions(cMetadata, h.Additions...)
inbound.ApplyAdditions(cMetadata, getAdditions(ctx)...)

h.Tunnel.HandleTCPConn(conn, cMetadata) // this goroutine must exit after conn unused
return nil
Expand Down Expand Up @@ -198,8 +198,8 @@ func (h *ListenerHandler) NewPacketConnection(ctx context.Context, conn network.
cMetadata.RawDstAddr = dest.Unwrap().UDPAddr()
}
inbound.ApplyAdditions(cMetadata, inbound.WithDstAddr(dest), inbound.WithSrcAddr(metadata.Source), inbound.WithInAddr(conn.LocalAddr()))
inbound.ApplyAdditions(cMetadata, getAdditions(ctx)...)
inbound.ApplyAdditions(cMetadata, h.Additions...)
inbound.ApplyAdditions(cMetadata, getAdditions(ctx)...)

h.Tunnel.HandleUDPPacket(cPacket, cMetadata)
}
Expand Down
24 changes: 24 additions & 0 deletions listener/sing/util.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
package sing

import (
"context"
"net"

"github.com/metacubex/mihomo/adapter/inbound"
"github.com/metacubex/mihomo/transport/socks5"
)

// HandleSocket like inbound.NewSocket combine with Tunnel.HandleTCPConn but also handel specialFqdn
func (h *ListenerHandler) HandleSocket(target socks5.Addr, conn net.Conn, _additions ...inbound.Addition) {
conn, metadata := inbound.NewSocket(target, conn, h.Type, h.Additions...)
if h.IsSpecialFqdn(metadata.Host) {
_ = h.ParseSpecialFqdn(
WithAdditions(context.Background(), _additions...),
conn,
ConvertMetadata(metadata),
)
} else {
inbound.ApplyAdditions(metadata, _additions...)
h.Tunnel.HandleTCPConn(conn, metadata)
}
}
26 changes: 8 additions & 18 deletions listener/tuic/server.go
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
package tuic

import (
"context"
"crypto/tls"
"net"
"strings"
Expand Down Expand Up @@ -93,23 +92,14 @@ func New(config LC.TuicServer, tunnel C.Tunnel, additions ...inbound.Addition) (
quicConfig.MaxDatagramFrameSize = int64(maxDatagramFrameSize)

handleTcpFn := func(conn net.Conn, addr socks5.Addr, _additions ...inbound.Addition) error {
newAdditions := additions
if len(_additions) > 0 {
newAdditions = slices.Clone(additions)
newAdditions = append(newAdditions, _additions...)
}
conn, metadata := inbound.NewSocket(addr, conn, C.TUIC, newAdditions...)
if h.IsSpecialFqdn(metadata.Host) {
go func() { // ParseSpecialFqdn will block, so open a new goroutine
_ = h.ParseSpecialFqdn(
sing.WithAdditions(context.Background(), newAdditions...),
conn,
sing.ConvertMetadata(metadata),
)
}()
return nil
}
go tunnel.HandleTCPConn(conn, metadata)
//newAdditions := additions
//if len(_additions) > 0 {
// newAdditions = slices.Clone(additions)
// newAdditions = append(newAdditions, _additions...)
//}
//conn, metadata := inbound.NewSocket(addr, conn, C.TUIC, newAdditions...)
//go tunnel.HandleTCPConn(conn, metadata)
go h.HandleSocket(addr, conn, _additions...) // h.HandleSocket will block, so open a new goroutine
return nil
}
handleUdpFn := func(addr socks5.Addr, packet C.UDPPacket, _additions ...inbound.Addition) error {
Expand Down

0 comments on commit e23f40a

Please sign in to comment.