| 123456789101112131415161718192021222324252627282930313233343536373839404142 | package muximport (	"v2ray.com/core/common/buf"	"v2ray.com/core/common/serial")type muxWriter struct {	meta   *FrameMetadata	writer buf.Writer}func (w *muxWriter) Write(b *buf.Buffer) error {	frame := buf.New()	frame.AppendSupplier(w.meta.AsSupplier())	if w.meta.SessionStatus == SessionStatusNew {		w.meta.SessionStatus = SessionStatusKeep	}	frame.AppendSupplier(serial.WriteUint16(0))	lengthBytes := frame.BytesFrom(-2)	nBytes, err := frame.Write(b.Bytes())	if err != nil {		return err	}	serial.Uint16ToBytes(uint16(nBytes), lengthBytes[:0])	if err := w.writer.Write(frame); err != nil {		frame.Release()		b.Release()		return err	}	b.SliceFrom(nBytes)	if !b.IsEmpty() {		return w.Write(b)	}	b.Release()	return nil}
 |