Fix caching observer 17/122017/2 accepted/tizen/common/20170331.152850 submit/tizen/20170331.075442
authorJooseok Park <jooseok.park@samsung.com>
Thu, 30 Mar 2017 02:27:12 +0000 (11:27 +0900)
committerJooseok Park <jooseok.park@samsung.com>
Thu, 30 Mar 2017 08:42:36 +0000 (17:42 +0900)
 - to avoid duplicately get request,
 - caching_observe_cb() needs to be changed to use timeout directly

Change-Id: I8ac5327a24ea5ce45250afc58407c8694a74a6ad

packaging/iotcon.spec
src/ic-attributes.c
src/ic-ioty.c
src/ic-remote-resource.c

index f53e5aa..dbd096d 100644 (file)
@@ -1,6 +1,6 @@
 Name:       iotcon
 Summary:    Tizen IoT Connectivity
-Version:    0.3.14
+Version:    0.3.15
 Release:    0
 Group:      Network & Connectivity/Service
 License:    Apache-2.0
index 9b40007..8ff6504 100644 (file)
@@ -63,14 +63,10 @@ int icl_attributes_destroy(iotcon_attributes_h attributes)
 
        attributes->ref_count--;
 
-       if (0 != attributes->ref_count) {
-               WARN("already destroyed!!");
-               return IOTCON_ERROR_NONE;
+       if (0 == attributes->ref_count) {
+               g_hash_table_destroy(attributes->hash_table);
+               free(attributes);
        }
-
-       g_hash_table_destroy(attributes->hash_table);
-       free(attributes);
-
        return IOTCON_ERROR_NONE;
 }
 
index 21c05e3..79f5392 100644 (file)
@@ -1240,7 +1240,7 @@ static int _icl_ioty_remote_resource_crud(
                _icl_ioty_free_response_container(cb_container);
                return ret;
        }
-       SECURE_DBG("uri:[%s], oic_conn_type:[0x%x]", uri, oic_conn_type);
+       SECURE_DBG("uri:[%s], oic_conn_type:[0x%x] To [%s:%d] ", uri, oic_conn_type, dev_addr.addr, dev_addr.port);
        ret = OCDoResource(NULL, method, uri, &dev_addr, (OCPayload *)payload, oic_conn_type,
                        OC_HIGH_QOS, &cbdata, oic_options_ptr, options_size);
        free(uri);
@@ -1351,7 +1351,8 @@ static void _icl_ioty_encap_get_cb(iotcon_remote_resource_h resource,
                iotcon_response_h response,
                void *user_data)
 {
-       FN_CALL;
+       DBG(">>>>>>>> called... resource :[%p]", resource);
+
        int ret;
        iotcon_representation_h repr;
        iotcon_remote_resource_state_e state;
@@ -1371,7 +1372,7 @@ static void _icl_ioty_encap_get_cb(iotcon_remote_resource_h resource,
                }
 
                if (state != resource->monitoring.state) {
-                       DBG("call the monitoring callback...");
+                       DBG("call the monitoring callback [%p]", resource->monitoring.cb);
                        resource->monitoring.cb(resource, state, resource->monitoring.user_data);
                        resource->monitoring.state = state;
                        DBG("call the monitoring callback done");
@@ -1385,7 +1386,7 @@ static void _icl_ioty_encap_get_cb(iotcon_remote_resource_h resource,
                        repr = response->repr;
                        break;
                default:
-                       WARN("iotcon_remote_resource_get() Fail(%d)", err);
+                       WARN("_icl_ioty_encap_get_cb() Fail(%d)", err);
                        repr = NULL;
                }
 
@@ -1398,7 +1399,7 @@ static void _icl_ioty_encap_get_cb(iotcon_remote_resource_h resource,
                                response->repr = NULL;
 
                        if (resource->caching.cb) {
-                               DBG("call the caching callback...");
+                               DBG("call the caching callback [%p]", resource->caching.cb);
                                resource->caching.cb(resource, repr, resource->caching.user_data);
                                DBG("call the caching callback done");
                        }
@@ -1471,7 +1472,7 @@ static void _icl_ioty_monitoring_presence_cb(iotcon_presence_h presence,
 int icl_ioty_remote_resource_start_monitoring(iotcon_remote_resource_h resource,
                iotcon_remote_resource_state_changed_cb cb, void *user_data)
 {
-       FN_CALL;
+       DBG(">>>>>>>> called... resource :[%p], cb :[%p]", resource, cb);
        int ret;
 
        RETV_IF(NULL == resource, IOTCON_ERROR_INVALID_PARAMETER);
@@ -1531,15 +1532,40 @@ int icl_ioty_remote_resource_stop_monitoring(iotcon_remote_resource_h resource)
 static void _icl_ioty_caching_observe_cb(iotcon_remote_resource_h resource,
                iotcon_error_e err, int sequence_number, iotcon_response_h response, void *user_data)
 {
-       RET_IF(NULL == resource);
+       RET_IF(NULL == resource || NULL == response);
 
-       _icl_ioty_encap_timeout_cb(resource);
+
+       if (resource->timer_id)
+               g_source_remove(resource->timer_id);
+
+       if (resource->caching.obs_handle) {
+               int ret;
+               iotcon_representation_h repr = response->repr;
+               resource->timer_id = g_timeout_add_seconds(resource->checking_interval, _icl_ioty_encap_timeout_cb,
+                       resource);
+               DBG("resource->timer_id :[%d]", resource->timer_id);
+
+               ret = icl_representation_compare(resource->caching.repr, repr);
+               if (IC_EQUAL != ret) { /* updated */
+                       if (resource->caching.repr)
+                               icl_representation_destroy(resource->caching.repr);
+                       resource->caching.repr = repr;
+                       if (response)
+                               response->repr = NULL;
+
+                       if (resource->caching.cb) {
+                               DBG("call the caching callback [%p]", resource->caching.cb);
+                               resource->caching.cb(resource, repr, resource->caching.user_data);
+                               DBG("call the caching callback done");
+                       }
+               }
+       }
 }
 
 int icl_ioty_remote_resource_start_caching(iotcon_remote_resource_h resource,
                iotcon_remote_resource_cached_representation_changed_cb cb, void *user_data)
 {
-       FN_CALL;
+       DBG(">>>>>>>> called... resource :[%p], cb :[%p]", resource, cb);
        int ret;
 
        RETV_IF(NULL == resource, IOTCON_ERROR_INVALID_PARAMETER);
index b9d6ead..54d9139 100644 (file)
@@ -105,6 +105,8 @@ int icl_remote_resource_create(const char *host_address,
 
        *resource_handle = resource;
 
+       DBG("remote resource : [%p]", resource);
+
        return IOTCON_ERROR_NONE;
 }
 
@@ -124,7 +126,7 @@ void icl_remote_resource_unref(iotcon_remote_resource_h resource)
                return;
 
        /* ref_count is zero, so destroy remote resource */
-       DBG("remote resource will be freed.");
+       DBG("remote resource will be freed.[%p]", resource);
        if (true == resource->is_found) {
                ERR("It can't be destroyed by user.");
                return;
@@ -242,6 +244,7 @@ int icl_remote_resource_clone(iotcon_remote_resource_h src,
        resource->connectivity_type = src->connectivity_type;
 
        *dest = resource;
+       DBG("remote resource : [%p]", resource);
 
        return IOTCON_ERROR_NONE;
 }