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 */
+static GSList *svc_devs; /* List of service device mapping - uam_svc_dev_info_t */
static GSList *monitors; /* List of monitoring apps - uam_monitor_info_t */
static GSList *scanners; /* List of scanning apps - uam_scanner_info_t */
return is_ready;
}
+uam_svc_dev_info_t *_uam_core_find_svc_dev_info(const char *device_id, uam_tech_type_e tech_type,
+ const char *svc_name)
+{
+ FUNC_ENTRY;
+ uam_svc_dev_info_t *svc_dev = NULL;
+ GSList *l;
+
+ for (l = svc_devs; NULL != l; l = g_slist_next(l)) {
+ svc_dev = l->data;
+
+ if (!svc_dev || !svc_dev->device_id || !svc_dev->service)
+ continue;
+
+ if ((0 == g_strcmp0(svc_dev->device_id, device_id)) &&
+ (0 == g_strcmp0(svc_dev->service, svc_name)) &&
+ (svc_dev->tech_type == tech_type)) {
+ UAM_DBG("Service device found in list");
+ return svc_dev;
+ }
+ }
+
+ FUNC_EXIT;
+ return NULL;
+}
+
+int _uam_core_update_svc_dev_info(const char *device_id, uam_tech_type_e tech_type,
+ const char *svc_name, gboolean discriminant)
+{
+ FUNC_ENTRY;
+ uam_svc_dev_info_t *svc = NULL;
+
+ retv_if(NULL == device_id, UAM_ERROR_INVALID_PARAMETER);
+ retv_if(UAM_TECH_TYPE_NONE >= tech_type, UAM_ERROR_INVALID_PARAMETER);
+ retv_if(UAM_TECH_TYPE_MAX <= tech_type, UAM_ERROR_INVALID_PARAMETER);
+ retv_if(NULL == svc_name, UAM_ERROR_INVALID_PARAMETER);
+
+ svc = _uam_core_find_svc_dev_info(device_id, tech_type, svc_name);
+ if (!svc) {
+ svc = g_new0(uam_svc_dev_info_t, 1);
+ svc->device_id = g_strdup(device_id);
+ svc->tech_type = tech_type;
+ svc->service = g_strdup(svc_name);
+ svc_devs = g_slist_append(svc_devs, svc);
+ }
+
+ svc->discriminant = discriminant;
+
+ UAM_DBG("Service [%s] device [%s] tech_type [%d] discriminant [%d]",
+ svc->service, svc->device_id, svc->tech_type, svc->discriminant);
+
+ FUNC_EXIT;
+ return UAM_ERROR_NONE;
+}
+
int _uam_core_service_add_user(const char *svc_name, const char *account)
{
FUNC_ENTRY;
l = g_slist_find_custom(services, svc_name, __compare_svc_name);
retv_if(NULL == l, UAM_ERROR_INVALID_PARAMETER);
service = l->data;
-/*
- if (NULL == l) {
- service = g_new0(uam_db_service_info_t, 1);
- service->name = g_strdup(svc_name);
- service->cycle = UAM_DETECTION_CYCLE_DEFAULT;
- services = g_slist_append(services, service);
- } else
- service = l->data;
-*/
for (l = user->devices; NULL != l; l = g_slist_next(l)) {
uam_db_device_info_t *device = l->data;
tech->tech_type, mac, service->name, service->cycle,
device->discriminant))
UAM_WARN("Device service addition to persistent DB failed");
+ if (UAM_ERROR_NONE != _uam_core_update_svc_dev_info(device->device_id,
+ tech->tech_type, service->name, device->discriminant))
+ UAM_WARN("Device service addition to service device mapping failed");
}
}
if (UAM_ERROR_NONE != _uam_db_insert_device_service_info(device_id,
tech_type, mac, service->name, service->cycle, tech_info->discriminant))
UAM_WARN("Device service addition to persistent DB failed");
+ if (UAM_ERROR_NONE != _uam_core_update_svc_dev_info(device_id,
+ tech_type, service->name, tech_info->discriminant))
+ UAM_WARN("Device service addition to svc dev mapping failed");
FUNC_EXIT;
return UAM_ERROR_NONE;
if (UAM_ERROR_NONE != _uam_db_update_device_service_info(device_id,
tech_type, mac, service->name, discriminant))
UAM_WARN("Device service discriminant update to persistent DB failed");
+ if (UAM_ERROR_NONE != _uam_core_update_svc_dev_info(device_id,
+ tech_type, service->name, discriminant))
+ UAM_WARN("Device service discriminant mapping update failed");
FUNC_EXIT;
return UAM_ERROR_NONE;
GSList *db_devices;
GSList *db_svc_list;
GSList *db_adv_list;
+ GSList *db_svc_dev_list;
GSList *l;
/* Init database */
dev_info->discriminant))
UAM_WARN("Device service addition to persistent DB failed");
+ if (UAM_ERROR_NONE != _uam_core_update_svc_dev_info(
+ dev_info->device_id, dev_info->type,
+ UAM_SERVICE_DEFAULT, dev_info->discriminant))
+ UAM_WARN("Device service addition to persistent DB failed");
+
/* Send device added event to application */
__send_device_event(UAM_EVENT_DEVICE_ADDED, dev_info);
FUNC_ENTRY;
uam_db_user_info_t *user;
GSList *l;
+ uam_svc_dev_info_t *svc_dev = NULL;
ret_if(NULL == tech);
ret_if(NULL == tech->svc_list);
if (!(svc->remaining_time == svc->cycle))
continue;
+ UAM_DBG("Check service device discriminant");
+ svc_dev = _uam_core_find_svc_dev_info(device_id, tech->tech_type, svc->name);
+ if (!svc_dev || !svc_dev->discriminant)
+ continue;
+
+ UAM_DBG("Send event");
for (l1 = svc->monitors; NULL != l1; l1 = g_slist_next(l1)) {
uam_monitor_info_t *mon = l1->data;