+++ /dev/null
-/*
- * Copyright (c) 2018 Samsung Electronics Co., Ltd. All rights reserved.
- *
- * Licensed under the Apache License, Version 2.0 (the "License")
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- */
-
-#include <sqlite3.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <dlfcn.h>
-
-#include "ua-manager-common.h"
-#include "ua-manager-database.h"
-
-#define DELETE_DEVICE_USER "delete from device_user " \
- "WHERE device_number = ? and user_id = ?"
-
-#define DELETE_ALL_DEVICE_USER "delete from device_user "
-
-#define DELETE_FOR_USER "delete from device_user " \
- "WHERE user_id = ?"
-
-#define DELETE_FOR_DEVICE "delete from device_user " \
- "WHERE device_number = ?"
-
-#define SELECT_USER_FOR_DEVICE "SELECT U.user_id, U.account, U.name " \
- "FROM device_user as D JOIN userdata as U USING(user_id) " \
- "where D.device_number = ?"
-
-#define SELECT_COUNT_FOR_DEVICE "SELECT count(*) " \
- "FROM device_user where device_number = ?"
-
-#define SELECT_DEVICE_USER "SELECT D.device_id, D.tech_type, U.account " \
- "FROM device_user as P JOIN userdata as U USING(user_id) JOIN devices as D " \
- "USING(device_number)"
-
-#define INSERT_DEVICE_USER "insert into device_user " \
- "(device_number, user_id) values (?, ?)"
-
-
-/* DELETE statements */
-static sqlite3_stmt *delete_device_user;
-static sqlite3_stmt *delete_all_device_user;
-static sqlite3_stmt *delete_for_user;
-static sqlite3_stmt *delete_for_device;
-
-/* SELECT statements */
-static sqlite3_stmt *select_user_for_device;
-static sqlite3_stmt *select_count_for_device;
-static sqlite3_stmt *select_device_user;
-
-/* INSERT statements */
-static sqlite3_stmt *insert_device_user;
-
-extern sqlite3 *database_handle;
-
-static void __uam_device_user_finalize_delete(void)
-{
- FUNC_ENTRY;
-
- FINALIZE(delete_device_user);
- FINALIZE(delete_all_device_user);
- FINALIZE(delete_for_user);
- FINALIZE(delete_for_device);
-
- FUNC_EXIT;
-}
-
-static void __uam_device_user_finalize_select(void)
-{
- FUNC_ENTRY;
-
- FINALIZE(select_user_for_device);
- FINALIZE(select_count_for_device);
- FINALIZE(select_device_user);
-
- FUNC_EXIT;
-}
-
-static void __uam_device_user_finalize_insert(void)
-{
- FUNC_ENTRY;
-
- FINALIZE(insert_device_user);
-
- FUNC_EXIT;
-}
-
-static int __uam_device_user_prepare_delete(sqlite3 *db)
-{
- FUNC_ENTRY;
- int rc;
- static int initialized;
-
- if (initialized) {
- FUNC_EXIT;
- return SQLITE_OK;
- }
-
- PREPARE_QUERY(rc, db, delete_device_user,
- DELETE_DEVICE_USER, __uam_device_user_finalize_delete);
- PREPARE_QUERY(rc, db, delete_all_device_user,
- DELETE_ALL_DEVICE_USER, __uam_device_user_finalize_delete);
- PREPARE_QUERY(rc, db, delete_for_user,
- DELETE_FOR_USER, __uam_device_user_finalize_delete);
- PREPARE_QUERY(rc, db, delete_for_device,
- DELETE_FOR_DEVICE, __uam_device_user_finalize_delete);
-
- initialized = 1;
- FUNC_EXIT;
- return rc;
-}
-
-static int __uam_device_user_prepare_select(sqlite3 *db)
-{
- FUNC_ENTRY;
- int rc;
- static int initialized;
-
- if (initialized) {
- FUNC_EXIT;
- return SQLITE_OK;
- }
-
- PREPARE_QUERY(rc, db, select_user_for_device,
- SELECT_USER_FOR_DEVICE, __uam_device_user_finalize_select);
- PREPARE_QUERY(rc, db, select_count_for_device,
- SELECT_COUNT_FOR_DEVICE, __uam_device_user_finalize_select);
- PREPARE_QUERY(rc, db, select_device_user,
- SELECT_DEVICE_USER, __uam_device_user_finalize_select);
-
- initialized = 1;
- FUNC_EXIT;
- return rc;
-}
-
-static int __uam_device_user_prepare_insert(sqlite3 *db)
-{
- FUNC_ENTRY;
- int rc;
- static int initialized;
-
- if (initialized) {
- FUNC_EXIT;
- return SQLITE_OK;
- }
-
- PREPARE_QUERY(rc, db, insert_device_user,
- INSERT_DEVICE_USER, __uam_device_user_finalize_insert);
-
- initialized = 1;
- FUNC_EXIT;
- return rc;
-}
-
-static int __uam_device_user_table_deviceuserinfo_prepare(sqlite3 *db)
-{
- FUNC_ENTRY;
-
- int error_code = UAM_ERROR_NONE;
-
- if (db == NULL) {
- FUNC_EXIT;
- return UAM_ERROR_DB_FAILED;
- }
-
- DB_ACTION(__uam_device_user_prepare_delete(db), error_code, handle_error);
- DB_ACTION(__uam_device_user_prepare_select(db), error_code, handle_error);
- DB_ACTION(__uam_device_user_prepare_insert(db), error_code, handle_error);
-
-handle_error:
- FUNC_EXIT;
- return error_code;
-}
-
-static void __uam_device_user_table_devicesinfo_finalize(void)
-{
- FUNC_ENTRY;
- __uam_device_user_finalize_delete();
- __uam_device_user_finalize_select();
- __uam_device_user_finalize_insert();
- FUNC_EXIT;
-}
-
-int _uam_device_user_db_deinitialize(void)
-{
- FUNC_ENTRY;
-
- retv_if(NULL == database_handle, UAM_ERROR_NONE);
-
- __uam_device_user_table_devicesinfo_finalize();
- sqlite3_close(database_handle);
-
- FUNC_EXIT;
- return UAM_ERROR_NONE;
-}
-
-int _uam_device_user_db_initialize(void)
-{
- FUNC_ENTRY;
-
- EXEC(UAM_ERROR_NONE,
- __uam_device_user_table_deviceuserinfo_prepare(database_handle),
- handle_error);
-
- FUNC_EXIT;
- return UAM_ERROR_NONE;
-
-handle_error:
- _uam_device_user_db_deinitialize();
- FUNC_EXIT;
- return UAM_ERROR_DB_FAILED;
-}
-
-int _uam_db_insert_device_user(int device_number, int user_id)
-{
- FUNC_ENTRY;
- int error_code = UAM_ERROR_NONE;
- sqlite3_stmt *stmt = insert_device_user;
- int sql_ret = SQLITE_OK;
-
- UAM_INFO("%d-%d", device_number, user_id);
-
- DB_ACTION(sqlite3_bind_int(stmt, 1, device_number), error_code, handle_error);
- DB_ACTION(sqlite3_bind_int(stmt, 2, user_id), error_code, handle_error);
-
- sql_ret = sqlite3_step(stmt);
- if (sql_ret != SQLITE_DONE) {
- UAM_ERR("Failed to insert device-user info [%d:%s]",
- sql_ret, sqlite3_errmsg(database_handle));
- error_code = UAM_ERROR_DB_FAILED;
- goto handle_error;
- }
-
- UAM_DBG("Device-user info inserted [%d] [%d]", device_number,
- user_id);
-
-handle_error:
- sqlite3_reset(stmt);
- FUNC_EXIT;
- return error_code;
-}
-
-int _uam_db_insert_device_user_info(const char *device_id, int tech_type,
- const char *address, const char *account)
-{
- FUNC_ENTRY;
- int ret = UAM_ERROR_NONE;
- int user_id = 0;
-
- UAM_INFO("%s-%d-%s-%s", device_id, tech_type, address, account);
-
- int device_number = 0;
- ret = _uam_db_get_device_number(device_id, tech_type, address,
- &device_number);
- if (UAM_ERROR_NONE != ret)
- goto handle_error;
-
- ret = _uam_db_get_user_id(account, &user_id);
- if (UAM_ERROR_NONE != ret)
- goto handle_error;
-
- UAM_INFO("%d-%d", device_number, user_id);
-
- ret = _uam_db_insert_device_user(device_number, user_id);
- if (UAM_ERROR_NONE != ret)
- goto handle_error;
-
- UAM_DBG("Device-user info inserted [%d] [%d]", device_number, user_id);
-
-handle_error:
- FUNC_EXIT;
- return ret;
-}
-
-int _uam_device_user_db_clear(void)
-{
- FUNC_ENTRY;
- int error_code = UAM_ERROR_NONE;
- sqlite3_stmt *stmt = delete_all_device_user;
- int sql_ret = SQLITE_OK;
-
- sql_ret = sqlite3_step(stmt);
- if (sql_ret != SQLITE_DONE) {
- UAM_ERR("Failed to delete device data [%d:%s]",
- sql_ret, sqlite3_errmsg(database_handle));
- error_code = UAM_ERROR_DB_FAILED;
- goto handle_error;
- }
-
- UAM_DBG("All device user data deleted ");
-
-handle_error:
- sqlite3_reset(stmt);
- FUNC_EXIT;
- return error_code;
-}
-
-int _uam_db_delete_device_for_user_id(int user_id)
-{
- FUNC_ENTRY;
- int error_code = UAM_ERROR_NONE;
- sqlite3_stmt *stmt = delete_for_user;
- int sql_ret = SQLITE_OK;
-
- UAM_INFO("User_id: %d", user_id);
-
- DB_ACTION(sqlite3_bind_int(stmt, 1, user_id), error_code, handle_error);
-
- sql_ret = sqlite3_step(stmt);
- if (sql_ret != SQLITE_DONE) {
- UAM_ERR("Failed to delete device-user info [%d:%s]",
- sql_ret, sqlite3_errmsg(database_handle));
- error_code = UAM_ERROR_DB_FAILED;
- } else
- UAM_DBG("Device-user data for user_id deleted");
-
-handle_error:
- sqlite3_reset(stmt);
- FUNC_EXIT;
- return error_code;
-}
-
-int _uam_db_delete_device_user_id(int device_number, int user_id)
-{
- FUNC_ENTRY;
- int error_code = UAM_ERROR_NONE;
- sqlite3_stmt *stmt = delete_device_user;
- int sql_ret = SQLITE_OK;
-
- UAM_INFO("Device Number: %d user_id: %d", device_number, user_id);
-
- DB_ACTION(sqlite3_bind_int(stmt, 1, device_number), error_code, handle_error);
- DB_ACTION(sqlite3_bind_int(stmt, 2, user_id), error_code, handle_error);
-
- sql_ret = sqlite3_step(stmt);
- if (sql_ret != SQLITE_DONE) {
- UAM_ERR("Failed to delete device-user info [%d:%s]",
- sql_ret, sqlite3_errmsg(database_handle));
- error_code = UAM_ERROR_DB_FAILED;
- } else
- UAM_DBG("Device-user info deleted");
-
-handle_error:
- sqlite3_reset(stmt);
- FUNC_EXIT;
- return error_code;
-}
-
-int _uam_db_delete_for_device_number(int device_number)
-{
- FUNC_ENTRY;
- int error_code = UAM_ERROR_NONE;
- sqlite3_stmt *stmt = delete_for_device;
- int sql_ret = SQLITE_OK;
-
- UAM_INFO("Device Number: %d", device_number);
-
- DB_ACTION(sqlite3_bind_int(stmt, 1, device_number), error_code, handle_error);
-
- sql_ret = sqlite3_step(stmt);
- if (sql_ret != SQLITE_DONE) {
- UAM_ERR("Failed to delete device info [%d:%s]",
- sql_ret, sqlite3_errmsg(database_handle));
- error_code = UAM_ERROR_DB_FAILED;
- } else
- UAM_DBG("Device user info deleted for device_number");
-
-handle_error:
- sqlite3_reset(stmt);
- FUNC_EXIT;
- return error_code;
-}
-
-int _uam_db_delete_device_for_user_info(const char *account)
-{
- FUNC_ENTRY;
- int ret = UAM_ERROR_NONE;
- int error_code = UAM_ERROR_NONE;
- UAM_INFO("%s", account);
-
- int user_id = 0;
- ret = _uam_db_get_user_id(account, &user_id);
- if (UAM_ERROR_NONE != ret)
- goto handle_error;
-
- UAM_INFO("%d", user_id);
-
- ret = _uam_db_delete_device_for_user_id(user_id);
- if (UAM_ERROR_NONE != ret)
- goto handle_error;
-
- UAM_DBG("Device user info deleted for user_id[%d]", user_id);
-
-handle_error:
- FUNC_EXIT;
- return error_code;
-}
-
-int _uam_db_delete_device_user_info(const char *device_id, int tech_type,
- const char *address, const char *account)
-{
- FUNC_ENTRY;
- int ret = UAM_ERROR_NONE;
- int user_id = 0;
- int device_number = 0;
- int error_code = UAM_ERROR_NONE;
-
- UAM_INFO("%s-%d-%s-%s", device_id, tech_type, address, account);
-
- ret = _uam_db_get_device_number(device_id, tech_type, address,
- &device_number);
- if (UAM_ERROR_NONE != ret)
- goto handle_error;
-
- ret = _uam_db_get_user_id(account, &user_id);
- if (UAM_ERROR_NONE != ret)
- goto handle_error;
-
- UAM_INFO("%d-%d", device_number, user_id);
-
- ret = _uam_db_delete_device_user_id(device_number, user_id);
- if (UAM_ERROR_NONE != ret)
- goto handle_error;
-
- UAM_DBG("Device-user info deleted [%d] [%d]", device_number, user_id);
-
-handle_error:
- FUNC_EXIT;
- return error_code;
-}
-
-int _uam_db_delete_for_device_info(const char *device_id, int tech_type,
- const char *address)
-{
- FUNC_ENTRY;
- int ret = UAM_ERROR_NONE;
- int device_number = 0;
- int error_code = UAM_ERROR_NONE;
-
- UAM_INFO("%s-%d-%s", device_id, tech_type, address);
-
- ret = _uam_db_get_device_number(device_id, tech_type, address,
- &device_number);
- if (UAM_ERROR_NONE != ret)
- goto handle_error;
-
- UAM_INFO("%d", device_number);
-
- ret = _uam_db_delete_for_device_number(device_number);
- if (UAM_ERROR_NONE != ret)
- goto handle_error;
-
- UAM_DBG("Device user info deleted for device_number[%d]", device_number);
-
-handle_error:
- FUNC_EXIT;
- return error_code;
-}
-
-GSList *_uam_db_get_user_list_for_device(int device_number)
-{
- FUNC_ENTRY;
- sqlite3_stmt *stmt = select_user_for_device;
- GSList *user_list = NULL;
- db_user_info_t *info = NULL;
- int sql_ret = SQLITE_OK;
-
- if (sqlite3_bind_int(stmt, 1, device_number) != SQLITE_OK)
- goto handle_error;
-
- do {
- sql_ret = sqlite3_step(stmt);
- switch (sql_ret) {
- case SQLITE_DONE:
- break;
- case SQLITE_ROW:
- info = g_new0(db_user_info_t, 1);
- info->user_id = sqlite3_column_int(stmt, 0);
- g_strlcpy(info->account, (char *)sqlite3_column_text(stmt, 1),
- UAM_USER_ACCOUNT_MAX_STRING_LEN);
- g_strlcpy(info->name, (char *)sqlite3_column_text(stmt, 2),
- UAM_USER_NAME_MAX_STRING_LEN);
-
- UAM_INFO("%d-%s-%s", info->user_id, info->account, info->name);
- user_list = g_slist_append(user_list, info);
- break;
- case SQLITE_ERROR:
- default:
- UAM_ERR("Failed to enumerate device info [%d:%s]",
- sql_ret, sqlite3_errmsg(database_handle));
- }
- } while (sql_ret == SQLITE_ROW);
-
-handle_error:
- sqlite3_reset(stmt);
- FUNC_EXIT;
- return user_list;
-}
-
-GSList *_uam_db_get_user_list_for_device_info(const char *device_id,
- int tech_type, const char *address)
-{
- FUNC_ENTRY;
- int ret = UAM_ERROR_NONE;
- int device_number = 0;
- GSList *user_list = NULL;
-
- if (NULL == device_id && NULL == address) {
- FUNC_EXIT;
- return NULL;
- }
-
- UAM_INFO("%s-%d-%s", device_id, tech_type, address);
-
- ret = _uam_db_get_device_number(device_id, tech_type, address,
- &device_number);
- if (UAM_ERROR_NONE != ret)
- goto handle_error;
-
- user_list = _uam_db_get_user_list_for_device(device_number);
-
-handle_error:
- FUNC_EXIT;
- return user_list;
-}
-
-int _uam_db_get_device_user_count(const char *device_id, int tech_type,
- const char *address, int *user_count)
-{
- FUNC_ENTRY;
- int error_code = UAM_ERROR_NONE;
- sqlite3_stmt *stmt = select_count_for_device;
- int device_number = 0;
- int sql_ret = SQLITE_OK;
-
- retv_if(NULL == device_id, UAM_ERROR_INVALID_PARAMETER);
- retv_if(NULL == address, UAM_ERROR_INVALID_PARAMETER);
- UAM_INFO("%s-%d-%s", device_id, tech_type, address);
-
- error_code = _uam_db_get_device_number(device_id, tech_type, address,
- &device_number);
- if (UAM_ERROR_NONE != error_code)
- goto handle_error;
-
- DB_ACTION(sqlite3_bind_int(stmt, 1, device_number),
- error_code, handle_error);
-
- do {
- sql_ret = sqlite3_step(stmt);
-
- switch (sql_ret) {
- case SQLITE_DONE:
- break;
- case SQLITE_ROW:
- UAM_DBG("Device user count info found");
- *user_count = sqlite3_column_int(stmt, 0);
- UAM_INFO("device user count %d", *user_count);
- break;
- case SQLITE_ERROR:
- default:
- UAM_ERR("Failed to enumerate device info [%d:%s]",
- sql_ret, sqlite3_errmsg(database_handle));
- }
- } while (sql_ret == SQLITE_ROW);
-
-handle_error:
- sqlite3_reset(stmt);
- FUNC_EXIT;
- return error_code;
-}
-
-GSList *_uam_db_get_device_user_info()
-{
- FUNC_ENTRY;
- sqlite3_stmt *stmt = select_device_user;
- GSList *dev_user_list = NULL;
- db_dev_user_info_t *info = NULL;
- int sql_ret = SQLITE_OK;
-
- do {
- sql_ret = sqlite3_step(stmt);
-
- switch (sql_ret) {
- case SQLITE_DONE:
- break;
- case SQLITE_ROW:
- UAM_DBG("Device user info found");
- info = g_new0(db_dev_user_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->account, (char *)sqlite3_column_text(stmt, 2),
- UAM_SERVICE_MAX_STRING_LEN);
-
- UAM_INFO("%s-%d-%s", info->device_id, info->type, info->account);
-
- dev_user_list = g_slist_append(dev_user_list, info);
- break;
- case SQLITE_ERROR:
- default:
- UAM_ERR("Failed to enumerate device info [%d:%s]",
- sql_ret, sqlite3_errmsg(database_handle));
- }
- } while (sql_ret == SQLITE_ROW);
-
- sqlite3_reset(stmt);
- FUNC_EXIT;
- return dev_user_list;
-}