From a749050d91c827a5dd1ba533bed2c730859d20fb Mon Sep 17 00:00:00 2001 From: yuhan6665 <1588741+yuhan6665@users.noreply.github.com> Date: Sun, 6 Apr 2025 21:10:34 -0400 Subject: [PATCH] Glue mux meta with data in one frame for Datagram --- common/mux/server_test.go | 6 ++++-- common/mux/writer.go | 10 +++++++++- 2 files changed, 13 insertions(+), 3 deletions(-) diff --git a/common/mux/server_test.go b/common/mux/server_test.go index 4158bf46..8649a067 100644 --- a/common/mux/server_test.go +++ b/common/mux/server_test.go @@ -90,7 +90,8 @@ func TestRegressionOutboundLeak(t *testing.T) { } { - b := buf.FromBytes([]byte("hello")) + b := buf.New() + b.Write([]byte("hello")) common.Must(muxClientDownlink.Writer.WriteMultiBuffer(buf.MultiBuffer{b})) } @@ -102,7 +103,8 @@ func TestRegressionOutboundLeak(t *testing.T) { } { - b := buf.FromBytes([]byte("world")) + b := buf.New() + b.Write([]byte("world")) common.Must(websiteUplink.Writer.WriteMultiBuffer(buf.MultiBuffer{b})) } diff --git a/common/mux/writer.go b/common/mux/writer.go index e9c113cb..3a7161b5 100644 --- a/common/mux/writer.go +++ b/common/mux/writer.go @@ -78,9 +78,17 @@ func writeMetaWithFrame(writer buf.Writer, meta FrameMetadata, data buf.MultiBuf if _, err := serial.WriteUint16(frame, uint16(data.Len())); err != nil { return err } - mb2 := make(buf.MultiBuffer, 0, len(data)+1) mb2 = append(mb2, frame) + for _, b := range data { + if frame.Len() + b.Len() < buf.Size { + frame.Write(b.Bytes()) + b.Release() + b = nil + } else { + break; + } + } mb2 = append(mb2, data...) return writer.WriteMultiBuffer(mb2) }