summaryrefslogtreecommitdiff
path: root/curl_util.c
blob: 5d1b21a3077f80cb2d5b4a190cff0e8ef0bbad01 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
#include "curl_util.h"

static size_t get_json_callback(void *contents, size_t size, size_t nmemb, void *userp)
{
	size_t realsize = size * nmemb;

	json_tokener *tok = json_tokener_new();
	if (userp != NULL)
		*((json_object **)userp) = json_tokener_parse_ex(tok, contents, realsize);

	json_tokener_free(tok);

	return realsize;
}

CURLcode
_curl_get(CURL *curl, const char *url, json_object **resp)
{
	curl_easy_setopt(curl, CURLOPT_URL, url);
	curl_easy_setopt(curl, CURLOPT_HTTPGET, 1L);
	curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, get_json_callback);
	curl_easy_setopt(curl, CURLOPT_WRITEDATA, (void *)resp);

	return curl_easy_perform(curl);
}

CURLcode
_curl_post(CURL *curl, const char *url, const char *postdata, json_object **resp)
{
	curl_easy_setopt(curl, CURLOPT_URL, url);
	curl_easy_setopt(curl, CURLOPT_POSTFIELDS, postdata);
	curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, get_json_callback);
	curl_easy_setopt(curl, CURLOPT_WRITEDATA, (void *)resp);

	return curl_easy_perform(curl);
}