add WriteMultiBuffer for interConn

pull/1435/head
Darien Raymond 6 years ago
parent 010964f272
commit 3a1cf06dc1
No known key found for this signature in database
GPG Key ID: 7251FFA14BB18169

@ -7,8 +7,9 @@ import (
"time" "time"
quic "github.com/lucas-clemente/quic-go" quic "github.com/lucas-clemente/quic-go"
"v2ray.com/core/common" "v2ray.com/core/common"
"v2ray.com/core/common/buf"
"v2ray.com/core/common/bytespool"
"v2ray.com/core/common/net" "v2ray.com/core/common/net"
"v2ray.com/core/transport/internet" "v2ray.com/core/transport/internet"
) )
@ -142,6 +143,38 @@ func (c *interConn) Read(b []byte) (int, error) {
return c.stream.Read(b) return c.stream.Read(b)
} }
func (c *interConn) WriteMultiBuffer(mb buf.MultiBuffer) error {
if mb.IsEmpty() {
return nil
}
if len(mb) == 1 {
_, err := c.Write(mb[0].Bytes())
buf.ReleaseMulti(mb)
return err
}
b := bytespool.Alloc(32 * 1024)
defer bytespool.Free(b)
reader := buf.MultiBufferContainer{
MultiBuffer: mb,
}
defer reader.Close()
for {
nBytes, err := reader.Read(b)
if err != nil {
break
}
if _, err := c.Write(b[:nBytes]); err != nil {
return err
}
}
return nil
}
func (c *interConn) Write(b []byte) (int, error) { func (c *interConn) Write(b []byte) (int, error) {
return c.stream.Write(b) return c.stream.Write(b)
} }

Loading…
Cancel
Save