Add udp over tcp support for shadowsocks-2022

This commit is contained in:
世界 2022-06-01 11:12:43 +08:00
parent 6f93ef7736
commit c3505632fd
No known key found for this signature in database
GPG key ID: CD109927C34A63C4
14 changed files with 119 additions and 33 deletions

View file

@ -10,6 +10,7 @@ import (
C "github.com/sagernet/sing/common"
B "github.com/sagernet/sing/common/buf"
"github.com/sagernet/sing/common/bufio"
E "github.com/sagernet/sing/common/exceptions"
M "github.com/sagernet/sing/common/metadata"
N "github.com/sagernet/sing/common/network"
"github.com/xtls/xray-core/common"
@ -74,20 +75,23 @@ func (i *Inbound) Process(ctx context.Context, network net.Network, connection s
ctx = session.ContextWithDispatcher(ctx, dispatcher)
if network == net.Network_TCP {
return i.service.NewConnection(ctx, connection, metadata)
return returnError(i.service.NewConnection(ctx, connection, metadata))
} else {
reader := buf.NewReader(connection)
pc := &natPacketConn{connection}
for {
mb, err := reader.ReadMultiBuffer()
if err != nil {
return err
buf.ReleaseMulti(mb)
return returnError(err)
}
for _, buffer := range mb {
err = i.service.NewPacket(ctx, pc, B.As(buffer.Bytes()), metadata)
err = i.service.NewPacket(ctx, pc, B.As(buffer.Bytes()).ToOwned(), metadata)
if err != nil {
buf.ReleaseMulti(mb)
return err
}
buffer.Release()
}
}
}
@ -147,6 +151,9 @@ func (i *Inbound) NewPacketConnection(ctx context.Context, conn N.PacketConn, me
}
func (i *Inbound) HandleError(err error) {
if E.IsClosed(err) {
return
}
newError(err).AtWarning().WriteToLog()
}