/* HTTP Response Code 400 (Bad Request) */
#define HTTP_BAD_REQUEST 400
-typedef size_t (http_write_cb)(unsigned char *, size_t, size_t, void *);
-
struct http_handler {
CURL *curl;
char errbuf[CURL_ERROR_SIZE];
}
static void
-setopt_writefunction(CURL *curl, http_write_cb cb, void *arg)
+setopt_writedata(CURL *curl, FILE *file)
{
CURLcode result;
- result = curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, cb);
- if (result != CURLE_OK) {
- fprintf(stderr, "curl_easy_setopt(%d) returned %d: %s\n",
- CURLOPT_WRITEFUNCTION, result, curl_easy_strerror(result));
- }
-
- result = curl_easy_setopt(curl, CURLOPT_WRITEDATA, arg);
+ result = curl_easy_setopt(curl, CURLOPT_WRITEDATA, file);
if (result != CURLE_OK) {
fprintf(stderr, "curl_easy_setopt(%d) returned %d: %s\n",
CURLOPT_WRITEDATA, result, curl_easy_strerror(result));
*/
static int
http_fetch(struct http_handler *handler, char const *uri, long *response_code,
- long *cond_met, bool log_operation, http_write_cb cb, void *arg, bool is_ta)
+ long *cond_met, bool log_operation, FILE *file, bool is_ta)
{
CURLcode res, res2;
long unmet = 0;
handler->errbuf[0] = 0;
setopt_str(handler->curl, CURLOPT_URL, uri);
- setopt_writefunction(handler->curl, cb, arg);
+ setopt_writedata(handler->curl, file);
TA_DEBUG_MSG("HTTP GET: %s", uri);
res = curl_easy_perform(handler->curl);
curl_easy_cleanup(handler->curl);
}
-static size_t
-write_cb(unsigned char *content, size_t size, size_t nmemb, void *arg)
-{
- FILE *fd = arg;
- size_t read = size * nmemb;
- size_t written;
-
- written = fwrite(content, size, nmemb, fd);
- if (written != nmemb)
- return -EINVAL;
-
- return read;
-}
-
static int
__http_download_file(struct rpki_uri *uri, long *response_code, long ims_value,
long *cond_met, bool log_operation, bool is_ta)
TA_DEBUG;
}
error = http_fetch(&handler, uri_get_global(uri), response_code,
- cond_met, log_operation, write_cb, out, is_ta);
+ cond_met, log_operation, out, is_ta);
if (error != EREQFAILED) {
TA_DEBUG_MSG("%d", error);
break; /* Note: Usually happy path */
response_code = 0;
cond_met = 0;
error = http_fetch(&handler, remote, &response_code, &cond_met, true,
- write_cb, out, false);
+ out, false);
http_easy_cleanup(&handler);
file_close(out);
if (error)