char *rt1, char *interface1, int permission1, char* target2, char *subject2, char *uri2,
char *rt2, char *interface2, int permission2);
int agent_remove_mo_at_device(char* uuid_str);
+int agent_remove_cred_at_local(char* uuid_str);
int agent_remove_myowned_device(char* uuid_str);
#endif /* __COMP_MOT_AGENT_H__ */
\ No newline at end of file
return result;
}
+int agent_remove_cred_at_local(char* uuid_str)
+{
+ GVariant *variant = NULL;
+ int result = COMP_ERROR_NONE;
+ GError *error = NULL;
+
+ if (NULL == agent.dbus_connection || NULL == agent.gproxy_agent_service) {
+ LOG_ERR("I/O error");
+ return COMP_ERROR_IO_ERROR;
+ }
+
+ variant = g_dbus_proxy_call_sync(agent.gproxy_agent_service, "remove_cred_local",
+ g_variant_new("(s)", uuid_str), G_DBUS_CALL_FLAGS_NONE, -1, NULL, &error);
+ if (variant) {
+ g_variant_get(variant, "(i)", &result);
+ LOGD("remove_cred_cocal status 0x%x", result);
+ } else if (error) {
+ LOGE("Failed DBus call [%s]", error->message);
+ g_error_free(error);
+ return COMP_ERROR_IO_ERROR;
+ }
+
+ return result;
+}
+
+
int agent_remove_myowned_device(char* uuid_str)
{
GVariant *variant = NULL;
} else if (0 == g_strcmp0(signal_name, "remove_mo_done")) {
g_variant_get(parameters, "(i)", &result);
LOG_DEBUG("Result : %d", result);
+ } else if (0 == g_strcmp0(signal_name, "remove_cred_local_done")) {
+ g_variant_get(parameters, "(i)", &result);
+ LOG_DEBUG("Result : %d", result);
comp_group_notify_group_dismiss(result);
} else if (0 == g_strcmp0(signal_name, "pairwise_done")) {
h->dbus_sub_ids = g_list_append(h->dbus_sub_ids, GUINT_TO_POINTER(id));
LOG_DEBUG("subscribed for (remove_mo_done) signal %d", id);
+ /* remove_cred_local_done */
+ id = g_dbus_connection_signal_subscribe(h->dbus_connection, NULL, AGENT_SERVER_NAME,
+ "remove_cred_local_done", AGENT_OBJECT_PATH, NULL,
+ G_DBUS_CALL_FLAGS_NONE, _agent_signal_handler, h, NULL);
+ if (0 == id) {
+ LOG_ERR("g_dbus_connection_signal_subscribe(remove_cred_local_done) Fail(%d)", errno);
+ return -1;
+ }
+ h->dbus_sub_ids = g_list_append(h->dbus_sub_ids, GUINT_TO_POINTER(id));
+ LOG_DEBUG("subscribed for (remove_cred_local_done) signal %d", id);
+
/* acl_done */
id = g_dbus_connection_signal_subscribe(h->dbus_connection, NULL, AGENT_SERVER_NAME,
"acl_done", AGENT_OBJECT_PATH, NULL,
<arg type="s" name="target" direction="in"/>\r
<arg type="i" name="result" direction="out"/>\r
</method>\r
+ <method name="remove_cred_local">\r
+ <arg type="s" name="target" direction="in"/>\r
+ <arg type="i" name="result" direction="out"/>\r
+ </method>\r
<method name="acl">\r
<arg type="s" name="target" direction="in"/>\r
<arg type="s" name="subject" direction="in"/>\r
<signal name="remove_mo_done">\r
<arg type="i" name="result" direction="out"/>\r
</signal>\r
+ <signal name="remove_cred_local_done">\r
+ <arg type="i" name="result" direction="out"/>\r
+ </signal>\r
<signal name="acl_done">\r
<arg type="i" name="result" direction="out"/>\r
</signal>\r
return OC_STACK_OK;
}
-int openDB()
+int ma_open_db()
{
int result = 0;
char path[MAX_FILE_PATH_LEN] = {0,};
return OC_STACK_OK;
}
-int closeDB()
+int ma_close_db()
{
CHECK_PDM_INIT();
int res = 0;
return OC_STACK_OK;
}
-int PDMDeleteDevice(const OicUuid_t *UUID)
+int ma_delete_device(const OicUuid_t *UUID)
{
CHECK_PDM_INIT();
if (NULL == UUID)
return OC_STACK_OK;
}
-int PDMUnlinkDevices(const OicUuid_t *UUID1, const OicUuid_t *UUID2)
+int ma_unlink_devices(const OicUuid_t *UUID1, const OicUuid_t *UUID2)
{
CHECK_PDM_INIT();
if (NULL == UUID1 || NULL == UUID2)
extern "C" {
#endif
-int openDB();
-int closeDB();
-int PDMDeleteDevice(const OicUuid_t *UUID);
-int PDMUnlinkDevices(const OicUuid_t *UUID1, const OicUuid_t *UUID2);
+int ma_open_db();
+int ma_close_db();
+int ma_delete_device(const OicUuid_t *UUID);
+int ma_unlink_devices(const OicUuid_t *UUID1, const OicUuid_t *UUID2);
#ifdef __cplusplus
}
return TRUE;\r
}\r
\r
+static gboolean _ma_dbus_handle_remove_cred_local(NetMa *object,\r
+ GDBusMethodInvocation *invocation, gchar *arg_target, gpointer user_data)\r
+{\r
+ int ret = MA_ERROR_NONE;\r
+ ma_service *service = (ma_service *)user_data;\r
+\r
+ ma_check_null_ret_error("service", service, FALSE);\r
+\r
+\r
+ ret = ma_request_remove_cred_local(service, arg_target);\r
+ if (MA_ERROR_NONE != ret)\r
+ MA_LOGE("Failed to ma_request_remove_mo !");\r
+\r
+ net_ma_complete_remove_cred_local(object, invocation, ret);\r
+\r
+ return TRUE;\r
+}\r
\r
static gboolean _ma_dbus_handle_acl(NetMa *object,\r
GDBusMethodInvocation *invocation, gchar *arg_target, gchar *arg_subject, gchar *arg_uri,\r
G_CALLBACK(_ma_dbus_handle_mot), service);\r
g_signal_connect(ma_dbus_object, "handle-remove-mo",\r
G_CALLBACK(_ma_dbus_handle_remove_mo), service);\r
+ g_signal_connect(ma_dbus_object, "handle-remove-cred-local",\r
+ G_CALLBACK(_ma_dbus_handle_remove_cred_local), service);\r
g_signal_connect(ma_dbus_object, "handle-acl",\r
G_CALLBACK(_ma_dbus_handle_acl), service);\r
g_signal_connect(ma_dbus_object, "handle-cred",\r
case MA_REMOVE_MOT:
net_ma_emit_remove_mo_done(ma_dbus_get_object(), MA_ERROR_OPERATION_FAILED);
break;
+ case MA_REMOVE_CRED_LOCAL:
+ net_ma_emit_remove_cred_local_done(ma_dbus_get_object(), MA_ERROR_OPERATION_FAILED);
+ break;
case MA_UNPAIR:
net_ma_emit_unpair_done(ma_dbus_get_object(), MA_ERROR_OPERATION_FAILED);
break;
static void _mot_cb(void* ctx, int num, OCProvisionResult_t* arr, bool has_error)
{
+#if MANIPULATE_LOCAL_PDM
int i = 0;
int ret = OC_STACK_OK;
+#endif
ma_subowner_s *client = (ma_subowner_s *)ctx;
if (!has_error) {
MA_LOGD( "Multiple Ownership Transfer FAILED ");
_print_result_list((const OCProvisionResult_t*) arr, num);
-
- ret = openDB();
+#if MANIPULATE_LOCAL_PDM
+ ret = ma_open_db();
if (OC_STACK_OK != ret)
MA_LOGE( "openDB: ret = %d (%s)", ret, _error_to_string(ret));
for ( ; num > i; ++i) {
if (OC_STACK_OK !=arr[i].res) {
- ret = PDMDeleteDevice((const OicUuid_t*) &arr[i].deviceId);
+ ret = ma_delete_device((const OicUuid_t*) &arr[i].deviceId);
}
}
- ret = closeDB();
+ ret = ma_close_db();
if (OC_STACK_OK != ret)
MA_LOGE( "closeDB: ret = %d (%s)", ret, _error_to_string(ret));
+#endif
}
client->g_doneCB = true;
}
_print_result_list((const OCProvisionResult_t*) arr, num);
}
client->g_doneCB = true;
- OCTerminatePM();
}
static gpointer _remove_mo_func(gpointer data)
MA_LOGE("GetDoxmDevOwnerId faild = [%d][%s]", ret, _error_to_string(ret));
goto MOT_ENDED;
}
-
- ret = openDB();
+#if MANIPULATE_LOCAL_PDM
+ ret = ma_open_db();
if (OC_STACK_OK != ret)
MA_LOGE( "openDB: ret = %d (%s)", ret, _error_to_string(ret));
- ret = PDMDeleteDevice((const OicUuid_t*) uuid_target);
+ ret = ma_delete_device((const OicUuid_t*) uuid_target);
if (OC_STACK_OK != ret)
MA_LOGE( "delete_mowned_device_db: ret = %d (%s)", ret, _error_to_string(ret));
- ret = closeDB();
+ ret = ma_close_db();
if (OC_STACK_OK != ret)
MA_LOGE( "closeDB: ret = %d (%s)", ret, _error_to_string(ret));
-
+#endif
ret = OCRemoveSubOwner(g_client, src_dev, &uuid_mowner, _remove_mo_cb);
if (OC_STACK_OK != ret ) {
MA_LOGE( "OCRemoveSubOwner: ret = %d (%s)", ret, _error_to_string(ret));
return MA_ERROR_NONE;
}
+static void _remove_remove_cred_local_cb(void* ctx, int num,
+ OCProvisionResult_t* arr, bool has_error)
+{
+ ma_subowner_s *client = (ma_subowner_s *)ctx;
+
+ if (!has_error) {
+ MA_LOGD("Remove CRED for mowned device SUCCEEDED");
+ } else {
+ MA_LOGD( "Remove CRED for mowned device FAILED ");
+ _print_result_list((const OCProvisionResult_t*) arr, num);
+ }
+ client->g_doneCB = true;
+}
+
+static gpointer _remove_cred_local_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(" Removing CRED for remote device at local SVR DB");
+
+ ret = OCRemoveDeviceWithUuid((void*) g_client, CALLBACK_TIMEOUT_5S, uuid,
+ _remove_remove_cred_local_cb );
+ if (OC_STACK_OK != ret) {
+ MA_LOGD( "OCRemoveDeviceWithUuid API error: %d (%s)", ret, _error_to_string(ret));
+ goto PVACL_ERROR;
+ }
+
+ ret = _wait_cb_ret(CALLBACK_TIMEOUT_5S);
+ if (ret) {
+ MA_LOGE( "OCRemoveDeviceWithUuid Faild = %d", errno);
+ goto PVACL_ERROR;
+ }
+ /* Disaply result result */
+ MA_LOGI(" Removing CRED info. at local SVR DB - Done");
+
+PVACL_ERROR:
+ /* Notify ACL result */
+ net_ma_emit_remove_cred_local_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 _ma_remove_cred_local(ma_service *service, gchar *uuid_str)
+{
+ 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_REMOVE_CRED_LOCAL;
+ con->target_to_revoke = g_strdup(uuid_str);
+
+ con->thread = g_thread_try_new("remove_mowned_dev_cred", _remove_cred_local_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;
+}
+
#if 0 /* TEST */
static int sendGetLed()
{
return ret;
}
+int ma_request_remove_cred_local(ma_service *service, gchar* uuid_str)
+{
+ int ret =MA_ERROR_NONE;
+
+ ma_check_null_ret_error("service", service, FALSE);
+
+ MA_LOGD("[IPC] Remove CRED for Owned Dev in my SVR DB");
+
+ /* If we are working now? */
+ if (g_atomic_int_get(&service->pending))
+ return MA_ERROR_IN_PROGRESS;
+
+ if (!uuid_str) {
+ MA_LOGE("uuid_str = %s", uuid_str);
+ return MA_ERROR_INVALID_PARAMETER;
+ }
+
+ /* Set d2ds status 'pending' */
+ g_atomic_int_set(&service->pending, 1);
+
+ ret = _ma_remove_cred_local(service, uuid_str);
+
+ return ret;
+}
+
int ma_request_prov_acl(ma_service *service, gchar *target, gchar *subject,
gchar *rsrc_uri, gchar *rsrc_type, gchar *rsrc_interface, int permission)
{
MA_PROV_ACL, /**< ACL Provisioning */
MA_PROV_CRED, /**< CRED Provisioning */
MA_REMOVE_MOT, /**< Remove Multiple Ownership */
+ MA_REMOVE_CRED_LOCAL, /**< Remove CRED my owned device in MOT agent's SVR DB */
MA_UNPAIR, /**< Unpair */
MA_PROV_PAIRWISE, /** < Pairwise Provisioning */
} ma_cmd_id_e;
int ma_request_disc_owned_devs(ma_service *service);
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_remove_cred_local(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,