in pkg/profiling/task/network/analyze/layer7/protocols/http1/reader/reader.go [245:279]
func (m *MessageOpt) checkBodyWithSize(buf *buffer.Buffer, reader *bufio.Reader, size int,
detectedNotSending bool) (*buffer.Buffer, enums.ParseResult, error) {
reduceSize := size
var readSize, lastReadSize int
var err error
startPosition := buf.OffsetPosition(-reader.Buffered())
for reduceSize > 0 {
readSize = reduceSize
if readSize > len(bodyBuffer) {
readSize = len(bodyBuffer)
}
lastReadSize, err = reader.Read(bodyBuffer[0:readSize])
if err != nil {
if err == buffer.ErrNotComplete {
return nil, enums.ParseResultSkipPackage, nil
}
if err == io.EOF && reduceSize-lastReadSize <= 0 {
return nil, enums.ParseResultSuccess, nil
}
return nil, enums.ParseResultSkipPackage, err
}
reduceSize -= lastReadSize
}
endPosition := buf.OffsetPosition(-reader.Buffered())
slice := buf.Slice(true, startPosition, endPosition)
if detectedNotSending {
if pos := slice.DetectNotSendingLastPosition(); pos != nil {
log.Debugf("found the socket data not sending finished in BPF, so update the body to the latest data, %v", pos)
endPosition = pos
slice = buf.Slice(true, startPosition, endPosition)
}
}
return slice, enums.ParseResultSuccess, nil
}