From: youngman Date: Thu, 3 Dec 2015 05:18:39 +0000 (+0900) Subject: Add timeout for discovery handle X-Git-Tag: submit/tizen/20151207.045529~1 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=5caa695b3cb13cf44c50c3b803c7d48dd9b8ddb4;p=platform%2Fcore%2Fiot%2Fiotcon.git Add timeout for discovery handle Change-Id: I3b82a542544d3c48c273882e042bc57895528efd Signed-off-by: youngman --- diff --git a/common/ic-dbus.xml b/common/ic-dbus.xml index ecdd2dc..c3aaf28 100644 --- a/common/ic-dbus.xml +++ b/common/ic-dbus.xml @@ -46,6 +46,7 @@ + @@ -85,12 +86,14 @@ + + diff --git a/daemon/icd-dbus.c b/daemon/icd-dbus.c index ef959ba..20263f3 100644 --- a/daemon/icd-dbus.c +++ b/daemon/icd-dbus.c @@ -511,7 +511,8 @@ static gboolean _dbus_handle_find_resource(icDbus *object, const gchar *host_address, gint connectivity, const gchar *type, - bool is_secure) + bool is_secure, + gint timeout) { int ret; const gchar *sender; @@ -520,7 +521,7 @@ static gboolean _dbus_handle_find_resource(icDbus *object, sender = g_dbus_method_invocation_get_sender(invocation); signal_number = icd_dbus_generate_signal_number(); - ret = icd_ioty_find_resource(host_address, connectivity, type, is_secure, + ret = icd_ioty_find_resource(host_address, connectivity, type, is_secure, timeout, signal_number, sender); if (IOTCON_ERROR_NONE != ret) ERR("icd_ioty_find_resource() Fail(%d)", ret); @@ -609,7 +610,8 @@ static gboolean _dbus_handle_send_response(icDbus *object, static gboolean _dbus_handle_get_device_info(icDbus *object, GDBusMethodInvocation *invocation, const gchar *host_address, - gint connectivity) + gint connectivity, + gint timeout) { int ret; const gchar *sender; @@ -618,8 +620,8 @@ static gboolean _dbus_handle_get_device_info(icDbus *object, signal_number = icd_dbus_generate_signal_number(); sender = g_dbus_method_invocation_get_sender(invocation); - ret = icd_ioty_get_info(ICD_DEVICE_INFO, host_address, connectivity, signal_number, - sender); + ret = icd_ioty_get_info(ICD_DEVICE_INFO, host_address, connectivity, timeout, + signal_number, sender); if (IOTCON_ERROR_NONE != ret) ERR("icd_ioty_get_info(device info) Fail(%d)", ret); @@ -631,7 +633,8 @@ static gboolean _dbus_handle_get_device_info(icDbus *object, static gboolean _dbus_handle_get_platform_info(icDbus *object, GDBusMethodInvocation *invocation, const gchar *host_address, - gint connectivity) + gint connectivity, + gint timeout) { int ret; const gchar *sender; @@ -640,8 +643,8 @@ static gboolean _dbus_handle_get_platform_info(icDbus *object, signal_number = icd_dbus_generate_signal_number(); sender = g_dbus_method_invocation_get_sender(invocation); - ret = icd_ioty_get_info(ICD_PLATFORM_INFO, host_address, connectivity, signal_number, - sender); + ret = icd_ioty_get_info(ICD_PLATFORM_INFO, host_address, connectivity, timeout, + signal_number, sender); if (IOTCON_ERROR_NONE != ret) ERR("icd_ioty_get_info(platform info) Fail(%d)", ret); diff --git a/daemon/icd-ioty.c b/daemon/icd-ioty.c index 7b1109d..6d43c23 100644 --- a/daemon/icd-ioty.c +++ b/daemon/icd-ioty.c @@ -407,15 +407,34 @@ static void _ioty_free_signal_context(void *data) } +static gboolean _icd_ioty_discovery_timeout(gpointer user_data) +{ + int ret; + OCDoHandle handle = user_data; + + icd_ioty_csdk_lock(); + ret = OCCancel(handle, OC_LOW_QOS, NULL, 0); + icd_ioty_csdk_unlock(); + if (OC_STACK_OK != ret) { + ERR("OCCancel() Fail(%d)", ret); + return G_SOURCE_REMOVE; + } + + return G_SOURCE_REMOVE; +} + + int icd_ioty_find_resource(const char *host_address, int conn_type, const char *resource_type, bool is_secure, + int timeout, int64_t signal_number, const char *bus_name) { int len; char *coap_str; + OCDoHandle handle; OCStackResult result; icd_sig_ctx_s *context; char uri[PATH_MAX] = {0}; @@ -455,7 +474,7 @@ int icd_ioty_find_resource(const char *host_address, icd_ioty_csdk_lock(); /* TODO : QoS is come from lib. */ - result = OCDoResource(NULL, OC_REST_DISCOVER, uri, NULL, NULL, oic_conn_type, + result = OCDoResource(&handle, OC_REST_DISCOVER, uri, NULL, NULL, oic_conn_type, OC_LOW_QOS, &cbdata, NULL, 0); icd_ioty_csdk_unlock(); @@ -466,6 +485,8 @@ int icd_ioty_find_resource(const char *host_address, return icd_ioty_convert_error(result); } + g_timeout_add_seconds(timeout, _icd_ioty_discovery_timeout, handle); + return IOTCON_ERROR_NONE; } @@ -852,9 +873,10 @@ int icd_ioty_observer_stop(OCDoHandle handle, GVariant *options) return IOTCON_ERROR_NONE; } -int icd_ioty_get_info(int type, const char *host_address, int conn_type, +int icd_ioty_get_info(int type, const char *host_address, int conn_type, int timeout, int64_t signal_number, const char *bus_name) { + OCDoHandle handle; OCStackResult result; icd_sig_ctx_s *context; OCCallbackData cbdata = {0}; @@ -890,7 +912,7 @@ int icd_ioty_get_info(int type, const char *host_address, int conn_type, icd_ioty_csdk_lock(); /* TODO : QoS is come from lib. And user can set QoS to client structure. */ - result = OCDoResource(NULL, OC_REST_DISCOVER, uri, NULL, NULL, oic_conn_type, + result = OCDoResource(&handle, OC_REST_DISCOVER, uri, NULL, NULL, oic_conn_type, OC_LOW_QOS, &cbdata, NULL, 0); icd_ioty_csdk_unlock(); @@ -901,6 +923,8 @@ int icd_ioty_get_info(int type, const char *host_address, int conn_type, return icd_ioty_convert_error(result); } + g_timeout_add_seconds(timeout, _icd_ioty_discovery_timeout, handle); + return IOTCON_ERROR_NONE; } diff --git a/daemon/icd-ioty.h b/daemon/icd-ioty.h index b082dd1..aa11aa1 100644 --- a/daemon/icd-ioty.h +++ b/daemon/icd-ioty.h @@ -106,6 +106,7 @@ int icd_ioty_find_resource(const char *host_address, int conn_type, const char *resource_type, bool is_secure, + int timeout, int64_t signal_number, const char *bus_name); @@ -129,7 +130,7 @@ OCDoHandle icd_ioty_observer_start(GVariant *resource, int observe_type, int icd_ioty_observer_stop(OCDoHandle handle, GVariant *options); -int icd_ioty_get_info(int type, const char *host_address, int conn_type, +int icd_ioty_get_info(int type, const char *host_address, int conn_type, int timeout, int64_t signal_number, const char *bus_name); int icd_ioty_set_device_info(); diff --git a/lib/icl-device.c b/lib/icl-device.c index 15ccd47..50238f2 100644 --- a/lib/icl-device.c +++ b/lib/icl-device.c @@ -134,7 +134,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; @@ -144,9 +144,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, @@ -185,7 +188,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; @@ -310,7 +313,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; @@ -320,9 +323,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, @@ -360,7 +366,7 @@ 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; diff --git a/lib/icl-remote-resource.c b/lib/icl-remote-resource.c index e905fef..5bb0176 100644 --- a/lib/icl-remote-resource.c +++ b/lib/icl-remote-resource.c @@ -102,7 +102,7 @@ API int iotcon_find_resource(const char *host_address, iotcon_found_resource_cb cb, void *user_data) { - int ret; + int ret, timeout; unsigned int sub_id; GError *error = NULL; int64_t signal_number; @@ -116,11 +116,14 @@ API int iotcon_find_resource(const char *host_address, return IOTCON_ERROR_INVALID_PARAMETER; } + timeout = icl_dbus_get_timeout(); + ic_dbus_call_find_resource_sync(icl_dbus_get_object(), ic_utils_dbus_encode_str(host_address), connectivity_type, ic_utils_dbus_encode_str(resource_type), is_secure, + timeout, &signal_number, &ret, NULL, @@ -158,8 +161,8 @@ API int iotcon_find_resource(const char *host_address, cb_container->id = sub_id; - cb_container->timeout_id = g_timeout_add_seconds(icl_dbus_get_timeout(), - _icl_timeout_find_resource, cb_container); + cb_container->timeout_id = g_timeout_add_seconds(timeout, _icl_timeout_find_resource, + cb_container); return ret; }