summaryrefslogtreecommitdiff
path: root/src/user-awareness-users.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/user-awareness-users.c')
-rw-r--r--src/user-awareness-users.c892
1 files changed, 763 insertions, 129 deletions
diff --git a/src/user-awareness-users.c b/src/user-awareness-users.c
index 2e45115..c6f6669 100644
--- a/src/user-awareness-users.c
+++ b/src/user-awareness-users.c
@@ -32,10 +32,493 @@ static GSList *ua_devices_list;
static GSList *ua_users_db_list;
static GSList *ua_devices_db_list;
-ua_user_h _ua_user_add_to_list(ua_user_info_t *user)
+void _ua_free_ua_device_info_t(ua_dev_info_t *device)
{
FUNC_ENTRY;
+ ret_if(NULL == device);
+
+ if (device->mac)
+ g_free(device->mac);
+
+ if (device->bssid)
+ g_free(device->bssid);
+
+ if (device->ipv4)
+ g_free(device->ipv4);
+
+ if (device->ipv6)
+ g_free(device->ipv6);
+
+ if (device->mobile_id)
+ g_free(device->mobile_id);
+
+ g_free(device);
+
+ FUNC_EXIT;
+}
+
+void _ua_free_ua_user_info_t(ua_user_info_t *user)
+{
+ FUNC_ENTRY;
+
+ ret_if(NULL == user);
+
+ if (user->account)
+ g_free(user->account);
+
+ if (user->name)
+ g_free(user->name);
+
+ g_free(user);
+
+ FUNC_EXIT;
+}
+
+int _ua_add_user_info_to_local_db(ua_user_info_t* user_info)
+{
+ FUNC_ENTRY;
+ UA_VALIDATE_INPUT_PARAMETER(user_info);
+ ua_users_db_list = g_slist_append(ua_users_db_list, user_info);
+
+ return UA_ERROR_NONE;
+ FUNC_EXIT;
+}
+
+int _ua_mark_user_info_state_db(char* account, int state)
+{
+ FUNC_ENTRY;
+ GSList *l;
+ ua_user_info_t *u;
+ UA_VALIDATE_INPUT_PARAMETER(account);
+
+ for (l = ua_users_list; l; l = g_slist_next(l)) {
+ u = (ua_user_info_t *)l->data;
+
+ if (!g_strcmp0(account, u->account)) {
+ UA_INFO("User found [%s]", u->account);
+ u->state = state;
+ break;
+ }
+ }
+
+ return UA_ERROR_NONE;
+ FUNC_EXIT;
+}
+
+bool _ua_check_all_users_absence()
+{
+ FUNC_ENTRY;
+ GSList *l;
+ ua_user_info_t *u;
+
+ for (l = ua_users_list; l; l = g_slist_next(l)) {
+ u = (ua_user_info_t *)l->data;
+
+ if (u->state == UA_PRESENCE_STATE_ACTIVATE) {
+ UA_INFO("User found [%s]", u->account);
+ return false;
+ }
+ }
+
+ return true;
+}
+
+int _ua_remove_user_info_from_local_db(ua_user_info_t* user_info)
+{
+ FUNC_ENTRY;
+ UA_VALIDATE_INPUT_PARAMETER(user_info);
+ ua_users_db_list = g_slist_remove(ua_users_db_list, user_info);
+ _ua_free_ua_user_info_t(user_info);
+
+ return UA_ERROR_NONE;
+ FUNC_EXIT;
+}
+
+int _ua_is_user_exist(char* account, gboolean* is_exist)
+{
+ GSList *l;
+ UA_VALIDATE_INPUT_PARAMETER(account);
+ ua_user_info_t *user_info;
+ *is_exist = false;
+
+ for (l = ua_users_list; l; l = g_slist_next(l)) {
+ user_info = (ua_user_info_t *)l->data;
+
+ if (!g_strcmp0(account, user_info->account)) {
+ UA_INFO("User found [%s]", user_info->account);
+ *is_exist = true;
+ }
+ }
+
+ return UA_ERROR_NONE;
+}
+
+int _ua_is_device_exist(char* mobile_id, char* mac, ua_mac_type_e type, gboolean* is_exist)
+{
+ GSList *l;
+ UA_VALIDATE_INPUT_PARAMETER(is_exist);
+ ua_dev_info_t *dev;
+ *is_exist = false;
+
+ for (l = ua_devices_list; l; l = g_slist_next(l)) {
+ dev = (ua_dev_info_t *)l->data;
+
+ if ((int)type == (int)dev->type) {
+ if (mobile_id && !g_strcmp0(mobile_id, dev->mobile_id)) {
+ UA_INFO("Device found, mobile id[%s]", dev->mobile_id);
+ *is_exist = true;
+ }
+
+ if (mac && !g_strcmp0(mac, dev->mac)) {
+ UA_INFO("Device found, mac address[%s]", dev->mac);
+ *is_exist = true;
+ }
+ }
+ }
+
+ return UA_ERROR_NONE;
+}
+
+int _ua_add_user_info_to_list_from_uapi_data(uam_user_info_t* uam_info)
+{
+ FUNC_ENTRY;
+ ua_user_info_t* user_info;
+ gboolean status = false;
+ UA_VALIDATE_INPUT_PARAMETER(uam_info);
+ int ret;
+
+ ret = _ua_is_user_exist(uam_info->account, &status);
+ if (ret == UA_ERROR_NONE) {
+ if (status)
+ return UA_ERROR_ALREADY_DONE;
+ } else
+ return ret;
+
+ user_info = g_malloc0(sizeof(ua_user_info_t));
+
+ if (!user_info) {
+ UA_ERR("g_malloc0 failed");
+ return UA_ERROR_OUT_OF_MEMORY;
+ }
+
+ user_info->account = strndup(uam_info->account, UAM_USER_ACCOUNT_MAX_STRING_SIZE);
+
+ if (user_info->account == NULL) {
+ UA_ERR("g_malloc0 failed");
+ _ua_free_ua_user_info_t(user_info);
+ return UA_ERROR_OUT_OF_MEMORY;
+ }
+
+ user_info->name = strndup(uam_info->name, UAM_USER_NAME_MAX_STRING_SIZE);
+
+ if (user_info->name == NULL) {
+ UA_ERR("g_malloc0 failed");
+ _ua_free_ua_user_info_t(user_info);
+ return UA_ERROR_OUT_OF_MEMORY;
+ }
+
+ user_info->isadded = true;
+ user_info->user_handle = (ua_user_h)user_info;
+
+ /* Set user state by default INACTIVATE as this field will be use
+ * during absence detection where by default all users and in INACTIVATE state
+ * user will go in ACTIVATE state after presence is detected for thst user.
+ */
+ user_info->state = UA_PRESENCE_STATE_INACTIVATE;
+ ua_users_list = g_slist_append(ua_users_list, user_info);
+
+ return UA_ERROR_NONE;
+ FUNC_EXIT;
+}
+
+int _ua_add_user_info_to_list(ua_user_info_t* ua_info)
+{
+ FUNC_ENTRY;
+ ua_user_info_t* user_info;
+ gboolean status = false;
+ UA_VALIDATE_INPUT_PARAMETER(ua_info);
+ int ret;
+
+ ret = _ua_is_user_exist(ua_info->account, &status);
+ if (ret == UA_ERROR_NONE) {
+ if (status)
+ return UA_ERROR_ALREADY_DONE;
+ } else
+ return ret;
+
+ user_info = g_malloc0(sizeof(ua_user_info_t));
+
+ if (!user_info) {
+ UA_ERR("g_malloc0 failed");
+ return UA_ERROR_OUT_OF_MEMORY;
+ }
+
+ user_info->account = strndup(ua_info->account, UAM_USER_ACCOUNT_MAX_STRING_SIZE);
+
+ if (user_info->account == NULL) {
+ UA_ERR("g_malloc0 failed");
+ _ua_free_ua_user_info_t(user_info);
+ return UA_ERROR_OUT_OF_MEMORY;
+ }
+
+ user_info->name = strndup(ua_info->name, UAM_USER_NAME_MAX_STRING_SIZE);
+
+ if (user_info->name == NULL) {
+ UA_ERR("g_malloc0 failed");
+ _ua_free_ua_user_info_t(user_info);
+ return UA_ERROR_OUT_OF_MEMORY;
+ }
+
+ user_info->isadded = true;
+ user_info->user_handle = (ua_user_h)user_info;
+
+ /* Set user state by default INACTIVATE as this field will be use
+ * during absence detection where by default all users and in INACTIVATE state
+ * user will go in ACTIVATE state after presence is detected for thst user.
+ */
+ user_info->state = UA_PRESENCE_STATE_INACTIVATE;
+ ua_users_list = g_slist_append(ua_users_list, user_info);
+
+ return UA_ERROR_NONE;
+ FUNC_EXIT;
+}
+
+int _ua_remove_user_info_from_list(char* account)
+{
+ FUNC_ENTRY;
+ GSList *l;
+ GSList *m;
+ ua_user_info_t *u;
+ ua_dev_info_t *dev;
+ UA_VALIDATE_INPUT_PARAMETER(account);
+
+
+ for (l = ua_users_list; l; l = g_slist_next(l)) {
+ u = (ua_user_info_t *)l->data;
+
+ if (!g_strcmp0(account, u->account)) {
+ if (u->create_by_app == false) {
+ UA_INFO("User found [%s]", u->account);
+
+ for (m = ua_devices_list; m; m = g_slist_next(l)) {
+ dev = (ua_dev_info_t *)m->data;
+ if (u == dev->user) {
+ dev->user = NULL;
+ break;
+ }
+ }
+
+ ua_users_list = g_slist_remove(ua_users_list, u);
+ _ua_free_ua_user_info_t(u);
+ break;
+ } else {
+ UA_INFO("User created by APP");
+ u->isadded = false;
+ }
+ }
+ }
+
+ return UA_ERROR_NONE;
+ FUNC_EXIT;
+}
+
+int _ua_add_device_info_to_list(uam_device_info_t* uam_info)
+{
+ FUNC_ENTRY;
+ GSList *l;
+ ua_dev_info_t* dev;
+ UA_VALIDATE_INPUT_PARAMETER(uam_info);
+
+ for (l = ua_devices_list; l; l = g_slist_next(l)) {
+ dev = (ua_dev_info_t *)l->data;
+
+ if ((int)uam_info->type == (int)dev->type) {
+ if (!g_strcmp0(uam_info->device_id, dev->mobile_id)) {
+ UA_INFO("Device found, mobile id[%s]", dev->mobile_id);
+ return UA_ERROR_ALREADY_DONE;
+ }
+
+ if (!g_strcmp0(uam_info->mac, dev->mac)) {
+ UA_INFO("Device found, mac address[%s]", dev->mac);
+ return UA_ERROR_ALREADY_DONE;
+ }
+ }
+ }
+
+ dev = g_malloc0(sizeof(ua_dev_info_t));
+ if (!dev) {
+ UA_ERR("g_malloc0 failed");
+ return UA_ERROR_OUT_OF_MEMORY;
+ }
+ dev->user = NULL;
+ dev->bssid = NULL;
+ dev->ipv6 = NULL;
+
+ dev->mac = strndup(uam_info->mac, UA_MAC_ADDRESS_STRING_SIZE);
+ if (dev->mac == NULL) {
+ UA_ERR("g_malloc0 failed");
+ _ua_free_ua_device_info_t(dev);
+ return UA_ERROR_OUT_OF_MEMORY;
+ }
+
+ dev->ipv4 = strndup(uam_info->ipv4_addr, UA_IPV4_ADDRESS_STRING_SIZE);
+ if (dev->ipv4 == NULL) {
+ UA_ERR("g_malloc0 failed");
+ _ua_free_ua_device_info_t(dev);
+ return UA_ERROR_OUT_OF_MEMORY;
+ }
+
+ dev->mobile_id = strndup(uam_info->device_id, UA_MOBILE_ID_STRING_SIZE);
+ if (dev->mobile_id == NULL) {
+ UA_ERR("g_malloc0 failed");
+ _ua_free_ua_device_info_t(dev);
+ return UA_ERROR_OUT_OF_MEMORY;
+ }
+ dev->type = uam_info->type;;
+ dev->pairing_required = FALSE;
+ dev->os = uam_info->operating_system;
+ dev->isadded = true;
+
+ /* Add device to list of devices */
+ dev->handle = (ua_device_h)dev;
+ ua_devices_list = g_slist_append(ua_devices_list, dev);
+
+ return UA_ERROR_NONE;
+ FUNC_EXIT;
+}
+
+int _ua_remove_device_info_from_list(uam_device_info_t* uam_info)
+{
+ FUNC_ENTRY;
+ GSList *l;
+ ua_dev_info_t *u;
+ UA_VALIDATE_INPUT_PARAMETER(uam_info);
+
+
+ for (l = ua_devices_list; l; l = g_slist_next(l)) {
+ u = (ua_dev_info_t *)l->data;
+
+ if ((int)uam_info->type == (int)u->type) {
+ if (!g_strcmp0(uam_info->device_id, u->mobile_id)) {
+ if (u->create_by_app == false) {
+ UA_INFO("Device found, mobile id[%s]", u->mobile_id);
+ ua_devices_list = g_slist_remove(ua_devices_list, u);
+ _ua_free_ua_device_info_t(u);
+ break;
+ } else {
+ UA_INFO("Device created by APP");
+ u->isadded = false;
+ }
+ }
+
+ if (!g_strcmp0(uam_info->mac, u->mac)) {
+ if (u->create_by_app == false) {
+ UA_INFO("Device found, mac address[%s]", u->mac);
+ ua_devices_list = g_slist_remove(ua_devices_list, u);
+ _ua_free_ua_device_info_t(u);
+ break;
+ } else {
+ UA_INFO("Device created by APP");
+ u->isadded = false;
+ }
+ }
+ }
+ }
+ return UA_ERROR_NONE;
+ FUNC_EXIT;
+}
+
+ua_user_h _ua_make_user_handle_from_uapi_data(uam_user_info_t *ptr)
+{
+ ua_user_info_t *user_info;
+ user_info = g_malloc0(sizeof(ua_user_info_t));
+
+ if (!user_info) {
+ UA_ERR("g_malloc0 failed");
+ _ua_free_ua_user_info_t(user_info);
+ return NULL;
+ }
+
+ user_info->account = strndup(ptr->account, UAM_USER_ACCOUNT_MAX_STRING_SIZE);
+
+ if (user_info->account == NULL) {
+ UA_ERR("g_malloc0 failed");
+ _ua_free_ua_user_info_t(user_info);
+ return NULL;
+ }
+
+ user_info->name = strndup(ptr->name, UAM_USER_NAME_MAX_STRING_SIZE);
+
+ if (user_info->name == NULL) {
+ UA_ERR("g_malloc0 failed");
+ _ua_free_ua_user_info_t(user_info);
+ return NULL;
+ }
+
+ user_info->isadded = true;
+ user_info->user_handle = (ua_user_h)user_info;
+ user_info->state = ptr->presence_state;
+ ua_users_db_list = g_slist_append(ua_users_db_list, user_info);
+
+ return (user_info->user_handle);
+}
+
+ua_user_h _ua_make_user_handle_from_local_data(ua_user_info_t *ptr)
+{
+ ua_user_info_t *user_info;
+ user_info = g_malloc0(sizeof(ua_user_info_t));
+
+ if (!user_info) {
+ UA_ERR("g_malloc0 failed");
+ _ua_free_ua_user_info_t(user_info);
+ return NULL;
+ }
+
+ user_info->account = strndup(ptr->account, UAM_USER_ACCOUNT_MAX_STRING_SIZE);
+
+ if (user_info->account == NULL) {
+ UA_ERR("g_malloc0 failed");
+ _ua_free_ua_user_info_t(user_info);
+ return NULL;
+ }
+
+ user_info->name = strndup(ptr->name, UAM_USER_NAME_MAX_STRING_SIZE);
+
+ if (user_info->name == NULL) {
+ UA_ERR("g_malloc0 failed");
+ _ua_free_ua_user_info_t(user_info);
+ return NULL;
+ }
+
+ user_info->isadded = true;
+ user_info->user_handle = (ua_user_h)user_info;
+ user_info->state = ptr->state;
+ ua_users_db_list = g_slist_append(ua_users_db_list, user_info);
+
+ return (user_info->user_handle);
+}
+
+ua_user_h _ua_get_user_handle_by_account(char* account)
+{
+ FUNC_ENTRY;
+ GSList *l;
+ ua_user_info_t *u;
+
+ if (account == NULL) {
+ UA_INFO("Account is NULL");
+ return NULL;
+ }
+
+ for (l = ua_users_list; l; l = g_slist_next(l)) {
+ u = (ua_user_info_t *)l->data;
+
+ if (!g_strcmp0(account, u->account)) {
+ UA_INFO("User found [%s]", u->account);
+ return (u->user_handle);
+ }
+ }
+
FUNC_EXIT;
return NULL;
}
@@ -46,9 +529,18 @@ int ua_create_user(const char* account, ua_user_h *user_handle)
int ret;
ua_user_info_t *user = NULL;
uam_user_info_t uam_user;
+ gboolean status = false;
UA_VALIDATE_INPUT_PARAMETER(user_handle);
UA_VALIDATE_INPUT_PARAMETER(account);
+ UA_INITIALIZE();
+
+ ret = _ua_is_user_exist((char *)account, &status);
+ if (ret == UA_ERROR_NONE) {
+ if (status)
+ return UA_ERROR_ALREADY_DONE;
+ } else
+ return ret;
user = g_malloc0(sizeof(ua_user_info_t));
if (!user) {
@@ -66,7 +558,10 @@ int ua_create_user(const char* account, ua_user_h *user_handle)
g_strlcpy(user->account, account, UAM_USER_ACCOUNT_MAX_STRING_SIZE);
- UA_INITIALIZE();
+ /* TODO : We can remove this call(_uam_request_get_user_by_account) as all users
+ * list are updated in foreach during init and during add_user and remove_user
+ * events from us daemon
+ */
ret = _ua_get_error_code(_uam_request_get_user_by_account(user->account, &uam_user));
@@ -84,6 +579,7 @@ int ua_create_user(const char* account, ua_user_h *user_handle)
/* Add monitor to list of monitors */
*user_handle = (ua_user_h)user;
user->user_handle = (ua_user_h)user;
+ user->create_by_app = true;
ua_users_list = g_slist_append(ua_users_list, user);
FUNC_EXIT;
@@ -99,11 +595,10 @@ int ua_add_user(ua_user_h user_handle)
UA_VALIDATE_INPUT_PARAMETER(user_handle);
UA_VALIDATE_HANDLE(user_handle, ua_users_list);
+ UA_INITIALIZE();
retv_if(NULL == user->account, UA_ERROR_INVALID_PARAMETER);
- UA_INITIALIZE();
-
memset(&uam_user, 0, sizeof(uam_user_info_t));
g_strlcpy(uam_user.account, user->account, UAM_USER_ACCOUNT_MAX_STRING_SIZE);
@@ -118,7 +613,6 @@ int ua_add_user(ua_user_h user_handle)
}
user->isadded = true;
-
FUNC_EXIT;
return UA_ERROR_NONE;
}
@@ -158,9 +652,20 @@ int ua_get_default_user(ua_user_h* user_handle)
int ret;
uam_user_info_t uam_user;
ua_user_info_t *user = NULL;
+ GSList *l;
UA_VALIDATE_INPUT_PARAMETER(user_handle);
+ for (l = ua_users_list; l; l = g_slist_next(l)) {
+ user = (ua_user_info_t *)l->data;
+
+ if (user->default_user == true) {
+ UA_INFO("User found [%s]", user->account);
+ *user_handle = (ua_user_h)user;
+ return UA_ERROR_NONE;
+ }
+ }
+
UA_INITIALIZE();
ret = _ua_get_error_code(_uam_get_default_user(&uam_user));
@@ -186,6 +691,9 @@ int ua_get_default_user(ua_user_h* user_handle)
user->user_handle = (ua_user_h)user;
*user_handle = (ua_user_h)user;
+ user->default_user = true;
+ user->isadded = true;
+ ua_users_list = g_slist_append(ua_users_list, user);
FUNC_EXIT;
return UA_ERROR_NONE;
}
@@ -200,6 +708,7 @@ int ua_user_get_account(
UA_VALIDATE_INPUT_PARAMETER(user_handle);
UA_VALIDATE_HANDLE(user_handle, ua_users_list);
UA_VALIDATE_INPUT_PARAMETER(account);
+ UA_INITIALIZE();
*account = strndup(user->account, UAM_USER_ACCOUNT_MAX_STRING_SIZE);
@@ -222,6 +731,7 @@ int ua_user_get_name(
UA_VALIDATE_INPUT_PARAMETER(user_handle);
UA_VALIDATE_HANDLE(user_handle, ua_users_list);
UA_VALIDATE_INPUT_PARAMETER(name);
+ UA_INITIALIZE();
retv_if(NULL == user->name, UA_ERROR_INVALID_PARAMETER);
@@ -246,6 +756,7 @@ int ua_user_set_name(
UA_VALIDATE_INPUT_PARAMETER(handle);
UA_VALIDATE_INPUT_PARAMETER(name);
UA_VALIDATE_HANDLE(handle, ua_users_list);
+ UA_INITIALIZE();
retv_if(user->isadded, UA_ERROR_INVALID_PARAMETER);
retv_if((strlen(name) > UAM_USER_NAME_MAX_STRING_SIZE), UA_ERROR_INVALID_PARAMETER);
@@ -263,61 +774,29 @@ int ua_user_set_name(
return UA_ERROR_NONE;
}
-static void __ua_free_ua_device_info_t(ua_dev_info_t *device)
-{
- FUNC_ENTRY;
-
- ret_if(NULL == device);
-
- if (device->mac)
- g_free(device->mac);
-
- if (device->bssid)
- g_free(device->bssid);
-
- if (device->ipv4)
- g_free(device->ipv4);
-
- if (device->ipv6)
- g_free(device->ipv6);
-
- if (device->mobile_id)
- g_free(device->mobile_id);
-
- g_free(device);
-
- FUNC_EXIT;
-}
-
-static void __ua_free_ua_user_info_t(ua_user_info_t *user)
-{
- FUNC_ENTRY;
-
- ret_if(NULL == user);
-
- if (user->account)
- g_free(user->account);
-
- if (user->name)
- g_free(user->name);
-
- g_free(user);
-
- FUNC_EXIT;
-}
-
int ua_destroy_user(ua_user_h user_handle)
{
FUNC_ENTRY;
ua_user_info_t *user = (ua_user_info_t *)user_handle;
+ ua_dev_info_t* dev;
+ GSList *l;
UA_VALIDATE_INPUT_PARAMETER(user_handle);
UA_VALIDATE_HANDLE(user_handle, ua_users_list);
+ UA_INITIALIZE();
+
+ for (l = ua_devices_list; l; l = g_slist_next(l)) {
+ dev = (ua_dev_info_t *)l->data;
+
+ if (dev->user == user_handle) {
+ UA_INFO("User found in device handle");
+ dev->user = NULL;
+ }
+ }
ua_users_list = g_slist_remove(ua_users_list, user);
- __ua_free_ua_user_info_t(user);
+ _ua_free_ua_user_info_t(user);
- //TODO mark NULL as user handle in device handle
FUNC_EXIT;
return UA_ERROR_NONE;
}
@@ -329,6 +808,7 @@ int ua_create_device(ua_mac_type_e mac_type, ua_device_h *device_handle)
retv_if(mac_type, UA_MAC_TYPE_INVALID);
UA_VALIDATE_INPUT_PARAMETER(device_handle);
+ UA_INITIALIZE();
device = g_malloc0(sizeof(ua_dev_info_t));
if (!device) {
@@ -351,6 +831,7 @@ int ua_create_device(ua_mac_type_e mac_type, ua_device_h *device_handle)
/* Add device to list of devices */
*device_handle = (ua_device_h)device;
device->handle = *device_handle;
+ device->create_by_app = true;
ua_devices_list = g_slist_append(ua_devices_list, device);
FUNC_EXIT;
@@ -364,9 +845,10 @@ int ua_destroy_device(ua_device_h device_handle)
UA_VALIDATE_INPUT_PARAMETER(device_handle);
UA_VALIDATE_HANDLE(device_handle, ua_devices_list);
+ UA_INITIALIZE();
ua_devices_list = g_slist_remove(ua_devices_list, device);
- __ua_free_ua_device_info_t(device);
+ _ua_free_ua_device_info_t(device);
FUNC_EXIT;
return UA_ERROR_NONE;
@@ -377,13 +859,28 @@ int ua_device_set_mac_address(
const char* mac_address)
{
FUNC_ENTRY;
+ int ret;
+ gboolean status = false;
ua_dev_info_t *device = (ua_dev_info_t *)handle;
UA_VALIDATE_INPUT_PARAMETER(handle);
UA_VALIDATE_INPUT_PARAMETER(mac_address);
UA_VALIDATE_HANDLE(handle, ua_devices_list);
+ UA_INITIALIZE();
retv_if(device->isadded, UA_ERROR_INVALID_PARAMETER);
+
+ /* This code will check if app try to add mac address which is already set for same
+ * or for some other device handle, Then it does not allow to set and restrict to make
+ * suplicate entry as mac address is suppose to same for one device.
+ */
+ ret = _ua_is_device_exist(NULL, (char*)mac_address, device->type, &status);
+ if (ret == UA_ERROR_NONE) {
+ if (status)
+ return UA_ERROR_ALREADY_DONE;
+ } else
+ return ret;
+
retv_if((strlen(mac_address) != (UA_MAC_ADDRESS_STRING_SIZE -1)), UA_ERROR_INVALID_PARAMETER);
device->mac = g_malloc0(UA_MAC_ADDRESS_STRING_SIZE);
@@ -408,6 +905,7 @@ int ua_device_set_os_info(
UA_VALIDATE_INPUT_PARAMETER(handle);
UA_VALIDATE_HANDLE(handle, ua_devices_list);
+ UA_INITIALIZE();
retv_if(device->isadded, UA_ERROR_INVALID_PARAMETER);
@@ -428,12 +926,26 @@ int ua_device_set_wifi_mobile_id(
{
FUNC_ENTRY;
ua_dev_info_t *device = (ua_dev_info_t *)handle;
+ int ret;
+ gboolean status = false;
UA_VALIDATE_INPUT_PARAMETER(handle);
UA_VALIDATE_INPUT_PARAMETER(mobile_id);
UA_VALIDATE_HANDLE(handle, ua_devices_list);
+ UA_INITIALIZE();
retv_if(device->isadded, UA_ERROR_INVALID_PARAMETER);
+ /* This code will check if app try to add mobile id which is already set for same
+ * or for some other device handle, Then it does not allow to set and restrict to make
+ * suplicate entry as mobile id is suppose to same for one device.
+ */
+ ret = _ua_is_device_exist((char*)mobile_id, NULL, device->type, &status);
+ if (ret == UA_ERROR_NONE) {
+ if (status)
+ return UA_ERROR_ALREADY_DONE;
+ } else
+ return ret;
+
retv_if((strlen(mobile_id) != (UA_MOBILE_ID_STRING_SIZE -1)), UA_ERROR_INVALID_PARAMETER);
device->mobile_id = g_malloc0(UA_MOBILE_ID_STRING_SIZE);
@@ -459,6 +971,7 @@ int ua_device_set_wifi_bssid(
UA_VALIDATE_INPUT_PARAMETER(handle);
UA_VALIDATE_INPUT_PARAMETER(bssid);
UA_VALIDATE_HANDLE(handle, ua_devices_list);
+ UA_INITIALIZE();
retv_if(device->isadded, UA_ERROR_INVALID_PARAMETER);
retv_if((strlen(bssid) != (UA_MAC_ADDRESS_STRING_SIZE -1)), UA_ERROR_INVALID_PARAMETER);
@@ -486,6 +999,7 @@ int ua_device_set_wifi_ipv4_address(
UA_VALIDATE_INPUT_PARAMETER(handle);
UA_VALIDATE_INPUT_PARAMETER(ipv4_address);
UA_VALIDATE_HANDLE(handle, ua_devices_list);
+ UA_INITIALIZE();
retv_if(device->isadded, UA_ERROR_INVALID_PARAMETER);
retv_if((strlen(ipv4_address) != (UA_IPV4_ADDRESS_STRING_SIZE -1)), UA_ERROR_INVALID_PARAMETER);
@@ -503,16 +1017,6 @@ int ua_device_set_wifi_ipv4_address(
return UA_ERROR_NONE;
}
-int ua_user_get_dev_info(
- ua_user_h handle,
- ua_dev_info_t *dev_info)
-{
- FUNC_ENTRY;
-
- FUNC_EXIT;
- return UA_ERROR_NONE;
-}
-
int ua_device_get_mac_address(
ua_device_h device_handle,
char** mac_address)
@@ -523,6 +1027,7 @@ int ua_device_get_mac_address(
UA_VALIDATE_INPUT_PARAMETER(device_handle);
UA_VALIDATE_HANDLE(device_handle, ua_devices_list);
UA_VALIDATE_INPUT_PARAMETER(mac_address);
+ UA_INITIALIZE();
if (!device->mac) {
*mac_address = NULL;
@@ -541,6 +1046,24 @@ done:
return UA_ERROR_NONE;
}
+int ua_device_get_os_info(
+ ua_device_h device_handle,
+ ua_os_type_e* os_info
+ )
+{
+ FUNC_ENTRY;
+ ua_dev_info_t *device = (ua_dev_info_t *)device_handle;
+
+ UA_VALIDATE_INPUT_PARAMETER(device_handle);
+ UA_VALIDATE_HANDLE(device_handle, ua_devices_list);
+ UA_VALIDATE_INPUT_PARAMETER(os_info);
+ UA_INITIALIZE();
+
+ *os_info = device->os;
+ FUNC_EXIT;
+ return UA_ERROR_NONE;
+}
+
int ua_device_get_wifi_mobile_id(
ua_device_h device_handle,
char** mobile_id)
@@ -551,6 +1074,7 @@ int ua_device_get_wifi_mobile_id(
UA_VALIDATE_INPUT_PARAMETER(device_handle);
UA_VALIDATE_HANDLE(device_handle, ua_devices_list);
UA_VALIDATE_INPUT_PARAMETER(mobile_id);
+ UA_INITIALIZE();
if (!device->mobile_id) {
*mobile_id = NULL;
@@ -579,6 +1103,7 @@ int ua_device_get_wifi_bssid(
UA_VALIDATE_INPUT_PARAMETER(device_handle);
UA_VALIDATE_HANDLE(device_handle, ua_devices_list);
UA_VALIDATE_INPUT_PARAMETER(bssid);
+ UA_INITIALIZE();
if (!device->bssid) {
*bssid = NULL;
@@ -607,6 +1132,7 @@ int ua_device_get_wifi_ipv4_address(
UA_VALIDATE_INPUT_PARAMETER(device_handle);
UA_VALIDATE_HANDLE(device_handle, ua_devices_list);
UA_VALIDATE_INPUT_PARAMETER(ipv4_address);
+ UA_INITIALIZE();
if (!device->ipv4) {
*ipv4_address = NULL;
@@ -672,7 +1198,7 @@ int ua_device_get_handle_by_mac_address(
if (dev->mac == NULL) {
UA_ERR("g_malloc0 failed");
*device_handle = NULL;
- __ua_free_ua_device_info_t(dev);
+ _ua_free_ua_device_info_t(dev);
return UA_ERROR_OUT_OF_MEMORY;
}
@@ -681,7 +1207,7 @@ int ua_device_get_handle_by_mac_address(
if (dev->ipv4 == NULL) {
UA_ERR("g_malloc0 failed");
*device_handle = NULL;
- __ua_free_ua_device_info_t(dev);
+ _ua_free_ua_device_info_t(dev);
return UA_ERROR_OUT_OF_MEMORY;
}
@@ -690,7 +1216,7 @@ int ua_device_get_handle_by_mac_address(
if (dev->mobile_id == NULL) {
UA_ERR("g_malloc0 failed");
*device_handle = NULL;
- __ua_free_ua_device_info_t(dev);
+ _ua_free_ua_device_info_t(dev);
return UA_ERROR_OUT_OF_MEMORY;
}
dev->type = uam_dev.type;;
@@ -727,7 +1253,7 @@ int ua_device_get_handle_by_mobile_id(
for (l = ua_devices_list; l; l = g_slist_next(l)) {
dev = (ua_dev_info_t *)l->data;
- if (!g_strcmp0(mobile_id, dev->mobile_id)) {
+ if ((mac_type == dev->type) && !g_strcmp0(mobile_id, dev->mobile_id)) {
UA_INFO("Mobile ID found [%s]", dev->mobile_id);
*device_handle = (ua_device_h)dev;
goto done;
@@ -760,7 +1286,7 @@ int ua_device_get_handle_by_mobile_id(
if (dev->mac == NULL) {
UA_ERR("g_malloc0 failed");
*device_handle = NULL;
- __ua_free_ua_device_info_t(dev);
+ _ua_free_ua_device_info_t(dev);
return UA_ERROR_OUT_OF_MEMORY;
}
@@ -769,7 +1295,7 @@ int ua_device_get_handle_by_mobile_id(
if (dev->ipv4 == NULL) {
UA_ERR("g_malloc0 failed");
*device_handle = NULL;
- __ua_free_ua_device_info_t(dev);
+ _ua_free_ua_device_info_t(dev);
return UA_ERROR_OUT_OF_MEMORY;
}
@@ -778,7 +1304,7 @@ int ua_device_get_handle_by_mobile_id(
if (dev->mobile_id == NULL) {
UA_ERR("g_malloc0 failed");
*device_handle = NULL;
- __ua_free_ua_device_info_t(dev);
+ _ua_free_ua_device_info_t(dev);
return UA_ERROR_OUT_OF_MEMORY;
}
dev->type = uam_dev.type;;
@@ -801,11 +1327,32 @@ int ua_foreach_registered_users(
void *user_data)
{
FUNC_ENTRY;
+ GSList *l;
+ ua_user_info_t *u;
+
+ UA_VALIDATE_INPUT_PARAMETER(foreach_cb);
+ UA_INITIALIZE();
+
+ for (l = ua_users_list; l; l = g_slist_next(l)) {
+ u = (ua_user_info_t *)l->data;
+
+ if (!foreach_cb(u->user_handle, user_data))
+ break;
+ }
+
+ FUNC_EXIT;
+ return UA_ERROR_NONE;
+}
+
+int _ua_foreach_registered_users(
+ ua_registered_user_cb foreach_cb,
+ void *user_data)
+{
+ FUNC_ENTRY;
int i;
int ret;
GPtrArray *user_list = NULL;
uam_user_info_t *ptr;
- GSList *l;
UA_VALIDATE_INPUT_PARAMETER(foreach_cb);
UA_INITIALIZE();
@@ -830,7 +1377,7 @@ int ua_foreach_registered_users(
if (!user_info) {
UA_ERR("g_malloc0 failed");
ret = UA_ERROR_OUT_OF_MEMORY;
- __ua_free_ua_user_info_t(user_info);
+ _ua_free_ua_user_info_t(user_info);
goto done;
}
@@ -839,7 +1386,7 @@ int ua_foreach_registered_users(
if (user_info->account == NULL) {
UA_ERR("g_malloc0 failed");
ret = UA_ERROR_OUT_OF_MEMORY;
- __ua_free_ua_user_info_t(user_info);
+ _ua_free_ua_user_info_t(user_info);
goto done;
}
@@ -848,14 +1395,18 @@ int ua_foreach_registered_users(
if (user_info->name == NULL) {
UA_ERR("g_malloc0 failed");
ret = UA_ERROR_OUT_OF_MEMORY;
- __ua_free_ua_user_info_t(user_info);
+ _ua_free_ua_user_info_t(user_info);
goto done;
}
user_info->isadded = true;
user_info->user_handle = (ua_user_h)user_info;
user_info->state = ptr->presence_state;
- ua_users_db_list = g_slist_append(ua_users_db_list, user_info);
+ if (!foreach_cb(user_info->user_handle, user_data)) {
+ _ua_free_ua_user_info_t(user_info);
+ break;
+ } else
+ _ua_free_ua_user_info_t(user_info);
} else {
UA_ERR("OPERATION_FAILED(0x%08x)",
UA_ERROR_OPERATION_FAILED);
@@ -864,27 +1415,7 @@ int ua_foreach_registered_users(
}
}
- for (l = ua_users_db_list; l; l = g_slist_next(l)) {
- ua_user_info_t *u = l->data;
-
- if (NULL == u)
- continue;
-
- if (!foreach_cb(u->user_handle, user_data))
- break;
- }
-
done:
- for (l = ua_users_db_list; l; l = g_slist_next(l)) {
- ua_user_info_t *u = l->data;
-
- if (NULL == u)
- continue;
-
- ua_users_list = g_slist_remove(ua_users_db_list, u);
- __ua_free_ua_user_info_t(u);
- }
-
g_ptr_array_foreach(user_list, (GFunc)g_free, NULL);
g_ptr_array_free(user_list, TRUE);
@@ -902,6 +1433,8 @@ int ua_user_clone(ua_user_h *cloned,
UA_VALIDATE_INPUT_PARAMETER(cloned);
UA_VALIDATE_INPUT_PARAMETER(origin);
UA_VALIDATE_HANDLE(origin, ua_users_db_list);
+ UA_EXIST_HANDLE(origin, ua_users_list);
+ UA_INITIALIZE();
user = g_malloc0(sizeof(ua_user_info_t));
@@ -915,7 +1448,7 @@ int ua_user_clone(ua_user_h *cloned,
if (user->account == NULL) {
UA_ERR("g_malloc0 failed");
- __ua_free_ua_user_info_t(user);
+ _ua_free_ua_user_info_t(user);
return UA_ERROR_OUT_OF_MEMORY;
}
@@ -923,7 +1456,7 @@ int ua_user_clone(ua_user_h *cloned,
if (user->name == NULL) {
UA_ERR("g_malloc0 failed");
- __ua_free_ua_user_info_t(user);
+ _ua_free_ua_user_info_t(user);
return UA_ERROR_OUT_OF_MEMORY;
}
@@ -932,6 +1465,7 @@ int ua_user_clone(ua_user_h *cloned,
/* Add user to list of users */
*cloned = (ua_user_h)user;
user->user_handle = (ua_user_h)user;
+ user->create_by_app = true;
ua_users_list = g_slist_append(ua_users_list, user);
FUNC_EXIT;
@@ -943,6 +1477,7 @@ int ua_device_clone(ua_device_h *cloned,
{
FUNC_ENTRY;
int ret;
+ gboolean status = false;
ua_dev_info_t *device = NULL;
uam_user_info_t uam_user;
ua_dev_info_t *org_device = (ua_dev_info_t *)origin;
@@ -950,6 +1485,16 @@ int ua_device_clone(ua_device_h *cloned,
UA_VALIDATE_INPUT_PARAMETER(cloned);
UA_VALIDATE_INPUT_PARAMETER(origin);
UA_VALIDATE_HANDLE(origin, ua_devices_db_list);
+ UA_EXIST_HANDLE(origin, ua_devices_list);
+
+ ret = _ua_is_device_exist(org_device->mobile_id, org_device->mac, org_device->type, &status);
+ if (ret == UA_ERROR_NONE) {
+ if (status)
+ return UA_ERROR_ALREADY_DONE;
+ } else
+ return ret;
+
+ UA_INITIALIZE();
device = g_malloc0(sizeof(ua_dev_info_t));
if (!device) {
@@ -960,21 +1505,21 @@ int ua_device_clone(ua_device_h *cloned,
device->mac = strndup(org_device->mac, UA_MAC_ADDRESS_STRING_SIZE);
if (device->mac == NULL) {
UA_ERR("g_malloc0 failed");
- __ua_free_ua_device_info_t(device);
+ _ua_free_ua_device_info_t(device);
return UA_ERROR_OUT_OF_MEMORY;
}
device->ipv4 = strndup(org_device->ipv4, UA_IPV4_ADDRESS_STRING_SIZE);
if (device->ipv4 == NULL) {
UA_ERR("g_malloc0 failed");
- __ua_free_ua_device_info_t(device);
+ _ua_free_ua_device_info_t(device);
return UA_ERROR_OUT_OF_MEMORY;
}
device->mobile_id = strndup(org_device->mobile_id, UA_MOBILE_ID_STRING_SIZE);
if (device->mobile_id == NULL) {
UA_ERR("g_malloc0 failed");
- __ua_free_ua_device_info_t(device);
+ _ua_free_ua_device_info_t(device);
return UA_ERROR_OUT_OF_MEMORY;
}
@@ -984,32 +1529,33 @@ int ua_device_clone(ua_device_h *cloned,
if (!device->user) {
UA_INITIALIZE();
+ /* Currently user info will be create and store at this point */
ret = _ua_get_error_code(_uam_request_get_user_by_deviceid(device->mobile_id, &uam_user));
if (UA_ERROR_NONE != ret) {
UA_ERR("Failed with error: %s(0x%X)",
_ua_get_error_string(ret), ret);
- __ua_free_ua_device_info_t(device);
+ _ua_free_ua_device_info_t(device);
return ret;
} else {
ua_user_info_t* user = g_malloc0(sizeof(ua_user_info_t));
if (!user) {
UA_ERR("g_malloc0 failed");
- __ua_free_ua_device_info_t(device);
+ _ua_free_ua_device_info_t(device);
return UA_ERROR_OUT_OF_MEMORY;
} else {
user->account = strndup(uam_user.account, UAM_USER_ACCOUNT_MAX_STRING_SIZE);
if (user->account == NULL) {
UA_ERR("g_malloc0 failed");
- __ua_free_ua_device_info_t(device);
- __ua_free_ua_user_info_t(user);
+ _ua_free_ua_device_info_t(device);
+ _ua_free_ua_user_info_t(user);
return UA_ERROR_OUT_OF_MEMORY;
}
user->name = strndup(uam_user.name, UAM_USER_NAME_MAX_STRING_SIZE);
if (user->name == NULL) {
UA_ERR("g_malloc0 failed");
- __ua_free_ua_device_info_t(device);
- __ua_free_ua_user_info_t(user);
+ _ua_free_ua_device_info_t(device);
+ _ua_free_ua_user_info_t(user);
return UA_ERROR_OUT_OF_MEMORY;
}
@@ -1026,6 +1572,7 @@ int ua_device_clone(ua_device_h *cloned,
/* Add user to list of users */
*cloned = (ua_device_h)device;
device->handle = (ua_device_h)device;
+ device->create_by_app = true;
ua_devices_list = g_slist_append(ua_devices_list, device);
FUNC_EXIT;
@@ -1037,15 +1584,16 @@ int ua_user_add_device(ua_user_h user_handle, ua_device_h device_handle)
FUNC_ENTRY;
int ret;
ua_user_h handle = NULL;
+ ua_user_h temp_handle = NULL;
ua_dev_info_t *device = (ua_dev_info_t *) device_handle;
- uam_user_info_t uam_user;
ua_user_info_t* user = NULL;
uam_device_info_t uam_device;
UA_VALIDATE_INPUT_PARAMETER(device_handle);
UA_VALIDATE_HANDLE(device_handle, ua_devices_list);
- retv_if(device->mobile_id, UA_ERROR_INVALID_PARAMETER);
+ retv_if((((device->mobile_id == NULL) && (device->mac == NULL)) || (UA_MAC_TYPE_INVALID == device->type)), UA_ERROR_INVALID_PARAMETER);
+ temp_handle = device->user;
if (user_handle == NULL) {
ret = ua_get_default_user(&handle);
if (ret != UA_ERROR_NONE) {
@@ -1061,11 +1609,6 @@ int ua_user_add_device(ua_user_h user_handle, ua_device_h device_handle)
user = (ua_user_info_t *)device->user;
memset(&uam_device, 0, sizeof(uam_device_info_t));
- memset(&uam_user, 0, sizeof(uam_user_info_t));
- g_strlcpy(uam_user.account, user->account, UAM_USER_ACCOUNT_MAX_STRING_SIZE);
-
- if (user->name)
- g_strlcpy(uam_user.name, user->name, UAM_USER_NAME_MAX_STRING_SIZE);
uam_device.operating_system = device->os;
uam_device.type = device->type;
@@ -1080,11 +1623,12 @@ int ua_user_add_device(ua_user_h user_handle, ua_device_h device_handle)
UA_INITIALIZE();
- ret = _ua_get_error_code(_uam_request_add_device(&uam_user, &uam_device));
+ ret = _ua_get_error_code(_uam_request_add_device(user->account, &uam_device));
if (UA_ERROR_NONE != ret) {
UA_ERR("Failed with error: %s(0x%X)",
_ua_get_error_string(ret), ret);
+ device->user = temp_handle;
return ret;
}
@@ -1104,7 +1648,7 @@ int ua_user_remove_device(ua_user_h user_handle, ua_device_h device_handle)
UA_VALIDATE_INPUT_PARAMETER(device_handle);
UA_VALIDATE_HANDLE(device_handle, ua_devices_list);
- retv_if(device->mobile_id, UA_ERROR_INVALID_PARAMETER);
+ retv_if((((device->mobile_id == NULL) && (device->mac == NULL)) || (UA_MAC_TYPE_INVALID == device->type)), UA_ERROR_INVALID_PARAMETER);
if (user_handle == NULL) {
ret = ua_get_default_user(&handle);
@@ -1157,6 +1701,7 @@ int ua_remove_device_by_address(const char* mac)
int found = 0;
UA_VALIDATE_INPUT_PARAMETER(mac);
+ UA_INITIALIZE();
for (l = ua_devices_list; l; l = g_slist_next(l)) {
device = (ua_dev_info_t *)l->data;
@@ -1169,8 +1714,6 @@ int ua_remove_device_by_address(const char* mac)
}
if (found) {
- UA_INITIALIZE();
-
ret = _ua_get_error_code(_uam_request_remove_device_by_mac(mac));
if (UA_ERROR_NONE != ret) {
@@ -1196,6 +1739,7 @@ int ua_remove_device_by_mobile_id(const char* mobile_id, ua_mac_type_e mac_type)
int found = 0;
UA_VALIDATE_INPUT_PARAMETER(mobile_id);
+ UA_INITIALIZE();
retv_if(mac_type, UA_MAC_TYPE_INVALID);
for (l = ua_devices_list; l; l = g_slist_next(l)) {
@@ -1209,8 +1753,6 @@ int ua_remove_device_by_mobile_id(const char* mobile_id, ua_mac_type_e mac_type)
}
if (found) {
- UA_INITIALIZE();
-
ret = _ua_get_error_code(_uam_request_remove_device_by_deviceid(mobile_id, mac_type));
if (UA_ERROR_NONE != ret) {
@@ -1266,7 +1808,7 @@ int ua_foreach_all_registered_dev_info(
device_info->mac = strndup(ptr->mac, UA_MAC_ADDRESS_STRING_SIZE);
if (device_info->mac == NULL) {
UA_ERR("g_malloc0 failed");
- __ua_free_ua_device_info_t(device_info);
+ _ua_free_ua_device_info_t(device_info);
ret = UA_ERROR_OUT_OF_MEMORY;
goto done;
}
@@ -1274,7 +1816,7 @@ int ua_foreach_all_registered_dev_info(
device_info->ipv4 = strndup(ptr->ipv4_addr, UA_IPV4_ADDRESS_STRING_SIZE);
if (device_info->ipv4 == NULL) {
UA_ERR("g_malloc0 failed");
- __ua_free_ua_device_info_t(device_info);
+ _ua_free_ua_device_info_t(device_info);
ret = UA_ERROR_OUT_OF_MEMORY;
goto done;
}
@@ -1283,7 +1825,7 @@ int ua_foreach_all_registered_dev_info(
if (device_info->mobile_id == NULL) {
UA_ERR("g_malloc0 failed");
ret = UA_ERROR_OUT_OF_MEMORY;
- __ua_free_ua_device_info_t(device_info);
+ _ua_free_ua_device_info_t(device_info);
goto done;
}
@@ -1317,8 +1859,8 @@ done:
if (NULL == u)
continue;
- ua_devices_list = g_slist_remove(ua_devices_db_list, u);
- __ua_free_ua_device_info_t(u);
+ ua_devices_db_list = g_slist_remove(ua_devices_db_list, u);
+ _ua_free_ua_device_info_t(u);
}
g_ptr_array_foreach(devices_list, (GFunc)g_free, NULL);
@@ -1372,7 +1914,7 @@ int ua_foreach_registered_dev_info_by_user(
if (device_info->mac == NULL) {
UA_ERR("g_malloc0 failed");
ret = UA_ERROR_OUT_OF_MEMORY;
- __ua_free_ua_device_info_t(device_info);
+ _ua_free_ua_device_info_t(device_info);
goto done;
}
@@ -1380,7 +1922,7 @@ int ua_foreach_registered_dev_info_by_user(
if (device_info->ipv4 == NULL) {
UA_ERR("g_malloc0 failed");
ret = UA_ERROR_OUT_OF_MEMORY;
- __ua_free_ua_device_info_t(device_info);
+ _ua_free_ua_device_info_t(device_info);
goto done;
}
@@ -1388,7 +1930,7 @@ int ua_foreach_registered_dev_info_by_user(
if (device_info->mobile_id == NULL) {
UA_ERR("g_malloc0 failed");
ret = UA_ERROR_OUT_OF_MEMORY;
- __ua_free_ua_device_info_t(device_info);
+ _ua_free_ua_device_info_t(device_info);
goto done;
}
@@ -1423,8 +1965,8 @@ done:
if (NULL == u)
continue;
- ua_devices_list = g_slist_remove(ua_devices_db_list, u);
- __ua_free_ua_device_info_t(u);
+ ua_devices_db_list = g_slist_remove(ua_devices_db_list, u);
+ _ua_free_ua_device_info_t(u);
}
g_ptr_array_foreach(devices_list, (GFunc)g_free, NULL);
@@ -1434,12 +1976,104 @@ done:
return ret;
}
-int ua_user_get_is_pairing_required(
- ua_user_h handle,
+int ua_device_get_pairing_required(
+ ua_device_h handle,
bool *pairing_required)
{
FUNC_ENTRY;
+ int ret;
+ ua_dev_info_t *device = (ua_dev_info_t *)handle;
+ gboolean is_registered = FALSE;
+ uam_device_info_t uam_device;
+
+ UA_VALIDATE_INPUT_PARAMETER(handle);
+ UA_VALIDATE_HANDLE(handle, ua_devices_list);
+ UA_VALIDATE_INPUT_PARAMETER(pairing_required);
+ retv_if((((device->mobile_id == NULL) && (device->mac == NULL)) || (UA_MAC_TYPE_INVALID == device->type)), UA_ERROR_INVALID_PARAMETER);
+
+ memset(&uam_device, 0, sizeof(uam_device_info_t));
+
+ uam_device.operating_system = device->os;
+ uam_device.type = device->type;
+
+ if (device->mac)
+ g_strlcpy(uam_device.mac, device->mac, UAM_MAC_ADDRESS_STRING_SIZE);
+
+ if (device->mobile_id)
+ g_strlcpy(uam_device.device_id, device->mobile_id, UA_MOBILE_ID_STRING_SIZE);
+
+ if (device->ipv4)
+ g_strlcpy(uam_device.ipv4_addr, device->ipv4, UA_IPV4_ADDRESS_STRING_SIZE);
+
+ UA_INITIALIZE();
+
+ ret = _ua_get_error_code(_uam_is_device_registered(&uam_device, &is_registered));
+ if (UA_ERROR_NONE != ret) {
+ UA_ERR("Failed with error: %s(0x%X)",
+ _ua_get_error_string(ret), ret);
+ return ret;
+ }
+
+ *pairing_required = is_registered ? false : true;
+
+ FUNC_EXIT;
+ return UA_ERROR_NONE;
+}
+
+int _ua_intr_foreach_registered_users(
+ _ua_intr_registered_user_cb foreach_cb,
+ void *user_data)
+{
+ int ret;
+ UA_VALIDATE_INPUT_PARAMETER(foreach_cb);
+
+ ret = _ua_foreach_registered_users(foreach_cb, user_data);
+ return ret;
+}
+
+int _ua_intr_get_default_user()
+{
+ FUNC_ENTRY;
+ int ret;
+ uam_user_info_t uam_user;
+ ua_user_info_t *user = NULL;
+ GSList *l;
+
+ ret = _ua_get_error_code(_uam_get_default_user(&uam_user));
+ if (UA_ERROR_NONE != ret) {
+ UA_ERR("Failed with error: %s(0x%X)",
+ _ua_get_error_string(ret), ret);
+ return ret;
+ }
+
+ for (l = ua_users_list; l; l = g_slist_next(l)) {
+ user = (ua_user_info_t *)l->data;
+
+ if (!g_strcmp0(uam_user.account, user->account)) {
+ UA_INFO("User found [%s]", user->account);
+ user->default_user = true;
+ user->isadded = true;
+ return UA_ERROR_NONE;
+ }
+ }
+
+ user = g_malloc0(sizeof(ua_user_info_t));
+
+ if (!user) {
+ UA_ERR("g_malloc0 failed");
+ return UA_ERROR_OUT_OF_MEMORY;
+ }
+
+ g_strlcpy(user->account, uam_user.account, UAM_USER_ACCOUNT_MAX_STRING_SIZE);
+ g_strlcpy(user->name, uam_user.name, UAM_USER_NAME_MAX_STRING_SIZE);
+
+ user->state = uam_user.presence_state;
+ user->user_handle = (ua_user_h)user;
+ user->default_user = true;
+ user->isadded = true;
+
+ ua_users_list = g_slist_append(ua_users_list, user);
FUNC_EXIT;
return UA_ERROR_NONE;
}