func()

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
}