| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129 | package unixtestimport (	"testing"	"v2ray.com/core"	"v2ray.com/core/app/log"	"v2ray.com/core/app/proxyman"	"v2ray.com/core/common"	clog "v2ray.com/core/common/log"	"v2ray.com/core/common/net"	"v2ray.com/core/common/serial"	"v2ray.com/core/proxy/dokodemo"	"v2ray.com/core/proxy/freedom"	. "v2ray.com/ext/assert"	"v2ray.com/core/testing/servers/tcp"	"v2ray.com/core/testing/scenarios"	"v2ray.com/core/transport/internet/domainsocket")func xor(b []byte) []byte {	r := make([]byte, len(b))	for i, v := range b {		r[i] = v ^ 'c'	}	return r}func pickPort() net.Port {	listener, err := net.Listen("tcp4", "127.0.0.1:0")	common.Must(err)	defer listener.Close()	addr := listener.Addr().(*net.TCPAddr)	return net.Port(addr.Port)}func TestUnix2tcpS(t *testing.T) {	assert := With(t)	tcpServer := tcp.Server{		MsgProcessor: xor,	}	dest, err := tcpServer.Start()	assert(err, IsNil)	defer tcpServer.Close()	Server := &core.Config{		App: []*serial.TypedMessage{			serial.ToTypedMessage(&log.Config{				ErrorLogLevel: clog.Severity_Debug,				ErrorLogType:  log.LogType_Console,			}),		},		Inbound: []*core.InboundHandlerConfig{			{				ReceiverSettings: serial.ToTypedMessage(&proxyman.UnixReceiverConfig{					DomainSockSettings: &domainsocket.DomainSocketSettings{Path: "\x00v2raytest"},				}),				ProxySettings: serial.ToTypedMessage(&dokodemo.Config{					Address: net.NewIPOrDomain(dest.Address),					Port:    uint32(dest.Port),					NetworkList: &net.NetworkList{						Network: []net.Network{net.Network_TCP},					},				}),			},		},		Outbound: []*core.OutboundHandlerConfig{			{ProxySettings: serial.ToTypedMessage(&freedom.Config{})},		},	}	serverPort := pickPort()	Client := &core.Config{		App: []*serial.TypedMessage{			serial.ToTypedMessage(&log.Config{				ErrorLogLevel: clog.Severity_Debug,				ErrorLogType:  log.LogType_Console,			}),		},		Outbound: []*core.OutboundHandlerConfig{			{				SenderSettings: serial.ToTypedMessage(&proxyman.UnixSenderConfig{					DomainSockSettings: &domainsocket.DomainSocketSettings{Path: "\x00v2raytest"},				}),				ProxySettings: serial.ToTypedMessage(&freedom.Config{}),			},		},		Inbound: []*core.InboundHandlerConfig{			{ProxySettings: serial.ToTypedMessage(&dokodemo.Config{				Address: net.NewIPOrDomain(dest.Address),				Port:    uint32(dest.Port),				NetworkList: &net.NetworkList{					Network: []net.Network{net.Network_TCP},				},			}),				ReceiverSettings: serial.ToTypedMessage(&proxyman.ReceiverConfig{					PortRange: net.SinglePortRange(serverPort),					Listen:    net.NewIPOrDomain(net.LocalHostIP),				}),			},		},	}	servers, err := scenarios.InitializeServerConfigs(Server, Client)	port := serverPort	conn, err := net.DialTCP("tcp", nil, &net.TCPAddr{		IP:   []byte{127, 0, 0, 1},		Port: int(port),	})	assert(err, IsNil)	payload := "dokodemo request."	nBytes, err := conn.Write([]byte(payload))	assert(err, IsNil)	assert(nBytes, Equals, len(payload))	response := make([]byte, 1024)	nBytes, err = conn.Read(response)	assert(err, IsNil)	assert(response[:nBytes], Equals, xor([]byte(payload)))	assert(conn.Close(), IsNil)	scenarios.CloseAllServers(servers)}
 |