fix the problem when structures are destoried, repeatedly
[platform/core/iot/iotcon.git] / lib / icl-device.c
index aaa909f..4a12c24 100644 (file)
@@ -57,11 +57,6 @@ typedef struct {
        int timeout_id;
 } icl_platform_info_s;
 
-typedef struct {
-       iotcon_tizen_info_cb cb;
-       void *user_data;
-} icl_tizen_info_s;
-
 
 API int iotcon_device_info_get_property(iotcon_device_info_h device_info,
                iotcon_device_info_e property, char **value)
@@ -130,6 +125,7 @@ static gboolean _icl_timeout_get_device_info(gpointer p)
                cb_container->cb(&info, IOTCON_ERROR_TIMEOUT, cb_container->user_data);
 
        icl_dbus_unsubscribe_signal(cb_container->id);
+       cb_container->id = 0;
 
        return G_SOURCE_REMOVE;
 }
@@ -139,7 +135,7 @@ API int iotcon_get_device_info(const char *host_address,
                iotcon_device_info_cb cb,
                void *user_data)
 {
-       int ret;
+       int ret, timeout;
        unsigned int sub_id;
        GError *error = NULL;
        icl_device_info_s *cb_container;
@@ -149,9 +145,12 @@ API int iotcon_get_device_info(const char *host_address,
        RETV_IF(NULL == icl_dbus_get_object(), IOTCON_ERROR_DBUS);
        RETV_IF(NULL == cb, IOTCON_ERROR_INVALID_PARAMETER);
 
+       timeout = icl_dbus_get_timeout();
+
        ic_dbus_call_get_device_info_sync(icl_dbus_get_object(),
                        ic_utils_dbus_encode_str(host_address),
                        connectivity_type,
+                       timeout,
                        &signal_number,
                        &ret,
                        NULL,
@@ -190,7 +189,7 @@ API int iotcon_get_device_info(const char *host_address,
 
        cb_container->id = sub_id;
 
-       cb_container->timeout_id = g_timeout_add_seconds(icl_dbus_get_timeout(),
+       cb_container->timeout_id = g_timeout_add_seconds(timeout,
                        _icl_timeout_get_device_info, cb_container);
 
        return ret;
@@ -306,6 +305,7 @@ static gboolean _icl_timeout_get_platform_info(gpointer p)
                cb_container->cb(&info, IOTCON_ERROR_TIMEOUT, cb_container->user_data);
 
        icl_dbus_unsubscribe_signal(cb_container->id);
+       cb_container->id = 0;
 
        return G_SOURCE_REMOVE;
 }
@@ -315,7 +315,7 @@ API int iotcon_get_platform_info(const char *host_address,
                iotcon_platform_info_cb cb,
                void *user_data)
 {
-       int ret;
+       int ret, timeout;
        unsigned int sub_id;
        GError *error = NULL;
        icl_platform_info_s *cb_container;
@@ -325,9 +325,12 @@ API int iotcon_get_platform_info(const char *host_address,
        RETV_IF(NULL == icl_dbus_get_object(), IOTCON_ERROR_DBUS);
        RETV_IF(NULL == cb, IOTCON_ERROR_INVALID_PARAMETER);
 
+       timeout = icl_dbus_get_timeout();
+
        ic_dbus_call_get_platform_info_sync(icl_dbus_get_object(),
                        ic_utils_dbus_encode_str(host_address),
                        connectivity_type,
+                       timeout,
                        &signal_number,
                        &ret,
                        NULL,
@@ -365,96 +368,8 @@ API int iotcon_get_platform_info(const char *host_address,
        }
 
        cb_container->id = sub_id;
-       cb_container->timeout_id = g_timeout_add_seconds(icl_dbus_get_timeout(),
+       cb_container->timeout_id = g_timeout_add_seconds(timeout,
                        _icl_timeout_get_platform_info, cb_container);
 
        return ret;
 }
-
-
-static void _icl_tizen_info_cb(GObject *object, GAsyncResult *g_async_res,
-               gpointer user_data)
-{
-       int res;
-       GVariant *result;
-       char *device_name;
-       char *tizen_device_id;
-       GError *error = NULL;
-       struct icl_tizen_info info = {0};
-       icl_tizen_info_s *cb_container = user_data;
-       iotcon_tizen_info_cb cb = cb_container->cb;
-
-       ic_dbus_call_get_tizen_info_finish(IC_DBUS(object), &result, g_async_res, &error);
-       if (error) {
-               ERR("ic_dbus_call_get_tizen_info_finish() Fail(%s)", error->message);
-               if (cb) {
-                       int ret = icl_dbus_convert_dbus_error(error->code);
-                       cb(&info, ret, cb_container->user_data);
-               }
-               g_error_free(error);
-               /* TODO contain time out error */
-               free(cb_container);
-               return;
-       }
-
-       g_variant_get(result, "(&s&si)", &device_name, &tizen_device_id, &res);
-
-       if (IOTCON_ERROR_NONE == res && NULL != ic_utils_dbus_decode_str(tizen_device_id)) {
-               info.device_name = ic_utils_dbus_decode_str(device_name);
-               info.tizen_device_id = tizen_device_id;
-       }
-
-       if (cb)
-               cb(&info, res, cb_container->user_data);
-
-       free(cb_container);
-}
-
-
-API int iotcon_get_tizen_info(const char *host_address,
-               iotcon_connectivity_type_e connectivity_type,
-               iotcon_tizen_info_cb cb,
-               void *user_data)
-{
-       icl_tizen_info_s *cb_container;
-
-       RETV_IF(NULL == icl_dbus_get_object(), IOTCON_ERROR_DBUS);
-       RETV_IF(NULL == host_address, IOTCON_ERROR_INVALID_PARAMETER);
-       RETV_IF(NULL == cb, IOTCON_ERROR_INVALID_PARAMETER);
-
-       cb_container = calloc(1, sizeof(icl_tizen_info_s));
-       if (NULL == cb_container) {
-               ERR("calloc() Fail(%d)", errno);
-               return IOTCON_ERROR_OUT_OF_MEMORY;
-       }
-
-       cb_container->cb = cb;
-       cb_container->user_data = user_data;
-
-       ic_dbus_call_get_tizen_info(icl_dbus_get_object(), host_address, connectivity_type,
-                       NULL, _icl_tizen_info_cb, cb_container);
-
-       return IOTCON_ERROR_NONE;
-}
-
-
-API int iotcon_tizen_info_get_property(iotcon_tizen_info_h tizen_info,
-               iotcon_tizen_info_e property, char **value)
-{
-       RETV_IF(NULL == tizen_info, IOTCON_ERROR_INVALID_PARAMETER);
-       RETV_IF(NULL == value, IOTCON_ERROR_INVALID_PARAMETER);
-
-       switch (property) {
-       case IOTCON_TIZEN_INFO_DEVICE_NAME:
-               *value = tizen_info->device_name;
-               break;
-       case IOTCON_TIZEN_INFO_TIZEN_DEVICE_ID:
-               *value = tizen_info->tizen_device_id;
-               break;
-       default:
-               ERR("Invalid property(%d)", property);
-               return IOTCON_ERROR_INVALID_PARAMETER;
-       }
-
-       return IOTCON_ERROR_NONE;
-}