[gnome-keyring/dbus-api] [dbus] Add start of implementation of session object.
- From: Stefan Walter <stefw src gnome org>
- To: svn-commits-list gnome org
- Cc:
- Subject: [gnome-keyring/dbus-api] [dbus] Add start of implementation of session object.
- Date: Fri, 21 Aug 2009 19:41:06 +0000 (UTC)
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]