[gnome-keyring/dbus-api] [dbus] Return dbus messages from method/property handlers.
- From: Stefan Walter <stefw src gnome org>
- To: svn-commits-list gnome org
- Cc:
- Subject: [gnome-keyring/dbus-api] [dbus] Return dbus messages from method/property handlers.
- Date: Sat, 22 Aug 2009 13:41:55 +0000 (UTC)
commit 46dbc9cc44c2d0d26d8d05fab7d23a339cefd98a
Author: Stef Walter <stef memberwebs com>
Date: Sat Aug 22 13:40:53 2009 +0000
[dbus] Return dbus messages from method/property handlers.
Simpler overall construction. Only async methods shouldn't
return a message. They'll return the usual handler result.
daemon/dbus/gkd-secrets-objects.c | 9 +++++++-
daemon/dbus/gkd-secrets-service.c | 20 ++++++++++++------
daemon/dbus/gkd-secrets-session.c | 38 +++++++++++++++++-------------------
3 files changed, 39 insertions(+), 28 deletions(-)
---
diff --git a/daemon/dbus/gkd-secrets-objects.c b/daemon/dbus/gkd-secrets-objects.c
index 4a422d5..5e6259a 100644
--- a/daemon/dbus/gkd-secrets-objects.c
+++ b/daemon/dbus/gkd-secrets-objects.c
@@ -92,10 +92,12 @@ gkd_sercets_objects_property_handler (DBusConnection *conn, DBusMessage *message
}
}
#endif
+
static DBusHandlerResult
gkd_secrets_objects_message_handler (DBusConnection *conn, DBusMessage *message, gpointer user_data)
{
GkdSecretsObjects *self = user_data;
+ DBusMessage *reply = NULL;
g_return_val_if_fail (conn && message, DBUS_HANDLER_RESULT_NOT_YET_HANDLED);
g_return_val_if_fail (GKD_SECRETS_IS_OBJECTS (self), DBUS_HANDLER_RESULT_NOT_YET_HANDLED);
@@ -130,7 +132,12 @@ gkd_secrets_objects_message_handler (DBusConnection *conn, DBusMessage *message,
g_return_val_if_reached (DBUS_HANDLER_RESULT_NOT_YET_HANDLED); /* TODO: Need to implement */
#endif
- return DBUS_HANDLER_RESULT_NOT_YET_HANDLED;
+ if (reply == NULL)
+ return DBUS_HANDLER_RESULT_NOT_YET_HANDLED;
+
+ dbus_connection_send (conn, reply, NULL);
+ dbus_message_unref (reply);
+ return DBUS_HANDLER_RESULT_HANDLED;
}
/* -----------------------------------------------------------------------------
diff --git a/daemon/dbus/gkd-secrets-service.c b/daemon/dbus/gkd-secrets-service.c
index 3c27caf..d1f0283 100644
--- a/daemon/dbus/gkd-secrets-service.c
+++ b/daemon/dbus/gkd-secrets-service.c
@@ -219,7 +219,7 @@ on_get_connection_unix_process_id (DBusPendingCall *pending, gpointer user_data)
*/
static DBusHandlerResult
-gkd_secrets_service_open_session (GkdSecretsService *self, DBusConnection *conn, DBusMessage *message)
+service_begin_open_session (GkdSecretsService *self, DBusConnection *conn, DBusMessage *message)
{
on_get_connection_unix_process_id_args *args;
DBusMessage *request, *reply;
@@ -267,10 +267,10 @@ gkd_secrets_service_open_session (GkdSecretsService *self, DBusConnection *conn,
return DBUS_HANDLER_RESULT_HANDLED;
}
-static DBusHandlerResult
-gkd_sercets_service_property_handler (DBusConnection *conn, DBusMessage *message, gpointer user_data)
+static DBusMessage*
+service_property_handler (GkdSecretsService *self, DBusMessage *message)
{
- g_return_val_if_reached (DBUS_HANDLER_RESULT_NOT_YET_HANDLED); /* TODO: Need to implement */
+ g_return_val_if_reached (NULL); /* TODO: Need to implement */
#if 0
/* org.freedesktop.DBus.Properties.Get */
if (dbus_message_is_method_call (message, PROPERTIES_INTERFACE, "Get") &&
@@ -294,17 +294,18 @@ static DBusHandlerResult
gkd_secrets_service_message_handler (DBusConnection *conn, DBusMessage *message, gpointer user_data)
{
GkdSecretsService *self = user_data;
+ DBusMessage *reply = NULL;
g_return_val_if_fail (conn && message, DBUS_HANDLER_RESULT_NOT_YET_HANDLED);
g_return_val_if_fail (GKD_SECRETS_IS_SERVICE (self), DBUS_HANDLER_RESULT_NOT_YET_HANDLED);
/* Check if it's properties, and hand off to property handler. */
if (dbus_message_has_interface (message, PROPERTIES_INTERFACE))
- return gkd_sercets_service_property_handler (conn, message, self);
+ reply = service_property_handler (self, message);
/* org.freedesktop.Secrets.Service.OpenSession() */
else if (dbus_message_is_method_call (message, SECRETS_SERVICE_INTERFACE, "OpenSession"))
- return gkd_secrets_service_open_session (self, conn, message);
+ return service_begin_open_session (self, conn, message);
/* org.freedesktop.Secrets.Service.CreateCollection() */
else if (dbus_message_is_method_call (message, SECRETS_SERVICE_INTERFACE, "CreateCollection"))
@@ -322,7 +323,12 @@ gkd_secrets_service_message_handler (DBusConnection *conn, DBusMessage *message,
else if (dbus_message_is_method_call (message, SECRETS_SERVICE_INTERFACE, "RetrieveSecrets"))
g_return_val_if_reached (DBUS_HANDLER_RESULT_NOT_YET_HANDLED); /* TODO: Need to implement */
- return DBUS_HANDLER_RESULT_NOT_YET_HANDLED;
+ if (reply == NULL)
+ return DBUS_HANDLER_RESULT_NOT_YET_HANDLED;
+
+ dbus_connection_send (conn, reply, NULL);
+ dbus_message_unref (reply);
+ return DBUS_HANDLER_RESULT_HANDLED;
}
static DBusHandlerResult
diff --git a/daemon/dbus/gkd-secrets-session.c b/daemon/dbus/gkd-secrets-session.c
index 2222c03..63c1cc3 100644
--- a/daemon/dbus/gkd-secrets-session.c
+++ b/daemon/dbus/gkd-secrets-session.c
@@ -56,30 +56,27 @@ static guint unique_session_number = 0;
* DBUS
*/
-static DBusHandlerResult
-gkd_secrets_session_close (GkdSecretsSession *self, DBusConnection *conn, DBusMessage *message)
+static DBusMessage*
+session_method_close (GkdSecretsSession *self, DBusMessage *message)
{
DBusMessage *reply;
- g_return_val_if_fail (self->service, DBUS_HANDLER_RESULT_NOT_YET_HANDLED);
+ g_return_val_if_fail (self->service, NULL);
if (!dbus_message_get_args (message, NULL, DBUS_TYPE_INVALID))
- return DBUS_HANDLER_RESULT_NOT_YET_HANDLED;
+ return NULL;
gkd_secrets_service_close_session (self->service, self);
reply = dbus_message_new_method_return (message);
dbus_message_append_args (reply, DBUS_TYPE_INVALID);
- dbus_connection_send (conn, reply, NULL);
- dbus_message_unref (reply);
-
- return DBUS_HANDLER_RESULT_HANDLED;
+ return reply;
}
-static DBusHandlerResult
-gkd_sercets_session_property_handler (DBusConnection *conn, DBusMessage *message, gpointer user_data)
+static DBusMessage*
+session_property_handler (GkdSecretsSession *self, DBusMessage *message)
{
- g_return_val_if_reached (DBUS_HANDLER_RESULT_NOT_YET_HANDLED); /* TODO: Need to implement */
+ g_return_val_if_reached (NULL); /* TODO: Need to implement */
#if 0
/* org.freedesktop.DBus.Properties.Get */
if (dbus_message_is_method_call (message, PROPERTIES_INTERFACE, "Get") &&
@@ -103,8 +100,8 @@ static DBusHandlerResult
gkd_secrets_session_message_handler (DBusConnection *conn, DBusMessage *message, gpointer user_data)
{
GkdSecretsSession *self = user_data;
+ DBusMessage *reply = NULL;
const gchar *caller;
- DBusMessage *reply;
g_return_val_if_fail (conn && message, DBUS_HANDLER_RESULT_NOT_YET_HANDLED);
g_return_val_if_fail (GKD_SECRETS_IS_SESSION (self), DBUS_HANDLER_RESULT_NOT_YET_HANDLED);
@@ -114,18 +111,14 @@ gkd_secrets_session_message_handler (DBusConnection *conn, DBusMessage *message,
if (!caller || !g_str_equal (caller, self->caller)) {
reply = dbus_message_new_error (message, DBUS_ERROR_ACCESS_DENIED,
"This session does not belong to your application");
- dbus_connection_send (conn, reply, NULL);
- dbus_message_unref (reply);
- return DBUS_HANDLER_RESULT_HANDLED;
- }
/* Check if it's properties, and hand off to property handler. */
- if (dbus_message_has_interface (message, PROPERTIES_INTERFACE))
- return gkd_sercets_session_property_handler (conn, message, self);
+ } else if (dbus_message_has_interface (message, PROPERTIES_INTERFACE))
+ reply = session_property_handler (self, message);
/* org.freedesktop.Secrets.Session.Close() */
else if (dbus_message_is_method_call (message, SECRETS_SERVICE_INTERFACE, "Close"))
- return gkd_secrets_session_close (self, conn, message);
+ reply = session_method_close (self, message);
/* org.freedesktop.Secrets.Session.Negotiate() */
else if (dbus_message_is_method_call (message, SECRETS_SERVICE_INTERFACE, "Negotiate"))
@@ -147,7 +140,12 @@ gkd_secrets_session_message_handler (DBusConnection *conn, DBusMessage *message,
else if (dbus_message_is_method_call (message, SECRETS_SERVICE_INTERFACE, "GetSecret"))
g_return_val_if_reached (DBUS_HANDLER_RESULT_NOT_YET_HANDLED); /* TODO: Need to implement */
- return DBUS_HANDLER_RESULT_NOT_YET_HANDLED;
+ if (reply == NULL)
+ return DBUS_HANDLER_RESULT_NOT_YET_HANDLED;
+
+ dbus_connection_send (conn, reply, NULL);
+ dbus_message_unref (reply);
+ return DBUS_HANDLER_RESULT_HANDLED;
}
/* -----------------------------------------------------------------------------
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]