@@ -12,9 +12,8 @@ import (
1212)
1313
1414var (
15- ErrInvalidMagic = errors .New ("invalid magic" )
16- ErrInvalidBlocksize = errors .New ("invalid blocksize" )
17- ErrInvalidRequestSize = errors .New ("invalid request size" )
15+ ErrInvalidMagic = errors .New ("invalid magic" )
16+ ErrInvalidBlocksize = errors .New ("invalid blocksize" )
1817)
1918
2019const (
331330 }
332331
333332 // Transmission
333+ var (
334+ b = []byte {}
335+ maxObservedLength = uint32 (0 )
336+ )
334337 for {
335338 var requestHeader protocol.TransmissionRequestHeader
336339 if err := binary .Read (conn , binary .BigEndian , & requestHeader ); err != nil {
343346
344347 length := requestHeader .Length
345348 if length > defaultMaximumRequestSize {
346- return ErrInvalidRequestSize
349+ return ErrInvalidBlocksize
347350 }
348351
349- b := make ([]byte , length )
352+ if length > maxObservedLength {
353+ b = make ([]byte , length )
354+
355+ maxObservedLength = length
356+ }
350357
351358 switch requestHeader .Type {
352359 case protocol .TRANSMISSION_TYPE_REQUEST_READ :
358365 return err
359366 }
360367
361- if len (b ) < int (requestHeader .Length ) {
362- return ErrInvalidBlocksize
363- }
364-
365- n , err := export .Backend .ReadAt (b , int64 (requestHeader .Offset ))
368+ n , err := export .Backend .ReadAt (b [:length ], int64 (requestHeader .Offset ))
366369 if err != nil {
367370 return err
368371 }
388391 break
389392 }
390393
391- if len (b ) < int (requestHeader .Length ) {
392- return ErrInvalidBlocksize
393- }
394-
395394 n , err := io .ReadAtLeast (conn , b , int (requestHeader .Length ))
396395 if err != nil {
397396 return err
0 commit comments