1 /******************************************************************************
4 * Company XS Embedded GmbH
5 *****************************************************************************/
6 /******************************************************************************
7 * This Source Code Form is subject to the terms of the
8 * Mozilla Public License, v. 2.0. If a copy of the MPL was not distributed
9 * with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
10 ******************************************************************************/
12 * @file persistence_client_library_lc_interface.c
13 * @ingroup Persistence client library
14 * @author Ingo Huerner
15 * @brief Implementation of the persistence client library lifecycle interface.
20 #include "persistence_client_library_lc_interface.h"
22 #include "../include_protected/persistence_client_library_data_organization.h"
23 #include "../include_protected/persistence_client_library_db_access.h"
25 #include "persistence_client_library_handle.h"
26 #include "persistence_client_library_pas_interface.h"
27 #include "persistence_client_library_dbus_service.h"
28 #include "persistence_client_library_custom_loader.h"
29 #include "persistence_client_library_prct_access.h"
30 #include "persistence_client_library_itzam_errors.h"
39 int check_lc_request(int request, int requestID)
45 case NsmShutdownNormal:
47 if(-1 == deliverToMainloop(CMD_LC_PREPARE_SHUTDOWN, request, requestID) )
49 DLT_LOG(gDLTContext, DLT_LOG_ERROR, DLT_STRING("check_lc_request => failed to write to pipe"), DLT_INT(errno));
50 rval = NsmErrorStatus_Fail;
54 rval = NsmErrorStatus_OK;
60 DLT_LOG(gDLTContext, DLT_LOG_ERROR, DLT_STRING("check_lc_request => Unknown lifecycle message"), DLT_INT(request));
69 int msg_lifecycleRequest(DBusConnection *connection, DBusMessage *message)
77 dbus_error_init (&error);
79 if (!dbus_message_get_args (message, &error, DBUS_TYPE_UINT32, &request,
80 DBUS_TYPE_UINT32, &requestID,
83 reply = dbus_message_new_error(message, error.name, error.message);
87 DLT_LOG(gDLTContext, DLT_LOG_ERROR, DLT_STRING("msg_lifecycleRequest => DBus No memory"));
90 if (!dbus_connection_send(connection, reply, 0))
92 DLT_LOG(gDLTContext, DLT_LOG_ERROR, DLT_STRING("msg_lifecycleRequest => DBus No memory"));
95 dbus_message_unref(reply);
97 return DBUS_HANDLER_RESULT_NOT_YET_HANDLED;
100 msgReturn = check_lc_request(request, requestID);
102 reply = dbus_message_new_method_return(message);
106 DLT_LOG(gDLTContext, DLT_LOG_ERROR, DLT_STRING("msg_lifecycleRequest => DBus No memory"));
109 if (!dbus_message_append_args(reply, DBUS_TYPE_INT32, &msgReturn, DBUS_TYPE_INVALID))
111 DLT_LOG(gDLTContext, DLT_LOG_ERROR, DLT_STRING("msg_lifecycleRequest => DBus No memory"));
114 if (!dbus_connection_send(connection, reply, 0))
116 DLT_LOG(gDLTContext, DLT_LOG_ERROR, DLT_STRING("msg_lifecycleRequest => DBus No memory"));
119 dbus_connection_flush(connection);
120 dbus_message_unref(reply);
122 return DBUS_HANDLER_RESULT_HANDLED;
128 DBusHandlerResult checkLifecycleMsg(DBusConnection * connection, DBusMessage * message, void * user_data)
130 DBusHandlerResult result = DBUS_HANDLER_RESULT_NOT_YET_HANDLED;
132 if((0==strncmp("org.genivi.NodeStateManager.LifeCycleConsumer", dbus_message_get_interface(message), 20)))
134 if((0==strncmp("LifecycleRequest", dbus_message_get_member(message), 18)))
136 result = msg_lifecycleRequest(connection, message);
140 DLT_LOG(gDLTContext, DLT_LOG_ERROR, DLT_STRING("checkLifecycleMsg -> unknown message "), DLT_STRING(dbus_message_get_interface(message)));
148 int register_lifecycle(int shutdownMode)
150 return deliverToMainloop(CMD_SEND_LC_REGISTER, 1, shutdownMode);
155 int unregister_lifecycle(int shutdownMode)
157 return deliverToMainloop(CMD_SEND_LC_REGISTER, 0, shutdownMode);
162 int send_prepare_shutdown_complete(int requestId, int status)
164 return deliverToMainloop(CMD_SEND_LC_REQUEST, status, requestId);