X-Git-Url: https://git.wpitchoune.net/gitweb/?a=blobdiff_plain;f=src%2Frsensor.c;h=8a5aa66182d91dc79358352625b9df619486b6b4;hb=7bbc41179c4fa0e4f4355767c498c9ab8ad6c434;hp=0e20bddcea39d6d673ead05c2bbe320b40855f79;hpb=f57262f6f5923041555abb84b0ed0369a5ad1aff;p=psensor.git diff --git a/src/rsensor.c b/src/rsensor.c index 0e20bdd..8a5aa66 100644 --- a/src/rsensor.c +++ b/src/rsensor.c @@ -1,5 +1,5 @@ /* - * 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 @@ -20,17 +20,16 @@ #include #define _(str) gettext(str) -#include "url.h" -#include "server/server.h" - #include #include #include #include -#include +#include "psensor_json.h" #include "rsensor.h" +#include "server/server.h" +#include "url.h" struct ucontent { char *data; @@ -56,53 +55,23 @@ static size_t cbk_curl(void *buffer, size_t size, size_t nmemb, void *userp) 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; - json_object *oname; - json_object *otype; - struct psensor *s; - char *eid; - char *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(); @@ -131,6 +100,7 @@ static json_object *get_json_object(const char *url) curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, cbk_curl); curl_easy_setopt(curl, CURLOPT_WRITEDATA, (void *)&chunk); + log_debug("HTTP request %s", url); if (curl_easy_perform(curl) == CURLE_OK) obj = json_tokener_parse(chunk.data); else @@ -151,7 +121,7 @@ struct psensor **get_remote_sensors(const char *server_url, 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); @@ -160,7 +130,7 @@ struct psensor **get_remote_sensors(const char *server_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); @@ -193,20 +163,20 @@ void remote_psensor_update(struct psensor *s) if (obj && !is_error(obj)) { json_object *om; - om = json_object_object_get(obj, "last_measure"); + json_object_object_get_ex(obj, "last_measure", &om); if (!is_error(obj)) { json_object *ov, *ot; struct timeval tv; - ov = json_object_object_get(om, "value"); - ot = json_object_object_get(om, "time"); + json_object_object_get_ex(om, "value", &ov); + json_object_object_get_ex(om, "time", &ot); tv.tv_sec = json_object_get_int(ot); 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);