guint timer;
} uam_scanner_info_t;
-GSList *users; /* List of users - uam_db_user_info_t */
-GSList *devices; /* List of devices - uam_db_device_info_t */
-GSList *services; /* List of services - uam_db_service_info_t */
+static GSList *users; /* List of users - uam_db_user_info_t */
+static GSList *devices; /* List of devices - uam_db_device_info_t */
+static GSList *services; /* List of services - uam_db_service_info_t */
-GSList *monitors; /* List of monitoring apps - uam_monitor_info_t */
-GSList *scanners; /* List of scanning apps - uam_scanner_info_t */
+static GSList *monitors; /* List of monitoring apps - uam_monitor_info_t */
+static GSList *scanners; /* List of scanning apps - uam_scanner_info_t */
static guint detection_timer = 0;
static unsigned int detection_window;
FUNC_EXIT;
}
-static int __copy_tech_info_to_device_info(uam_db_tech_info_t *tech, uam_device_info_s *device)
+static void __uam_core_copy_addr(uam_device_info_s *device, uam_db_address_info_t *addr)
{
- FUNC_ENTRY;
- GSList *l;
-
- retv_if(NULL == tech, UAM_ERROR_INVALID_PARAMETER);
-
- memset(device, 0x00, sizeof(uam_device_info_s));
- for (l = tech->addresses; NULL != l; l = g_slist_next(l)) {
- uam_db_address_info_t *addr = l->data;
-
- if (!addr)
- continue;
-
- switch (addr->addr_type) {
+ switch (addr->addr_type) {
case UAM_ADDR_TYPE_BLE:
case UAM_ADDR_TYPE_BT:
case UAM_ADDR_TYPE_P2P:
break;
default:
UAM_WARN("Unknown address type %d", addr->addr_type);
- }
+ }
+}
+
+static int __copy_tech_info_to_device_info(uam_db_tech_info_t *tech, uam_device_info_s *device)
+{
+ FUNC_ENTRY;
+ GSList *l;
+
+ retv_if(NULL == tech, UAM_ERROR_INVALID_PARAMETER);
+
+ memset(device, 0x00, sizeof(uam_device_info_s));
+ for (l = tech->addresses; NULL != l; l = g_slist_next(l)) {
+ uam_db_address_info_t *addr = l->data;
+
+ if (!addr)
+ continue;
+
+ __uam_core_copy_addr(device, addr);
}
device->operating_system = tech->device->os;
return UAM_ERROR_NONE;
}
-int _uam_core_remove_device(const char *account, const uam_device_info_s *dev_info)
+static int __uam_remove_device(int user_id, uam_db_device_info_t *device,
+ const uam_device_info_s *dev_info, uam_db_tech_info_t *tech)
{
- FUNC_ENTRY;
int ret;
GSList *l;
- uam_db_tech_info_t *tech;
- uam_db_device_info_t *device;
- uam_db_user_info_t *user;
- retv_if(NULL == account, UAM_ERROR_INVALID_PARAMETER);
- retv_if(NULL == dev_info, UAM_ERROR_INVALID_PARAMETER);
-
- /* Retrieve user from list */
- l = g_slist_find_custom(users, account, __compare_user_account);
- retv_if(NULL == l, UAM_ERROR_INVALID_PARAMETER);
- user = l->data;
-
- /* Retrieve device from list */
- l = g_slist_find_custom(devices, dev_info->device_id, __compare_device_id);
- retv_if(NULL == l, UAM_ERROR_INVALID_PARAMETER);
- device = l->data;
- retv_if(user != device->user, UAM_ERROR_INVALID_PARAMETER);
- retv_if(!(device->supported_techs & dev_info->type), UAM_ERROR_INVALID_PARAMETER);
-
- /* Retrieve tech info from list */
- l = g_slist_find_custom(device->tech_list,
- &(dev_info->type), __compare_tech_type);
- retv_if(NULL == l, UAM_ERROR_INVALID_PARAMETER);
- tech = l->data;
-
- ret = _uam_pm_unregister_device(user->user_id, dev_info);
+ ret = _uam_pm_unregister_device(user_id, dev_info);
if (UAM_ERROR_NONE != ret) {
UAM_ERR("_uam_pm_unregister_device failed with %s",
_uam_manager_error_to_str(ret));
devices = g_slist_remove(devices, device);
/* Remove device from user's device list */
- user->devices = g_slist_remove(user->devices, device);
+ device->user->devices = g_slist_remove(device->user->devices, device);
__free_user_device(device);
}
return UAM_ERROR_NONE;
}
-int _uam_core_remove_device_by_device_id(const char *device_id, int tech_type)
+int _uam_core_remove_device(const char *account,
+ const uam_device_info_s *dev_info)
+{
+ FUNC_ENTRY;
+ int ret;
+ GSList *l;
+ uam_db_tech_info_t *tech;
+ uam_db_device_info_t *device;
+ uam_db_user_info_t *user;
+
+ retv_if(NULL == account, UAM_ERROR_INVALID_PARAMETER);
+ retv_if(NULL == dev_info, UAM_ERROR_INVALID_PARAMETER);
+
+ /* Retrieve user from list */
+ l = g_slist_find_custom(users, account, __compare_user_account);
+ retv_if(NULL == l, UAM_ERROR_INVALID_PARAMETER);
+ user = l->data;
+
+ /* Retrieve device from list */
+ l = g_slist_find_custom(devices, dev_info->device_id, __compare_device_id);
+ retv_if(NULL == l, UAM_ERROR_INVALID_PARAMETER);
+ device = l->data;
+ retv_if(user != device->user, UAM_ERROR_INVALID_PARAMETER);
+ retv_if(!(device->supported_techs & dev_info->type), UAM_ERROR_INVALID_PARAMETER);
+
+ /* Retrieve tech info from list */
+ l = g_slist_find_custom(device->tech_list,
+ &(dev_info->type), __compare_tech_type);
+ retv_if(NULL == l, UAM_ERROR_INVALID_PARAMETER);
+ tech = l->data;
+
+ ret = __uam_remove_device(user->user_id, device, dev_info, tech);
+
+ FUNC_EXIT;
+ return ret ;
+}
+
+int _uam_core_remove_device_by_device_id(const char *device_id,
+ int tech_type)
{
FUNC_ENTRY;
int ret;
ret = _uam_core_get_devcie_by_device_id(device_id, tech_type, &dev_info);
retv_if(UAM_ERROR_NONE != ret, UAM_ERROR_NOT_REGISTERED);
- ret = _uam_pm_unregister_device(device->user->user_id, &dev_info);
- if (UAM_ERROR_NONE != ret) {
- UAM_WARN("_uam_pm_unregister_device failed with %s",
- _uam_manager_error_to_str(ret));
- }
-
- /* Send device removed event to application */
- __send_device_event(UAM_EVENT_DEVICE_REMOVED, &dev_info);
-
- /* remove from database */
- if (UAM_ERROR_NONE != _ua_device_db_delete_device_info(
- dev_info.device_id, dev_info.type, dev_info.mac))
- UAM_ERR("_ua_device_db_delete_device_info failed");
-
- /* Remove device from service */
- for (l = tech->svc_list; l; l = g_slist_next(l)) {
- uam_db_service_info_t *svc = l->data;
-
- if (!svc || !svc->name)
- continue;
- _uam_core_service_remove_device(svc->name, dev_info.device_id, dev_info.type);
- }
-
- /* Remove tech info from device's tech list */
- device->tech_list = g_slist_remove(device->tech_list, tech);
- device->supported_techs &= ~(tech->tech_type);
- UAM_INFO("device->supported_techs: %8.8X", device->supported_techs);
- __free_dev_tech_info(tech);
-
- if (UAM_TECH_TYPE_NONE == device->supported_techs) {
- /* Remove device from global device list */
- devices = g_slist_remove(devices, device);
-
- /* Remove device from user's device list */
- device->user->devices = g_slist_remove(device->user->devices, device);
-
- __free_user_device(device);
- }
-
- /* Set/update registered device list to plugins */
- if (UAM_ERROR_NONE != _uam_pm_set_registered_devices(devices))
- UAM_ERR("_uam_pm_set_registered_devices failed");
-
- /* Set/update registered device list to cloud plugin */
- _uam_cloud_update_registered_devices();
+ ret = __uam_remove_device(device->user->user_id, device, &dev_info, tech);
FUNC_EXIT;
- return UAM_ERROR_NONE;
+ return ret;
}
int _uam_core_remove_device_by_mac(const char *mac)
uam_db_tech_info_t *tech;
uam_db_device_info_t *device;
uam_device_info_s dev_info;
- GSList *l;
int ret;
retv_if(NULL == mac, UAM_ERROR_INVALID_PARAMETER);
return UAM_ERROR_INTERNAL;
}
- ret = _uam_pm_unregister_device(device->user->user_id, &dev_info);
- if (UAM_ERROR_NONE != ret) {
- UAM_WARN("_uam_pm_unregister_device failed with %s",
- _uam_manager_error_to_str(ret));
- }
-
- /* Send device removed event to application */
- __send_device_event(UAM_EVENT_DEVICE_REMOVED, &dev_info);
-
- /* Remove device from database */
- if (UAM_ERROR_NONE != _ua_device_db_delete_device_info(
- dev_info.device_id, dev_info.type, dev_info.mac))
- UAM_ERR("_ua_device_db_delete_device_info failed");
-
- /* Remove device from service */
- for (l = tech->svc_list; l; l = g_slist_next(l)) {
- uam_db_service_info_t *svc = l->data;
-
- if (!svc || !svc->name)
- continue;
- _uam_core_service_remove_device(svc->name, dev_info.device_id, dev_info.type);
- }
-
- /* Remove tech info from device's tech list */
- device->tech_list = g_slist_remove(device->tech_list, tech);
- device->supported_techs &= ~(tech->tech_type);
- UAM_INFO("device->supported_techs: %8.8X", tech->device->supported_techs);
- __free_dev_tech_info(tech);
-
- if (UAM_TECH_TYPE_NONE == device->supported_techs) {
- /* Remove device from global device list */
- devices = g_slist_remove(devices, device);
-
- /* Remove device from user's device list */
- device->user->devices = g_slist_remove(device->user->devices, device);
- __free_user_device(device);
- }
-
- /* Set/update registered device list to plugins */
- if (UAM_ERROR_NONE != _uam_pm_set_registered_devices(devices))
- UAM_ERR("_uam_pm_set_registered_devices failed");
-
- /* Set/update registered device list to cloud plugin */
- _uam_cloud_update_registered_devices();
+ ret = __uam_remove_device(device->user->user_id, device, &dev_info, tech);
FUNC_EXIT;
- return UAM_ERROR_NONE;
+ return ret;
}
int _uam_core_update_device(const uam_device_info_s *a_device)
if (!addr)
continue;
- switch (addr->addr_type) {
- case UAM_ADDR_TYPE_BLE:
- case UAM_ADDR_TYPE_BT:
- case UAM_ADDR_TYPE_P2P:
- case UAM_ADDR_TYPE_WIFI:
- g_strlcpy(device->mac, addr->address,
- UAM_MAC_ADDRESS_STRING_LEN);
- break;
- case UAM_ADDR_TYPE_IPv4:
- g_strlcpy(device->ipv4_addr,
- addr->address,
- UAM_IP_ADDRESS_MAX_STRING_LEN);
- break;
- default:
- UAM_WARN("Unknown address type %d", addr->addr_type);
- }
+ __uam_core_copy_addr(device, addr);
}
device->operating_system = db_info->os;