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
}