diff --git a/mms-engine/main.c b/mms-engine/main.c
index 6008051..dd28290 100644
--- a/mms-engine/main.c
+++ b/mms-engine/main.c
@@ -57,6 +57,7 @@ typedef struct mms_app_dbus_policy {
#define MMS_ENGINE_DBUS_METHOD_SET_LOG_TYPE "setLogType"
#define MMS_ENGINE_DBUS_METHOD_GET_VERSION "getVersion"
#define MMS_ENGINE_DBUS_METHOD_MIGRATE_SETTINGS "migrateSettings"
+#define MMS_ENGINE_DBUS_METHOD_EXIT "exit"
static const DA_ACTION mms_engine_dbus_actions[] = {
#define INIT_DA_ACTION(id) \
@@ -74,7 +75,8 @@ static const MMSAppDBusPolicy mms_engine_default_dbus_policy = {
MMS_ENGINE_DBUS_METHOD_SEND_MESSAGE"()|"
MMS_ENGINE_DBUS_METHOD_SET_LOG_LEVEL"()|"
MMS_ENGINE_DBUS_METHOD_SET_LOG_TYPE"()|"
- MMS_ENGINE_DBUS_METHOD_MIGRATE_SETTINGS"()))|"
+ MMS_ENGINE_DBUS_METHOD_MIGRATE_SETTINGS"()|"
+ MMS_ENGINE_DBUS_METHOD_EXIT"()))|"
"((!(user("RADIO_USER")&group("RADIO_GROUP")))&("
MMS_ENGINE_DBUS_METHOD_PUSH"()|"
MMS_ENGINE_DBUS_METHOD_PUSH_NOTIFY "()))=deny",
diff --git a/mms-engine/mms_engine.c b/mms-engine/mms_engine.c
index 876ab63..f3f60d8 100644
--- a/mms-engine/mms_engine.c
+++ b/mms-engine/mms_engine.c
@@ -547,6 +547,23 @@ mms_engine_handle_migrate_settings(
return TRUE;
}
+/* org.nemomobile.MmsEngine.exit */
+static
+gboolean
+mms_engine_handle_exit(
+ OrgNemomobileMmsEngine* proxy,
+ GDBusMethodInvocation* call,
+ MMSEngine* engine)
+{
+ /* mms_engine_dbus_access_allowed completes the call if access is denied */
+ if (mms_engine_dbus_access_allowed(engine, call, MMS_ENGINE_ACTION_EXIT)) {
+ GDEBUG("Exit requested over D-Bus");
+ mms_engine_stop(engine);
+ org_nemomobile_mms_engine_complete_exit(proxy, call);
+ }
+ return TRUE;
+}
+
MMSEngine*
mms_engine_new(
const MMSConfig* config,
@@ -636,6 +653,9 @@ mms_engine_new(
mms->proxy_signal_id[MMS_ENGINE_METHOD_MIGRATE_SETTINGS] =
g_signal_connect(mms->proxy, "handle-migrate-settings",
G_CALLBACK(mms_engine_handle_migrate_settings), mms);
+ mms->proxy_signal_id[MMS_ENGINE_METHOD_EXIT] =
+ g_signal_connect(mms->proxy, "handle-exit",
+ G_CALLBACK(mms_engine_handle_exit), mms);
return mms;
}
diff --git a/mms-engine/mms_engine.h b/mms-engine/mms_engine.h
index ef4ed39..11e4aeb 100644
--- a/mms-engine/mms_engine.h
+++ b/mms-engine/mms_engine.h
@@ -49,7 +49,8 @@
m(SET_LOG_LEVEL) \
m(SET_LOG_TYPE) \
m(GET_VERSION) \
- m(MIGRATE_SETTINGS)
+ m(MIGRATE_SETTINGS) \
+ m(EXIT)
typedef enum mms_engine_action {
/* Action ids must be non-zero, shift those by one */
diff --git a/mms-engine/org.nemomobile.MmsEngine.xml b/mms-engine/org.nemomobile.MmsEngine.xml
index ff68a6f..a47e7d3 100644
--- a/mms-engine/org.nemomobile.MmsEngine.xml
+++ b/mms-engine/org.nemomobile.MmsEngine.xml
@@ -211,5 +211,8 @@
+
+
+