[gdm/display-configuration: 5/20] Add new getter to ck-connector to get session id
- From: Ray Strode <halfline src gnome org>
- To: svn-commits-list gnome org
- Cc:
- Subject: [gdm/display-configuration: 5/20] Add new getter to ck-connector to get session id
- Date: Tue, 4 Aug 2009 18:31:35 +0000 (UTC)
commit 04a020a046b0b2d974c065c302d5a82d643a69fb
Author: Ray Strode <rstrode redhat com>
Date: Tue Jun 23 17:36:34 2009 -0400
Add new getter to ck-connector to get session id
We'll need it for properly tracking which session is
active on a display.
daemon/ck-connector.c | 83 +++++++++++++++++++++++++++++++++++++++++++++++++
daemon/ck-connector.h | 1 +
2 files changed, 84 insertions(+), 0 deletions(-)
---
diff --git a/daemon/ck-connector.c b/daemon/ck-connector.c
index 9fb933b..8bd83fc 100644
--- a/daemon/ck-connector.c
+++ b/daemon/ck-connector.c
@@ -65,6 +65,7 @@ struct _CkConnector
{
int refcount;
char *cookie;
+ char *session_id;
dbus_bool_t session_created;
DBusConnection *connection;
};
@@ -184,6 +185,10 @@ _ck_connector_free (CkConnector *connector)
free (connector->cookie);
}
+ if (connector->session_id != NULL) {
+ free (connector->session_id);
+ }
+
free (connector);
}
@@ -244,6 +249,7 @@ ck_connector_new (void)
connector->refcount = 1;
connector->connection = NULL;
connector->cookie = NULL;
+ connector->session_id = NULL;
connector->session_created = FALSE;
oom:
return connector;
@@ -269,6 +275,7 @@ ck_connector_open_session (CkConnector *connector,
DBusMessage *reply;
dbus_bool_t ret;
char *cookie;
+ char *session_id;
_ck_return_val_if_fail (connector != NULL, FALSE);
_ck_return_val_if_fail ((error) == NULL || !dbus_error_is_set ((error)), FALSE);
@@ -337,10 +344,68 @@ ck_connector_open_session (CkConnector *connector,
goto out;
}
+ dbus_message_unref (message);
+ dbus_message_unref (reply);
+
+ message = dbus_message_new_method_call ("org.freedesktop.ConsoleKit",
+ "/org/freedesktop/ConsoleKit/Manager",
+ "org.freedesktop.ConsoleKit.Manager",
+ "GetSessionForCookie");
+ if (message == NULL) {
+ goto out;
+ }
+
+ dbus_message_append_args (message, DBUS_TYPE_STRING, &connector->cookie,
+ DBUS_TYPE_INVALID);
+
+ dbus_error_init (&local_error);
+
+ reply = dbus_connection_send_with_reply_and_block (connector->connection,
+ message,
+ -1,
+ &local_error);
+ if (reply == NULL) {
+ if (dbus_error_is_set (&local_error)) {
+ dbus_set_error (error,
+ CK_CONNECTOR_ERROR,
+ "Unable to open session: %s",
+ local_error.message);
+ dbus_error_free (&local_error);
+ goto out;
+ }
+ }
+
+ dbus_error_init (&local_error);
+ if (! dbus_message_get_args (reply,
+ &local_error,
+ DBUS_TYPE_OBJECT_PATH, &session_id,
+ DBUS_TYPE_INVALID)) {
+ if (dbus_error_is_set (&local_error)) {
+ dbus_set_error (error,
+ CK_CONNECTOR_ERROR,
+ "Unable to open session: %s",
+ local_error.message);
+ dbus_error_free (&local_error);
+ goto out;
+ }
+ }
+
+ connector->session_id = strdup (session_id);
+ if (connector->session_id == NULL) {
+ goto out;
+ }
+
connector->session_created = TRUE;
ret = TRUE;
out:
+ if (!ret) {
+ free (connector->cookie);
+ connector->cookie = NULL;
+ free (connector->session_id);
+ connector->session_id = NULL;
+ }
+
if (reply != NULL) {
dbus_message_unref (reply);
}
@@ -593,6 +658,24 @@ ck_connector_get_cookie (CkConnector *connector)
}
/**
+ * Gets the id for the current open session.
+ * Returns #NULL if no session is open.
+ *
+ * @returns a constant string with the session id.
+ */
+const char *
+ck_connector_get_session_id (CkConnector *connector)
+{
+ _ck_return_val_if_fail (connector != NULL, NULL);
+
+ if (! connector->session_created) {
+ return NULL;
+ } else {
+ return connector->session_id;
+ }
+}
+
+/**
* Issues the CloseSession method call on the ConsoleKit manager
* interface.
*
diff --git a/daemon/ck-connector.h b/daemon/ck-connector.h
index ab59f55..181ffdf 100644
--- a/daemon/ck-connector.h
+++ b/daemon/ck-connector.h
@@ -56,6 +56,7 @@ dbus_bool_t ck_connector_open_session (CkConnector *ckc,
DBusError *error);
const char *ck_connector_get_cookie (CkConnector *ckc);
+const char *ck_connector_get_session_id (CkConnector *ckc);
dbus_bool_t ck_connector_close_session (CkConnector *ckc,
DBusError *error);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]