[gnome-keyring/dbus-api] [dbus] Add start of implementation of session object.



commit f71149bb726914bb2152a6e75379ace20e0708ed
Author: Stef Walter <stef memberwebs com>
Date:   Fri Aug 21 17:06:55 2009 +0000

    [dbus] Add start of implementation of session object.
    
    Hook up the Close() method of session object, and OpenSession
    now actually creates a real object.

 daemon/dbus/Makefile.am           |    1 +
 daemon/dbus/gkd-secrets-service.c |   94 ++++-------
 daemon/dbus/gkd-secrets-service.h |    5 +-
 daemon/dbus/gkd-secrets-session.c |  328 +++++++++++++++++++++++++++++++++++++
 daemon/dbus/gkd-secrets-session.h |   51 ++++++
 5 files changed, 421 insertions(+), 58 deletions(-)
---
diff --git a/daemon/dbus/Makefile.am b/daemon/dbus/Makefile.am
index 3093bbf..9c6d460 100644
--- a/daemon/dbus/Makefile.am
+++ b/daemon/dbus/Makefile.am
@@ -18,6 +18,7 @@ libgkr_dbus_la_SOURCES = \
 	gkd-dbus-session.c \
 	gkd-dbus-util.c gkd-dbus-util.h \
 	gkd-secrets-service.c gkd-secrets-service.h \
+	gkd-secrets-session.c gkd-secrets-session.h \
 	gkd-secrets-types.h
 
 libgkr_dbus_la_LIBADD = \
diff --git a/daemon/dbus/gkd-secrets-service.c b/daemon/dbus/gkd-secrets-service.c
index 5d757f4..4d23aa6 100644
--- a/daemon/dbus/gkd-secrets-service.c
+++ b/daemon/dbus/gkd-secrets-service.c
@@ -23,9 +23,7 @@
 
 #include "gkd-dbus-util.h"
 #include "gkd-secrets-service.h"
-#if 0
 #include "gkd-secrets-session.h"
-#endif
 
 #include "egg/egg-unix-credentials.h"
 
