/*
- * Copyright (C) 2010-2011 jeanfi@gmail.com
+ * Copyright (C) 2010-2014 jeanfi@gmail.com
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License as
#include <libintl.h>
#define _(str) gettext(str)
-#include "url.h"
-#include "server/server.h"
-
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <curl/curl.h>
-#include <json/json.h>
+#include "psensor_json.h"
#include "rsensor.h"
+#include "server/server.h"
+#include "url.h"
struct ucontent {
char *data;
return realsize;
}
-static char *create_api_1_0_sensors_url(const char *base_url)
+static char *create_api_1_1_sensors_url(const char *base_url)
{
char *nurl, *ret;
int n;
nurl = url_normalize(base_url);
- n = strlen(nurl) + strlen(URL_BASE_API_1_0_SENSORS) + 1;
+ n = strlen(nurl) + strlen(URL_BASE_API_1_1_SENSORS) + 1;
ret = malloc(n);
strcpy(ret, nurl);
- strcat(ret, URL_BASE_API_1_0_SENSORS);
+ strcat(ret, URL_BASE_API_1_1_SENSORS);
free(nurl);
return ret;
}
-static struct psensor *json_object_to_psensor(json_object *o,
- const char *sensors_url,
- int values_max_length)
-{
- json_object *oid, *oname, *otype;
- struct psensor *s;
- char *eid, *url;
-
- oid = json_object_object_get(o, "id");
- oname = json_object_object_get(o, "name");
- otype = json_object_object_get(o, "type");
-
- eid = url_encode(json_object_get_string(oid));
- url = malloc(strlen(sensors_url) + 1 + strlen(eid) + 1);
- sprintf(url, "%s/%s", sensors_url, eid);
-
- s = psensor_create(strdup(url),
- strdup(json_object_get_string(oname)),
- json_object_get_int(otype) | SENSOR_TYPE_REMOTE,
- values_max_length);
- s->url = url;
-
- free(eid);
-
- return s;
-}
-
void rsensor_init()
{
curl = curl_easy_init();
curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, cbk_curl);
curl_easy_setopt(curl, CURLOPT_WRITEDATA, (void *)&chunk);
- log_printf(LOG_DEBUG, "HTTP request %s", url);
+ log_debug("HTTP request %s", url);
if (curl_easy_perform(curl) == CURLE_OK)
obj = json_tokener_parse(chunk.data);
else
sensors = NULL;
- url = create_api_1_0_sensors_url(server_url);
+ url = create_api_1_1_sensors_url(server_url);
obj = get_json_object(url);
sensors = malloc((n + 1) * sizeof(struct psensor *));
for (i = 0; i < n; i++) {
- s = json_object_to_psensor
+ s = psensor_new_from_json
(json_object_array_get_idx(obj, i),
url,
values_max_length);
tv.tv_usec = 0;
psensor_set_current_measure
- (s, json_object_get_double(ov), tv);;
+ (s, json_object_get_double(ov), tv);
}
json_object_put(obj);