Add database APIs to update device service payload info
[platform/core/connectivity/ua-manager.git] / ua-daemon / src / ua-manager-device-service-db.c
index 37bff4a..024e50c 100644 (file)
@@ -56,6 +56,9 @@
 #define UPDATE_DEVICE_SERVICE_LAST_SEEN "UPDATE device_services " \
        "SET last_seen = ? WHERE device_number = ? AND service_number = ?"
 
+#define UPDATE_DEVICE_SERVICE_PAYLOAD "UPDATE device_services " \
+       "SET payload_number = ? WHERE device_number = ? AND service_number = ?"
+
 /* DELETE statements */
 static sqlite3_stmt *delete_all_device_services;
 static sqlite3_stmt *delete_service;
@@ -73,6 +76,7 @@ static sqlite3_stmt *insert_device_service;
 /* UPDATE statements */
 static sqlite3_stmt *update_device_service_discriminant;
 static sqlite3_stmt *update_device_service_last_seen;
+static sqlite3_stmt *update_device_service_payload;
 
 extern sqlite3 *database_handle;
 
@@ -114,6 +118,7 @@ static void __uam_device_service_finalize_update(void)
 
        FINALIZE(update_device_service_discriminant);
        FINALIZE(update_device_service_last_seen);
+       FINALIZE(update_device_service_payload);
 
        FUNC_EXIT;
 }
@@ -181,6 +186,8 @@ static int __uam_device_service_prepare_update(sqlite3 *db)
                UPDATE_DEVICE_SERVICE_DISCRIMINANT, __uam_device_service_finalize_update);
        PREPARE_QUERY(rc, db, update_device_service_last_seen,
                UPDATE_DEVICE_SERVICE_LAST_SEEN, __uam_device_service_finalize_update);
+       PREPARE_QUERY(rc, db, update_device_service_payload,
+               UPDATE_DEVICE_SERVICE_PAYLOAD, __uam_device_service_finalize_update);
 
        initialized = 1;
        FUNC_EXIT;
@@ -806,3 +813,78 @@ GSList *_uam_db_get_service_devices_info()
        FUNC_EXIT;
        return svc_dev_list;
 }
+
+static int __uam_db_update_dev_svc_payload(int device_number,
+       int service_number, int payload_number)
+{
+       FUNC_ENTRY;
+       int error_code = UAM_ERROR_NONE;
+       sqlite3_stmt *stmt = update_device_service_payload;
+       int sql_ret = SQLITE_OK;
+
+       UAM_INFO("service: %d device: %d payload: %d",
+               device_number, service_number, payload_number);
+
+       DB_ACTION(sqlite3_bind_int(stmt, 1, payload_number), error_code, handle_error);
+       DB_ACTION(sqlite3_bind_int(stmt, 2, device_number), error_code, handle_error);
+       DB_ACTION(sqlite3_bind_int(stmt, 3, service_number), error_code, handle_error);
+
+       sql_ret = sqlite3_step(stmt);
+       if (sql_ret != SQLITE_DONE) {
+               UAM_ERR("Failed to update device-service payload [%d:%s]",
+                       sql_ret, sqlite3_errmsg(database_handle));
+               error_code = UAM_ERROR_DB_FAILED;
+               goto handle_error;
+       }
+
+       UAM_DBG("Device-service payload info updated [%d] [%d] [%d] ",
+               device_number, service_number, payload_number);
+
+handle_error:
+       sqlite3_reset(stmt);
+       FUNC_EXIT;
+       return error_code;
+}
+
+int _uam_db_update_device_service_payload_info(
+       uam_ble_payload_s *payload, char *service_name)
+{
+       FUNC_ENTRY;
+       int ret = UAM_ERROR_NONE;
+       db_service_info_t info;
+       int service_number = 0;
+       int device_number = 0;
+       int payload_number = 0;
+
+       retv_if(NULL == payload, UAM_ERROR_INVALID_PARAMETER);
+       retv_if(NULL == service_name, UAM_ERROR_INVALID_PARAMETER);
+
+       ret = _uam_db_get_service_info(service_name, &info);
+       if (UAM_ERROR_NONE != ret)
+               goto handle_error;
+       service_number = info.service_number;
+
+       ret = _uam_db_get_payload_device_number(payload, &device_number);
+       if (UAM_ERROR_NONE != ret)
+               goto handle_error;
+
+       ret = _uam_db_get_payload_number(payload, &payload_number);
+       if (UAM_ERROR_NONE != ret)
+               goto handle_error;
+
+       UAM_INFO("service: %d-%s device: %d payload: %d",
+                       service_number, service_name,
+                       device_number, payload_number);
+
+       ret = __uam_db_update_dev_svc_payload(device_number,
+               service_number, payload_number);
+       if (UAM_ERROR_NONE != ret)
+               goto handle_error;
+
+       UAM_DBG("payload-service info inserted [%d] [%d]", device_number,
+                       service_number);
+
+handle_error:
+       FUNC_EXIT;
+       return ret;
+}