Get ibeacon adv list during initialization and add to plugin accepted/tizen/unified/20190830.110648 submit/tizen/20190830.050936
authorAbhay agarwal <ay.agarwal@samsung.com>
Thu, 29 Aug 2019 10:47:57 +0000 (16:17 +0530)
committersaerome.kim <saerome.kim@samsung.com>
Fri, 30 Aug 2019 04:29:53 +0000 (13:29 +0900)
Change-Id: I583c89dcfad00b10f4836d01f2ce5da73bfc6483
Signed-off-by: Abhay agarwal <ay.agarwal@samsung.com>
packaging/ua-manager.spec
ua-daemon/include/ua-manager-database.h
ua-daemon/src/ua-manager-adv-db.c
ua-daemon/src/ua-manager-core.c

index 23f83f8..212564e 100644 (file)
@@ -1,6 +1,6 @@
 Name:       ua-manager
 Summary:    User awareness manager
-Version:    0.6.12
+Version:    0.7.0
 Release:    1
 License:    Apache-2.0
 Source0:    %{name}-%{version}.tar.gz
index 990309f..347d091 100644 (file)
@@ -182,6 +182,12 @@ int _uam_db_insert_device_service_info(const char *device_id, int tech_type,
 
 /* IBEACON_ADV QUERIES */
 
+typedef struct {
+       int ibeacon_id;
+       int adv_len;
+       char iadv[UAM_IBEACON_ADV_MAX_LEN + 1];
+} db_adv_info_t;
+
 /* db init/deinit */
 int _uam_adv_db_initialize(void);
 int _uam_adv_db_deinitialize(void);
@@ -189,6 +195,8 @@ int _uam_adv_db_deinitialize(void);
 /* insert */
 int _uam_db_insert_adv_info(unsigned int adv_len, const char *ibeacon_adv);
 
+GSList *_uam_db_get_all_advs(void);
+
 #ifdef __cplusplus
 }
 #endif
index 9cdf565..29405ca 100644 (file)
@@ -24,6 +24,8 @@
 #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) " \
@@ -31,6 +33,7 @@
 
 /* SELECT statements */
 static sqlite3_stmt *select_max_ibeacon_id;
+static sqlite3_stmt *select_all_advs;
 
 /* INSERT statements */
 static sqlite3_stmt *insert_ibeacon_adv;
@@ -43,6 +46,7 @@ static void __uam_adv_finalize_select(void)
        FUNC_ENTRY;
 
        FINALIZE(select_max_ibeacon_id);
+       FINALIZE(select_all_advs);
 
        FUNC_EXIT;
 }
@@ -69,6 +73,8 @@ static int __uam_adv_prepare_select(sqlite3 *db)
 
        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;
@@ -220,3 +226,41 @@ handle_error:
        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;
+}
index d441e90..876055d 100644 (file)
@@ -1970,6 +1970,7 @@ int _uam_core_init(void)
        GSList *db_users;
        GSList *db_devices;
        GSList *db_svc_list;
+       GSList *db_adv_list;
        GSList *l;
 
        /* Init database */
@@ -2063,9 +2064,22 @@ int _uam_core_init(void)
                                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))