|
|
@@ -123,19 +123,19 @@ func NewChunkWriter(writer io.Writer, auth *Authenticator) *ChunkWriter {
|
|
|
func (w *ChunkWriter) Write(mb buf.MultiBuffer) error {
|
|
|
defer mb.Release()
|
|
|
|
|
|
- for _, b := range mb {
|
|
|
- if err := w.writeInternal(b); err != nil {
|
|
|
+ for {
|
|
|
+ payloadLen, err := mb.Read(w.buffer[2+AuthSize:])
|
|
|
+ if err != nil {
|
|
|
return err
|
|
|
}
|
|
|
+ serial.Uint16ToBytes(uint16(payloadLen), w.buffer[:0])
|
|
|
+ w.auth.Authenticate(w.buffer[2+AuthSize : 2+AuthSize+payloadLen])(w.buffer[2:])
|
|
|
+ if _, err := w.writer.Write(w.buffer[:2+AuthSize+payloadLen]); err != nil {
|
|
|
+ return err
|
|
|
+ }
|
|
|
+ if mb.IsEmpty() {
|
|
|
+ break
|
|
|
+ }
|
|
|
}
|
|
|
return nil
|
|
|
}
|
|
|
-
|
|
|
-func (w *ChunkWriter) writeInternal(payload *buf.Buffer) error {
|
|
|
- totalLength := payload.Len()
|
|
|
- serial.Uint16ToBytes(uint16(totalLength), w.buffer[:0])
|
|
|
- w.auth.Authenticate(payload.Bytes())(w.buffer[2:])
|
|
|
- copy(w.buffer[2+AuthSize:], payload.Bytes())
|
|
|
- _, err := w.writer.Write(w.buffer[:2+AuthSize+payload.Len()])
|
|
|
- return err
|
|
|
-}
|