#include "log.h"
#include "controller.h"
#include "connectivity.h"
+#include "webutil.h"
#define MAX_QUEUE_ELEMENTS 30
#define DOOR_RESOURCE_TYPE "org.tizen.door"
#define FINDING_SERVER_INTERVAL 5.0f
#define POPPING_VALUE_INTERVAL 10.0f
+#ifdef WEB_API_URI_PUBLIC
+#define WEB_API_URI WEB_API_URI_PUBLIC
+#else
+#define WEB_API_URI WEB_API_URI_DEV
+#endif
+
void _observe_resource_cb(connectivity_resource_s *resource_info, void *resource_data, void *user_data)
{
int detected = (int) resource_data;
{
int ret = -1;
int value = 0;
+ web_util_sensor_data_s sensor_data;
ret = connectivity_resource_pop_int(resource_info, NULL, &value);
if (ret < 0)
_E("cannot pop a value");
_I("Uri path : [%s], Value [%d]", uri_path, value);
+
+ /* TODO */
+ sensor_data.hash = NULL;
+
+ sensor_data.enabled_sensor |= WEB_UTIL_SENSOR_MOTION;
+ sensor_data.pir = value;
+ web_util_json_add_sensor_data(uri_path, sensor_data);
+
+ return;
}
static Eina_Bool _popping_timer_cb(void *data)
{
int ret = -1;
+ char *json_data = NULL;
+
+ web_util_json_init();
+ web_util_json_data_array_begin();
ret = connectivity_resource_list_foreach(_foreach_resource_list, NULL);
retv_if(ret == -1, ECORE_CALLBACK_RENEW);
+ web_util_json_data_array_end();
+ json_data = web_util_get_json_string();
+
+ web_util_json_fini();
+
+ web_util_noti_post(WEB_API_URI, json_data);
+ free(json_data);
+
return ECORE_CALLBACK_RENEW;
}
#include <stdbool.h>
#include <curl/curl.h>
+#include <glib-object.h>
+#include <json-glib/json-glib.h>
#include "log.h"
+#include "webutil.h"
+
+typedef struct _wu_json_handle {
+ JsonBuilder *builder;
+ bool is_begin;
+ bool is_end;
+} wu_json_handle;
+
+static wu_json_handle Json_h = {NULL, false, false};
static size_t _response_write_callback(char *ptr, size_t size, size_t nmemb, void *userdata)
{
-
size_t res_size = 0;
res_size = size*nmemb;
{
int ret = 0;
CURLcode result;
- result = curl_global_init(CURL_GLOBAL_DEFAULT);
- if(result != CURLE_OK) {
+ result = curl_global_init(CURL_GLOBAL_DEFAULT);
+ if(result != CURLE_OK) {
_E("curl_global_init() failed: %s",
curl_easy_strerror(result));
ret = -1;
- }
+ }
return ret;
}
CURLcode response = CURLE_OK;
struct curl_slist *headers = NULL;
+ retv_if(resource == NULL,-1);
+ retv_if(json_data == NULL,-1);
+
+ _I("server : %s", resource);
+ _I("json_data : %s", json_data);
+
curl = curl_easy_init();
if(!curl) {
}
headers = curl_slist_append(headers, "Accept: application/json");
- headers = curl_slist_append(headers, "Content-Type: application/json");
+ headers = curl_slist_append(headers, "Content-Type: application/json");
curl_easy_setopt(curl, CURLOPT_URL, resource);
curl_easy_setopt(curl, CURLOPT_POST, 1L);
curl_easy_setopt(curl, CURLOPT_POSTFIELDS, json_data);
curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, _response_write_callback);
- response = curl_easy_perform(curl);
+ response = curl_easy_perform(curl);
- if(response != CURLE_OK) {
+ if(response != CURLE_OK) {
_E("curl_easy_perform() failed: %s",
curl_easy_strerror(response));
/* What should we do here, if response is kind of errors? */
curl_slist_free_all(headers);
curl_easy_cleanup(curl);
-
return ret;
}
+
+int web_util_json_init(void)
+{
+ if(Json_h.builder) {
+ g_object_unref(Json_h.builder);
+ }
+
+ Json_h.is_begin = false;
+ Json_h.is_end = false;
+ Json_h.builder = json_builder_new();
+ retv_if(Json_h.builder == NULL, -1);
+
+ return 0;
+}
+
+int web_util_json_fini(void)
+{
+
+ if(Json_h.builder) {
+ g_object_unref(Json_h.builder);
+ Json_h.builder = NULL;
+ }
+
+ Json_h.is_begin = false;
+ Json_h.is_end = false;
+
+ return 0;
+}
+
+int web_util_json_data_array_begin(void)
+{
+ retv_if(Json_h.builder == NULL, -1);
+ retv_if(Json_h.is_begin == true, -1);
+ retv_if(Json_h.is_end == true, -1);
+
+ Json_h.is_begin = true;
+
+ /*
+ {
+ SensorsDataList : [ SensorData ]
+ }
+ */
+
+ json_builder_begin_object(Json_h.builder);
+ json_builder_set_member_name(Json_h.builder,"SensorDataList");
+ json_builder_begin_array(Json_h.builder);
+
+ return 0;
+}
+
+int web_util_json_data_array_end(void)
+{
+ retv_if(Json_h.builder == NULL, -1);
+ retv_if(Json_h.is_begin == false, -1);
+ retv_if(Json_h.is_end == true, -1);
+
+ json_builder_end_array(Json_h.builder);
+ json_builder_end_object(Json_h.builder);
+ Json_h.is_end = true;
+
+ return 0;
+}
+
+int web_util_json_add_sensor_data(const char* sensorpi_id, web_util_sensor_data_s sensor_data)
+{
+ const char n_id[] = "SensorPiID";
+ const char n_motion[] = "Motion";
+ const char n_flame[] = "Flame";
+ const char n_hum[] = "Humidity";
+ const char n_temp[] = "Temperature";
+ const char n_vib[] = "Vibration";
+ const char n_co2[] = "CO2";
+ const char n_sound[] = "SoundLevel";
+ const char n_e_sensor[] = "SensorEnabled";
+ const char n_hash[] = "Hash";
+
+ retv_if(Json_h.builder == NULL, -1);
+ retv_if(Json_h.is_begin == false, -1);
+ retv_if(Json_h.is_end == true, -1);
+ retv_if(sensorpi_id == NULL, -1);
+
+ /* JSON structure :
+ {
+ SensorPiID: string,
+ Motion: boolean,
+ Flame: boolean,
+ Humidity: double,
+ Temperature: double,
+ Vibration: boolean,
+ CO2: double,
+ SoundLevel: int,
+ SensorEnabled: [PIR, ],
+ Hash: string,
+ }
+ */
+
+ _I("id : %s, value : %d", sensorpi_id, sensor_data.pir);
+
+ json_builder_begin_object(Json_h.builder);
+
+ json_builder_set_member_name(Json_h.builder, n_id);
+ json_builder_add_string_value(Json_h.builder, sensorpi_id);
+
+ if(sensor_data.enabled_sensor & WEB_UTIL_SENSOR_MOTION) {
+ json_builder_set_member_name(Json_h.builder, n_motion);
+ json_builder_add_int_value(Json_h.builder, sensor_data.pir);
+ }
+
+ if(sensor_data.enabled_sensor & WEB_UTIL_SENSOR_FLAME) {
+ json_builder_set_member_name(Json_h.builder, n_flame);
+ json_builder_add_int_value(Json_h.builder, sensor_data.flame);
+ }
+
+ if(sensor_data.enabled_sensor & WEB_UTIL_SENSOR_HUMIDITY) {
+ json_builder_set_member_name(Json_h.builder, n_hum);
+ json_builder_add_double_value(Json_h.builder, sensor_data.humidity);
+ }
+
+ if(sensor_data.enabled_sensor & WEB_UTIL_SENSOR_TEMPERATURE) {
+ json_builder_set_member_name(Json_h.builder, n_temp);
+ json_builder_add_double_value(Json_h.builder, sensor_data.temperature);
+ }
+
+ if(sensor_data.enabled_sensor & WEB_UTIL_SENSOR_VIB) {
+ json_builder_set_member_name(Json_h.builder, n_vib);
+ json_builder_add_int_value(Json_h.builder, sensor_data.virbration);
+ }
+
+ if(sensor_data.enabled_sensor & WEB_UTIL_SENSOR_CO2) {
+ json_builder_set_member_name(Json_h.builder, n_co2);
+ json_builder_add_double_value(Json_h.builder, sensor_data.co2);
+ }
+
+ if(sensor_data.enabled_sensor & WEB_UTIL_SENSOR_SOUND) {
+ json_builder_set_member_name(Json_h.builder, n_sound);
+ json_builder_add_int_value(Json_h.builder, sensor_data.soundlevel);
+ }
+
+ json_builder_set_member_name(Json_h.builder, n_e_sensor);
+ json_builder_begin_array(Json_h.builder);
+
+ if(sensor_data.enabled_sensor & WEB_UTIL_SENSOR_MOTION)
+ json_builder_add_string_value(Json_h.builder, n_motion);
+
+ if(sensor_data.enabled_sensor & WEB_UTIL_SENSOR_FLAME)
+ json_builder_add_string_value(Json_h.builder, n_flame);
+
+ if(sensor_data.enabled_sensor & WEB_UTIL_SENSOR_HUMIDITY)
+ json_builder_add_string_value(Json_h.builder, n_hum);
+
+ if(sensor_data.enabled_sensor & WEB_UTIL_SENSOR_TEMPERATURE)
+ json_builder_add_string_value(Json_h.builder, n_temp);
+
+ if(sensor_data.enabled_sensor & WEB_UTIL_SENSOR_VIB)
+ json_builder_add_string_value(Json_h.builder, n_vib);
+
+ if(sensor_data.enabled_sensor & WEB_UTIL_SENSOR_CO2)
+ json_builder_add_string_value(Json_h.builder, n_co2);
+
+ if(sensor_data.enabled_sensor & WEB_UTIL_SENSOR_SOUND)
+ json_builder_add_string_value(Json_h.builder, n_sound);
+
+ json_builder_end_array(Json_h.builder);
+
+ if(sensor_data.hash) {
+ json_builder_set_member_name(Json_h.builder, n_hash);
+ json_builder_add_string_value(Json_h.builder, sensor_data.hash);
+ }
+
+ json_builder_end_object(Json_h.builder);
+
+ return 0;
+}
+
+char *web_util_get_json_string(void)
+{
+ JsonGenerator *gen = NULL;
+ JsonNode *root = NULL;
+ char *str = NULL;
+
+ retv_if(Json_h.builder == NULL, NULL);
+ retv_if(Json_h.is_begin == false, NULL);
+ retv_if(Json_h.is_end == false, NULL);
+
+ root = json_builder_get_root(Json_h.builder);
+ retv_if(root == NULL, NULL);
+
+ gen = json_generator_new();
+ goto_if(gen == NULL, error_release_all);
+ json_generator_set_root(gen, root);
+
+ str = json_generator_to_data(gen, NULL);
+
+ return str;
+
+error_release_all:
+ if(root)
+ json_node_free(root);
+
+ if(gen)
+ g_object_unref(gen);
+
+ return NULL;
+}
+