Kevin Wern <kevin.m.w...@gmail.com> writes:

> +int http_download_primer(const char *url, const char *out_file)
> +{
> +     int ret = 0, try_count = HTTP_TRY_COUNT;
> +     struct http_get_options options = {0};
> +     options.progress = 1;
> +
> +     if (file_exists(out_file)) {
> +             fprintf(stderr,
> +                     "File already downloaded: '%s', skipping...\n",
> +                     out_file);
> +             return ret;
> +     }
> +
> +     do {
> +             if (try_count != HTTP_TRY_COUNT) {
> +                     fprintf(stderr, "Connection interrupted for some "
> +                             "reason, retrying (%d attempts left)\n",
> +                             try_count);
> +                     struct timeval time = {10, 0}; // 1s

We do not use // comment.

> +                     select(0, NULL, NULL, NULL, &time);
> +             }
> +             ret = http_get_file(url, out_file, &options);

I didn't realize that http_get_file() -> http_request() codepath,
when it is the output file, already can do the "ftell and request
the reminder".  Very nice.

> @@ -1136,7 +1138,10 @@ static int handle_curl_result(struct slot_results 
> *results)
>                               curl_easy_strerror(results->curl_result),
>                               sizeof(curl_errorstr));
>  #endif
> -             return HTTP_ERROR;
> +             if (results->http_code >= 400)
> +                     return HTTP_ERROR;
> +             else
> +                     return HTTP_ERROR_RESUMABLE;
>       }
>  }

Hmm, is "anything below 400" a good definition of resumable errors?

Reply via email to