func TestUDPSend(t *testing.T) { assert := unit.Assert(t) data2Send := "Data to be sent to remote" udpServer := &udp.Server{ Port: 0, MsgProcessor: func(data []byte) []byte { buffer := make([]byte, 0, 2048) buffer = append(buffer, []byte("Processed: ")...) buffer = append(buffer, data...) return buffer }, } udpServerAddr, err := udpServer.Start() assert.Error(err).IsNil() ich := &mocks.InboundConnectionHandler{ Data2Send: []byte("Not Used"), DataReturned: bytes.NewBuffer(make([]byte, 0, 1024)), } v2proxy.RegisterInboundConnectionHandlerFactory("mock_ich", ich) pointPort := uint16(38724) config := mocks.Config{ PortValue: pointPort, InboundConfigValue: &mocks.ConnectionConfig{ ProtocolValue: "mock_ich", SettingsValue: nil, }, OutboundConfigValue: &mocks.ConnectionConfig{ ProtocolValue: "freedom", SettingsValue: nil, }, } point, err := point.NewPoint(&config) assert.Error(err).IsNil() err = point.Start() assert.Error(err).IsNil() data2SendBuffer := alloc.NewBuffer() data2SendBuffer.Clear() data2SendBuffer.Append([]byte(data2Send)) dest := v2net.NewUDPDestination(udpServerAddr) ich.Communicate(v2net.NewPacket(dest, data2SendBuffer, false)) assert.Bytes(ich.DataReturned.Bytes()).Equals([]byte("Processed: Data to be sent to remote")) }
func TestVMessInAndOutUDP(t *testing.T) { assert := unit.Assert(t) data2Send := "The data to be send to outbound server." testAccount, err := config.NewID("ad937d9d-6e23-4a5a-ba23-bce5092a7c51") assert.Error(err).IsNil() portA := uint16(17394) ich := &mocks.InboundConnectionHandler{ Data2Send: []byte(data2Send), DataReturned: bytes.NewBuffer(make([]byte, 0, 1024)), } proxy.RegisterInboundConnectionHandlerFactory("mock_ich", ich) configA := mocks.Config{ PortValue: portA, InboundConfigValue: &mocks.ConnectionConfig{ ProtocolValue: "mock_ich", SettingsValue: nil, }, OutboundConfigValue: &mocks.ConnectionConfig{ ProtocolValue: "vmess", SettingsValue: &json.Outbound{ []*json.ConfigTarget{ &json.ConfigTarget{ Address: v2net.IPAddress([]byte{127, 0, 0, 1}, 13841), UDPEnabled: true, Users: []*json.ConfigUser{ &json.ConfigUser{Id: testAccount}, }, }, }, }, }, } pointA, err := point.NewPoint(&configA) assert.Error(err).IsNil() err = pointA.Start() assert.Error(err).IsNil() portB := uint16(13841) och := &mocks.OutboundConnectionHandler{ Data2Send: bytes.NewBuffer(make([]byte, 0, 1024)), Data2Return: []byte("The data to be returned to inbound server."), } proxy.RegisterOutboundConnectionHandlerFactory("mock_och", och) configB := mocks.Config{ PortValue: portB, InboundConfigValue: &mocks.ConnectionConfig{ ProtocolValue: "vmess", SettingsValue: &json.Inbound{ AllowedClients: []*json.ConfigUser{ &json.ConfigUser{Id: testAccount}, }, UDP: true, }, }, OutboundConfigValue: &mocks.ConnectionConfig{ ProtocolValue: "mock_och", SettingsValue: nil, }, } pointB, err := point.NewPoint(&configB) assert.Error(err).IsNil() err = pointB.Start() assert.Error(err).IsNil() data2SendBuffer := alloc.NewBuffer() data2SendBuffer.Clear() data2SendBuffer.Append([]byte(data2Send)) dest := v2net.NewUDPDestination(v2net.IPAddress([]byte{1, 2, 3, 4}, 80)) ich.Communicate(v2net.NewPacket(dest, data2SendBuffer, false)) assert.Bytes([]byte(data2Send)).Equals(och.Data2Send.Bytes()) assert.Bytes(ich.DataReturned.Bytes()).Equals(och.Data2Return) }
func init() { proxy.RegisterInboundConnectionHandlerFactory("vmess", &VMessInboundHandlerFactory{}) }
func init() { proxy.RegisterInboundConnectionHandlerFactory("socks", SocksServerFactory{}) }