summaryrefslogtreecommitdiff
path: root/gdbus/gdbusauthmechanism.c
diff options
context:
space:
mode:
Diffstat (limited to 'gdbus/gdbusauthmechanism.c')
-rw-r--r--gdbus/gdbusauthmechanism.c181
1 files changed, 177 insertions, 4 deletions
diff --git a/gdbus/gdbusauthmechanism.c b/gdbus/gdbusauthmechanism.c
index 313e465..56dfcbc 100644
--- a/gdbus/gdbusauthmechanism.c
+++ b/gdbus/gdbusauthmechanism.c
@@ -25,32 +25,205 @@
#include <glib/gi18n.h>
#include "gdbusauthmechanism.h"
+#include "gcredentials.h"
#include "gdbuserror.h"
#include "gdbusenumtypes.h"
+/* ---------------------------------------------------------------------------------------------------- */
+
+struct _GDBusAuthMechanismPrivate
+{
+ GIOStream *stream;
+ GCredentials *credentials;
+};
+
+enum
+{
+ PROP_0,
+ PROP_STREAM,
+ PROP_CREDENTIALS
+};
+
G_DEFINE_ABSTRACT_TYPE (GDBusAuthMechanism, _g_dbus_auth_mechanism, G_TYPE_OBJECT);
/* ---------------------------------------------------------------------------------------------------- */
static void
+_g_dbus_auth_mechanism_finalize (GObject *object)
+{
+ GDBusAuthMechanism *mechanism = G_DBUS_AUTH_MECHANISM (object);
+
+ if (mechanism->priv->stream != NULL)
+ g_object_unref (mechanism->priv->stream);
+ if (mechanism->priv->credentials != NULL)
+ g_object_unref (mechanism->priv->credentials);
+
+ if (G_OBJECT_CLASS (_g_dbus_auth_mechanism_parent_class)->finalize != NULL)
+ G_OBJECT_CLASS (_g_dbus_auth_mechanism_parent_class)->finalize (object);
+}
+
+static void
+_g_dbus_auth_mechanism_get_property (GObject *object,
+ guint prop_id,
+ GValue *value,
+ GParamSpec *pspec)
+{
+ GDBusAuthMechanism *mechanism = G_DBUS_AUTH_MECHANISM (object);
+
+ switch (prop_id)
+ {
+ case PROP_STREAM:
+ g_value_set_object (value, mechanism->priv->stream);
+ break;
+
+ case PROP_CREDENTIALS:
+ g_value_set_object (value, mechanism->priv->credentials);
+ break;
+
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+ break;
+ }
+}
+
+static void
+_g_dbus_auth_mechanism_set_property (GObject *object,
+ guint prop_id,
+ const GValue *value,
+ GParamSpec *pspec)
+{
+ GDBusAuthMechanism *mechanism = G_DBUS_AUTH_MECHANISM (object);
+
+ switch (prop_id)
+ {
+ case PROP_STREAM:
+ mechanism->priv->stream = g_value_dup_object (value);
+ break;
+
+ case PROP_CREDENTIALS:
+ mechanism->priv->credentials = g_value_dup_object (value);
+ break;
+
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+ break;
+ }
+}
+
+static void
_g_dbus_auth_mechanism_class_init (GDBusAuthMechanismClass *klass)
{
+ GObjectClass *gobject_class;
+
+ g_type_class_add_private (klass, sizeof (GDBusAuthMechanismPrivate));
+
+ gobject_class = G_OBJECT_CLASS (klass);
+ gobject_class->get_property = _g_dbus_auth_mechanism_get_property;
+ gobject_class->set_property = _g_dbus_auth_mechanism_set_property;
+ gobject_class->finalize = _g_dbus_auth_mechanism_finalize;
+
+ g_object_class_install_property (gobject_class,
+ PROP_STREAM,
+ g_param_spec_object ("stream",
+ _("IO Stream"),
+ _("The underlying GIOStream used for I/O"),
+ G_TYPE_IO_STREAM,
+ G_PARAM_READABLE |
+ G_PARAM_WRITABLE |
+ G_PARAM_CONSTRUCT_ONLY |
+ G_PARAM_STATIC_NAME |
+ G_PARAM_STATIC_BLURB |
+ G_PARAM_STATIC_NICK));
+
+ /**
+ * GDBusAuthMechanism:credentials:
+ *
+ * If authenticating as a server, this property contains the
+ * received credentials, if any.
+ *
+ * If authenticating as a client, the property contains the
+ * credentials that were sent, if any.
+ */
+ g_object_class_install_property (gobject_class,
+ PROP_CREDENTIALS,
+ g_param_spec_object ("credentials",
+ _("Credentials"),
+ _("The credentials of the remote peer"),
+ G_TYPE_CREDENTIALS,
+ G_PARAM_READABLE |
+ G_PARAM_WRITABLE |
+ G_PARAM_CONSTRUCT_ONLY |
+ G_PARAM_STATIC_NAME |
+ G_PARAM_STATIC_BLURB |
+ G_PARAM_STATIC_NICK));
}
static void
_g_dbus_auth_mechanism_init (GDBusAuthMechanism *mechanism)
{
/* not used for now */
- mechanism->priv = NULL;
+ mechanism->priv = G_TYPE_INSTANCE_GET_PRIVATE (mechanism,
+ G_TYPE_DBUS_AUTH_MECHANISM,
+ GDBusAuthMechanismPrivate);
}
/* ---------------------------------------------------------------------------------------------------- */
-const gchar *
-_g_dbus_auth_mechanism_get_name (GDBusAuthMechanism *mechanism)
+GIOStream *
+_g_dbus_auth_mechanism_get_stream (GDBusAuthMechanism *mechanism)
+{
+ g_return_val_if_fail (G_IS_DBUS_AUTH_MECHANISM (mechanism), NULL);
+ return mechanism->priv->stream;
+}
+
+GCredentials *
+_g_dbus_auth_mechanism_get_credentials (GDBusAuthMechanism *mechanism)
{
g_return_val_if_fail (G_IS_DBUS_AUTH_MECHANISM (mechanism), NULL);
- return G_DBUS_AUTH_MECHANISM_GET_CLASS (mechanism)->get_name (mechanism);
+ return mechanism->priv->credentials;
+}
+
+/* ---------------------------------------------------------------------------------------------------- */
+
+const gchar *
+_g_dbus_auth_mechanism_get_name (GType mechanism_type)
+{
+ const gchar *name;
+ GDBusAuthMechanismClass *klass;
+
+ g_return_val_if_fail (g_type_is_a (mechanism_type, G_TYPE_DBUS_AUTH_MECHANISM), NULL);
+
+ klass = g_type_class_ref (mechanism_type);
+ g_assert (klass != NULL);
+ name = klass->get_name ();
+ //g_type_class_unref (klass);
+
+ return name;
+}
+
+gint
+_g_dbus_auth_mechanism_get_priority (GType mechanism_type)
+{
+ gint priority;
+ GDBusAuthMechanismClass *klass;
+
+ g_return_val_if_fail (g_type_is_a (mechanism_type, G_TYPE_DBUS_AUTH_MECHANISM), 0);
+
+ klass = g_type_class_ref (mechanism_type);
+ g_assert (klass != NULL);
+ priority = klass->get_priority ();
+ //g_type_class_unref (klass);
+
+ return priority;
+}
+
+/* ---------------------------------------------------------------------------------------------------- */
+
+gboolean
+_g_dbus_auth_mechanism_is_supported (GDBusAuthMechanism *mechanism)
+{
+ g_return_val_if_fail (G_IS_DBUS_AUTH_MECHANISM (mechanism), FALSE);
+ return G_DBUS_AUTH_MECHANISM_GET_CLASS (mechanism)->is_supported (mechanism);
}
gchar *