From: Saurav Babu Date: Mon, 15 Jan 2018 06:59:34 +0000 (+0530) Subject: mot-agent: Use OCUnlinkDevices() instead of OCRemoveDeviceWithUuid() to unpair X-Git-Tag: submit/tizen/20190131.065036~222 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=b8e9feeae652c6a41c637ce8d6daf70c718944b6;p=platform%2Fcore%2Fapi%2Fmulti-device-group.git mot-agent: Use OCUnlinkDevices() instead of OCRemoveDeviceWithUuid() to unpair Signed-off-by: Saurav Babu --- diff --git a/src/mot-agent/introspection/ma.xml b/src/mot-agent/introspection/ma.xml index 51f6fe8..de168bc 100644 --- a/src/mot-agent/introspection/ma.xml +++ b/src/mot-agent/introspection/ma.xml @@ -56,7 +56,8 @@ - + + diff --git a/src/mot-agent/ma-service-interface.c b/src/mot-agent/ma-service-interface.c index 47a125d..7e84e09 100644 --- a/src/mot-agent/ma-service-interface.c +++ b/src/mot-agent/ma-service-interface.c @@ -289,14 +289,15 @@ static gboolean _ma_dbus_handle_pairwise(NetMa *object, } static gboolean _ma_dbus_handle_unpair(NetMa *object, - GDBusMethodInvocation *invocation, gchar *uuid_dev, gpointer user_data) + GDBusMethodInvocation *invocation, gchar *uuid_dev1, gchar *uuid_dev2, + gpointer user_data) { int ret = MA_ERROR_NONE; ma_service *service = (ma_service *)user_data; ma_check_null_ret_error("service", service, FALSE); - ret = ma_request_unpair(service, uuid_dev); + ret = ma_request_unpair(service, uuid_dev1, uuid_dev2); if (MA_ERROR_NONE != ret) MA_LOGE("Failed to ma_request_unpair = %d", ret); diff --git a/src/mot-agent/ma-subowner.c b/src/mot-agent/ma-subowner.c index 999d904..9c8cdf9 100644 --- a/src/mot-agent/ma-subowner.c +++ b/src/mot-agent/ma-subowner.c @@ -1367,19 +1367,6 @@ static void _provisioning_pairwise_cb(void* ctx, int nOfRes, OCProvisionResult_t client->g_doneCB = true; } -static void _unpair_cb(void* ctx, int nOfRes, OCProvisionResult_t* arr, bool has_error) -{ - ma_subowner_s *client = (ma_subowner_s *)ctx; - - if (!has_error) { - MA_LOGD("unpair SUCCEEDED"); - } else { - MA_LOGD( "unpair FAILED "); - _print_result_list((const OCProvisionResult_t*) arr, nOfRes); - } - client->g_doneCB = true; -} - static gpointer _provisioning_acl_func(gpointer data) { OCStackResult ret = OC_STACK_OK; @@ -1606,76 +1593,6 @@ PVACL_ERROR: return NULL; } -static gpointer _unpair_func(gpointer data) -{ - OCStackResult ret = OC_STACK_OK; - ma_req_cb_s *con = (ma_req_cb_s *)data; - - OicUuid_t *uuid = NULL; - - if (!con->target_to_revoke) { - MA_LOGE("Some parameters are wrong"); - MA_LOGE("%s", con->target_to_revoke ); - goto PVACL_ERROR; - } - - uuid = _convert_uuid(con->target_to_revoke); - - g_client->g_doneCB = false; - MA_LOGI(" unpair device.."); - - ret = OCRemoveDeviceWithUuid((void*) g_client, CALLBACK_TIMEOUT_5S, uuid, _unpair_cb ); - if (OC_STACK_OK != ret) { - MA_LOGD( "OCRemoveDevice API error: %d (%s)", ret, _error_to_string(ret)); - goto PVACL_ERROR; - } - - ret = _wait_cb_ret(CALLBACK_TIMEOUT_5S); - if (ret) { - MA_LOGE( "OCRemoveDevice Faild = %d", errno); - goto PVACL_ERROR; - } - /* display the pairwise-provisioned result */ - MA_LOGI(" Provision pairwise Successfully"); - -PVACL_ERROR: - /* Notify ACL result */ - net_ma_emit_unpair_done(ma_dbus_get_object(), (int)ret); - if (uuid) - g_free(uuid); - _request_cleanup(con); - g_thread_exit(GINT_TO_POINTER (1)); - return NULL; -} - -static int _provisioning_unpair(ma_service *service, gchar *target) -{ - ma_req_cb_s *con = NULL; - con = g_malloc0(sizeof(ma_req_cb_s)); - if (NULL == con) { - MA_LOGE( "g_malloc0() Fail=%d", errno); - /* Unset d2ds status 'pending' */ - g_atomic_int_set(&service->pending, 0); - return MA_ERROR_OUT_OF_MEMORY; - } - - con->userdata = service; - con->cid = MA_UNPAIR; - - con->target_to_revoke = g_strdup(target); - - con->thread = g_thread_try_new("unpair_device", _unpair_func, con, NULL); - if (!con->thread) { - MA_LOGE("Failed to create thread"); - _request_cleanup(con); - return MA_ERROR_OUT_OF_MEMORY; - } - g_thread_unref(con->thread); -#ifdef TIMEOUT_USED - con->tid = g_timeout_add_seconds(CALLBACK_TIMEOUT_5S + 1, _ma_timeout_cb, con); -#endif - return MA_ERROR_NONE; -} static int _provisioning_pairwise_link(ma_service *service, gchar *target_1, gchar *subject_1, gchar *rsrc_uri_1, gchar *rsrc_type_1, gchar *rsrc_interface_1, int permission_1, @@ -1734,6 +1651,93 @@ static void _provision_cred_cb(void* ctx, int nOfRes, OCProvisionResult_t* arr, client->g_doneCB = true; } +static void _unlink_cb(void* ctx, int nOfRes, OCProvisionResult_t* arr, bool has_error) +{ + ma_subowner_s *client = (ma_subowner_s *)ctx; + + if (!has_error) { + MA_LOGD("unlink SUCCEEDED"); + } else { + MA_LOGD( "unlink FAILED "); + _print_result_list((const OCProvisionResult_t*) arr, nOfRes); + } + client->g_doneCB = true; +} + +static gpointer _unlink_provisioning_func(gpointer data) +{ + OCStackResult ret = OC_STACK_OK; + ma_req_cb_s *con = (ma_req_cb_s *)data; + + OicUuid_t *uuid = NULL; + OCProvisionDev_t *dev1 = NULL; + OCProvisionDev_t *dev2 = NULL; + + if (!con->uuid_dev1 ) { + MA_LOGE("dev1 is NULL"); + goto PVPWS_ERROR; + } + if (!con->uuid_dev2) { + MA_LOGE("dev2 is NULL"); + goto PVPWS_ERROR; + } + + uuid = _convert_uuid(con->uuid_dev1); + dev1 = _get_dev_by_uuid(g_client->g_mowned_list, uuid); + if (!dev1) { + MA_LOGE("We can't find in MOWNED dev list"); + goto PVPWS_ERROR; + } + g_free(uuid); + + uuid = _convert_uuid(con->uuid_dev2); + dev2 = _get_dev_by_uuid(g_client->g_mowned_list, uuid); + if (!dev2) { + MA_LOGE("We can't find in MOWNED dev list"); + goto PVPWS_ERROR; + } + g_free(uuid); + + /* To do ACL provisioning only one */ + dev1->next = NULL; + + /* To do ACL provisioning only one */ + dev2->next = NULL; + + g_client->g_doneCB = false; + + MA_LOGI("Provisioning Selected Pairwise Devices.."); + ret = OCUnlinkDevices((void*) g_client,dev1,dev2,_unlink_cb ); + + if (OC_STACK_OK != ret) { + MA_LOGD( "OCUnlinkDevices API error: %d (%s)", ret, _error_to_string(ret)); + goto PVPWS_ERROR; + } + + ret = _wait_cb_ret(CALLBACK_TIMEOUT_5S); + if (ret) { + MA_LOGE( "OCUnlinkDevices Faild = %d", errno); + goto PVPWS_ERROR; + } + + /* display the pairwise-provisioned result */ + MA_LOGI("Unlink Devices"); + + return 0; + +PVPWS_ERROR: + /* Notify ACL result */ + net_ma_emit_unpair_done(ma_dbus_get_object(), (int)ret); + + if (uuid) + g_free(uuid); + _request_cleanup(con); + + g_thread_exit(GINT_TO_POINTER (1)); + + return NULL; +} + static gpointer _cred_provisioning_func(gpointer data) { OCStackResult ret = OC_STACK_OK; @@ -1846,6 +1850,45 @@ static int _provisioning_cred(ma_service *service, return MA_ERROR_NONE; } +static int _provisioning_unlink(ma_service *service, + gchar *uuid_dev1, gchar *uuid_dev2) +{ + ma_req_cb_s *con = NULL; + con = g_malloc0(sizeof(ma_req_cb_s)); + if (!con) { + MA_LOGE( "g_malloc0() Fail=%d", errno); + /* Unset d2ds status 'pending' */ + g_atomic_int_set(&service->pending, 0); + return MA_ERROR_OUT_OF_MEMORY; + } + + con->userdata = service; + con->cid = MA_UNPAIR; + + if (!uuid_dev1 ||!uuid_dev2) { + MA_LOGE( "Invaild Prameters"); + _request_cleanup(con); + return MA_ERROR_INVALID_PARAMETER; + } + + con->uuid_dev1 = g_strdup(uuid_dev1); + con->uuid_dev2 = g_strdup(uuid_dev2); + + con->thread = g_thread_try_new("prov_unlink", _unlink_provisioning_func, + con, NULL); + if (!con->thread) { + MA_LOGE("Failed to create thread"); + _request_cleanup(con); + return MA_ERROR_OUT_OF_MEMORY; + } + g_thread_unref(con->thread); +#ifdef TIMEOUT_USED + con->tid = g_timeout_add_seconds(CALLBACK_TIMEOUT_5S + 1, _ma_timeout_cb, + con); +#endif + return MA_ERROR_NONE; +} + int ma_request_enable(ma_service *service) { int ret = MA_ERROR_NONE; @@ -2095,30 +2138,29 @@ int ma_request_pairwise(ma_service *service, gchar *target_1, } -int ma_request_unpair(ma_service *service, gchar *uuid_dev) +int ma_request_unpair(ma_service *service, gchar *uuid_dev1, + gchar *uuid_dev2) { int ret = MA_ERROR_NONE; ma_check_null_ret_error("service", service, FALSE); - MA_LOGD("[IPC] Unpair device"); + MA_LOGD("[IPC] Unlink devices"); /* If we are working now? */ if (g_atomic_int_get(&service->pending)) return MA_ERROR_IN_PROGRESS; - if (!uuid_dev) { - MA_LOGE("uuid_dev = %s", uuid_dev); - + if (!uuid_dev1 || !uuid_dev2) { + MA_LOGE("uuid_dev1 = %s", uuid_dev1); + MA_LOGE("uuid_dev2 = %s", uuid_dev2); return MA_ERROR_INVALID_PARAMETER; } /* Set d2ds status 'pending' */ g_atomic_int_set(&service->pending, 1); - ret = _provisioning_unpair(service, uuid_dev); + ret = _provisioning_unlink(service, uuid_dev1, uuid_dev2); return ret; - } - diff --git a/src/mot-agent/ma-subowner.h b/src/mot-agent/ma-subowner.h index 9fb77f7..0d60c7f 100644 --- a/src/mot-agent/ma-subowner.h +++ b/src/mot-agent/ma-subowner.h @@ -54,13 +54,17 @@ int ma_request_mot(ma_service *service, gchar* uuid, gchar *pin); int ma_request_remove_mo(ma_service *service, gchar* uuid_str); int ma_request_prov_acl(ma_service *service, gchar *target, gchar *subject, gchar *rsrc_uri, gchar *rsrc_type, gchar *rsrc_interface, int permission); -int ma_request_prov_cred(ma_service *service, gchar *uuid_dev1, gchar *uuid_dev2); -int ma_request_unpair(ma_service *service, gchar *uuid_dev); +int ma_request_prov_cred(ma_service *service, gchar *uuid_dev1, + gchar *uuid_dev2); +int ma_request_unpair(ma_service *service, gchar *uuid_dev1, gchar *uuid_dev2); int ma_request_get_ownerid(ma_service *service, gchar **uuid_str); int ma_request_disable(ma_service *service); int ma_request_pairwise(ma_service *service, gchar *target_1, gchar *subject_1, - gchar *rsrc_uri_1, gchar *rsrc_type_1, gchar *rsrc_interface_1, int permission_1, - gchar *target_2, gchar *subject_2,gchar *rsrc_uri_2, gchar *rsrc_type_2, gchar *rsrc_interface_2, int permission_2); + gchar *rsrc_uri_1, gchar *rsrc_type_1, + gchar *rsrc_interface_1, int permission_1, + gchar *target_2, gchar *subject_2,gchar *rsrc_uri_2, + gchar *rsrc_type_2, gchar *rsrc_interface_2, + int permission_2); #ifdef __cplusplus }