#include <string.h>
#include <curl/curl.h>
-#include <json/json.h>
-#include "url.h"
+#include "http.h"
+
+static int debug;
struct ucontent {
char *data;
return realsize;
}
-void phttp_init()
+void http_init()
{
- curl = curl_easy_init();
+ if (!curl)
+ curl = curl_easy_init();
}
-void phttp_cleanup()
+void http_cleanup()
{
curl_easy_cleanup(curl);
}
-json_object *get_json_object(const char *url)
+char *http_get(const char *url, const char *content)
{
struct ucontent chunk;
- json_object *obj;
-
- obj = NULL;
-
- if (!curl)
- return NULL;
chunk.data = malloc(1);
chunk.len = 0;
curl_easy_setopt(curl, CURLOPT_URL, url);
curl_easy_setopt(curl, CURLOPT_VERBOSE, 0);
+ if (content) {
+ curl_easy_setopt(curl, CURLOPT_POSTFIELDS, content);
+ curl_easy_setopt(curl,
+ CURLOPT_POSTFIELDSIZE,
+ (long)strlen(content));
+ }
curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, cbk_curl);
curl_easy_setopt(curl, CURLOPT_WRITEDATA, (void *)&chunk);
if (curl_easy_perform(curl) == CURLE_OK)
- obj = json_tokener_parse(chunk.data);
- else
- fprintf(stderr, _("Fail to connect to: %s"), url);
+ return chunk.data;
free(chunk.data);
+ fprintf(stderr, _("HTTP request fail url=%s"), url);
- return obj;
+ return NULL;
}
-static json_object *post(const char *url, const char *body)
+json_object *http_json_get(const char *url, struct json_object *j)
{
- struct ucontent chunk;
- json_object *obj;
-
- obj = NULL;
-
- chunk.data = malloc(1);
- chunk.len = 0;
-
- curl_easy_setopt(curl, CURLOPT_URL, url);
- curl_easy_setopt(curl, CURLOPT_VERBOSE, 0);
- if (body) {
- curl_easy_setopt(curl, CURLOPT_POSTFIELDS, body);
- curl_easy_setopt(curl, CURLOPT_POSTFIELDSIZE, (long)strlen(body));
+ const char *in;
+ char *out;
+ struct json_object *result;
+
+ in = json_object_to_json_string(j);
+ out = http_get(url, in);
+
+ if (debug)
+ printf("HTTP request= %s\n",
+ json_object_to_json_string(j));
+
+ if (out) {
+ result = json_tokener_parse(out);
+ if (debug)
+ printf("HTTP reply= %s\n", out);
+ free(out);
+ return result;
}
- curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, cbk_curl);
- curl_easy_setopt(curl, CURLOPT_WRITEDATA, (void *)&chunk);
- if (curl_easy_perform(curl) == CURLE_OK)
- obj = json_tokener_parse(chunk.data);
- else
- fprintf(stderr, _("Fail to connect to: %s"), url);
- free(chunk.data);
-
- return obj;
-}
-
-json_object *post_json_object(const char *url, struct json_object *j)
-{
- return post(url, json_object_to_json_string(j));
+ return NULL;
}