in pkg/discovery/content/reader/reader.go [187:224]
func (r *reader) fstatRemote(log zerolog.Logger, req *http.Request, client *http.Client) (int64, error) {
log.Debug().Str("url", req.URL.String()).Str("range", req.Header.Get("Range")).Msg("reader fstatRemote start")
defer log.Debug().Msg("reader fstatRemote stop")
resp, err := client.Do(req)
if err != nil {
log.Error().Err(err).Msg("reader fstatRemote error")
return 0, Error{resp, err}
}
defer func() {
if closeErr := resp.Body.Close(); closeErr != nil {
log.Error().Err(closeErr).Msg("reader fstatRemote body close error")
}
}()
if resp.StatusCode == 200 {
return resp.ContentLength, nil
}
if resp.StatusCode == 206 {
l := resp.ContentLength
rs := resp.Header.Get("Content-Range")
if rs == "" {
return l, nil
}
pos := strings.LastIndexByte(rs, '/')
if pos < 0 {
return l, nil
}
l, _ = strconv.ParseInt(rs[pos+1:], 10, 64)
return l, nil
}
log.Error().Err(err).Int("status", resp.StatusCode).Msg("reader fstatRemote error")
return 0, Error{resp, fmt.Errorf("unexpected response code: %d", resp.StatusCode)}
}