diff --git a/common/xudp/xudp.go b/common/xudp/xudp.go index a162334a..a3df4e8b 100644 --- a/common/xudp/xudp.go +++ b/common/xudp/xudp.go @@ -150,7 +150,7 @@ func (r *PacketReader) ReadMultiBuffer() (buf.MultiBuffer, error) { case 2: if l != 4 { b.Advance(5) - addr, port, err := AddrParser.ReadAddressPort(nil, b) + addr, port, err := AddrParser.ReadAddressPort(nil, b) // read addr will read all content and clear b if err != nil { b.Release() return nil, err diff --git a/common/xudp/xudp_test.go b/common/xudp/xudp_test.go new file mode 100644 index 00000000..dd720a81 --- /dev/null +++ b/common/xudp/xudp_test.go @@ -0,0 +1,36 @@ +package xudp + +import ( + "testing" + + "github.com/xtls/xray-core/common" + "github.com/xtls/xray-core/common/buf" + "github.com/xtls/xray-core/common/net" +) + +func TestXudpReadWrite(t *testing.T) { + addr, _ := net.ParseDestination("tcp:127.0.0.1:1345") + mb := make(buf.MultiBuffer, 0, 16) + m := buf.MultiBufferContainer { + MultiBuffer: mb, + } + var arr [8]byte + writer := NewPacketWriter(&m, addr, arr) + + source := make(buf.MultiBuffer, 0, 16) + b := buf.New() + b.WriteByte('a') + b.UDP = &addr + source = append(source, b) + writer.WriteMultiBuffer(source) + + reader := NewPacketReader(&m) + dest, err := reader.ReadMultiBuffer() + common.Must(err) + if dest[0].Byte(0) != 'a' { + t.Error("failed to parse xudp buffer") + } + if dest[0].UDP.Port != 1345 { + t.Error("failed to parse xudp buffer") + } +} \ No newline at end of file