func()

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)}
}