@@ -43,7 +41,7 @@ enum {
 struct _GkdSecretsService {
 	GObject parent;
 	DBusConnection *connection;
-	GHashTable *sessions;
+	GList *sessions;
 #if 0
 	gchar *default_collection;
 #endif
@@ -59,13 +57,6 @@ G_DEFINE_TYPE (GkdSecretsService, gkd_secrets_service, G_TYPE_OBJECT);
  * INTERNAL
  */
 
-static gboolean
-dispose_each_object (gpointer key, gpointer value, gpointer data)
-{
-	g_object_run_dispose (G_OBJECT (value));
-	return TRUE;
-}
-
 #if 0
 static void
 update_default (GkdSecretsService *self)
@@ -108,6 +99,7 @@ on_get_connection_unix_process_id (DBusPendingCall *pending, gpointer user_data)
 	DBusError error = DBUS_ERROR_INIT;
 	gchar *caller_exec = NULL;
 	dbus_uint32_t caller_pid = 0;
+	GkdSecretsSession *session;
 	GkdSecretsService *self;
 	const gchar *caller;
 	const gchar *path;
@@ -118,15 +110,6 @@ on_get_connection_unix_process_id (DBusPendingCall *pending, gpointer user_data)
 	caller = dbus_message_get_sender (args->message);
 	g_return_if_fail (caller);
 
-	/* Check in case we already have a session open for this caller */
-	if (g_hash_table_lookup (self->sessions, caller)) {
-		reply = dbus_message_new_error_printf (args->message, SECRETS_ERROR_ALREADY_EXISTS,
-		                                       "A session already exists for this caller: %s", caller);
-		dbus_connection_send (self->connection, reply, NULL);
-		dbus_message_unref (reply);
-		return;
-	}
-
 	/* Get the resulting process ID */
 	reply = dbus_pending_call_steal_reply (pending);
 	g_return_if_fail (reply);
@@ -149,33 +132,22 @@ on_get_connection_unix_process_id (DBusPendingCall *pending, gpointer user_data)
 	if (caller_pid != 0)
 		caller_exec = egg_unix_credentials_executable (caller_pid);
 
-	g_printerr ("caller: %s   pid: %d   exec: %s", caller, caller_pid, caller_exec);
-
-#if 0
 	/* Now we can create a session with this information */
-	sess = g_object_new (GKD_SECRETS_TYPE_SESSION,
-	                     "connection", self->connection,
-	                     "caller-executable", caller_exec,
-	                     "caller", caller,
-	                     "service", self,
-	                     NULL);
+	session = g_object_new (GKD_SECRETS_TYPE_SESSION,
+	                        "caller-executable", caller_exec,
+	                        "caller", caller,
+	                        "service", self,
+	                        NULL);
 	g_free (caller_exec);
-#endif
 
-#if 0
-	path = gkd_secrets_session_get_object_path (sess);
-#endif
-	path = "/test";
+	/* Take ownership of the session */
+	self->sessions = g_list_prepend (self->sessions, session);
 
+	path = gkd_secrets_session_get_object_path (session);
 	reply = dbus_message_new_method_return (args->message);
 	dbus_message_append_args (reply, DBUS_TYPE_OBJECT_PATH, &path, DBUS_TYPE_INVALID);
 	dbus_connection_send (args->self->connection, reply, NULL);
 	dbus_message_unref (reply);
-
-#if 0
-	/* Add a reference to our session hash table for this caller */
-	g_hash_table_insert (self->sessions, g_strdup (caller), sess);
-#endif
 }
 
 /* -----------------------------------------------------------------------------
@@ -312,13 +284,21 @@ gkd_secrets_service_constructor (GType type, guint n_props, GObjectConstructPara
 static void
 gkd_secrets_service_init (GkdSecretsService *self)
 {
-	self->sessions = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, g_object_unref);
+	self->sessions = NULL;
 }
 
 static void
 gkd_secrets_service_dispose (GObject *obj)
 {
 	GkdSecretsService *self = GKD_SECRETS_SERVICE (obj);
+	GList *l;
+
+	for (l = self->sessions; l; l = g_list_next (l)) {
+		g_object_run_dispose (G_OBJECT (l->data));
+		g_object_unref (l->data);
+	}
+	g_list_free (self->sessions);
+	self->sessions = NULL;
 
 	if (self->connection) {
 		if (!dbus_connection_unregister_object_path (self->connection, SECRETS_SERVICE_PATH))
@@ -327,8 +307,6 @@ gkd_secrets_service_dispose (GObject *obj)
 		self->connection = NULL;
 	}
 
-	g_hash_table_foreach_remove (self->sessions, dispose_each_object, NULL);
-
 	G_OBJECT_CLASS (gkd_secrets_service_parent_class)->dispose (obj);
 }
 
@@ -337,9 +315,7 @@ gkd_secrets_service_finalize (GObject *obj)
 {
 	GkdSecretsService *self = GKD_SECRETS_SERVICE (obj);
 
-	g_assert (g_hash_table_size (self->sessions) == 0);
-	g_hash_table_destroy (self->sessions);
-	self->sessions = NULL;
+	g_assert (!self->sessions);
 
 #if 0
 	g_free (self->pv->default_collection);
@@ -375,7 +351,7 @@ gkd_secrets_service_get_property (GObject *obj, guint prop_id, GValue *value,
 
 	switch (prop_id) {
 	case PROP_CONNECTION:
-		g_value_set_boxed (value, self->connection);
+		g_value_set_boxed (value, gkd_secrets_service_get_connection (self));
 		break;
 	default:
 		G_OBJECT_WARN_INVALID_PROPERTY_ID (obj, prop_id, pspec);
@@ -405,26 +381,30 @@ gkd_secrets_service_class_init (GkdSecretsServiceClass *klass)
  * PUBLIC
  */
 
-#if 0
+DBusConnection*
+gkd_secrets_service_get_connection (GkdSecretsService *self)
+{
+	g_return_val_if_fail (GKD_SECRETS_IS_SERVICE (self), NULL);
+	return self->connection;
+}
+
 void
-gkd_secrets_service_close_session (GkdSecretsService *self, GkdSecretsSession *sess)
+gkd_secrets_service_close_session (GkdSecretsService *self, GkdSecretsSession *session)
 {
-	const gchar *caller;
+	GList *l;
 
 	g_return_if_fail (GKD_SECRETS_IS_SERVICE (self));
-	g_return_if_fail (GKD_SECRETS_IS_SESSION (sess));
+	g_return_if_fail (GKD_SECRETS_IS_SESSION (session));
 
-	caller = gkd_secrets_session_get_caller (sess);
-	g_return_if_fail (g_hash_table_lookup (self->pv->sessions, caller) == sess);
-	g_return_if_fail (gkd_secrets_session_get_service (sess) == self);
+	l = g_list_find (self->sessions, session);
+	g_return_if_fail (l != NULL);
+	self->sessions = g_list_delete_link (self->sessions, l);
 
-	/* Close down the object for business */
-	g_object_ref (sess);
-	g_hash_table_remove (self->pv->sessions, caller);
-	g_object_run_dispose (G_OBJECT (sess));
-	g_object_unref (sess);
+	g_object_run_dispose (G_OBJECT (session));
+	g_object_unref (session);
 }
 
+#if 0
 GkdSecretsCollection*
 gkd_secrets_service_get_default_collection (GkdSecretsService *self)
 {
diff --git a/daemon/dbus/gkd-secrets-service.h b/daemon/dbus/gkd-secrets-service.h
index cec7e2b..cd9b99d 100644
--- a/daemon/dbus/gkd-secrets-service.h
+++ b/daemon/dbus/gkd-secrets-service.h
@@ -49,12 +49,15 @@ struct _GkdSecretsServiceClass {
 
 GType                   gkd_secrets_service_get_type               (void);
 
+DBusConnection*         gkd_secrets_service_get_connection         (GkdSecretsService *self);
+
 #if 0
 void                    gkd_secrets_service_refresh                (GkdSecretsService *self);
+#endif
 
 void                    gkd_secrets_service_close_session          (GkdSecretsService *self,
                                                                     GkdSecretsSession *sess);
-
+#if 0
 GkdSecretsCollection*   gkd_secrets_service_get_default_collection (GkdSecretsService *self);
 #endif
 
diff --git a/daemon/dbus/gkd-secrets-session.c b/daemon/dbus/gkd-secrets-session.c
new file mode 100644
index 0000000..2222c03
--- /dev/null
+++ b/daemon/dbus/gkd-secrets-session.c
@@ -0,0 +1,328 @@
+/*
+ * gnome-keyring
+ *
+ * Copyright (C) 2008 Stefan Walter
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
+ * 02111-1307, USA.
+ */
+
+#include "config.h"
+
+#include "gkd-secrets-service.h"
+#include "gkd-secrets-session.h"
+#include "gkd-secrets-types.h"
+
+#include <string.h>
+
+enum {
+	PROP_0,
+	PROP_CALLER,
+	PROP_CALLER_EXECUTABLE,
+	PROP_OBJECT_PATH,
+	PROP_SERVICE
+};
+
+struct _GkdSecretsSession {
+	GObject parent;
+	gchar *object_path;
+	GkdSecretsService *service;
+	gchar *caller_exec;
+	gchar *caller;
+	gboolean registered;
+};
+
+G_DEFINE_TYPE (GkdSecretsSession, gkd_secrets_session, G_TYPE_OBJECT);
+
+static guint unique_session_number = 0;
+
+/* -----------------------------------------------------------------------------
+ * INTERNAL
+ */
+
+/* -----------------------------------------------------------------------------
+ * DBUS
+ */
+
+static DBusHandlerResult
+gkd_secrets_session_close (GkdSecretsSession *self, DBusConnection *conn, DBusMessage *message)
+{
+	DBusMessage *reply;
+
+	g_return_val_if_fail (self->service, DBUS_HANDLER_RESULT_NOT_YET_HANDLED);
+
+	if (!dbus_message_get_args (message, NULL, DBUS_TYPE_INVALID))
+		return DBUS_HANDLER_RESULT_NOT_YET_HANDLED;
+
+	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;
+}
+
+static DBusHandlerResult
+gkd_sercets_session_property_handler (DBusConnection *conn, DBusMessage *message, gpointer user_data)
+{
+	g_return_val_if_reached (DBUS_HANDLER_RESULT_NOT_YET_HANDLED); /* TODO: Need to implement */
+#if 0
+	/* org.freedesktop.DBus.Properties.Get */
+	if (dbus_message_is_method_call (message, PROPERTIES_INTERFACE, "Get") &&
+	    dbus_message_has_signature (message, "ss")) {
+		xxx;
+
+	/* org.freedesktop.DBus.Properties.Set */
+	} else if (dbus_message_is_method_call (message, PROPERTIES_INTERFACE, "Set") &&
+	           dbus_message_has_signature (message, "ssv")) {
+		xxx;
+
+	/* org.freedesktop.DBus.Properties.GetAll */
+	} else if (dbus_message_is_method_call (message, PROPERTIES_INTERFACE, "GetAll") &&
+	           dbus_message_has_signature (message, "s")) {
+		xxx;
+	}
+#endif
+}
+
+static DBusHandlerResult
+gkd_secrets_session_message_handler (DBusConnection *conn, DBusMessage *message, gpointer user_data)
+{
+	GkdSecretsSession *self = user_data;
+	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);
+
+	/* Who is the caller of this message? */
+	caller = dbus_message_get_sender (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);
+
+	/* 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);
+
+	/* org.freedesktop.Secrets.Session.Negotiate() */
+	else if (dbus_message_is_method_call (message, SECRETS_SERVICE_INTERFACE, "Negotiate"))
+		g_return_val_if_reached (DBUS_HANDLER_RESULT_NOT_YET_HANDLED); /* TODO: Need to implement */
+
+	/* org.freedesktop.Secrets.Session.GetSecret() */
+	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 */
+
+	/* org.freedesktop.Secrets.Session.SetSecret() */
+	else if (dbus_message_is_method_call (message, SECRETS_SERVICE_INTERFACE, "SetSecret"))
+		g_return_val_if_reached (DBUS_HANDLER_RESULT_NOT_YET_HANDLED); /* TODO: Need to implement */
+
+	/* org.freedesktop.Secrets.Session.GetSecrets() */
+	else if (dbus_message_is_method_call (message, SECRETS_SERVICE_INTERFACE, "GetSecrets"))
+		g_return_val_if_reached (DBUS_HANDLER_RESULT_NOT_YET_HANDLED); /* TODO: Need to implement */
+
+	/* org.freedesktop.Secrets.Session.GetSecret() */
+	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;
+}
+
+/* -----------------------------------------------------------------------------
+ * OBJECT
+ */
+
+static GObject*
+gkd_secrets_session_constructor (GType type, guint n_props, GObjectConstructParam *props) 
+{
+	GkdSecretsSession *self = GKD_SECRETS_SESSION (G_OBJECT_CLASS (gkd_secrets_session_parent_class)->constructor(type, n_props, props));
+
+	g_return_val_if_fail (self, NULL);
+	g_return_val_if_fail (self->caller, NULL);
+	g_return_val_if_fail (self->service, NULL);
+
+	/* Now register the object */
+	self->object_path = g_strdup_printf (SECRETS_SESSION_PREFIX "/s%d", ++unique_session_number);
+	if (!dbus_connection_register_object_path (gkd_secrets_service_get_connection (self->service), self->object_path,
+	                                           &GKD_SECRETS_SESSION_GET_CLASS (self)->dbus_vtable, self))
+		g_return_val_if_reached (NULL);
+
+	return G_OBJECT (self);
+}
+
+static void
+gkd_secrets_session_init (GkdSecretsSession *self)
+{
+
+}
+
+static void
+gkd_secrets_session_dispose (GObject *obj)
+{
+	GkdSecretsSession *self = GKD_SECRETS_SESSION (obj);
+
+	if (self->object_path) {
+		if (self->service) {
+			if (!dbus_connection_unregister_object_path (gkd_secrets_service_get_connection (self->service), 
+			                                             self->object_path))
+				g_return_if_reached ();
+		}
+		g_free (self->object_path);
+		self->object_path = NULL;
+	}
+
+	if (self->service) {
+		g_object_remove_weak_pointer (G_OBJECT (self->service),
+		                              (gpointer*)&(self->service));
+		self->service = NULL;
+	}
+
+	G_OBJECT_CLASS (gkd_secrets_session_parent_class)->dispose (obj);
+}
+
+static void
+gkd_secrets_session_finalize (GObject *obj)
+{
+	GkdSecretsSession *self = GKD_SECRETS_SESSION (obj);
+
+	g_assert (!self->object_path);
+	g_assert (!self->service);
+
+	g_free (self->caller_exec);
+	self->caller_exec = NULL;
+
+	g_free (self->caller);
+	self->caller = NULL;
+
+	G_OBJECT_CLASS (gkd_secrets_session_parent_class)->finalize (obj);
+}
+
+static void
+gkd_secrets_session_set_property (GObject *obj, guint prop_id, const GValue *value, 
+                                  GParamSpec *pspec)
+{
+	GkdSecretsSession *self = GKD_SECRETS_SESSION (obj);
+
+	switch (prop_id) {
+	case PROP_CALLER:
+		g_return_if_fail (!self->caller);
+		self->caller = g_value_dup_string (value);
+		break;
+	case PROP_CALLER_EXECUTABLE:
+		g_return_if_fail (!self->caller_exec);
+		self->caller_exec = g_value_dup_string (value);
+		break;
+	case PROP_SERVICE:
+		g_return_if_fail (!self->service);
+		self->service = g_value_get_object (value);
+		g_return_if_fail (self->service);
+		g_object_add_weak_pointer (G_OBJECT (self->service),
+		                           (gpointer*)&(self->service));
+		break;
+	default:
+		G_OBJECT_WARN_INVALID_PROPERTY_ID (obj, prop_id, pspec);
+		break;
+	}
+}
+
+static void
+gkd_secrets_session_get_property (GObject *obj, guint prop_id, GValue *value,
+                                     GParamSpec *pspec)
+{
+	GkdSecretsSession *self = GKD_SECRETS_SESSION (obj);
+
+	switch (prop_id) {
+	case PROP_CALLER:
+		g_value_set_string (value, gkd_secrets_session_get_caller (self));
+		break;
+	case PROP_CALLER_EXECUTABLE:
+		g_value_set_string (value, gkd_secrets_session_get_caller_executable (self));
+		break;
+	case PROP_OBJECT_PATH:
+		g_value_set_boxed (value, gkd_secrets_session_get_object_path (self));
+		break;
+	case PROP_SERVICE:
+		g_value_set_object (value, self->service);
+		break;
+	default:
+		G_OBJECT_WARN_INVALID_PROPERTY_ID (obj, prop_id, pspec);
+		break;
+	}
+}
+
+static void
+gkd_secrets_session_class_init (GkdSecretsSessionClass *klass)
+{
+	GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
+
+	gobject_class->constructor = gkd_secrets_session_constructor;
+	gobject_class->dispose = gkd_secrets_session_dispose;
+	gobject_class->finalize = gkd_secrets_session_finalize;
+	gobject_class->set_property = gkd_secrets_session_set_property;
+	gobject_class->get_property = gkd_secrets_session_get_property;
+
+	klass->dbus_vtable.message_function = gkd_secrets_session_message_handler;
+
+	g_object_class_install_property (gobject_class, PROP_CALLER,
+		g_param_spec_string ("caller", "Caller", "DBus caller name",
+		                     NULL, G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY ));
+
+	g_object_class_install_property (gobject_class, PROP_CALLER_EXECUTABLE,
+		g_param_spec_string ("caller-executable", "Caller Executable", "Executable of caller",
+		                     NULL, G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY ));
+
+	g_object_class_install_property (gobject_class, PROP_OBJECT_PATH,
+	        g_param_spec_string ("object-path", "Object Path", "DBus Object Path",
+		                     NULL, G_PARAM_READABLE));
+
+	g_object_class_install_property (gobject_class, PROP_SERVICE,
+		g_param_spec_object ("service", "Service", "Service which owns this session",
+		                     GKD_SECRETS_TYPE_SERVICE, G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY));
+}
+
+/* -----------------------------------------------------------------------------
+ * PUBLIC
+ */
+
+const gchar*
+gkd_secrets_session_get_caller (GkdSecretsSession *self)
+{
+	g_return_val_if_fail (GKD_SECRETS_IS_SESSION (self), NULL);
+	return self->caller;
+}
+
+const gchar*
+gkd_secrets_session_get_caller_executable (GkdSecretsSession *self)
+{
+	g_return_val_if_fail (GKD_SECRETS_IS_SESSION (self), NULL);
+	return self->caller_exec;
+}
+
+const gchar*
+gkd_secrets_session_get_object_path (GkdSecretsSession *self)
+{
+	g_return_val_if_fail (GKD_SECRETS_IS_SESSION (self), NULL);
+	return self->object_path;
+}
diff --git a/daemon/dbus/gkd-secrets-session.h b/daemon/dbus/gkd-secrets-session.h
new file mode 100644
index 0000000..346ce4d
--- /dev/null
+++ b/daemon/dbus/gkd-secrets-session.h
@@ -0,0 +1,51 @@
+/*
+ * gnome-keyring
+ *
+ * Copyright (C) 2009 Stefan Walter
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
+ * 02111-1307, USA.
+ */
+
+#ifndef __GKD_SECRETS_SESSION_H__
+#define __GKD_SECRETS_SESSION_H__
+
+#include <glib-object.h>
+
+#include "gkd-secrets-types.h"
+
+#define GKD_SECRETS_TYPE_SESSION               (gkd_secrets_session_get_type ())
+#define GKD_SECRETS_SESSION(obj)               (G_TYPE_CHECK_INSTANCE_CAST ((obj), GKD_SECRETS_TYPE_SESSION, GkdSecretsSession))
+#define GKD_SECRETS_SESSION_CLASS(klass)       (G_TYPE_CHECK_CLASS_CAST ((klass), GKD_SECRETS_TYPE_SESSION, GkdSecretsSessionClass))
+#define GKD_SECRETS_IS_SESSION(obj)            (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GKD_SECRETS_TYPE_SESSION))
+#define GKD_SECRETS_IS_SESSION_CLASS(klass)    (G_TYPE_CHECK_CLASS_TYPE ((klass), GKD_SECRETS_TYPE_SESSION))
+#define GKD_SECRETS_SESSION_GET_CLASS(obj)     (G_TYPE_INSTANCE_GET_CLASS ((obj), GKD_SECRETS_TYPE_SESSION, GkdSecretsSessionClass))
+
+typedef struct _GkdSecretsSessionClass GkdSecretsSessionClass;
+
+struct _GkdSecretsSessionClass {
+	GObjectClass parent_class;
+	DBusObjectPathVTable dbus_vtable;
+};
+
+GType               gkd_secrets_session_get_type               (void);
+
+const gchar*        gkd_secrets_session_get_caller             (GkdSecretsSession *self);
+
+const gchar*        gkd_secrets_session_get_caller_executable  (GkdSecretsSession *self);
+
+const gchar*        gkd_secrets_session_get_object_path        (GkdSecretsSession *self);
+
+#endif /* __GKD_SECRETS_SESSION_H__ */



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]