in oss/utils.go [221:266]
func parseOffsetAndSizeFromHeaders(headers http.Header) (offset, size int64) {
size = -1
var contentLength = headers.Get("Content-Length")
if len(contentLength) != 0 {
var err error
if size, err = strconv.ParseInt(contentLength, 10, 64); err != nil {
return 0, -1
}
}
var contentRange = headers.Get("Content-Range")
if len(contentRange) == 0 {
return 0, size
}
if !strings.HasPrefix(contentRange, "bytes ") {
return 0, -1
}
// start offset
dash := strings.IndexRune(contentRange, '-')
if dash < 0 {
return 0, -1
}
ret, err := strconv.ParseInt(contentRange[6:dash], 10, 64)
if err != nil {
return 0, -1
}
offset = ret
// total size
slash := strings.IndexRune(contentRange, '/')
if slash < 0 {
return 0, -1
}
tsize := contentRange[slash+1:]
if tsize != "*" {
ret, err = strconv.ParseInt(contentRange[slash+1:], 10, 64)
if err != nil {
return 0, -1
}
size = ret
}
return offset, size
}