int _uam_register_service(uam_service_info_s *service);
/**
+ * @brief Updates service info.
+ * @since_tizen 5.5
+ *
+ * @param[in] service Service information.
+ *
+ * @return 0 on success, otherwise a negative error value
+ * @retval #UAM_ERROR_NONE Successful
+ * @retval #UAM_ERROR_INVALID_PARAMETER Invalid parameters
+ * @retval #UAM_ERROR_INTERNAL Internal error
+ *
+ * @exception
+ * @pre
+ * @post
+ */
+int _uam_update_service(uam_service_info_s *service);
+
+/**
* @brief Unregisters service info.
* @since_tizen 5.5
*
REQUEST(UAM_REQUEST_RESET_DB) \
REQUEST(UAM_REQUEST_GET_DEFAULT_SERVICE) \
REQUEST(UAM_REQUEST_REGISTER_SERVICE) \
+ REQUEST(UAM_REQUEST_UPDATE_SERVICE) \
REQUEST(UAM_REQUEST_UNREGISTER_SERVICE) \
REQUEST(UAM_REQUEST_GET_SERVICE_DEVICES) \
REQUEST(UAM_REQUEST_GET_SERVICE_USERS) \
Name: ua-manager
Summary: User awareness manager
-Version: 0.11.4
+Version: 0.11.5
Release: 1
License: Apache-2.0
Source0: %{name}-%{version}.tar.gz
return ret;
}
+UAM_EXPORT_API int _uam_update_service(uam_service_info_s *service)
+{
+ FUNC_ENTRY;
+ int ret;
+
+ UAM_VALIDATE_INPUT_PARAMETER(service);
+ UAM_VALIDATE_INPUT_PARAMETER(service->name);
+
+ UAM_INIT_PARAMS();
+ UAM_ALLOC_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
+
+ g_array_append_vals(in_param1, service, sizeof(uam_service_info_s));
+ ret = _uam_sync_request(UAM_REQUEST_UPDATE_SERVICE,
+ in_param1, in_param2, in_param3, in_param4, &out_param);
+
+ UAM_FREE_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
+
+ FUNC_EXIT;
+ return ret;
+}
+
UAM_EXPORT_API int _uam_unregister_service(uam_service_info_s *service)
{
FUNC_ENTRY;
int _uam_core_register_service(uam_service_info_s *svc);
+int _uam_core_update_service(uam_service_info_s *svc);
+
int _uam_core_unregister_service(const char *svc_name);
int _uam_core_get_service_devices(const char *svc_name, int *count, uam_device_info_s **device_list);
/* update */
int _uam_db_update_service_cycle(const char *service_name, int cycle);
+int _uam_db_update_service_info(uam_db_service_info_t *service);
/* DEVICE_SERVICE QUERIES */
return UAM_ERROR_NONE;
}
+int _uam_core_update_service(uam_service_info_s *svc)
+{
+ FUNC_ENTRY;
+ GSList *l;
+ uam_db_service_info_t *service;
+
+ retv_if(NULL == svc->name, UAM_ERROR_INVALID_PARAMETER);
+
+ /* Retrieve service from list */
+ l = g_slist_find_custom(services, svc->name, __compare_svc_name);
+ retv_if((NULL == l) || (l->data == NULL), UAM_ERROR_NOT_REGISTERED);
+
+ service = l->data;
+ service->presence_threshold = svc->presence_threshold;
+ service->absence_threshold = svc->absence_threshold;
+
+ /* Update service to database */
+ if (UAM_ERROR_NONE != _uam_db_update_service_info(service)) {
+ UAM_ERR("_uam_db_update_service_info failed");
+ return UAM_ERROR_DB_FAILED;
+ }
+
+ FUNC_EXIT;
+ return UAM_ERROR_NONE;
+}
+
int _uam_core_get_default_service(uam_service_info_s *service_info)
{
FUNC_ENTRY;
g_strlcpy((*service_list)[*count].name,
db_info->name, UAM_SERVICE_MAX_STRING_LEN);
+ (*service_list)[*count].presence_threshold = db_info->presence_threshold;
+ (*service_list)[*count].absence_threshold = db_info->absence_threshold;
*count += 1;
}
break;
}
+ case UAM_REQUEST_UPDATE_SERVICE: {
+ uam_service_info_s svc;
+
+ __uam_manager_copy_params(in_param1,
+ &svc, sizeof(uam_service_info_s));
+ UAM_DBG("Name: [%s] Threshold presence: [%d] absence: [%d]",
+ svc.name, svc.presence_threshold, svc.absence_threshold);
+
+ result = _uam_core_update_service(&svc);
+ break;
+
+ }
case UAM_REQUEST_UNREGISTER_SERVICE: {
const char *svc_name;
case UAM_REQUEST_RESET_DB:
case UAM_REQUEST_GET_DEFAULT_SERVICE:
case UAM_REQUEST_REGISTER_SERVICE:
+ case UAM_REQUEST_UPDATE_SERVICE:
case UAM_REQUEST_UNREGISTER_SERVICE:
case UAM_REQUEST_GET_SERVICE_DEVICES:
case UAM_REQUEST_GET_SERVICE_USERS:
#define UPDATE_CYCLE "UPDATE services SET cycle = ? WHERE service_name = ?"
+#define UPDATE_SERVICE "UPDATE services SET (presence_threshold, absence_threshold) " \
+ "= (?, ?) WHERE service_name = ?"
+
#define DELETE_ALL_SERVICES "delete from services"
#define DELETE_SERVICE_INFO "delete from services WHERE service_name = ?"
/* UPDATE statements */
static sqlite3_stmt *update_cycle;
+static sqlite3_stmt *update_service_info;
/* INSERT statements */
static sqlite3_stmt *insert_service_info;
FUNC_ENTRY;
FINALIZE(update_cycle);
+ FINALIZE(update_service_info);
FUNC_EXIT;
}
PREPARE_QUERY(rc, db, update_cycle,
UPDATE_CYCLE, __uam_service_finalize_update);
+ PREPARE_QUERY(rc, db, update_service_info,
+ UPDATE_SERVICE, __uam_service_finalize_update);
initialized = 1;
FUNC_EXIT;
return error_code;
}
+int _uam_db_update_service_info(uam_db_service_info_t *svc)
+{
+ FUNC_ENTRY;
+ int error_code = UAM_ERROR_NONE;
+ sqlite3_stmt *stmt = update_service_info;
+ int sql_ret = SQLITE_OK;
+
+ retv_if(NULL == svc->name, UAM_ERROR_INVALID_PARAMETER);
+
+ UAM_INFO("%s-%d-%d-%d", svc->name, svc->cycle, svc->presence_threshold,
+ svc->absence_threshold);
+
+ DB_ACTION(sqlite3_bind_int(stmt, 1, svc->presence_threshold),
+ error_code, handle_error);
+ DB_ACTION(sqlite3_bind_int(stmt, 2, svc->absence_threshold),
+ error_code, handle_error);
+ DB_ACTION(sqlite3_bind_text(stmt, 3, svc->name, -1, SQLITE_TRANSIENT),
+ error_code, handle_error);
+
+ sql_ret = sqlite3_step(stmt);
+ if (sql_ret != SQLITE_DONE) {
+ UAM_ERR("Failed to update service info [%d:%s]",
+ sql_ret, sqlite3_errmsg(database_handle));
+ error_code = UAM_ERROR_DB_FAILED;
+ goto handle_error;
+ }
+
+ UAM_DBG("Service info updated");
+
+handle_error:
+ sqlite3_reset(stmt);
+ FUNC_EXIT;
+ return error_code;
+}
+
int _uam_db_delete_service_info(const char *service_name)
{
FUNC_ENTRY;