mirror of
https://github.com/XTLS/Xray-core.git
synced 2026-09-23 01:27:04 +00:00
https://github.com/XTLS/Xray-core/pull/6327#issuecomment-5645958010 https://github.com/XTLS/Xray-core/pull/6754#issuecomment-5720818254 https://github.com/XTLS/Xray-core/pull/6754#issuecomment-5751585906
45 lines
1.4 KiB
Go
45 lines
1.4 KiB
Go
package sudoku
|
|
|
|
import (
|
|
"github.com/xtls/xray-core/common/net"
|
|
"github.com/xtls/xray-core/transport/internet/finalmask"
|
|
)
|
|
|
|
// Sudoku in finalmask mode is a pure appearance transform with no standalone handshake.
|
|
// TCP always keeps classic sudoku on uplink and uses packed downlink optimization on server writes.
|
|
func (c *Config) WrapConnClient(conn net.Conn, dest *net.Destination, dialer *finalmask.Dialer) (net.Conn, error) {
|
|
return newPackedDirectionalConn(conn, c, true)
|
|
}
|
|
|
|
func (c *Config) WrapConnServer(conn net.Conn) (net.Conn, error) {
|
|
return newPackedDirectionalConn(conn, c, false)
|
|
}
|
|
|
|
func newPackedDirectionalConn(raw net.Conn, config *Config, readPacked bool) (net.Conn, error) {
|
|
pureReader, pureWriter, err := newPureReaderWriter(raw, config)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
packedReader, packedWriter, err := newPackedReaderWriter(raw, config)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
reader, writer := pureReader, pureWriter
|
|
if readPacked {
|
|
reader = packedReader
|
|
} else {
|
|
writer = packedWriter
|
|
}
|
|
|
|
return newWrappedConn(raw, reader, writer), nil
|
|
}
|
|
|
|
func (c *Config) WrapPacketConnClient(conn net.PacketConn, dest *net.Destination, dialer *finalmask.Dialer) (net.PacketConn, error) {
|
|
return NewUDPConn(conn, c)
|
|
}
|
|
|
|
func (c *Config) WrapPacketConnServer(conn net.PacketConn, addr net.Addr, lc *finalmask.ListenConfig) (net.PacketConn, error) {
|
|
return NewUDPConn(conn, c)
|
|
}
|