return NULL;
}
+static void __uam_core_copy_addr(uam_device_info_s *device, uam_db_address_info_t *addr)
+{
+ 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);
+ }
+}
+
+static void __uam_copy_payload_info(uam_ble_payload_s *dev_payload, uam_db_ble_payload_t *payload)
+{
+ if (payload) {
+ dev_payload->service_id = payload->service_id;
+ dev_payload->device_icon = payload->device_icon;
+ dev_payload->purpose = payload->purpose;
+ if (payload->duid)
+ memcpy(dev_payload->duid,
+ payload->duid, UAM_BLE_PAYLOAD_DUID_LEN);
+ if (payload->bt_mac)
+ memcpy(dev_payload->bt_mac,
+ payload->bt_mac, UAM_BT_MAC_ADDRESS_STRING_LEN);
+ }
+}
+
+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;
+ g_strlcpy(device->device_id, tech->device->device_id,
+ UAM_DEVICE_ID_MAX_STRING_LEN);
+ device->type = tech->tech_type;
+ device->discriminant = tech->discriminant;
+ memset(device->payload.duid, 0, UAM_BLE_PAYLOAD_DUID_LEN + 1);
+ memset(device->payload.bt_mac, 0, UAM_BT_MAC_ADDRESS_STRING_LEN);
+ device->last_seen = tech->timestamp;
+ __uam_copy_payload_info(&(device->payload), tech->payload);
+
+ FUNC_EXIT;
+ return UAM_ERROR_NONE;
+}
+
static int _uam_remove_user_device(uam_db_device_info_t *device)
{
FUNC_ENTRY;
retv_if(NULL == device, UAM_ERROR_INVALID_PARAMETER);
user_id = device->user->user_id;
- dev_info.operating_system = device->os;
- g_strlcpy(dev_info.device_id, device->device_id, UAM_DEVICE_ID_MAX_STRING_LEN);
retv_if(UAM_ERROR_NONE != __uam_db_begin_transaction(), UAM_ERROR_DB_FAILED);
for (l = device->tech_list; NULL != l; l = g_slist_next(l)) {
uam_db_tech_info_t *tech = l->data;
- GSList *l1, *l2;
if (!tech)
continue;
- /* Delete the tech information from the service list that includes tech. */
- for (l2 = tech->svc_list; NULL != l2; l2 = g_slist_next(l2)) {
- uam_db_service_info_t *svc_info = l2->data;
-
- if (!svc_info || !svc_info->dev_techs)
- continue;
-
- svc_info->dev_techs = g_slist_remove(svc_info->dev_techs, tech);
- }
-
- dev_info.type = tech->tech_type;
- memset(dev_info.mac, 0x00, UAM_MAC_ADDRESS_STRING_LEN);
- memset(dev_info.ipv4_addr, 0x00, UAM_IP_ADDRESS_MAX_STRING_LEN);
-
- for (l1 = tech->addresses; NULL != l1; l1 = g_slist_next(l1)) {
- uam_db_address_info_t *addr = l1->data;
-
- if (!addr)
- continue;
-
- switch (addr->addr_type) {
- case UAM_ADDR_TYPE_BT:
- case UAM_ADDR_TYPE_BLE:
- case UAM_ADDR_TYPE_P2P:
- case UAM_ADDR_TYPE_WIFI:
- g_strlcpy(dev_info.mac, addr->address,
- UAM_MAC_ADDRESS_STRING_LEN);
- break;
- case UAM_ADDR_TYPE_IPv4:
- g_strlcpy(dev_info.ipv4_addr, addr->address,
- UAM_IP_ADDRESS_MAX_STRING_LEN);
- break;
- default:
- UAM_WARN("Address type %d ignored", addr->addr_type);
- }
+ /* Copy tech info to device info */
+ ret = __copy_tech_info_to_device_info(tech, &dev_info);
+ if (UAM_ERROR_NONE != ret) {
+ UAM_ERR("__copy_tech_info_to_device_info failed");
+ return ret;
}
+ /* Unregister device from plugin */
ret = _uam_pm_unregister_device(user_id, &dev_info);
if (UAM_ERROR_NONE != ret)
UAM_ERR("_uam_pm_unregister_device failed with %s",
for (l = db_dev_list; NULL != l; l = g_slist_next(l)) {
uam_db_device_info_t *db_info = l->data;
GSList *l1;
+ int ret;
if (!db_info || !db_info->device_id)
continue;
for (l1 = db_info->tech_list; NULL != l1; l1 = g_slist_next(l1)) {
uam_db_tech_info_t *tech = l1->data;
- GSList *l2;
if (!tech || !tech->addresses)
continue;
- for (l2 = tech->addresses; NULL != l2; l2 = g_slist_next(l2)) {
- uam_db_address_info_t *addr = l2->data;
-
- 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_list)[indx].mac,
- addr->address,
- UAM_MAC_ADDRESS_STRING_LEN);
- break;
- case UAM_ADDR_TYPE_IPv4:
- g_strlcpy((*device_list)[indx].ipv4_addr,
- addr->address,
- UAM_IP_ADDRESS_MAX_STRING_LEN);
- break;
- default:
- UAM_WARN("Unknown address type %d", addr->addr_type);
- }
- }
-
- (*device_list)[indx].operating_system = db_info->os;
- g_strlcpy((*device_list)[indx].device_id, db_info->device_id,
- UAM_DEVICE_ID_MAX_STRING_LEN);
-
- memset((*device_list)[indx].payload.duid, 0, UAM_BLE_PAYLOAD_DUID_LEN + 1);
- memset((*device_list)[indx].payload.bt_mac, 0, UAM_BT_MAC_ADDRESS_STRING_LEN);
- if (tech->payload) {
- (*device_list)[indx].payload.service_id = tech->payload->service_id;
- (*device_list)[indx].payload.device_icon = tech->payload->device_icon;
- (*device_list)[indx].payload.purpose = tech->payload->purpose;
- if (tech->payload->duid)
- memcpy((*device_list)[indx].payload.duid,
- tech->payload->duid, UAM_BLE_PAYLOAD_DUID_LEN);
- if (tech->payload->bt_mac)
- g_strlcpy((*device_list)[indx].payload.bt_mac,
- tech->payload->bt_mac, UAM_BT_MAC_ADDRESS_STRING_LEN);
+ /* Copy tech info to device info */
+ ret = __copy_tech_info_to_device_info(tech, &((*device_list)[indx]));
+ if (UAM_ERROR_NONE != ret) {
+ UAM_ERR("__copy_tech_info_to_device_info failed");
}
-
- (*device_list)[indx].discriminant = tech->discriminant;
- (*device_list)[indx].last_seen = tech->timestamp;
- (*device_list)[indx++].type = tech->tech_type;
- UAM_INFO("%s-%d-%s-%s-%llu-%d-%d-0x%2.2X", (*device_list)[indx-1].device_id,
- (*device_list)[indx-1].type, (*device_list)[indx-1].mac, (*device_list)[indx-1].ipv4_addr,
- (*device_list)[indx-1].last_seen, (*device_list)[indx-1].operating_system,
- (*device_list)[indx-1].discriminant, (*device_list)[indx-1].payload.service_id);
+ indx++;
}
}
FUNC_EXIT;
}
-static void __uam_core_copy_addr(uam_device_info_s *device, uam_db_address_info_t *addr)
-{
- 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);
- }
-}
-
-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;
- g_strlcpy(device->device_id, tech->device->device_id,
- UAM_DEVICE_ID_MAX_STRING_LEN);
- device->type = tech->tech_type;
- device->discriminant = tech->discriminant;
- memset(device->payload.duid, 0, UAM_BLE_PAYLOAD_DUID_LEN + 1);
- memset(device->payload.bt_mac, 0, UAM_BT_MAC_ADDRESS_STRING_LEN);
- if (tech->payload) {
- device->payload.service_id = tech->payload->service_id;
- device->payload.device_icon = tech->payload->device_icon;
- device->payload.purpose = tech->payload->purpose;
- if (tech->payload->duid)
- memcpy(device->payload.duid,
- tech->payload->duid, UAM_BLE_PAYLOAD_DUID_LEN);
- if (tech->payload->bt_mac)
- memcpy(device->payload.bt_mac,
- tech->payload->bt_mac, UAM_BT_MAC_ADDRESS_STRING_LEN);
- }
-
- FUNC_EXIT;
- return UAM_ERROR_NONE;
-}
-
static uam_monitor_info_t *__uam_find_monitor(GSList *monitor_list,
const char *name, const char *svc_name, uam_pm_detection_mode_e mode)
{
/* Copy devices */
for (l1 = service->dev_techs; NULL != l1; l1 = g_slist_next(l1)) {
uam_db_tech_info_t *tech = l1->data;
- GSList *l2;
+ int ret;
if (!tech || !tech->addresses)
continue;
- for (l2 = tech->addresses; NULL != l2; l2 = g_slist_next(l2)) {
- uam_db_address_info_t *addr = l2->data;
-
- 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_list)[indx].mac,
- addr->address,
- UAM_MAC_ADDRESS_STRING_LEN);
- break;
- case UAM_ADDR_TYPE_IPv4:
- g_strlcpy((*device_list)[indx].ipv4_addr,
- addr->address,
- UAM_IP_ADDRESS_MAX_STRING_LEN);
- break;
- default:
- UAM_WARN("Unknown address type %d", addr->addr_type);
- }
+ /* Copy tech info to device info */
+ ret = __copy_tech_info_to_device_info(tech, &((*device_list)[indx]));
+ if (UAM_ERROR_NONE != ret) {
+ UAM_ERR("__copy_tech_info_to_device_info failed");
}
-
- uam_db_device_info_t *db_info = tech->device;
- (*device_list)[indx].operating_system = db_info->os;
- g_strlcpy((*device_list)[indx].device_id, db_info->device_id,
- UAM_DEVICE_ID_MAX_STRING_LEN);
- (*device_list)[indx].last_seen = tech->timestamp;
- (*device_list)[indx].discriminant = tech->discriminant;
- memset((*device_list)[indx].payload.duid, 0, UAM_BLE_PAYLOAD_DUID_LEN + 1);
- memset((*device_list)[indx].payload.bt_mac, 0, UAM_BT_MAC_ADDRESS_STRING_LEN);
- if (tech->payload) {
- if (tech->payload->service_id)
- (*device_list)[indx].payload.service_id = tech->payload->service_id;
- if (tech->payload->device_icon)
- (*device_list)[indx].payload.device_icon = tech->payload->device_icon;
- if (tech->payload->purpose)
- (*device_list)[indx].payload.purpose = tech->payload->purpose;
- if (tech->payload->duid)
- memcpy((*device_list)[indx].payload.duid,
- tech->payload->duid, UAM_BLE_PAYLOAD_DUID_LEN);
- if (tech->payload->bt_mac)
- g_strlcpy((*device_list)[indx].payload.bt_mac,
- tech->payload->bt_mac, UAM_BT_MAC_ADDRESS_STRING_LEN);
- }
-
- (*device_list)[indx++].type = tech->tech_type;
+ indx++;
}
UAM_INFO("Count = %d, indx = %d", *count, indx);