/* DEVICE_SERVICE QUERIES */
+typedef struct {
+ char device_id[UAM_DEVICE_ID_MAX_STRING_LEN];
+ uam_tech_type_e type;
+ char svc[UAM_SERVICE_MAX_STRING_LEN];
+ int discriminant;
+} db_svc_dev_info_t;
+
/* db init/deinit */
int _ua_device_service_db_initialize(void);
int _ua_device_service_db_deinitialize(void);
const char *device_id, int tech_type, const char *address);
int _uam_db_get_device_services_count(const char *device_id, int tech_type,
const char *address, int *count);
+GSList *_uam_db_get_service_devices_info();
/* delete operations */
int _ua_device_service_db_clear(void);
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;
-*/
__add_service_to_dev_tech_mapping(tech_info, service);
mac = __get_mac_addr(tech_info);
}
}
+ /* Fetch svc dev list */
+ db_svc_dev_list = _uam_db_get_service_devices_info();
+ if (!db_svc_dev_list) {
+ UAM_INFO_C("No service devices in database");
+ } else {
+ for (l = db_svc_dev_list; NULL != l; l = g_slist_next(l)) {
+ db_svc_dev_info_t *db_svc = l->data;
+ _uam_core_update_svc_dev_info((char *)&(db_svc->device_id), db_svc->type,
+ (char *)&(db_svc->svc), db_svc->discriminant);
+ }
+ }
+
g_slist_free_full(db_devices, g_free);
g_slist_free_full(db_users, g_free);
g_slist_free_full(db_svc_list, g_free);
g_slist_free_full(db_adv_list, g_free);
+ g_slist_free_full(db_svc_dev_list, g_free);
/* Set/update registered device list to plugins */
if (UAM_ERROR_NONE != _uam_pm_set_registered_devices(devices))
g_slist_free(services);
services = NULL;
+ /* Release allocated memory for service devices */
+ for (l = svc_devs; NULL != l; l = g_slist_next(l)) {
+ uam_svc_dev_info_t *svc_dev = l->data;
+
+ if (!svc_dev)
+ continue;
+
+ g_free(svc_dev->device_id);
+ g_free(svc_dev->service);
+ g_free(svc_dev);
+ }
+ g_slist_free(svc_devs);
+ svc_devs = NULL;
+
FUNC_EXIT;
}
#define SELECT_DEVICE_SERVICES_COUNT "SELECT count(*) " \
"FROM device_services where device_number = ?"
+#define SELECT_DEVICE_SERVICES "SELECT D.device_id, D.tech_type, S.service_name, P.discriminant " \
+ "FROM device_services as P JOIN services as S USING(service_number) JOIN devices as D " \
+ "USING(device_number)"
+
#define INSERT_DEVICE_SERVICE "insert into device_services " \
"(device_number, service_number, discriminant) values (?, ?, ?)"
/* SELECT statements */
static sqlite3_stmt *select_service;
static sqlite3_stmt *select_device_services_count;
+static sqlite3_stmt *select_device_services;
/* INSERT statements */
static sqlite3_stmt *insert_device_service;
FINALIZE(select_service);
FINALIZE(select_device_services_count);
+ FINALIZE(select_device_services);
FUNC_EXIT;
}
SELECT_SERVICE, __ua_device_service_finalize_select);
PREPARE_QUERY(rc, db, select_device_services_count,
SELECT_DEVICE_SERVICES_COUNT, __ua_device_service_finalize_select);
+ PREPARE_QUERY(rc, db, select_device_services,
+ SELECT_DEVICE_SERVICES, __ua_device_service_finalize_select);
initialized = 1;
FUNC_EXIT;
FUNC_EXIT;
return service_list;
}
+
int _uam_db_get_device_services_count(const char *device_id, int tech_type,
const char *address, int *svc_count)
{
FUNC_EXIT;
return error_code;
}
+
+GSList *_uam_db_get_service_devices_info()
+{
+ FUNC_ENTRY;
+ int rc;
+ sqlite3_stmt *stmt = select_device_services;
+ GSList *svc_dev_list = NULL;
+ db_svc_dev_info_t *info = NULL;
+
+ do {
+ rc = sqlite3_step(stmt);
+
+ switch (rc) {
+ case SQLITE_DONE:
+ break;
+ case SQLITE_ROW:
+ UAM_DBG("Device services info found");
+ info = g_new0(db_svc_dev_info_t, 1);
+ g_strlcpy(info->device_id, (char *)sqlite3_column_text(stmt, 0),
+ UAM_DEVICE_ID_MAX_STRING_LEN);
+ info->type = sqlite3_column_int(stmt, 1);
+ g_strlcpy(info->svc, (char *)sqlite3_column_text(stmt, 2),
+ UAM_SERVICE_MAX_STRING_LEN);
+ info->discriminant = sqlite3_column_int(stmt, 3);
+
+ UAM_INFO("%s-%d-%s-%d",
+ info->device_id,
+ info->type,
+ info->svc,
+ info->discriminant);
+
+ svc_dev_list = g_slist_append(svc_dev_list, info);
+ break;
+ case SQLITE_ERROR:
+ default:
+ UAM_ERR("Failed to enumerate device info: %s",
+ sqlite3_errmsg(__uam_db_recover_database()));
+ }
+ } while (rc == SQLITE_ROW);
+
+ sqlite3_reset(stmt);
+ FUNC_EXIT;
+ return svc_dev_list;
+}