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 @@ + + +