func ParseRangeHeader()

in helpers/rangeheader.go [37:62]


func ParseRangeHeader(headerContent string) (*RangeHeader, error) {
	xtractor := regexp.MustCompile("^(\\w+)=(\\d+)-(\\d+)/(\\d+)$")

	matches := xtractor.FindAllStringSubmatch(headerContent, -1)
	if matches == nil {
		return nil, errors.New("range header malformed")
	}

	if strings.ToLower(matches[0][1]) != "bytes" {
		return nil, errors.New("need ranges in bytes")
	}

	startNum, startParseErr := strconv.ParseInt(matches[0][2], 10, 64)
	endNum, endParseErr := strconv.ParseInt(matches[0][3], 10, 64)
	totalNum, totalParseErr := strconv.ParseInt(matches[0][4], 10, 64)

	if startParseErr != nil || endParseErr != nil || totalParseErr != nil {
		return nil, errors.New("need all range parameters as numbers")
	}

	return &RangeHeader{
		Start:     startNum,
		End:       endNum,
		TotalSize: totalNum,
	}, nil
}