#include "ua-manager-common.h"
#include "ua-manager-database.h"
+#define SELECT_ALL_ADVS "SELECT ibeacon_id, adv_len, ibeacon_adv FROM ibeacon_adv"
+
#define SELECT_MAX_IBEACON_ID "SELECT MAX(ibeacon_id) FROM ibeacon_adv"
#define INSERT_IBEACON_ADV "insert into ibeacon_adv (ibeacon_id, ibeacon_adv, adv_len) " \
/* SELECT statements */
static sqlite3_stmt *select_max_ibeacon_id;
+static sqlite3_stmt *select_all_advs;
/* INSERT statements */
static sqlite3_stmt *insert_ibeacon_adv;
FUNC_ENTRY;
FINALIZE(select_max_ibeacon_id);
+ FINALIZE(select_all_advs);
FUNC_EXIT;
}
PREPARE_QUERY(rc, db, select_max_ibeacon_id,
SELECT_MAX_IBEACON_ID, __uam_adv_finalize_select);
+ PREPARE_QUERY(rc, db, select_all_advs,
+ SELECT_ALL_ADVS, __uam_adv_finalize_select);
initialized = 1;
FUNC_EXIT;
FUNC_EXIT;
return error_code;
}
+
+GSList *_uam_db_get_all_advs(void)
+{
+ FUNC_ENTRY;
+ int rc;
+ sqlite3_stmt *stmt = select_all_advs;
+ GSList *adv_list = NULL;
+ db_adv_info_t *info = NULL;
+
+ do {
+ rc = sqlite3_step(stmt);
+
+ switch (rc) {
+ case SQLITE_DONE:
+ break;
+ case SQLITE_ROW:
+ info = g_new0(db_adv_info_t, 1);
+ info->ibeacon_id = sqlite3_column_int(stmt, 0);
+ info->adv_len = sqlite3_column_int(stmt, 1);
+ memset(info->iadv, 0, UAM_IBEACON_ADV_MAX_LEN + 1);
+ memcpy(info->iadv, (char *)sqlite3_column_text(stmt, 2),
+ UAM_IBEACON_ADV_MAX_LEN);
+
+ UAM_INFO("%d-%d-%s", info->ibeacon_id, info->adv_len, info->iadv);
+
+ adv_list = g_slist_append(adv_list, info);
+ break;
+ case SQLITE_ERROR:
+ default:
+ UAM_ERR("Failed to enumerate service info: %s",
+ sqlite3_errmsg(__uam_adv_db_get_database()));
+ }
+ } while (rc == SQLITE_ROW);
+
+ sqlite3_reset(stmt);
+ FUNC_EXIT;
+ return adv_list;
+}
GSList *db_users;
GSList *db_devices;
GSList *db_svc_list;
+ GSList *db_adv_list;
GSList *l;
/* Init database */
db_info->presence_state, db_info->timestamp, svc_list);
}
+ /* Fetch iBeacon adv list */
+ db_adv_list = _uam_db_get_all_advs();
+ if (!db_adv_list) {
+ UAM_INFO_C("No iBeacon adv in database");
+ return UAM_ERROR_NONE;
+ }
+
+ for (l = db_adv_list; NULL != l; l = g_slist_next(l)) {
+ db_adv_info_t *db_adv = l->data;
+ _uam_pm_add_ibeacon_adv(db_adv->adv_len, db_adv->iadv);
+ }
+
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);
/* Set/update registered device list to plugins */
if (UAM_ERROR_NONE != _uam_pm_set_registered_devices(devices))