[gnome-keyring/dbus-api] [dbus] Return dbus messages from method/property handlers.



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]