summaryrefslogtreecommitdiff
path: root/daemon
diff options
context:
space:
mode:
authorWilliam Jon McCann <mccann@jhu.edu>2007-08-03 15:48:01 +0000
committerWilliam Jon McCann <mccann@src.gnome.org>2007-08-03 15:48:01 +0000
commitbbf43b5b0fb83fd80ffaeb5b4191a88319b409af (patch)
tree9c1f37caca10157633671e22569949ee4e5d7e49 /daemon
parent15b71907d0691b2cb69dacdf0c6e11ab4d8cad23 (diff)
downloadgdm-bbf43b5b0fb83fd80ffaeb5b4191a88319b409af.tar.gz
Add an abstract base class for display factories. Rename gdm-xdmcp-manager
2007-08-03 William Jon McCann <mccann@jhu.edu> * daemon/Makefile.am: * daemon/gdm-display-factory.c: (gdm_display_factory_error_quark), (gdm_display_factory_get_display_store), (gdm_display_factory_start), (gdm_display_factory_stop), (gdm_display_factory_set_display_store), (gdm_display_factory_set_property), (gdm_display_factory_get_property), (gdm_display_factory_class_init), (gdm_display_factory_init), (gdm_display_factory_finalize): * daemon/gdm-display-factory.h: * daemon/gdm-local-display-factory.c: (create_display_for_device), (create_displays_for_pci_devices), (gdm_local_display_factory_start), (gdm_local_display_factory_set_property), (gdm_local_display_factory_get_property), (gdm_local_display_factory_class_init): * daemon/gdm-local-display-factory.h: * daemon/gdm-manager.c: (gdm_manager_start), (gdm_manager_set_wait_for_go), (gdm_manager_constructor), (gdm_manager_finalize): * daemon/gdm-xdmcp-display-factory.c: (gdm_xdmcp_display_factory_error_quark), (get_next_session_serial), (setup_multicast), (open_port), (gdm_xdmcp_num_displays_from_host), (gdm_xdmcp_display_lookup_by_host), (get_willing_output), (gdm_xdmcp_send_willing), (gdm_xdmcp_send_unwilling), (gdm_xdmcp_send_forward_query), (handle_any_query), (handle_direct_query), (gdm_xdmcp_handle_broadcast_query), (gdm_xdmcp_handle_query), (gdm_xdmcp_handle_indirect_query), (gdm_forward_query_dispose), (remove_oldest_forward), (gdm_forward_query_alloc), (gdm_forward_query_lookup), (gdm_xdmcp_whack_queued_managed_forwards), (gdm_xdmcp_handle_forward_query), (gdm_xdmcp_really_send_managed_forward), (managed_forward_handler), (gdm_xdmcp_send_managed_forward), (gdm_xdmcp_send_got_managed_forward), (count_sessions), (gdm_xdmcp_recount_sessions), (purge_displays), (gdm_xdmcp_displays_purge), (display_dispose_check), (gdm_xdmcp_send_decline), (gdm_xdmcp_display_alloc), (gdm_xdmcp_send_accept), (gdm_xdmcp_handle_request), (gdm_xdmcp_display_lookup), (gdm_xdmcp_send_failed), (gdm_xdmcp_send_refuse), (gdm_xdmcp_handle_manage), (gdm_xdmcp_handle_managed_forward), (gdm_xdmcp_handle_got_managed_forward), (gdm_xdmcp_send_alive), (gdm_xdmcp_handle_keepalive), (decode_packet), (gdm_xdmcp_display_factory_start), (gdm_xdmcp_display_factory_stop), (gdm_xdmcp_display_factory_set_port), (gdm_xdmcp_display_factory_set_use_multicast), (gdm_xdmcp_display_factory_set_multicast_address), (gdm_xdmcp_display_factory_set_honor_indirect), (gdm_xdmcp_display_factory_set_max_displays_per_host), (gdm_xdmcp_display_factory_set_max_displays), (gdm_xdmcp_display_factory_set_max_pending_displays), (gdm_xdmcp_display_factory_set_max_wait), (gdm_xdmcp_display_factory_set_willing_script), (gdm_xdmcp_display_factory_set_property), (gdm_xdmcp_display_factory_get_property), (gdm_xdmcp_display_factory_class_init), (gdm_xdmcp_display_factory_init), (gdm_xdmcp_display_factory_finalize), (gdm_xdmcp_display_factory_new): * daemon/gdm-xdmcp-display-factory.h: * daemon/gdm-xdmcp-manager.c: * daemon/gdm-xdmcp-manager.h: Add an abstract base class for display factories. Rename gdm-xdmcp-manager to gdm-xdmcp-display-factory. svn path=/branches/mccann-gobject/; revision=5132
Diffstat (limited to 'daemon')
-rw-r--r--daemon/Makefile.am8
-rw-r--r--daemon/gdm-display-factory.c199
-rw-r--r--daemon/gdm-display-factory.h72
-rw-r--r--daemon/gdm-local-display-factory.c81
-rw-r--r--daemon/gdm-local-display-factory.h1
-rw-r--r--daemon/gdm-manager.c26
-rw-r--r--daemon/gdm-xdmcp-display-factory.c (renamed from daemon/gdm-xdmcp-manager.c)797
-rw-r--r--daemon/gdm-xdmcp-display-factory.h69
-rw-r--r--daemon/gdm-xdmcp-manager.h72
9 files changed, 782 insertions, 543 deletions
diff --git a/daemon/Makefile.am b/daemon/Makefile.am
index ef52991d..c73c3e6a 100644
--- a/daemon/Makefile.am
+++ b/daemon/Makefile.am
@@ -234,6 +234,8 @@ gdm_binary_SOURCES = \
main.c \
gdm-display-store.c \
gdm-display-store.h \
+ gdm-display-factory.c \
+ gdm-display-factory.h \
gdm-local-display-factory.c \
gdm-local-display-factory.h \
gdm-display.c \
@@ -259,9 +261,9 @@ gdm_binary_SOURCES = \
filecheck.h \
$(NULL)
-XDMCP_SOURCES = \
- gdm-xdmcp-manager.c \
- gdm-xdmcp-manager.h \
+XDMCP_SOURCES = \
+ gdm-xdmcp-display-factory.c \
+ gdm-xdmcp-display-factory.h \
$(NULL)
if XDMCP_SUPPORT
diff --git a/daemon/gdm-display-factory.c b/daemon/gdm-display-factory.c
new file mode 100644
index 00000000..d21746ef
--- /dev/null
+++ b/daemon/gdm-display-factory.c
@@ -0,0 +1,199 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*-
+ *
+ * Copyright (C) 2007 William Jon McCann <mccann@jhu.edu>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 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 General Public License for more details.
+ *
+ * You should have received a copy of the GNU 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 <stdlib.h>
+#include <stdio.h>
+
+#include <glib.h>
+#include <glib/gi18n.h>
+#include <glib-object.h>
+
+#include "gdm-display-factory.h"
+#include "gdm-display-store.h"
+
+#define GDM_DISPLAY_FACTORY_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), GDM_TYPE_DISPLAY_FACTORY, GdmDisplayFactoryPrivate))
+
+struct GdmDisplayFactoryPrivate
+{
+ GdmDisplayStore *display_store;
+};
+
+enum {
+ LAST_SIGNAL
+};
+
+enum {
+ PROP_0,
+ PROP_DISPLAY_STORE,
+};
+
+static guint signals [LAST_SIGNAL] = { 0, };
+
+static void gdm_display_factory_class_init (GdmDisplayFactoryClass *klass);
+static void gdm_display_factory_init (GdmDisplayFactory *factory);
+static void gdm_display_factory_finalize (GObject *object);
+
+G_DEFINE_ABSTRACT_TYPE (GdmDisplayFactory, gdm_display_factory, G_TYPE_OBJECT)
+
+GQuark
+gdm_display_factory_error_quark (void)
+{
+ static GQuark ret = 0;
+ if (ret == 0) {
+ ret = g_quark_from_static_string ("gdm_display_factory_error");
+ }
+
+ return ret;
+}
+
+GdmDisplayStore *
+gdm_display_factory_get_display_store (GdmDisplayFactory *factory)
+{
+ g_return_val_if_fail (GDM_IS_DISPLAY_FACTORY (factory), NULL);
+
+ return factory->priv->display_store;
+}
+
+gboolean
+gdm_display_factory_start (GdmDisplayFactory *factory,
+ GError **error)
+{
+ gboolean ret;
+
+ g_return_val_if_fail (GDM_IS_DISPLAY_FACTORY (factory), FALSE);
+
+ g_object_ref (factory);
+ ret = GDM_DISPLAY_FACTORY_GET_CLASS (factory)->start (factory);
+ g_object_unref (factory);
+
+ return ret;
+}
+
+gboolean
+gdm_display_factory_stop (GdmDisplayFactory *factory,
+ GError **error)
+{
+ gboolean ret;
+
+ g_return_val_if_fail (GDM_IS_DISPLAY_FACTORY (factory), FALSE);
+
+ g_object_ref (factory);
+ ret = GDM_DISPLAY_FACTORY_GET_CLASS (factory)->stop (factory);
+ g_object_unref (factory);
+
+ return ret;
+}
+
+static void
+gdm_display_factory_set_display_store (GdmDisplayFactory *factory,
+ GdmDisplayStore *display_store)
+{
+ if (factory->priv->display_store != NULL) {
+ g_object_unref (factory->priv->display_store);
+ factory->priv->display_store = NULL;
+ }
+
+ if (display_store != NULL) {
+ factory->priv->display_store = g_object_ref (display_store);
+ }
+}
+
+static void
+gdm_display_factory_set_property (GObject *object,
+ guint prop_id,
+ const GValue *value,
+ GParamSpec *pspec)
+{
+ GdmDisplayFactory *self;
+
+ self = GDM_DISPLAY_FACTORY (object);
+
+ switch (prop_id) {
+ case PROP_DISPLAY_STORE:
+ gdm_display_factory_set_display_store (self, g_value_get_object (value));
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+ break;
+ }
+}
+
+static void
+gdm_display_factory_get_property (GObject *object,
+ guint prop_id,
+ GValue *value,
+ GParamSpec *pspec)
+{
+ GdmDisplayFactory *self;
+
+ self = GDM_DISPLAY_FACTORY (object);
+
+ switch (prop_id) {
+ case PROP_DISPLAY_STORE:
+ g_value_set_object (value, self->priv->display_store);
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+ break;
+ }
+}
+
+static void
+gdm_display_factory_class_init (GdmDisplayFactoryClass *klass)
+{
+ GObjectClass *object_class = G_OBJECT_CLASS (klass);
+
+ object_class->get_property = gdm_display_factory_get_property;
+ object_class->set_property = gdm_display_factory_set_property;
+ object_class->finalize = gdm_display_factory_finalize;
+
+ g_object_class_install_property (object_class,
+ PROP_DISPLAY_STORE,
+ g_param_spec_object ("display-store",
+ "display store",
+ "display store",
+ GDM_TYPE_DISPLAY_STORE,
+ G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY));
+
+ g_type_class_add_private (klass, sizeof (GdmDisplayFactoryPrivate));
+}
+
+static void
+gdm_display_factory_init (GdmDisplayFactory *factory)
+{
+ factory->priv = GDM_DISPLAY_FACTORY_GET_PRIVATE (factory);
+}
+
+static void
+gdm_display_factory_finalize (GObject *object)
+{
+ GdmDisplayFactory *factory;
+
+ g_return_if_fail (object != NULL);
+ g_return_if_fail (GDM_IS_DISPLAY_FACTORY (object));
+
+ factory = GDM_DISPLAY_FACTORY (object);
+
+ g_return_if_fail (factory->priv != NULL);
+
+ G_OBJECT_CLASS (gdm_display_factory_parent_class)->finalize (object);
+}
diff --git a/daemon/gdm-display-factory.h b/daemon/gdm-display-factory.h
new file mode 100644
index 00000000..8d22b276
--- /dev/null
+++ b/daemon/gdm-display-factory.h
@@ -0,0 +1,72 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*-
+ *
+ * Copyright (C) 2007 William Jon McCann <mccann@jhu.edu>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 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 General Public License for more details.
+ *
+ * You should have received a copy of the GNU 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 __GDM_DISPLAY_FACTORY_H
+#define __GDM_DISPLAY_FACTORY_H
+
+#include <glib-object.h>
+
+#include "gdm-display-store.h"
+
+G_BEGIN_DECLS
+
+#define GDM_TYPE_DISPLAY_FACTORY (gdm_display_factory_get_type ())
+#define GDM_DISPLAY_FACTORY(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), GDM_TYPE_DISPLAY_FACTORY, GdmDisplayFactory))
+#define GDM_DISPLAY_FACTORY_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), GDM_TYPE_DISPLAY_FACTORY, GdmDisplayFactoryClass))
+#define GDM_IS_DISPLAY_FACTORY(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), GDM_TYPE_DISPLAY_FACTORY))
+#define GDM_IS_DISPLAY_FACTORY_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), GDM_TYPE_DISPLAY_FACTORY))
+#define GDM_DISPLAY_FACTORY_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), GDM_TYPE_DISPLAY_FACTORY, GdmDisplayFactoryClass))
+
+typedef struct GdmDisplayFactoryPrivate GdmDisplayFactoryPrivate;
+
+typedef struct
+{
+ GObject parent;
+ GdmDisplayFactoryPrivate *priv;
+} GdmDisplayFactory;
+
+typedef struct
+{
+ GObjectClass parent_class;
+
+ gboolean (*start) (GdmDisplayFactory *factory);
+ gboolean (*stop) (GdmDisplayFactory *factory);
+} GdmDisplayFactoryClass;
+
+typedef enum
+{
+ GDM_DISPLAY_FACTORY_ERROR_GENERAL
+} GdmDisplayFactoryError;
+
+#define GDM_DISPLAY_FACTORY_ERROR gdm_display_factory_error_quark ()
+
+GQuark gdm_display_factory_error_quark (void);
+GType gdm_display_factory_get_type (void);
+
+gboolean gdm_display_factory_start (GdmDisplayFactory *manager,
+ GError **error);
+gboolean gdm_display_factory_stop (GdmDisplayFactory *manager,
+ GError **error);
+GdmDisplayStore * gdm_display_factory_get_display_store (GdmDisplayFactory *manager);
+
+G_END_DECLS
+
+#endif /* __GDM_DISPLAY_FACTORY_H */
diff --git a/daemon/gdm-local-display-factory.c b/daemon/gdm-local-display-factory.c
index 2c9febe6..6def9859 100644
--- a/daemon/gdm-local-display-factory.c
+++ b/daemon/gdm-local-display-factory.c
@@ -27,6 +27,7 @@
#include <glib/gi18n.h>
#include <glib-object.h>
+#include "gdm-display-factory.h"
#include "gdm-local-display-factory.h"
#include "gdm-display-store.h"
#include "gdm-static-display.h"
@@ -42,11 +43,8 @@
struct GdmLocalDisplayFactoryPrivate
{
- GdmDisplayStore *display_store;
-
DBusGConnection *connection;
DBusGProxy *proxy;
-
};
enum {
@@ -57,7 +55,6 @@ enum {
enum {
PROP_0,
- PROP_DISPLAY_STORE,
};
static guint signals [LAST_SIGNAL] = { 0, };
@@ -68,7 +65,7 @@ static void gdm_local_display_factory_finalize (GObject *object);
static gpointer local_display_factory_object = NULL;
-G_DEFINE_TYPE (GdmLocalDisplayFactory, gdm_local_display_factory, G_TYPE_OBJECT)
+G_DEFINE_TYPE (GdmLocalDisplayFactory, gdm_local_display_factory, GDM_TYPE_DISPLAY_FACTORY)
GQuark
gdm_local_display_factory_error_quark (void)
@@ -82,8 +79,31 @@ gdm_local_display_factory_error_quark (void)
}
static void
-get_pci_seat_devices (GdmLocalDisplayFactory *factory,
- GList *seats)
+create_display_for_device (GdmLocalDisplayFactory *factory,
+ DBusGProxy *device_proxy)
+{
+ GdmDisplay *display;
+ GdmDisplayStore *store;
+
+ store = gdm_display_factory_get_display_store (GDM_DISPLAY_FACTORY (factory));
+
+ display = gdm_static_display_new (0);
+ if (display == NULL) {
+ g_warning ("Unable to create display: %d", 0);
+ return;
+ }
+
+ gdm_display_store_add (store, display);
+ /* let store own the ref */
+ g_object_unref (display);
+
+ if (! gdm_display_manage (display)) {
+ gdm_display_unmanage (display);
+ }
+}
+
+static void
+create_displays_for_pci_devices (GdmLocalDisplayFactory *factory)
{
char **devices;
const char *key;
@@ -133,9 +153,10 @@ get_pci_seat_devices (GdmLocalDisplayFactory *factory,
G_TYPE_INVALID,
G_TYPE_INT, &class_val,
G_TYPE_INVALID);
+
if (class_val == SEAT_PCI_DEVICE_CLASS) {
g_debug ("Found device: %s", devices [i]);
- seats = g_list_prepend (seats, devices [i]);
+ create_display_for_device (factory, device_proxy);
}
g_object_unref (device_proxy);
@@ -149,27 +170,13 @@ gdm_local_display_factory_start (GdmLocalDisplayFactory *factory,
GError **error)
{
gboolean ret;
- GdmDisplay *display;
g_return_val_if_fail (GDM_IS_LOCAL_DISPLAY_FACTORY (factory), FALSE);
ret = TRUE;
/* FIXME: */
-
- display = gdm_static_display_new (0);
- if (display == NULL) {
- g_warning ("Unable to create display: %d", 0);
- return FALSE;
- }
-
- gdm_display_store_add (factory->priv->display_store, display);
- /* let store own the ref */
- g_object_unref (display);
-
- if (! gdm_display_manage (display)) {
- gdm_display_unmanage (display);
- }
+ create_displays_for_pci_devices (factory);
return ret;
}
@@ -184,20 +191,6 @@ gdm_local_display_factory_stop (GdmLocalDisplayFactory *factory,
}
static void
-gdm_local_display_factory_set_display_store (GdmLocalDisplayFactory *factory,
- GdmDisplayStore *display_store)
-{
- if (factory->priv->display_store != NULL) {
- g_object_unref (factory->priv->display_store);
- factory->priv->display_store = NULL;
- }
-
- if (display_store != NULL) {
- factory->priv->display_store = g_object_ref (display_store);
- }
-}
-
-static void
gdm_local_display_factory_set_property (GObject *object,
guint prop_id,
const GValue *value,
@@ -208,9 +201,6 @@ gdm_local_display_factory_set_property (GObject *object,
self = GDM_LOCAL_DISPLAY_FACTORY (object);
switch (prop_id) {
- case PROP_DISPLAY_STORE:
- gdm_local_display_factory_set_display_store (self, g_value_get_object (value));
- break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
break;
@@ -228,9 +218,6 @@ gdm_local_display_factory_get_property (GObject *object,
self = GDM_LOCAL_DISPLAY_FACTORY (object);
switch (prop_id) {
- case PROP_DISPLAY_STORE:
- g_value_set_object (value, self->priv->display_store);
- break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
break;
@@ -246,14 +233,6 @@ gdm_local_display_factory_class_init (GdmLocalDisplayFactoryClass *klass)
object_class->set_property = gdm_local_display_factory_set_property;
object_class->finalize = gdm_local_display_factory_finalize;
- g_object_class_install_property (object_class,
- PROP_DISPLAY_STORE,
- g_param_spec_object ("display-store",
- "display store",
- "display store",
- GDM_TYPE_DISPLAY_STORE,
- G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY));
-
g_type_class_add_private (klass, sizeof (GdmLocalDisplayFactoryPrivate));
}
diff --git a/daemon/gdm-local-display-factory.h b/daemon/gdm-local-display-factory.h
index a8d89f72..0344f6ca 100644
--- a/daemon/gdm-local-display-factory.h
+++ b/daemon/gdm-local-display-factory.h
@@ -24,6 +24,7 @@
#include <glib-object.h>
+#include "gdm-display-factory.h"
#include "gdm-display-store.h"
G_BEGIN_DECLS
diff --git a/daemon/gdm-manager.c b/daemon/gdm-manager.c
index cf62776a..dea9e5a6 100644
--- a/daemon/gdm-manager.c
+++ b/daemon/gdm-manager.c
@@ -36,12 +36,14 @@
#include <dbus/dbus-glib.h>
#include <dbus/dbus-glib-lowlevel.h>
+#include "gdm-common.h"
+
#include "gdm-manager.h"
#include "gdm-manager-glue.h"
#include "gdm-display-store.h"
+#include "gdm-display-factory.h"
#include "gdm-local-display-factory.h"
-#include "gdm-xdmcp-manager.h"
-#include "gdm-common.h"
+#include "gdm-xdmcp-display-factory.h"
#define GDM_MANAGER_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), GDM_TYPE_MANAGER, GdmManagerPrivate))
@@ -53,7 +55,7 @@ struct GdmManagerPrivate
{
GdmDisplayStore *display_store;
GdmLocalDisplayFactory *local_factory;
- GdmXdmcpManager *xdmcp_manager;
+ GdmXdmcpDisplayFactory *xdmcp_factory;
gboolean xdmcp_enabled;
@@ -172,14 +174,14 @@ gdm_manager_start (GdmManager *manager)
g_debug ("GDM starting to manage");
if (! manager->priv->wait_for_go) {
- gdm_local_display_factory_start (manager->priv->local_factory, NULL);
+ gdm_display_factory_start (manager->priv->local_factory, NULL);
}
/* Accept remote connections */
if (manager->priv->xdmcp_enabled && ! manager->priv->wait_for_go) {
- if (manager->priv->xdmcp_manager != NULL) {
+ if (manager->priv->xdmcp_factory != NULL) {
g_debug ("Accepting XDMCP connections...");
- gdm_xdmcp_manager_start (manager->priv->xdmcp_manager, NULL);
+ gdm_display_factory_start (manager->priv->xdmcp_factory, NULL);
}
}
@@ -194,11 +196,11 @@ gdm_manager_set_wait_for_go (GdmManager *manager,
if (! wait_for_go) {
/* we got a go */
- gdm_local_display_factory_start (manager->priv->local_factory, NULL);
+ gdm_display_factory_start (manager->priv->local_factory, NULL);
- if (manager->priv->xdmcp_enabled && manager->priv->xdmcp_manager != NULL) {
+ if (manager->priv->xdmcp_enabled && manager->priv->xdmcp_factory != NULL) {
g_debug ("Accepting XDMCP connections...");
- gdm_xdmcp_manager_start (manager->priv->xdmcp_manager, NULL);
+ gdm_display_factory_start (manager->priv->xdmcp_factory, NULL);
}
}
}
@@ -361,7 +363,7 @@ gdm_manager_constructor (GType type,
manager->priv->local_factory = gdm_local_display_factory_new (manager->priv->display_store);
if (manager->priv->xdmcp_enabled) {
- manager->priv->xdmcp_manager = gdm_xdmcp_manager_new (manager->priv->display_store);
+ manager->priv->xdmcp_factory = gdm_xdmcp_display_factory_new (manager->priv->display_store);
}
return G_OBJECT (manager);
@@ -436,8 +438,8 @@ gdm_manager_finalize (GObject *object)
g_return_if_fail (manager->priv != NULL);
- if (manager->priv->xdmcp_manager != NULL) {
- g_object_unref (manager->priv->xdmcp_manager);
+ if (manager->priv->xdmcp_factory != NULL) {
+ g_object_unref (manager->priv->xdmcp_factory);
}
gdm_display_store_clear (manager->priv->display_store);
diff --git a/daemon/gdm-xdmcp-manager.c b/daemon/gdm-xdmcp-display-factory.c
index d88bd46e..09dfced1 100644
--- a/daemon/gdm-xdmcp-manager.c
+++ b/daemon/gdm-xdmcp-display-factory.c
@@ -52,7 +52,8 @@
#include "gdm-common.h"
#include "gdm-xdmcp-display.h"
-#include "gdm-xdmcp-manager.h"
+#include "gdm-display-factory.h"
+#include "gdm-xdmcp-display-factory.h"
#include "gdm-display-store.h"
#include "auth.h"
@@ -68,7 +69,7 @@ int allow_severity = LOG_INFO;
int deny_severity = LOG_WARNING;
#endif
-#define GDM_XDMCP_MANAGER_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), GDM_TYPE_XDMCP_MANAGER, GdmXdmcpManagerPrivate))
+#define GDM_XDMCP_DISPLAY_FACTORY_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), GDM_TYPE_XDMCP_DISPLAY_FACTORY, GdmXdmcpDisplayFactoryPrivate))
#define DEFAULT_PORT 177
#define DEFAULT_USE_MULTICAST FALSE
@@ -147,13 +148,11 @@ typedef struct {
guint handler;
GdmAddress *manager;
GdmAddress *origin;
- GdmXdmcpManager *xdmcp_manager;
+ GdmXdmcpDisplayFactory *xdmcp_display_factory;
} ManagedForward;
-struct GdmXdmcpManagerPrivate
+struct GdmXdmcpDisplayFactoryPrivate
{
- GdmDisplayStore *display_store;
-
GSList *forward_queries;
GSList *managed_forwards;
@@ -182,14 +181,11 @@ struct GdmXdmcpManagerPrivate
};
enum {
- DISPLAY_ADDED,
- DISPLAY_REMOVED,
LAST_SIGNAL
};
enum {
PROP_0,
- PROP_DISPLAY_STORE,
PROP_PORT,
PROP_USE_MULTICAST,
PROP_MULTICAST_ADDRESS,
@@ -203,13 +199,13 @@ enum {
static guint signals [LAST_SIGNAL] = { 0, };
-static void gdm_xdmcp_manager_class_init (GdmXdmcpManagerClass *klass);
-static void gdm_xdmcp_manager_init (GdmXdmcpManager *manager);
-static void gdm_xdmcp_manager_finalize (GObject *object);
+static void gdm_xdmcp_display_factory_class_init (GdmXdmcpDisplayFactoryClass *klass);
+static void gdm_xdmcp_display_factory_init (GdmXdmcpDisplayFactory *manager);
+static void gdm_xdmcp_display_factory_finalize (GObject *object);
-static gpointer xdmcp_manager_object = NULL;
+static gpointer xdmcp_display_factory_object = NULL;
-G_DEFINE_TYPE (GdmXdmcpManager, gdm_xdmcp_manager, G_TYPE_OBJECT)
+G_DEFINE_TYPE (GdmXdmcpDisplayFactory, gdm_xdmcp_display_factory, G_TYPE_OBJECT)
/* Theory of operation:
*
@@ -246,24 +242,24 @@ G_DEFINE_TYPE (GdmXdmcpManager, gdm_xdmcp_manager, G_TYPE_OBJECT)
*/
GQuark
-gdm_xdmcp_manager_error_quark (void)
+gdm_xdmcp_display_factory_error_quark (void)
{
static GQuark ret = 0;
if (ret == 0) {
- ret = g_quark_from_static_string ("gdm_xdmcp_manager_error");
+ ret = g_quark_from_static_string ("gdm_xdmcp_display_factory_error");
}
return ret;
}
static gint32
-get_next_session_serial (GdmXdmcpManager *manager)
+get_next_session_serial (GdmXdmcpDisplayFactory *factory)
{
gint32 serial;
again:
- if (manager->priv->session_serial != G_MAXINT32) {
- serial = manager->priv->session_serial++;
+ if (factory->priv->session_serial != G_MAXINT32) {
+ serial = factory->priv->session_serial++;
} else {
serial = g_random_int ();
}
@@ -480,7 +476,7 @@ do_bind (guint port,
}
static void
-setup_multicast (GdmXdmcpManager *manager)
+setup_multicast (GdmXdmcpDisplayFactory *factory)
{
#ifdef ENABLE_IPV6
/* Checking and Setting Multicast options */
@@ -540,10 +536,10 @@ setup_multicast (GdmXdmcpManager *manager)
mreq.ipv6mr_interface = ifindex;
inet_pton (AF_INET6,
- manager->priv->multicast_address,
+ factory->priv->multicast_address,
&mreq.ipv6mr_multiaddr);
- setsockopt (manager->priv->socket_fd,
+ setsockopt (factory->priv->socket_fd,
IPPROTO_IPV6,
IPV6_JOIN_GROUP,
&mreq,
@@ -557,30 +553,30 @@ setup_multicast (GdmXdmcpManager *manager)
}
static gboolean
-open_port (GdmXdmcpManager *manager)
+open_port (GdmXdmcpDisplayFactory *factory)
{
struct sockaddr_storage serv_sa = { 0 };
g_debug ("XDMCP: Start up on host %s, port %d",
- manager->priv->hostname,
- manager->priv->port);
+ factory->priv->hostname,
+ factory->priv->port);
/* Open socket for communications */
#ifdef ENABLE_IPV6
- manager->priv->socket_fd = do_bind (manager->priv->port, AF_INET6, &serv_sa);
- if (manager->priv->socket_fd < 0)
+ factory->priv->socket_fd = do_bind (factory->priv->port, AF_INET6, &serv_sa);
+ if (factory->priv->socket_fd < 0)
#endif
- manager->priv->socket_fd = do_bind (manager->priv->port, AF_INET, &serv_sa);
+ factory->priv->socket_fd = do_bind (factory->priv->port, AF_INET, &serv_sa);
- if G_UNLIKELY (manager->priv->socket_fd < 0) {
+ if G_UNLIKELY (factory->priv->socket_fd < 0) {
g_warning (_("Could not create socket!"));
return FALSE;
}
- gdm_fd_set_close_on_exec (manager->priv->socket_fd);
+ gdm_fd_set_close_on_exec (factory->priv->socket_fd);
- if (manager->priv->use_multicast) {
- setup_multicast (manager);
+ if (factory->priv->use_multicast) {
+ setup_multicast (factory);
}
return TRUE;
@@ -647,15 +643,17 @@ count_displays_from_host (const char *id,
}
static int
-gdm_xdmcp_num_displays_from_host (GdmXdmcpManager *manager,
- GdmAddress *address)
+gdm_xdmcp_num_displays_from_host (GdmXdmcpDisplayFactory *factory,
+ GdmAddress *address)
{
CountDisplayData data;
+ GdmDisplayStore *store;
data.count = 0;
data.address = address;
- gdm_display_store_foreach (manager->priv->display_store,
+ store = gdm_display_factory_get_display_store (GDM_DISPLAY_FACTORY (factory));
+ gdm_display_store_foreach (store,
(GdmDisplayStoreFunc)count_displays_from_host,
&data);
@@ -691,18 +689,20 @@ lookup_by_host (const char *id,
}
static GdmDisplay *
-gdm_xdmcp_display_lookup_by_host (GdmXdmcpManager *manager,
+gdm_xdmcp_display_lookup_by_host (GdmXdmcpDisplayFactory *factory,
GdmAddress *address,
int display_num)
{
- GdmDisplay *display;
- LookupHostData *data;
+ GdmDisplay *display;
+ LookupHostData *data;
+ GdmDisplayStore *store;
data = g_new0 (LookupHostData, 1);
data->address = address;
data->display_num = display_num;
- display = gdm_display_store_find (manager->priv->display_store,
+ store = gdm_display_factory_get_display_store (GDM_DISPLAY_FACTORY (factory));
+ display = gdm_display_store_find (store,
(GdmDisplayStoreFunc)lookup_by_host,
data);
g_free (data);
@@ -711,7 +711,7 @@ gdm_xdmcp_display_lookup_by_host (GdmXdmcpManager *manager,
}
static char *
-get_willing_output (GdmXdmcpManager *manager)
+get_willing_output (GdmXdmcpDisplayFactory *factory)
{
char *output;
char **argv;
@@ -721,12 +721,12 @@ get_willing_output (GdmXdmcpManager *manager)
output = NULL;
buf[0] = '\0';
- if (manager->priv->willing_script == NULL) {
+ if (factory->priv->willing_script == NULL) {
goto out;
}
argv = NULL;
- if (! g_shell_parse_argv (manager->priv->willing_script, NULL, &argv, NULL)) {
+ if (! g_shell_parse_argv (factory->priv->willing_script, NULL, &argv, NULL)) {
goto out;
}
@@ -736,7 +736,7 @@ get_willing_output (GdmXdmcpManager *manager)
goto out;
}
- fd = popen (manager->priv->willing_script, "r");
+ fd = popen (factory->priv->willing_script, "r");
if (fd == NULL) {
goto out;
}
@@ -755,7 +755,7 @@ get_willing_output (GdmXdmcpManager *manager)
}
static void
-gdm_xdmcp_send_willing (GdmXdmcpManager *manager,
+gdm_xdmcp_send_willing (GdmXdmcpDisplayFactory *factory,
GdmAddress *address)
{
ARRAY8 status;
@@ -774,17 +774,17 @@ gdm_xdmcp_send_willing (GdmXdmcpManager *manager,
g_free (last_status);
- s = get_willing_output (manager);
+ s = get_willing_output (factory);
if (s != NULL) {
g_free (last_status);
last_status = s;
} else {
- last_status = g_strdup (manager->priv->sysid);
+ last_status = g_strdup (factory->priv->sysid);
}
}
if (! gdm_address_is_local (address) &&
- gdm_xdmcp_num_displays_from_host (manager, address) >= manager->priv->max_displays_per_host) {
+ gdm_xdmcp_num_displays_from_host (factory, address) >= factory->priv->max_displays_per_host) {
/*
* Don't translate, this goes over the wire to servers where we
* don't know the charset or language, so it must be ascii
@@ -799,17 +799,17 @@ gdm_xdmcp_send_willing (GdmXdmcpManager *manager,
header.opcode = (CARD16) WILLING;
header.length = 6 + serv_authlist.authentication.length;
- header.length += manager->priv->servhost.length + status.length;
+ header.length += factory->priv->servhost.length + status.length;
header.version = XDM_PROTOCOL_VERSION;
- XdmcpWriteHeader (&manager->priv->buf, &header);
+ XdmcpWriteHeader (&factory->priv->buf, &header);
/* Hardcoded authentication */
- XdmcpWriteARRAY8 (&manager->priv->buf, &serv_authlist.authentication);
- XdmcpWriteARRAY8 (&manager->priv->buf, &manager->priv->servhost);
- XdmcpWriteARRAY8 (&manager->priv->buf, &status);
+ XdmcpWriteARRAY8 (&factory->priv->buf, &serv_authlist.authentication);
+ XdmcpWriteARRAY8 (&factory->priv->buf, &factory->priv->servhost);
+ XdmcpWriteARRAY8 (&factory->priv->buf, &status);
- XdmcpFlush (manager->priv->socket_fd,
- &manager->priv->buf,
+ XdmcpFlush (factory->priv->socket_fd,
+ &factory->priv->buf,
(XdmcpNetaddr)gdm_address_peek_sockaddr_storage (address),
(int)sizeof (struct sockaddr_storage));
@@ -817,7 +817,7 @@ gdm_xdmcp_send_willing (GdmXdmcpManager *manager,
}
static void
-gdm_xdmcp_send_unwilling (GdmXdmcpManager *manager,
+gdm_xdmcp_send_unwilling (GdmXdmcpDisplayFactory *factory,
GdmAddress *address,
int type)
{
@@ -846,14 +846,14 @@ gdm_xdmcp_send_unwilling (GdmXdmcpManager *manager,
status.length = strlen ((char *) status.data);
header.opcode = (CARD16) UNWILLING;
- header.length = 4 + manager->priv->servhost.length + status.length;
+ header.length = 4 + factory->priv->servhost.length + status.length;
header.version = XDM_PROTOCOL_VERSION;
- XdmcpWriteHeader (&manager->priv->buf, &header);
+ XdmcpWriteHeader (&factory->priv->buf, &header);
- XdmcpWriteARRAY8 (&manager->priv->buf, &manager->priv->servhost);
- XdmcpWriteARRAY8 (&manager->priv->buf, &status);
- XdmcpFlush (manager->priv->socket_fd,
- &manager->priv->buf,
+ XdmcpWriteARRAY8 (&factory->priv->buf, &factory->priv->servhost);
+ XdmcpWriteARRAY8 (&factory->priv->buf, &status);
+ XdmcpFlush (factory->priv->socket_fd,
+ &factory->priv->buf,
(XdmcpNetaddr)gdm_address_peek_sockaddr_storage (address),
(int)sizeof (struct sockaddr_storage));
@@ -913,7 +913,7 @@ set_address_for_request (GdmAddress *address,
}
static void
-gdm_xdmcp_send_forward_query (GdmXdmcpManager *manager,
+gdm_xdmcp_send_forward_query (GdmXdmcpDisplayFactory *factory,
GdmIndirectDisplay *id,
GdmAddress *address,
GdmAddress *display_address,
@@ -956,13 +956,13 @@ gdm_xdmcp_send_forward_query (GdmXdmcpManager *manager,
header.length += 2 + authlist->data[i].length;
}
- XdmcpWriteHeader (&manager->priv->buf, &header);
- XdmcpWriteARRAY8 (&manager->priv->buf, &addr);
- XdmcpWriteARRAY8 (&manager->priv->buf, &port);
- XdmcpWriteARRAYofARRAY8 (&manager->priv->buf, authlist);
+ XdmcpWriteHeader (&factory->priv->buf, &header);
+ XdmcpWriteARRAY8 (&factory->priv->buf, &addr);
+ XdmcpWriteARRAY8 (&factory->priv->buf, &port);
+ XdmcpWriteARRAYofARRAY8 (&factory->priv->buf, authlist);
- XdmcpFlush (manager->priv->socket_fd,
- &manager->priv->buf,
+ XdmcpFlush (factory->priv->socket_fd,
+ &factory->priv->buf,
(XdmcpNetaddr)gdm_address_peek_sockaddr_storage (id->chosen_host),
(int)sizeof (struct sockaddr_storage));
@@ -971,16 +971,16 @@ gdm_xdmcp_send_forward_query (GdmXdmcpManager *manager,
}
static void
-handle_any_query (GdmXdmcpManager *manager,
+handle_any_query (GdmXdmcpDisplayFactory *factory,
GdmAddress *address,
ARRAYofARRAY8Ptr authentication_names,
int type)
{
- gdm_xdmcp_send_willing (manager, address);
+ gdm_xdmcp_send_willing (factory, address);
}
static void
-handle_direct_query (GdmXdmcpManager *manager,
+handle_direct_query (GdmXdmcpDisplayFactory *factory,
GdmAddress *address,
int len,
int type)
@@ -990,7 +990,7 @@ handle_direct_query (GdmXdmcpManager *manager,
int i;
int res;
- res = XdmcpReadARRAYofARRAY8 (&manager->priv->buf, &clnt_authlist);
+ res = XdmcpReadARRAYofARRAY8 (&factory->priv->buf, &clnt_authlist);
if G_UNLIKELY (! res) {
g_warning (_("Could not extract authlist from packet"));
return;
@@ -1003,7 +1003,7 @@ handle_direct_query (GdmXdmcpManager *manager,
}
if (len == expected_len) {
- handle_any_query (manager, address, &clnt_authlist, type);
+ handle_any_query (factory, address, &clnt_authlist, type);
} else {
g_warning (_("Error in checksum"));
}
@@ -1012,31 +1012,31 @@ handle_direct_query (GdmXdmcpManager *manager,
}
static void
-gdm_xdmcp_handle_broadcast_query (GdmXdmcpManager *manager,
+gdm_xdmcp_handle_broadcast_query (GdmXdmcpDisplayFactory *factory,
GdmAddress *address,
int len)
{
if (gdm_xdmcp_host_allow (address)) {
- handle_direct_query (manager, address, len, BROADCAST_QUERY);
+ handle_direct_query (factory, address, len, BROADCAST_QUERY);
} else {
/* just ignore it */
}
}
static void
-gdm_xdmcp_handle_query (GdmXdmcpManager *manager,
+gdm_xdmcp_handle_query (GdmXdmcpDisplayFactory *factory,
GdmAddress *address,
int len)
{
if (gdm_xdmcp_host_allow (address)) {
- handle_direct_query (manager, address, len, QUERY);
+ handle_direct_query (factory, address, len, QUERY);
} else {
- gdm_xdmcp_send_unwilling (manager, address, QUERY);
+ gdm_xdmcp_send_unwilling (factory, address, QUERY);
}
}
static void
-gdm_xdmcp_handle_indirect_query (GdmXdmcpManager *manager,
+gdm_xdmcp_handle_indirect_query (GdmXdmcpDisplayFactory *factory,
GdmAddress *address,
int len)
{
@@ -1051,12 +1051,12 @@ gdm_xdmcp_handle_indirect_query (GdmXdmcpManager *manager,
return;
}
- if (! manager->priv->honor_indirect) {
+ if (! factory->priv->honor_indirect) {
/* ignore it */
return;
}
- res = XdmcpReadARRAYofARRAY8 (&manager->priv->buf, &clnt_authlist);
+ res = XdmcpReadARRAYofARRAY8 (&factory->priv->buf, &clnt_authlist);
if G_UNLIKELY (! res) {
g_warning (_("Could not extract authlist from packet"));
return;
@@ -1070,7 +1070,7 @@ gdm_xdmcp_handle_indirect_query (GdmXdmcpManager *manager,
/* Try to look up the display in
* the pending list. If found send a FORWARD_QUERY to the
- * chosen manager. Otherwise alloc a new indirect display. */
+ * chosen factory. Otherwise alloc a new indirect display. */
if (len != expected_len) {
g_warning (_("Error in checksum"));
@@ -1086,7 +1086,7 @@ gdm_xdmcp_handle_indirect_query (GdmXdmcpManager *manager,
/* get rid of indirect, so that we don't get
* the chooser */
gdm_choose_indirect_dispose (id);
- gdm_xdmcp_send_willing (manager, address);
+ gdm_xdmcp_send_willing (factory, address);
} else if (gdm_address_is_loopback (address)) {
/* woohoo! fun, I have no clue how to get
* the correct ip, SO I just send forward
@@ -1098,7 +1098,7 @@ gdm_xdmcp_handle_indirect_query (GdmXdmcpManager *manager,
if (! gdm_address_is_loopback (saddr)) {
/* forward query to * chosen host */
- gdm_xdmcp_send_forward_query (manager,
+ gdm_xdmcp_send_forward_query (factory,
id,
address,
saddr,
@@ -1109,7 +1109,7 @@ gdm_xdmcp_handle_indirect_query (GdmXdmcpManager *manager,
}
} else {
/* or send forward query to chosen host */
- gdm_xdmcp_send_forward_query (manager,
+ gdm_xdmcp_send_forward_query (factory,
id,
address,
address,
@@ -1118,10 +1118,10 @@ gdm_xdmcp_handle_indirect_query (GdmXdmcpManager *manager,
} else if (id == NULL) {
id = gdm_choose_indirect_alloc (address);
if (id != NULL) {
- gdm_xdmcp_send_willing (manager, address);
+ gdm_xdmcp_send_willing (factory, address);
}
} else {
- gdm_xdmcp_send_willing (manager, address);
+ gdm_xdmcp_send_willing (factory, address);
}
out:
@@ -1129,14 +1129,14 @@ out:
}
static void
-gdm_forward_query_dispose (GdmXdmcpManager *manager,
+gdm_forward_query_dispose (GdmXdmcpDisplayFactory *factory,
GdmForwardQuery *q)
{
if (q == NULL) {
return;
}
- manager->priv->forward_queries = g_slist_remove (manager->priv->forward_queries, q);
+ factory->priv->forward_queries = g_slist_remove (factory->priv->forward_queries, q);
q->acctime = 0;
@@ -1158,12 +1158,12 @@ gdm_forward_query_dispose (GdmXdmcpManager *manager,
}
static gboolean
-remove_oldest_forward (GdmXdmcpManager *manager)
+remove_oldest_forward (GdmXdmcpDisplayFactory *factory)
{
GSList *li;
GdmForwardQuery *oldest = NULL;
- for (li = manager->priv->forward_queries; li != NULL; li = li->next) {
+ for (li = factory->priv->forward_queries; li != NULL; li = li->next) {
GdmForwardQuery *query = li->data;
if (oldest == NULL || query->acctime < oldest->acctime) {
@@ -1172,7 +1172,7 @@ remove_oldest_forward (GdmXdmcpManager *manager)
}
if (oldest != NULL) {
- gdm_forward_query_dispose (manager, oldest);
+ gdm_forward_query_dispose (factory, oldest);
return TRUE;
} else {
return FALSE;
@@ -1180,16 +1180,16 @@ remove_oldest_forward (GdmXdmcpManager *manager)
}
static GdmForwardQuery *
-gdm_forward_query_alloc (GdmXdmcpManager *manager,
+gdm_forward_query_alloc (GdmXdmcpDisplayFactory *factory,
GdmAddress *mgr_address,
GdmAddress *dsp_address)
{
GdmForwardQuery *q;
int count;
- count = g_slist_length (manager->priv->forward_queries);
+ count = g_slist_length (factory->priv->forward_queries);
- while (count > GDM_MAX_FORWARD_QUERIES && remove_oldest_forward (manager)) {
+ while (count > GDM_MAX_FORWARD_QUERIES && remove_oldest_forward (factory)) {
count--;
}
@@ -1197,13 +1197,13 @@ gdm_forward_query_alloc (GdmXdmcpManager *manager,
q->dsp_address = gdm_address_copy (dsp_address);
q->from_address = gdm_address_copy (mgr_address);
- manager->priv->forward_queries = g_slist_prepend (manager->priv->forward_queries, q);
+ factory->priv->forward_queries = g_slist_prepend (factory->priv->forward_queries, q);
return q;
}
static GdmForwardQuery *
-gdm_forward_query_lookup (GdmXdmcpManager *manager,
+gdm_forward_query_lookup (GdmXdmcpDisplayFactory *factory,
GdmAddress *address)
{
GSList *li;
@@ -1214,7 +1214,7 @@ gdm_forward_query_lookup (GdmXdmcpManager *manager,
curtime = time (NULL);
ret = NULL;
- qlist = g_slist_copy (manager->priv->forward_queries);
+ qlist = g_slist_copy (factory->priv->forward_queries);
for (li = qlist; li != NULL; li = li->next) {
GdmForwardQuery *q;
@@ -1243,7 +1243,7 @@ gdm_forward_query_lookup (GdmXdmcpManager *manager,
g_debug ("gdm_forward_query_lookup: Disposing stale forward query from %s:%s",
host, serv);
- gdm_forward_query_dispose (manager, q);
+ gdm_forward_query_dispose (factory, q);
}
g_free (host);
@@ -1349,18 +1349,18 @@ create_address_from_request (ARRAY8 *req_addr,
}
static void
-gdm_xdmcp_whack_queued_managed_forwards (GdmXdmcpManager *manager,
+gdm_xdmcp_whack_queued_managed_forwards (GdmXdmcpDisplayFactory *factory,
GdmAddress *address,
GdmAddress *origin)
{
GSList *li;
- for (li = manager->priv->managed_forwards; li != NULL; li = li->next) {
+ for (li = factory->priv->managed_forwards; li != NULL; li = li->next) {
ManagedForward *mf = li->data;
if (gdm_address_equal (mf->manager, address) &&
gdm_address_equal (mf->origin, origin)) {
- manager->priv->managed_forwards = g_slist_remove_link (manager->priv->managed_forwards, li);
+ factory->priv->managed_forwards = g_slist_remove_link (factory->priv->managed_forwards, li);
g_slist_free_1 (li);
g_source_remove (mf->handler);
/* mf freed by glib */
@@ -1370,7 +1370,7 @@ gdm_xdmcp_whack_queued_managed_forwards (GdmXdmcpManager *manager,
}
static void
-gdm_xdmcp_handle_forward_query (GdmXdmcpManager *manager,
+gdm_xdmcp_handle_forward_query (GdmXdmcpDisplayFactory *factory,
GdmAddress *address,
int len)
{
@@ -1400,14 +1400,14 @@ gdm_xdmcp_handle_forward_query (GdmXdmcpManager *manager,
}
/* Read display address */
- if G_UNLIKELY (! XdmcpReadARRAY8 (&manager->priv->buf, &clnt_addr)) {
+ if G_UNLIKELY (! XdmcpReadARRAY8 (&factory->priv->buf, &clnt_addr)) {
g_warning (_("%s: Could not read display address"),
"gdm_xdmcp_handle_forward_query");
return;
}
/* Read display port */
- if G_UNLIKELY (! XdmcpReadARRAY8 (&manager->priv->buf, &clnt_port)) {
+ if G_UNLIKELY (! XdmcpReadARRAY8 (&factory->priv->buf, &clnt_port)) {
XdmcpDisposeARRAY8 (&clnt_addr);
g_warning (_("%s: Could not read display port number"),
"gdm_xdmcp_handle_forward_query");
@@ -1415,7 +1415,7 @@ gdm_xdmcp_handle_forward_query (GdmXdmcpManager *manager,
}
/* Extract array of authentication names from Xdmcp packet */
- if G_UNLIKELY (! XdmcpReadARRAYofARRAY8 (&manager->priv->buf, &clnt_authlist)) {
+ if G_UNLIKELY (! XdmcpReadARRAYofARRAY8 (&factory->priv->buf, &clnt_authlist)) {
XdmcpDisposeARRAY8 (&clnt_addr);
XdmcpDisposeARRAY8 (&clnt_port);
g_warning (_("%s: Could not extract authlist from packet"),
@@ -1448,7 +1448,7 @@ gdm_xdmcp_handle_forward_query (GdmXdmcpManager *manager,
goto out;
}
- gdm_xdmcp_whack_queued_managed_forwards (manager,
+ gdm_xdmcp_whack_queued_managed_forwards (factory,
address,
disp_address);
@@ -1464,14 +1464,14 @@ gdm_xdmcp_handle_forward_query (GdmXdmcpManager *manager,
if (gdm_xdmcp_host_allow (disp_address)) {
GdmForwardQuery *q;
- q = gdm_forward_query_lookup (manager, disp_address);
+ q = gdm_forward_query_lookup (factory, disp_address);
if (q != NULL) {
- gdm_forward_query_dispose (manager, q);
+ gdm_forward_query_dispose (factory, q);
}
- gdm_forward_query_alloc (manager, address, disp_address);
+ gdm_forward_query_alloc (factory, address, disp_address);
- gdm_xdmcp_send_willing (manager, disp_address);
+ gdm_xdmcp_send_willing (factory, disp_address);
}
out:
@@ -1484,7 +1484,7 @@ gdm_xdmcp_handle_forward_query (GdmXdmcpManager *manager,
}
static void
-gdm_xdmcp_really_send_managed_forward (GdmXdmcpManager *manager,
+gdm_xdmcp_really_send_managed_forward (GdmXdmcpDisplayFactory *factory,
GdmAddress *address,
GdmAddress *origin)
{
@@ -1502,11 +1502,11 @@ gdm_xdmcp_really_send_managed_forward (GdmXdmcpManager *manager,
header.opcode = (CARD16) GDM_XDMCP_MANAGED_FORWARD;
header.length = 4 + addr.length;
header.version = GDM_XDMCP_PROTOCOL_VERSION;
- XdmcpWriteHeader (&manager->priv->buf, &header);
+ XdmcpWriteHeader (&factory->priv->buf, &header);
- XdmcpWriteARRAY8 (&manager->priv->buf, &addr);
- XdmcpFlush (manager->priv->socket_fd,
- &manager->priv->buf,
+ XdmcpWriteARRAY8 (&factory->priv->buf, &addr);
+ XdmcpFlush (factory->priv->socket_fd,
+ &factory->priv->buf,
(XdmcpNetaddr)gdm_address_peek_sockaddr_storage (address),
(int)sizeof (struct sockaddr_storage));
@@ -1516,15 +1516,15 @@ gdm_xdmcp_really_send_managed_forward (GdmXdmcpManager *manager,
static gboolean
managed_forward_handler (ManagedForward *mf)
{
- if (mf->xdmcp_manager->priv->socket_fd > 0) {
- gdm_xdmcp_really_send_managed_forward (mf->xdmcp_manager,
+ if (mf->xdmcp_display_factory->priv->socket_fd > 0) {
+ gdm_xdmcp_really_send_managed_forward (mf->xdmcp_display_factory,
mf->manager,
mf->origin);
}
mf->times++;
- if (mf->xdmcp_manager->priv->socket_fd <= 0 || mf->times >= 2) {
- mf->xdmcp_manager->priv->managed_forwards = g_slist_remove (mf->xdmcp_manager->priv->managed_forwards, mf);
+ if (mf->xdmcp_display_factory->priv->socket_fd <= 0 || mf->times >= 2) {
+ mf->xdmcp_display_factory->priv->managed_forwards = g_slist_remove (mf->xdmcp_display_factory->priv->managed_forwards, mf);
mf->handler = 0;
/* mf freed by glib */
return FALSE;
@@ -1541,17 +1541,17 @@ managed_forward_free (ManagedForward *mf)
}
static void
-gdm_xdmcp_send_managed_forward (GdmXdmcpManager *manager,
+gdm_xdmcp_send_managed_forward (GdmXdmcpDisplayFactory *factory,
GdmAddress *address,
GdmAddress *origin)
{
ManagedForward *mf;
- gdm_xdmcp_really_send_managed_forward (manager, address, origin);
+ gdm_xdmcp_really_send_managed_forward (factory, address, origin);
mf = g_new0 (ManagedForward, 1);
mf->times = 0;
- mf->xdmcp_manager = manager;
+ mf->xdmcp_display_factory = factory;
mf->manager = gdm_address_copy (address);
mf->origin = gdm_address_copy (origin);
@@ -1561,11 +1561,11 @@ gdm_xdmcp_send_managed_forward (GdmXdmcpManager *manager,
(GSourceFunc)managed_forward_handler,
mf,
(GDestroyNotify)managed_forward_free);
- manager->priv->managed_forwards = g_slist_prepend (manager->priv->managed_forwards, mf);
+ factory->priv->managed_forwards = g_slist_prepend (factory->priv->managed_forwards, mf);
}
static void
-gdm_xdmcp_send_got_managed_forward (GdmXdmcpManager *manager,
+gdm_xdmcp_send_got_managed_forward (GdmXdmcpDisplayFactory *factory,
GdmAddress *address,
GdmAddress *origin)
{
@@ -1583,11 +1583,11 @@ gdm_xdmcp_send_got_managed_forward (GdmXdmcpManager *manager,
header.opcode = (CARD16) GDM_XDMCP_GOT_MANAGED_FORWARD;
header.length = 4 + addr.length;
header.version = GDM_XDMCP_PROTOCOL_VERSION;
- XdmcpWriteHeader (&manager->priv->buf, &header);
+ XdmcpWriteHeader (&factory->priv->buf, &header);
- XdmcpWriteARRAY8 (&manager->priv->buf, &addr);
- XdmcpFlush (manager->priv->socket_fd,
- &manager->priv->buf,
+ XdmcpWriteARRAY8 (&factory->priv->buf, &addr);
+ XdmcpFlush (factory->priv->socket_fd,
+ &factory->priv->buf,
(XdmcpNetaddr)gdm_address_peek_sockaddr_storage (address),
(int)sizeof (struct sockaddr_storage));
}
@@ -1595,7 +1595,7 @@ gdm_xdmcp_send_got_managed_forward (GdmXdmcpManager *manager,
static gboolean
count_sessions (const char *id,
GdmDisplay *display,
- GdmXdmcpManager *manager)
+ GdmXdmcpDisplayFactory *factory)
{
if (GDM_IS_XDMCP_DISPLAY (display)) {
int status;
@@ -1603,9 +1603,9 @@ count_sessions (const char *id,
status = gdm_display_get_status (display);
if (status == GDM_DISPLAY_MANAGED) {
- manager->priv->num_sessions++;
+ factory->priv->num_sessions++;
} else if (status == GDM_DISPLAY_UNMANAGED) {
- manager->priv->num_pending_sessions++;
+ factory->priv->num_pending_sessions++;
}
}
@@ -1613,20 +1613,23 @@ count_sessions (const char *id,
}
static void
-gdm_xdmcp_recount_sessions (GdmXdmcpManager *manager)
+gdm_xdmcp_recount_sessions (GdmXdmcpDisplayFactory *factory)
{
- manager->priv->num_sessions = 0;
- manager->priv->num_pending_sessions = 0;
+ GdmDisplayStore *store;
+
+ factory->priv->num_sessions = 0;
+ factory->priv->num_pending_sessions = 0;
- gdm_display_store_foreach (manager->priv->display_store,
- (GdmDisplayStoreFunc)count_sessions,
- manager);
+ store = gdm_display_factory_get_display_store (GDM_DISPLAY_FACTORY (factory));
+ gdm_display_store_foreach (store,
+ (GdmDisplayStoreFunc)count_sessions,
+ factory);
}
static gboolean
purge_displays (const char *id,
GdmDisplay *display,
- GdmXdmcpManager *manager)
+ GdmXdmcpDisplayFactory *factory)
{
if (GDM_IS_XDMCP_DISPLAY (display)) {
int status;
@@ -1638,7 +1641,7 @@ purge_displays (const char *id,
acctime = gdm_display_get_creation_time (display);
if (status == GDM_DISPLAY_UNMANAGED &&
- currtime > acctime + manager->priv->max_wait) {
+ currtime > acctime + factory->priv->max_wait) {
/* return TRUE to remove display */
return TRUE;
}
@@ -1648,13 +1651,17 @@ purge_displays (const char *id,
}
static void
-gdm_xdmcp_displays_purge (GdmXdmcpManager *manager)
+gdm_xdmcp_displays_purge (GdmXdmcpDisplayFactory *factory)
{
- gdm_display_store_foreach_remove (manager->priv->display_store,
+ GdmDisplayStore *store;
+
+ store = gdm_display_factory_get_display_store (GDM_DISPLAY_FACTORY (factory));
+
+ gdm_display_store_foreach_remove (store,
(GdmDisplayStoreFunc)purge_displays,
- manager);
+ factory);
- gdm_xdmcp_recount_sessions (manager);
+ gdm_xdmcp_recount_sessions (factory);
}
typedef struct {
@@ -1689,31 +1696,34 @@ remove_host (const char *id,
}
static void
-display_dispose_check (GdmXdmcpManager *manager,
+display_dispose_check (GdmXdmcpDisplayFactory *factory,
const char *hostname,
int display_num)
{
- RemoveHostData *data;
+ RemoveHostData *data;
+ GdmDisplayStore *store;
if (hostname == NULL) {
return;
}
+ store = gdm_display_factory_get_display_store (GDM_DISPLAY_FACTORY (factory));
+
g_debug ("display_dispose_check (%s:%d)", hostname, display_num);
data = g_new0 (RemoveHostData, 1);
data->hostname = hostname;
data->display_num = display_num;
- gdm_display_store_foreach_remove (manager->priv->display_store,
+ gdm_display_store_foreach_remove (store,
(GdmDisplayStoreFunc)remove_host,
data);
g_free (data);
- gdm_xdmcp_recount_sessions (manager);
+ gdm_xdmcp_recount_sessions (factory);
}
static void
-gdm_xdmcp_send_decline (GdmXdmcpManager *manager,
+gdm_xdmcp_send_decline (GdmXdmcpDisplayFactory *factory,
GdmAddress *address,
const char *reason)
{
@@ -1744,39 +1754,40 @@ gdm_xdmcp_send_decline (GdmXdmcpManager *manager,
header.length += 2 + authentype.length;
header.length += 2 + authendata.length;
- XdmcpWriteHeader (&manager->priv->buf, &header);
- XdmcpWriteARRAY8 (&manager->priv->buf, &status);
- XdmcpWriteARRAY8 (&manager->priv->buf, &authentype);
- XdmcpWriteARRAY8 (&manager->priv->buf, &authendata);
+ XdmcpWriteHeader (&factory->priv->buf, &header);
+ XdmcpWriteARRAY8 (&factory->priv->buf, &status);
+ XdmcpWriteARRAY8 (&factory->priv->buf, &authentype);
+ XdmcpWriteARRAY8 (&factory->priv->buf, &authendata);
- XdmcpFlush (manager->priv->socket_fd,
- &manager->priv->buf,
+ XdmcpFlush (factory->priv->socket_fd,
+ &factory->priv->buf,
(XdmcpNetaddr)gdm_address_peek_sockaddr_storage (address),
(int)sizeof (struct sockaddr_storage));
/* Send MANAGED_FORWARD to indicate that the connection
* reached some sort of resolution */
- fq = gdm_forward_query_lookup (manager, address);
+ fq = gdm_forward_query_lookup (factory, address);
if (fq != NULL) {
- gdm_xdmcp_send_managed_forward (manager, fq->from_address, address);
- gdm_forward_query_dispose (manager, fq);
+ gdm_xdmcp_send_managed_forward (factory, fq->from_address, address);
+ gdm_forward_query_dispose (factory, fq);
}
}
static GdmDisplay *
-gdm_xdmcp_display_alloc (GdmXdmcpManager *manager,
- const char *hostname,
- GdmAddress *address,
- int displaynum)
+gdm_xdmcp_display_alloc (GdmXdmcpDisplayFactory *factory,
+ const char *hostname,
+ GdmAddress *address,
+ int displaynum)
{
- GdmDisplay *display;
+ GdmDisplay *display;
+ GdmDisplayStore *store;
g_debug ("Creating xdmcp display for %s:%d", hostname, displaynum);
display = gdm_xdmcp_display_new (hostname,
displaynum,
address,
- get_next_session_serial (manager));
+ get_next_session_serial (factory));
if (display == NULL) {
goto out;
}
@@ -1787,22 +1798,23 @@ gdm_xdmcp_display_alloc (GdmXdmcpManager *manager,
goto out;
}
- gdm_display_store_add (manager->priv->display_store, display);
+ store = gdm_display_factory_get_display_store (GDM_DISPLAY_FACTORY (factory));
+ gdm_display_store_add (store, display);
- manager->priv->num_pending_sessions++;
+ factory->priv->num_pending_sessions++;
out:
return display;
}
static void
-gdm_xdmcp_send_accept (GdmXdmcpManager *manager,
- GdmAddress *address,
- CARD32 session_id,
- ARRAY8Ptr authentication_name,
- ARRAY8Ptr authentication_data,
- ARRAY8Ptr authorization_name,
- ARRAY8Ptr authorization_data)
+gdm_xdmcp_send_accept (GdmXdmcpDisplayFactory *factory,
+ GdmAddress *address,
+ CARD32 session_id,
+ ARRAY8Ptr authentication_name,
+ ARRAY8Ptr authentication_data,
+ ARRAY8Ptr authorization_name,
+ ARRAY8Ptr authorization_data)
{
XdmcpHeader header;
char *host;
@@ -1815,15 +1827,15 @@ gdm_xdmcp_send_accept (GdmXdmcpManager *manager,
header.length += 2 + authorization_name->length;
header.length += 2 + authorization_data->length;
- XdmcpWriteHeader (&manager->priv->buf, &header);
- XdmcpWriteCARD32 (&manager->priv->buf, session_id);
- XdmcpWriteARRAY8 (&manager->priv->buf, authentication_name);
- XdmcpWriteARRAY8 (&manager->priv->buf, authentication_data);
- XdmcpWriteARRAY8 (&manager->priv->buf, authorization_name);
- XdmcpWriteARRAY8 (&manager->priv->buf, authorization_data);
+ XdmcpWriteHeader (&factory->priv->buf, &header);
+ XdmcpWriteCARD32 (&factory->priv->buf, session_id);
+ XdmcpWriteARRAY8 (&factory->priv->buf, authentication_name);
+ XdmcpWriteARRAY8 (&factory->priv->buf, authentication_data);
+ XdmcpWriteARRAY8 (&factory->priv->buf, authorization_name);
+ XdmcpWriteARRAY8 (&factory->priv->buf, authorization_data);
- XdmcpFlush (manager->priv->socket_fd,
- &manager->priv->buf,
+ XdmcpFlush (factory->priv->socket_fd,
+ &factory->priv->buf,
(XdmcpNetaddr)gdm_address_peek_sockaddr_storage (address),
(int)sizeof (struct sockaddr_storage));
@@ -1836,7 +1848,7 @@ gdm_xdmcp_send_accept (GdmXdmcpManager *manager,
}
static void
-gdm_xdmcp_handle_request (GdmXdmcpManager *manager,
+gdm_xdmcp_handle_request (GdmXdmcpDisplayFactory *factory,
GdmAddress *address,
int len)
{
@@ -1868,24 +1880,24 @@ gdm_xdmcp_handle_request (GdmXdmcpManager *manager,
goto out;
}
- gdm_xdmcp_displays_purge (manager); /* Purge pending displays */
+ gdm_xdmcp_displays_purge (factory); /* Purge pending displays */
/* Remote display number */
- if G_UNLIKELY (! XdmcpReadCARD16 (&manager->priv->buf, &clnt_dspnum)) {
+ if G_UNLIKELY (! XdmcpReadCARD16 (&factory->priv->buf, &clnt_dspnum)) {
g_warning (_("%s: Could not read Display Number"),
"gdm_xdmcp_handle_request");
goto out;
}
/* We don't care about connection type. Address says it all */
- if G_UNLIKELY (! XdmcpReadARRAY16 (&manager->priv->buf, &clnt_conntyp)) {
+ if G_UNLIKELY (! XdmcpReadARRAY16 (&factory->priv->buf, &clnt_conntyp)) {
g_warning (_("%s: Could not read Connection Type"),
"gdm_xdmcp_handle_request");
goto out;
}
/* This is TCP/IP - we don't care */
- if G_UNLIKELY (! XdmcpReadARRAYofARRAY8 (&manager->priv->buf, &clnt_addr)) {
+ if G_UNLIKELY (! XdmcpReadARRAYofARRAY8 (&factory->priv->buf, &clnt_addr)) {
g_warning (_("%s: Could not read Client Address"),
"gdm_xdmcp_handle_request");
XdmcpDisposeARRAY16 (&clnt_conntyp);
@@ -1893,7 +1905,7 @@ gdm_xdmcp_handle_request (GdmXdmcpManager *manager,
}
/* Read authentication type */
- if G_UNLIKELY (! XdmcpReadARRAY8 (&manager->priv->buf, &clnt_authname)) {
+ if G_UNLIKELY (! XdmcpReadARRAY8 (&factory->priv->buf, &clnt_authname)) {
g_warning (_("%s: Could not read Authentication Names"),
"gdm_xdmcp_handle_request");
XdmcpDisposeARRAYofARRAY8 (&clnt_addr);
@@ -1902,7 +1914,7 @@ gdm_xdmcp_handle_request (GdmXdmcpManager *manager,
}
/* Read authentication data */
- if G_UNLIKELY (! XdmcpReadARRAY8 (&manager->priv->buf, &clnt_authdata)) {
+ if G_UNLIKELY (! XdmcpReadARRAY8 (&factory->priv->buf, &clnt_authdata)) {
g_warning (_("%s: Could not read Authentication Data"),
"gdm_xdmcp_handle_request");
XdmcpDisposeARRAYofARRAY8 (&clnt_addr);
@@ -1912,7 +1924,7 @@ gdm_xdmcp_handle_request (GdmXdmcpManager *manager,
}
/* Read and select from supported authorization list */
- if G_UNLIKELY (! XdmcpReadARRAYofARRAY8 (&manager->priv->buf, &clnt_authorization_names)) {
+ if G_UNLIKELY (! XdmcpReadARRAYofARRAY8 (&factory->priv->buf, &clnt_authorization_names)) {
g_warning (_("%s: Could not read Authorization List"),
"gdm_xdmcp_handle_request");
XdmcpDisposeARRAY8 (&clnt_authdata);
@@ -1931,7 +1943,7 @@ gdm_xdmcp_handle_request (GdmXdmcpManager *manager,
}
/* Manufacturer ID */
- if G_UNLIKELY (! XdmcpReadARRAY8 (&manager->priv->buf, &clnt_manufacturer)) {
+ if G_UNLIKELY (! XdmcpReadARRAY8 (&factory->priv->buf, &clnt_manufacturer)) {
g_warning (_("%s: Could not read Manufacturer ID"),
"gdm_xdmcp_handle_request");
XdmcpDisposeARRAY8 (&clnt_authname);
@@ -1975,36 +1987,36 @@ gdm_xdmcp_handle_request (GdmXdmcpManager *manager,
{
char *s = g_strndup ((char *) clnt_manufacturer.data, clnt_manufacturer.length);
g_debug ("gdm_xdmcp_handle_request: xdmcp_pending=%d, MaxPending=%d, xdmcp_sessions=%d, MaxSessions=%d, ManufacturerID=%s",
- manager->priv->num_pending_sessions,
- manager->priv->max_pending_displays,
- manager->priv->num_sessions,
- manager->priv->max_displays,
+ factory->priv->num_pending_sessions,
+ factory->priv->max_pending_displays,
+ factory->priv->num_sessions,
+ factory->priv->max_displays,
ve_sure_string (s));
g_free (s);
}
/* Check if ok to manage display */
if (mitauth &&
- manager->priv->num_sessions < manager->priv->max_displays &&
+ factory->priv->num_sessions < factory->priv->max_displays &&
(gdm_address_is_local (address) ||
- gdm_xdmcp_num_displays_from_host (manager, address) < manager->priv->max_displays_per_host)) {
+ gdm_xdmcp_num_displays_from_host (factory, address) < factory->priv->max_displays_per_host)) {
entered = TRUE;
}
if (entered) {
/* Check if we are already talking to this host */
- display_dispose_check (manager, hostname, clnt_dspnum);
+ display_dispose_check (factory, hostname, clnt_dspnum);
- if (manager->priv->num_pending_sessions >= manager->priv->max_pending_displays) {
+ if (factory->priv->num_pending_sessions >= factory->priv->max_pending_displays) {
g_debug ("gdm_xdmcp_handle_request: maximum pending");
/* Don't translate, this goes over the wire to servers where we
* don't know the charset or language, so it must be ascii */
- gdm_xdmcp_send_decline (manager, address, "Maximum pending servers");
+ gdm_xdmcp_send_decline (factory, address, "Maximum pending servers");
} else {
GdmDisplay *display;
- display = gdm_xdmcp_display_alloc (manager,
+ display = gdm_xdmcp_display_alloc (factory,
hostname,
address,
clnt_dspnum);
@@ -2070,7 +2082,7 @@ gdm_xdmcp_handle_request (GdmXdmcpManager *manager,
authorization_data.length = binary_cookie->len;
/* the addrs are NOT copied */
- gdm_xdmcp_send_accept (manager,
+ gdm_xdmcp_send_accept (factory,
address,
session_number,
&authentication_name,
@@ -2086,18 +2098,18 @@ gdm_xdmcp_handle_request (GdmXdmcpManager *manager,
/* Don't translate, this goes over the wire to servers where we
* don't know the charset or language, so it must be ascii */
if ( ! mitauth) {
- gdm_xdmcp_send_decline (manager,
+ gdm_xdmcp_send_decline (factory,
address,
"Only MIT-MAGIC-COOKIE-1 supported");
- } else if (manager->priv->num_sessions >= manager->priv->max_displays) {
+ } else if (factory->priv->num_sessions >= factory->priv->max_displays) {
g_warning ("Maximum number of open XDMCP sessions reached");
- gdm_xdmcp_send_decline (manager,
+ gdm_xdmcp_send_decline (factory,
address,
"Maximum number of open sessions reached");
} else {
g_debug ("Maximum number of open XDMCP sessions from host %s reached",
hostname);
- gdm_xdmcp_send_decline (manager,
+ gdm_xdmcp_send_decline (factory,
address,
"Maximum number of open sessions from your host reached");
}
@@ -2137,16 +2149,18 @@ lookup_by_session_id (const char *id,
}
static GdmDisplay *
-gdm_xdmcp_display_lookup (GdmXdmcpManager *manager,
+gdm_xdmcp_display_lookup (GdmXdmcpDisplayFactory *factory,
CARD32 sessid)
{
- GdmDisplay *display;
+ GdmDisplay *display;
+ GdmDisplayStore *store;
if (sessid == 0) {
return NULL;
}
- display = gdm_display_store_find (manager->priv->display_store,
+ store = gdm_display_factory_get_display_store (GDM_DISPLAY_FACTORY (factory));
+ display = gdm_display_store_find (store,
(GdmDisplayStoreFunc)lookup_by_session_id,
GINT_TO_POINTER (sessid));
@@ -2154,7 +2168,7 @@ gdm_xdmcp_display_lookup (GdmXdmcpManager *manager,
}
static void
-gdm_xdmcp_send_failed (GdmXdmcpManager *manager,
+gdm_xdmcp_send_failed (GdmXdmcpDisplayFactory *factory,
GdmAddress *address,
CARD32 sessid)
{
@@ -2174,18 +2188,18 @@ gdm_xdmcp_send_failed (GdmXdmcpManager *manager,
header.opcode = (CARD16) FAILED;
header.length = 6+status.length;
- XdmcpWriteHeader (&manager->priv->buf, &header);
- XdmcpWriteCARD32 (&manager->priv->buf, sessid);
- XdmcpWriteARRAY8 (&manager->priv->buf, &status);
+ XdmcpWriteHeader (&factory->priv->buf, &header);
+ XdmcpWriteCARD32 (&factory->priv->buf, sessid);
+ XdmcpWriteARRAY8 (&factory->priv->buf, &status);
- XdmcpFlush (manager->priv->socket_fd,
- &manager->priv->buf,
+ XdmcpFlush (factory->priv->socket_fd,
+ &factory->priv->buf,
(XdmcpNetaddr)gdm_address_peek_sockaddr_storage (address),
(int)sizeof (struct sockaddr_storage));
}
static void
-gdm_xdmcp_send_refuse (GdmXdmcpManager *manager,
+gdm_xdmcp_send_refuse (GdmXdmcpDisplayFactory *factory,
GdmAddress *address,
CARD32 sessid)
{
@@ -2199,11 +2213,11 @@ gdm_xdmcp_send_refuse (GdmXdmcpManager *manager,
header.opcode = (CARD16) REFUSE;
header.length = 4;
- XdmcpWriteHeader (&manager->priv->buf, &header);
- XdmcpWriteCARD32 (&manager->priv->buf, sessid);
+ XdmcpWriteHeader (&factory->priv->buf, &header);
+ XdmcpWriteCARD32 (&factory->priv->buf, sessid);
- XdmcpFlush (manager->priv->socket_fd,
- &manager->priv->buf,
+ XdmcpFlush (factory->priv->socket_fd,
+ &factory->priv->buf,
(XdmcpNetaddr)gdm_address_peek_sockaddr_storage (address),
(int)sizeof (struct sockaddr_storage));
@@ -2211,15 +2225,15 @@ gdm_xdmcp_send_refuse (GdmXdmcpManager *manager,
* This was from a forwarded query quite apparently so
* send MANAGED_FORWARD
*/
- fq = gdm_forward_query_lookup (manager, address);
+ fq = gdm_forward_query_lookup (factory, address);
if (fq != NULL) {
- gdm_xdmcp_send_managed_forward (manager, fq->from_address, address);
- gdm_forward_query_dispose (manager, fq);
+ gdm_xdmcp_send_managed_forward (factory, fq->from_address, address);
+ gdm_forward_query_dispose (factory, fq);
}
}
static void
-gdm_xdmcp_handle_manage (GdmXdmcpManager *manager,
+gdm_xdmcp_handle_manage (GdmXdmcpDisplayFactory *factory,
GdmAddress *address,
int len)
{
@@ -2244,21 +2258,21 @@ gdm_xdmcp_handle_manage (GdmXdmcpManager *manager,
}
/* SessionID */
- if G_UNLIKELY (! XdmcpReadCARD32 (&manager->priv->buf, &clnt_sessid)) {
+ if G_UNLIKELY (! XdmcpReadCARD32 (&factory->priv->buf, &clnt_sessid)) {
g_warning (_("%s: Could not read Session ID"),
"gdm_xdmcp_handle_manage");
goto out;
}
/* Remote display number */
- if G_UNLIKELY (! XdmcpReadCARD16 (&manager->priv->buf, &clnt_dspnum)) {
+ if G_UNLIKELY (! XdmcpReadCARD16 (&factory->priv->buf, &clnt_dspnum)) {
g_warning (_("%s: Could not read Display Number"),
"gdm_xdmcp_handle_manage");
goto out;
}
/* Display Class */
- if G_UNLIKELY (! XdmcpReadARRAY8 (&manager->priv->buf, &clnt_dspclass)) {
+ if G_UNLIKELY (! XdmcpReadARRAY8 (&factory->priv->buf, &clnt_dspclass)) {
g_warning (_("%s: Could not read Display Class"),
"gdm_xdmcp_handle_manage");
goto out;
@@ -2275,7 +2289,7 @@ gdm_xdmcp_handle_manage (GdmXdmcpManager *manager,
g_free (s);
}
- display = gdm_xdmcp_display_lookup (manager, clnt_sessid);
+ display = gdm_xdmcp_display_lookup (factory, clnt_sessid);
if (display != NULL &&
gdm_display_get_status (display) == GDM_DISPLAY_UNMANAGED) {
char *name;
@@ -2286,7 +2300,7 @@ gdm_xdmcp_handle_manage (GdmXdmcpManager *manager,
g_free (name);
#if 0 /* FIXME: */
- if (manager->priv->honor_indirect) {
+ if (factory->priv->honor_indirect) {
GdmIndirectDisplay *id;
id = gdm_choose_indirect_lookup (address);
@@ -2310,18 +2324,18 @@ gdm_xdmcp_handle_manage (GdmXdmcpManager *manager,
#endif
/* this was from a forwarded query quite apparently so
* send MANAGED_FORWARD */
- fq = gdm_forward_query_lookup (manager, address);
+ fq = gdm_forward_query_lookup (factory, address);
if (fq != NULL) {
- gdm_xdmcp_send_managed_forward (manager, fq->from_address, address);
- gdm_forward_query_dispose (manager, fq);
+ gdm_xdmcp_send_managed_forward (factory, fq->from_address, address);
+ gdm_forward_query_dispose (factory, fq);
}
- manager->priv->num_sessions++;
- manager->priv->num_pending_sessions--;
+ factory->priv->num_sessions++;
+ factory->priv->num_pending_sessions--;
/* Start greeter/session */
if (! gdm_display_manage (display)) {
- gdm_xdmcp_send_failed (manager, address, clnt_sessid);
+ gdm_xdmcp_send_failed (factory, address, clnt_sessid);
g_debug ("Failed to manage display");
}
} else if (display != NULL &&
@@ -2331,7 +2345,7 @@ gdm_xdmcp_handle_manage (GdmXdmcpManager *manager,
} else {
g_warning ("gdm_xdmcp_handle_manage: Failed to look up session id %ld",
(long)clnt_sessid);
- gdm_xdmcp_send_refuse (manager, address, clnt_sessid);
+ gdm_xdmcp_send_refuse (factory, address, clnt_sessid);
}
out:
@@ -2340,7 +2354,7 @@ gdm_xdmcp_handle_manage (GdmXdmcpManager *manager,
}
static void
-gdm_xdmcp_handle_managed_forward (GdmXdmcpManager *manager,
+gdm_xdmcp_handle_managed_forward (GdmXdmcpDisplayFactory *factory,
GdmAddress *address,
int len)
{
@@ -2364,7 +2378,7 @@ gdm_xdmcp_handle_managed_forward (GdmXdmcpManager *manager,
g_free (host);
/* Hostname */
- if G_UNLIKELY ( ! XdmcpReadARRAY8 (&manager->priv->buf, &clnt_address)) {
+ if G_UNLIKELY ( ! XdmcpReadARRAY8 (&factory->priv->buf, &clnt_address)) {
g_warning (_("%s: Could not read address"),
"gdm_xdmcp_handle_managed_forward");
return;
@@ -2384,7 +2398,7 @@ gdm_xdmcp_handle_managed_forward (GdmXdmcpManager *manager,
/* Note: we send GOT even on not found, just in case our previous
* didn't get through and this was a second managed forward */
- gdm_xdmcp_send_got_managed_forward (manager, address, disp_address);
+ gdm_xdmcp_send_got_managed_forward (factory, address, disp_address);
gdm_address_free (disp_address);
@@ -2392,7 +2406,7 @@ gdm_xdmcp_handle_managed_forward (GdmXdmcpManager *manager,
}
static void
-gdm_xdmcp_handle_got_managed_forward (GdmXdmcpManager *manager,
+gdm_xdmcp_handle_got_managed_forward (GdmXdmcpDisplayFactory *factory,
GdmAddress *address,
int len)
{
@@ -2414,7 +2428,7 @@ gdm_xdmcp_handle_got_managed_forward (GdmXdmcpManager *manager,
g_free (host);
/* Hostname */
- if G_UNLIKELY ( ! XdmcpReadARRAY8 (&manager->priv->buf, &clnt_address)) {
+ if G_UNLIKELY ( ! XdmcpReadARRAY8 (&factory->priv->buf, &clnt_address)) {
g_warning (_("%s: Could not read address"),
"gdm_xdmcp_handle_got_managed_forward");
return;
@@ -2427,7 +2441,7 @@ gdm_xdmcp_handle_got_managed_forward (GdmXdmcpManager *manager,
return;
}
- gdm_xdmcp_whack_queued_managed_forwards (manager, address, disp_address);
+ gdm_xdmcp_whack_queued_managed_forwards (factory, address, disp_address);
gdm_address_free (disp_address);
@@ -2435,7 +2449,7 @@ gdm_xdmcp_handle_got_managed_forward (GdmXdmcpManager *manager,
}
static void
-gdm_xdmcp_send_alive (GdmXdmcpManager *manager,
+gdm_xdmcp_send_alive (GdmXdmcpDisplayFactory *factory,
GdmAddress *address,
CARD16 dspnum,
CARD32 sessid)
@@ -2445,9 +2459,9 @@ gdm_xdmcp_send_alive (GdmXdmcpManager *manager,
int send_running = 0;
CARD32 send_sessid = 0;
- display = gdm_xdmcp_display_lookup (manager, sessid);
+ display = gdm_xdmcp_display_lookup (factory, sessid);
if (display == NULL) {
- display = gdm_xdmcp_display_lookup_by_host (manager, address, dspnum);
+ display = gdm_xdmcp_display_lookup_by_host (factory, address, dspnum);
}
if (display != NULL) {
@@ -2470,18 +2484,18 @@ gdm_xdmcp_send_alive (GdmXdmcpManager *manager,
header.opcode = (CARD16) ALIVE;
header.length = 5;
- XdmcpWriteHeader (&manager->priv->buf, &header);
- XdmcpWriteCARD8 (&manager->priv->buf, send_running);
- XdmcpWriteCARD32 (&manager->priv->buf, send_sessid);
+ XdmcpWriteHeader (&factory->priv->buf, &header);
+ XdmcpWriteCARD8 (&factory->priv->buf, send_running);
+ XdmcpWriteCARD32 (&factory->priv->buf, send_sessid);
- XdmcpFlush (manager->priv->socket_fd,
- &manager->priv->buf,
+ XdmcpFlush (factory->priv->socket_fd,
+ &factory->priv->buf,
(XdmcpNetaddr)gdm_address_peek_sockaddr_storage (address),
(int)sizeof (struct sockaddr_storage));
}
static void
-gdm_xdmcp_handle_keepalive (GdmXdmcpManager *manager,
+gdm_xdmcp_handle_keepalive (GdmXdmcpDisplayFactory *factory,
GdmAddress *address,
int len)
{
@@ -2504,20 +2518,20 @@ gdm_xdmcp_handle_keepalive (GdmXdmcpManager *manager,
g_free (host);
/* Remote display number */
- if G_UNLIKELY (! XdmcpReadCARD16 (&manager->priv->buf, &clnt_dspnum)) {
+ if G_UNLIKELY (! XdmcpReadCARD16 (&factory->priv->buf, &clnt_dspnum)) {
g_warning (_("%s: Could not read Display Number"),
"gdm_xdmcp_handle_keepalive");
return;
}
/* SessionID */
- if G_UNLIKELY (! XdmcpReadCARD32 (&manager->priv->buf, &clnt_sessid)) {
+ if G_UNLIKELY (! XdmcpReadCARD32 (&factory->priv->buf, &clnt_sessid)) {
g_warning (_("%s: Could not read Session ID"),
"gdm_xdmcp_handle_keepalive");
return;
}
- gdm_xdmcp_send_alive (manager, address, clnt_dspnum, clnt_sessid);
+ gdm_xdmcp_send_alive (factory, address, clnt_dspnum, clnt_sessid);
}
static const char *
@@ -2559,7 +2573,7 @@ opcode_string (int opcode)
static gboolean
decode_packet (GIOChannel *source,
GIOCondition cond,
- GdmXdmcpManager *manager)
+ GdmXdmcpDisplayFactory *factory)
{
struct sockaddr_storage clnt_ss;
GdmAddress *address;
@@ -2576,13 +2590,13 @@ decode_packet (GIOChannel *source,
}
ss_len = sizeof (clnt_ss);
- res = XdmcpFill (manager->priv->socket_fd, &manager->priv->buf, (XdmcpNetaddr)&clnt_ss, &ss_len);
+ res = XdmcpFill (factory->priv->socket_fd, &factory->priv->buf, (XdmcpNetaddr)&clnt_ss, &ss_len);
if G_UNLIKELY (! res) {
g_debug (_("XMCP: Could not create XDMCP buffer!"));
return TRUE;
}
- res = XdmcpReadHeader (&manager->priv->buf, &header);
+ res = XdmcpReadHeader (&factory->priv->buf, &header);
if G_UNLIKELY (! res) {
g_warning (_("XDMCP: Could not read XDMCP header!"));
return TRUE;
@@ -2613,39 +2627,39 @@ decode_packet (GIOChannel *source,
switch (header.opcode) {
case BROADCAST_QUERY:
- gdm_xdmcp_handle_broadcast_query (manager, address, header.length);
+ gdm_xdmcp_handle_broadcast_query (factory, address, header.length);
break;
case QUERY:
- gdm_xdmcp_handle_query (manager, address, header.length);
+ gdm_xdmcp_handle_query (factory, address, header.length);
break;
case INDIRECT_QUERY:
- gdm_xdmcp_handle_indirect_query (manager, address, header.length);
+ gdm_xdmcp_handle_indirect_query (factory, address, header.length);
break;
case FORWARD_QUERY:
- gdm_xdmcp_handle_forward_query (manager, address, header.length);
+ gdm_xdmcp_handle_forward_query (factory, address, header.length);
break;
case REQUEST:
- gdm_xdmcp_handle_request (manager, address, header.length);
+ gdm_xdmcp_handle_request (factory, address, header.length);
break;
case MANAGE:
- gdm_xdmcp_handle_manage (manager, address, header.length);
+ gdm_xdmcp_handle_manage (factory, address, header.length);
break;
case KEEPALIVE:
- gdm_xdmcp_handle_keepalive (manager, address, header.length);
+ gdm_xdmcp_handle_keepalive (factory, address, header.length);
break;
case GDM_XDMCP_MANAGED_FORWARD:
- gdm_xdmcp_handle_managed_forward (manager, address, header.length);
+ gdm_xdmcp_handle_managed_forward (factory, address, header.length);
break;
case GDM_XDMCP_GOT_MANAGED_FORWARD:
- gdm_xdmcp_handle_got_managed_forward (manager, address, header.length);
+ gdm_xdmcp_handle_got_managed_forward (factory, address, header.length);
break;
default:
@@ -2665,32 +2679,32 @@ decode_packet (GIOChannel *source,
}
gboolean
-gdm_xdmcp_manager_start (GdmXdmcpManager *manager,
+gdm_xdmcp_display_factory_start (GdmXdmcpDisplayFactory *factory,
GError **error)
{
gboolean ret;
GIOChannel *ioc;
- g_return_val_if_fail (GDM_IS_XDMCP_MANAGER (manager), FALSE);
- g_return_val_if_fail (manager->priv->socket_fd == -1, FALSE);
+ g_return_val_if_fail (GDM_IS_XDMCP_DISPLAY_FACTORY (factory), FALSE);
+ g_return_val_if_fail (factory->priv->socket_fd == -1, FALSE);
- ret = open_port (manager);
+ ret = open_port (factory);
if (! ret) {
return ret;
}
g_debug ("XDMCP: Starting to listen on XDMCP port");
- ioc = g_io_channel_unix_new (manager->priv->socket_fd);
+ ioc = g_io_channel_unix_new (factory->priv->socket_fd);
g_io_channel_set_encoding (ioc, NULL, NULL);
g_io_channel_set_buffered (ioc, FALSE);
- manager->priv->socket_watch_id = g_io_add_watch_full (ioc,
+ factory->priv->socket_watch_id = g_io_add_watch_full (ioc,
G_PRIORITY_DEFAULT,
G_IO_IN | G_IO_PRI | G_IO_ERR | G_IO_HUP | G_IO_NVAL,
(GIOFunc)decode_packet,
- manager,
+ factory,
NULL);
g_io_channel_unref (ioc);
@@ -2698,162 +2712,145 @@ gdm_xdmcp_manager_start (GdmXdmcpManager *manager,
}
gboolean
-gdm_xdmcp_manager_stop (GdmXdmcpManager *manager,
- GError **error)
+gdm_xdmcp_display_factory_stop (GdmXdmcpDisplayFactory *factory,
+ GError **error)
{
- g_return_val_if_fail (GDM_IS_XDMCP_MANAGER (manager), FALSE);
- g_return_val_if_fail (manager->priv->socket_fd != -1, FALSE);
+ g_return_val_if_fail (GDM_IS_XDMCP_DISPLAY_FACTORY (factory), FALSE);
+ g_return_val_if_fail (factory->priv->socket_fd != -1, FALSE);
- if (manager->priv->socket_watch_id > 0) {
- g_source_remove (manager->priv->socket_watch_id);
- manager->priv->socket_watch_id = 0;
+ if (factory->priv->socket_watch_id > 0) {
+ g_source_remove (factory->priv->socket_watch_id);
+ factory->priv->socket_watch_id = 0;
}
- if (manager->priv->socket_fd > 0) {
- VE_IGNORE_EINTR (close (manager->priv->socket_fd));
- manager->priv->socket_fd = -1;
+ if (factory->priv->socket_fd > 0) {
+ VE_IGNORE_EINTR (close (factory->priv->socket_fd));
+ factory->priv->socket_fd = -1;
}
return TRUE;
}
void
-gdm_xdmcp_manager_set_port (GdmXdmcpManager *manager,
- guint port)
+gdm_xdmcp_display_factory_set_port (GdmXdmcpDisplayFactory *factory,
+ guint port)
{
- g_return_if_fail (GDM_IS_XDMCP_MANAGER (manager));
+ g_return_if_fail (GDM_IS_XDMCP_DISPLAY_FACTORY (factory));
- manager->priv->port = port;
+ factory->priv->port = port;
}
static void
-gdm_xdmcp_manager_set_use_multicast (GdmXdmcpManager *manager,
- gboolean use_multicast)
+gdm_xdmcp_display_factory_set_use_multicast (GdmXdmcpDisplayFactory *factory,
+ gboolean use_multicast)
{
- g_return_if_fail (GDM_IS_XDMCP_MANAGER (manager));
+ g_return_if_fail (GDM_IS_XDMCP_DISPLAY_FACTORY (factory));
- manager->priv->use_multicast = use_multicast;
+ factory->priv->use_multicast = use_multicast;
}
static void
-gdm_xdmcp_manager_set_multicast_address (GdmXdmcpManager *manager,
- const char *address)
+gdm_xdmcp_display_factory_set_multicast_address (GdmXdmcpDisplayFactory *factory,
+ const char *address)
{
- g_return_if_fail (GDM_IS_XDMCP_MANAGER (manager));
+ g_return_if_fail (GDM_IS_XDMCP_DISPLAY_FACTORY (factory));
- g_free (manager->priv->multicast_address);
- manager->priv->multicast_address = g_strdup (address);
+ g_free (factory->priv->multicast_address);
+ factory->priv->multicast_address = g_strdup (address);
}
static void
-gdm_xdmcp_manager_set_honor_indirect (GdmXdmcpManager *manager,
- gboolean honor_indirect)
+gdm_xdmcp_display_factory_set_honor_indirect (GdmXdmcpDisplayFactory *factory,
+ gboolean honor_indirect)
{
- g_return_if_fail (GDM_IS_XDMCP_MANAGER (manager));
+ g_return_if_fail (GDM_IS_XDMCP_DISPLAY_FACTORY (factory));
- manager->priv->honor_indirect = honor_indirect;
+ factory->priv->honor_indirect = honor_indirect;
}
static void
-gdm_xdmcp_manager_set_max_displays_per_host (GdmXdmcpManager *manager,
- guint num)
+gdm_xdmcp_display_factory_set_max_displays_per_host (GdmXdmcpDisplayFactory *factory,
+ guint num)
{
- g_return_if_fail (GDM_IS_XDMCP_MANAGER (manager));
+ g_return_if_fail (GDM_IS_XDMCP_DISPLAY_FACTORY (factory));
- manager->priv->max_displays_per_host = num;
+ factory->priv->max_displays_per_host = num;
}
static void
-gdm_xdmcp_manager_set_max_displays (GdmXdmcpManager *manager,
- guint num)
+gdm_xdmcp_display_factory_set_max_displays (GdmXdmcpDisplayFactory *factory,
+ guint num)
{
- g_return_if_fail (GDM_IS_XDMCP_MANAGER (manager));
+ g_return_if_fail (GDM_IS_XDMCP_DISPLAY_FACTORY (factory));
- manager->priv->max_displays = num;
+ factory->priv->max_displays = num;
}
static void
-gdm_xdmcp_manager_set_max_pending_displays (GdmXdmcpManager *manager,
- guint num)
+gdm_xdmcp_display_factory_set_max_pending_displays (GdmXdmcpDisplayFactory *factory,
+ guint num)
{
- g_return_if_fail (GDM_IS_XDMCP_MANAGER (manager));
+ g_return_if_fail (GDM_IS_XDMCP_DISPLAY_FACTORY (factory));
- manager->priv->max_pending_displays = num;
+ factory->priv->max_pending_displays = num;
}
static void
-gdm_xdmcp_manager_set_max_wait (GdmXdmcpManager *manager,
- guint num)
+gdm_xdmcp_display_factory_set_max_wait (GdmXdmcpDisplayFactory *factory,
+ guint num)
{
- g_return_if_fail (GDM_IS_XDMCP_MANAGER (manager));
+ g_return_if_fail (GDM_IS_XDMCP_DISPLAY_FACTORY (factory));
- manager->priv->max_wait = num;
+ factory->priv->max_wait = num;
}
static void
-gdm_xdmcp_manager_set_willing_script (GdmXdmcpManager *manager,
- const char *script)
+gdm_xdmcp_display_factory_set_willing_script (GdmXdmcpDisplayFactory *factory,
+ const char *script)
{
- g_return_if_fail (GDM_IS_XDMCP_MANAGER (manager));
+ g_return_if_fail (GDM_IS_XDMCP_DISPLAY_FACTORY (factory));
- g_free (manager->priv->willing_script);
- manager->priv->willing_script = g_strdup (script);
+ g_free (factory->priv->willing_script);
+ factory->priv->willing_script = g_strdup (script);
}
static void
-gdm_xdmcp_manager_set_display_store (GdmXdmcpManager *manager,
- GdmDisplayStore *display_store)
+gdm_xdmcp_display_factory_set_property (GObject *object,
+ guint prop_id,
+ const GValue *value,
+ GParamSpec *pspec)
{
- if (manager->priv->display_store != NULL) {
- g_object_unref (manager->priv->display_store);
- manager->priv->display_store = NULL;
- }
+ GdmXdmcpDisplayFactory *self;
- if (display_store != NULL) {
- manager->priv->display_store = g_object_ref (display_store);
- }
-}
-
-static void
-gdm_xdmcp_manager_set_property (GObject *object,
- guint prop_id,
- const GValue *value,
- GParamSpec *pspec)
-{
- GdmXdmcpManager *self;
-
- self = GDM_XDMCP_MANAGER (object);
+ self = GDM_XDMCP_DISPLAY_FACTORY (object);
switch (prop_id) {
- case PROP_DISPLAY_STORE:
- gdm_xdmcp_manager_set_display_store (self, g_value_get_object (value));
- break;
case PROP_PORT:
- gdm_xdmcp_manager_set_port (self, g_value_get_uint (value));
+ gdm_xdmcp_display_factory_set_port (self, g_value_get_uint (value));
break;
case PROP_USE_MULTICAST:
- gdm_xdmcp_manager_set_use_multicast (self, g_value_get_boolean (value));
+ gdm_xdmcp_display_factory_set_use_multicast (self, g_value_get_boolean (value));
break;
case PROP_MULTICAST_ADDRESS:
- gdm_xdmcp_manager_set_multicast_address (self, g_value_get_string (value));
+ gdm_xdmcp_display_factory_set_multicast_address (self, g_value_get_string (value));
break;
case PROP_HONOR_INDIRECT:
- gdm_xdmcp_manager_set_honor_indirect (self, g_value_get_boolean (value));
+ gdm_xdmcp_display_factory_set_honor_indirect (self, g_value_get_boolean (value));
break;
case PROP_MAX_DISPLAYS_PER_HOST:
- gdm_xdmcp_manager_set_max_displays_per_host (self, g_value_get_uint (value));
+ gdm_xdmcp_display_factory_set_max_displays_per_host (self, g_value_get_uint (value));
break;
case PROP_MAX_DISPLAYS:
- gdm_xdmcp_manager_set_max_displays (self, g_value_get_uint (value));
+ gdm_xdmcp_display_factory_set_max_displays (self, g_value_get_uint (value));
break;
case PROP_MAX_PENDING_DISPLAYS:
- gdm_xdmcp_manager_set_max_pending_displays (self, g_value_get_uint (value));
+ gdm_xdmcp_display_factory_set_max_pending_displays (self, g_value_get_uint (value));
break;
case PROP_MAX_WAIT:
- gdm_xdmcp_manager_set_max_wait (self, g_value_get_uint (value));
+ gdm_xdmcp_display_factory_set_max_wait (self, g_value_get_uint (value));
break;
case PROP_WILLING_SCRIPT:
- gdm_xdmcp_manager_set_willing_script (self, g_value_get_string (value));
+ gdm_xdmcp_display_factory_set_willing_script (self, g_value_get_string (value));
break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
@@ -2862,19 +2859,16 @@ gdm_xdmcp_manager_set_property (GObject *object,
}
static void
-gdm_xdmcp_manager_get_property (GObject *object,
- guint prop_id,
- GValue *value,
- GParamSpec *pspec)
+gdm_xdmcp_display_factory_get_property (GObject *object,
+ guint prop_id,
+ GValue *value,
+ GParamSpec *pspec)
{
- GdmXdmcpManager *self;
+ GdmXdmcpDisplayFactory *self;
- self = GDM_XDMCP_MANAGER (object);
+ self = GDM_XDMCP_DISPLAY_FACTORY (object);
switch (prop_id) {
- case PROP_DISPLAY_STORE:
- g_value_set_object (value, self->priv->display_store);
- break;
case PROP_PORT:
g_value_set_uint (value, self->priv->port);
break;
@@ -2909,22 +2903,15 @@ gdm_xdmcp_manager_get_property (GObject *object,
}
static void
-gdm_xdmcp_manager_class_init (GdmXdmcpManagerClass *klass)
+gdm_xdmcp_display_factory_class_init (GdmXdmcpDisplayFactoryClass *klass)
{
GObjectClass *object_class = G_OBJECT_CLASS (klass);
- object_class->get_property = gdm_xdmcp_manager_get_property;
- object_class->set_property = gdm_xdmcp_manager_set_property;
- object_class->finalize = gdm_xdmcp_manager_finalize;
+ object_class->get_property = gdm_xdmcp_display_factory_get_property;
+ object_class->set_property = gdm_xdmcp_display_factory_set_property;
+ object_class->finalize = gdm_xdmcp_display_factory_finalize;
g_object_class_install_property (object_class,
- PROP_DISPLAY_STORE,
- g_param_spec_object ("display-store",
- "display store",
- "display store",
- GDM_TYPE_DISPLAY_STORE,
- G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY));
- g_object_class_install_property (object_class,
PROP_PORT,
g_param_spec_uint ("port",
"UDP port",
@@ -2998,20 +2985,20 @@ gdm_xdmcp_manager_class_init (GdmXdmcpManagerClass *klass)
DEFAULT_MAX_WAIT,
G_PARAM_READWRITE | G_PARAM_CONSTRUCT));
- g_type_class_add_private (klass, sizeof (GdmXdmcpManagerPrivate));
+ g_type_class_add_private (klass, sizeof (GdmXdmcpDisplayFactoryPrivate));
}
static void
-gdm_xdmcp_manager_init (GdmXdmcpManager *manager)
+gdm_xdmcp_display_factory_init (GdmXdmcpDisplayFactory *factory)
{
char hostbuf[1024];
struct utsname name;
- manager->priv = GDM_XDMCP_MANAGER_GET_PRIVATE (manager);
+ factory->priv = GDM_XDMCP_DISPLAY_FACTORY_GET_PRIVATE (factory);
- manager->priv->socket_fd = -1;
+ factory->priv->socket_fd = -1;
- manager->priv->session_serial = g_random_int ();
+ factory->priv->session_serial = g_random_int ();
/* Fetch and store local hostname in XDMCP friendly format */
hostbuf[1023] = '\0';
@@ -3021,58 +3008,58 @@ gdm_xdmcp_manager_init (GdmXdmcpManager *manager)
}
uname (&name);
- manager->priv->sysid = g_strconcat (name.sysname,
+ factory->priv->sysid = g_strconcat (name.sysname,
" ",
name.release,
NULL);
- manager->priv->hostname = g_strdup (hostbuf);
+ factory->priv->hostname = g_strdup (hostbuf);
- manager->priv->servhost.data = (CARD8 *) g_strdup (hostbuf);
- manager->priv->servhost.length = strlen ((char *) manager->priv->servhost.data);
+ factory->priv->servhost.data = (CARD8 *) g_strdup (hostbuf);
+ factory->priv->servhost.length = strlen ((char *) factory->priv->servhost.data);
}
static void
-gdm_xdmcp_manager_finalize (GObject *object)
+gdm_xdmcp_display_factory_finalize (GObject *object)
{
- GdmXdmcpManager *manager;
+ GdmXdmcpDisplayFactory *factory;
g_return_if_fail (object != NULL);
- g_return_if_fail (GDM_IS_XDMCP_MANAGER (object));
+ g_return_if_fail (GDM_IS_XDMCP_DISPLAY_FACTORY (object));
- manager = GDM_XDMCP_MANAGER (object);
+ factory = GDM_XDMCP_DISPLAY_FACTORY (object);
- g_return_if_fail (manager->priv != NULL);
+ g_return_if_fail (factory->priv != NULL);
- if (manager->priv->socket_watch_id > 0) {
- g_source_remove (manager->priv->socket_watch_id);
+ if (factory->priv->socket_watch_id > 0) {
+ g_source_remove (factory->priv->socket_watch_id);
}
- g_slist_free (manager->priv->forward_queries);
- g_slist_free (manager->priv->managed_forwards);
+ g_slist_free (factory->priv->forward_queries);
+ g_slist_free (factory->priv->managed_forwards);
- g_free (manager->priv->sysid);
- g_free (manager->priv->hostname);
- g_free (manager->priv->multicast_address);
- g_free (manager->priv->willing_script);
+ g_free (factory->priv->sysid);
+ g_free (factory->priv->hostname);
+ g_free (factory->priv->multicast_address);
+ g_free (factory->priv->willing_script);
/* FIXME: Free servhost */
- G_OBJECT_CLASS (gdm_xdmcp_manager_parent_class)->finalize (object);
+ G_OBJECT_CLASS (gdm_xdmcp_display_factory_parent_class)->finalize (object);
}
-GdmXdmcpManager *
-gdm_xdmcp_manager_new (GdmDisplayStore *store)
+GdmXdmcpDisplayFactory *
+gdm_xdmcp_display_factory_new (GdmDisplayStore *store)
{
- if (xdmcp_manager_object != NULL) {
- g_object_ref (xdmcp_manager_object);
+ if (xdmcp_display_factory_object != NULL) {
+ g_object_ref (xdmcp_display_factory_object);
} else {
- xdmcp_manager_object = g_object_new (GDM_TYPE_XDMCP_MANAGER,
- "display-store", store,
- NULL);
- g_object_add_weak_pointer (xdmcp_manager_object,
- (gpointer *) &xdmcp_manager_object);
+ xdmcp_display_factory_object = g_object_new (GDM_TYPE_XDMCP_DISPLAY_FACTORY,
+ "display-store", store,
+ NULL);
+ g_object_add_weak_pointer (xdmcp_display_factory_object,
+ (gpointer *) &xdmcp_display_factory_object);
}
- return GDM_XDMCP_MANAGER (xdmcp_manager_object);
+ return GDM_XDMCP_DISPLAY_FACTORY (xdmcp_display_factory_object);
}
diff --git a/daemon/gdm-xdmcp-display-factory.h b/daemon/gdm-xdmcp-display-factory.h
new file mode 100644
index 00000000..bcf7099d
--- /dev/null
+++ b/daemon/gdm-xdmcp-display-factory.h
@@ -0,0 +1,69 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*-
+ *
+ * Copyright (C) 2006 William Jon McCann <mccann@jhu.edu>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 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 General Public License for more details.
+ *
+ * You should have received a copy of the GNU 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 __GDM_XDMCP_DISPLAY_FACTORY_H
+#define __GDM_XDMCP_DISPLAY_FACTORY_H
+
+#include <glib-object.h>
+
+#include "gdm-display-factory.h"
+#include "gdm-display-store.h"
+
+G_BEGIN_DECLS
+
+#define GDM_TYPE_XDMCP_DISPLAY_FACTORY (gdm_xdmcp_display_factory_get_type ())
+#define GDM_XDMCP_DISPLAY_FACTORY(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), GDM_TYPE_XDMCP_DISPLAY_FACTORY, GdmXdmcpDisplayFactory))
+#define GDM_XDMCP_DISPLAY_FACTORY_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), GDM_TYPE_XDMCP_DISPLAY_FACTORY, GdmXdmcpDisplayFactoryClass))
+#define GDM_IS_XDMCP_DISPLAY_FACTORY(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), GDM_TYPE_XDMCP_DISPLAY_FACTORY))
+#define GDM_IS_XDMCP_DISPLAY_FACTORY_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), GDM_TYPE_XDMCP_DISPLAY_FACTORY))
+#define GDM_XDMCP_DISPLAY_FACTORY_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), GDM_TYPE_XDMCP_DISPLAY_FACTORY, GdmXdmcpDisplayFactoryClass))
+
+typedef struct GdmXdmcpDisplayFactoryPrivate GdmXdmcpDisplayFactoryPrivate;
+
+typedef struct
+{
+ GObject parent;
+ GdmXdmcpDisplayFactoryPrivate *priv;
+} GdmXdmcpDisplayFactory;
+
+typedef struct
+{
+ GObjectClass parent_class;
+} GdmXdmcpDisplayFactoryClass;
+
+typedef enum
+{
+ GDM_XDMCP_DISPLAY_FACTORY_ERROR_GENERAL
+} GdmXdmcpDisplayFactoryError;
+
+#define GDM_XDMCP_DISPLAY_FACTORY_ERROR gdm_xdmcp_display_factory_error_quark ()
+
+GQuark gdm_xdmcp_display_factory_error_quark (void);
+GType gdm_xdmcp_display_factory_get_type (void);
+
+GdmXdmcpDisplayFactory * gdm_xdmcp_display_factory_new (GdmDisplayStore *display_store);
+
+void gdm_xdmcp_display_factory_set_port (GdmXdmcpDisplayFactory *manager,
+ guint port);
+
+G_END_DECLS
+
+#endif /* __GDM_XDMCP_DISPLAY_FACTORY_H */
diff --git a/daemon/gdm-xdmcp-manager.h b/daemon/gdm-xdmcp-manager.h
deleted file mode 100644
index ffa1c57a..00000000
--- a/daemon/gdm-xdmcp-manager.h
+++ /dev/null
@@ -1,72 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*-
- *
- * Copyright (C) 2006 William Jon McCann <mccann@jhu.edu>
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 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 General Public License for more details.
- *
- * You should have received a copy of the GNU 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 __GDM_XDMCP_MANAGER_H
-#define __GDM_XDMCP_MANAGER_H
-
-#include <glib-object.h>
-
-#include "gdm-display-store.h"
-
-G_BEGIN_DECLS
-
-#define GDM_TYPE_XDMCP_MANAGER (gdm_xdmcp_manager_get_type ())
-#define GDM_XDMCP_MANAGER(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), GDM_TYPE_XDMCP_MANAGER, GdmXdmcpManager))
-#define GDM_XDMCP_MANAGER_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), GDM_TYPE_XDMCP_MANAGER, GdmXdmcpManagerClass))
-#define GDM_IS_XDMCP_MANAGER(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), GDM_TYPE_XDMCP_MANAGER))
-#define GDM_IS_XDMCP_MANAGER_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), GDM_TYPE_XDMCP_MANAGER))
-#define GDM_XDMCP_MANAGER_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), GDM_TYPE_XDMCP_MANAGER, GdmXdmcpManagerClass))
-
-typedef struct GdmXdmcpManagerPrivate GdmXdmcpManagerPrivate;
-
-typedef struct
-{
- GObject parent;
- GdmXdmcpManagerPrivate *priv;
-} GdmXdmcpManager;
-
-typedef struct
-{
- GObjectClass parent_class;
-} GdmXdmcpManagerClass;
-
-typedef enum
-{
- GDM_XDMCP_MANAGER_ERROR_GENERAL
-} GdmXdmcpManagerError;
-
-#define GDM_XDMCP_MANAGER_ERROR gdm_xdmcp_manager_error_quark ()
-
-GQuark gdm_xdmcp_manager_error_quark (void);
-GType gdm_xdmcp_manager_get_type (void);
-
-GdmXdmcpManager * gdm_xdmcp_manager_new (GdmDisplayStore *display_store);
-
-void gdm_xdmcp_manager_set_port (GdmXdmcpManager *manager,
- guint port);
-gboolean gdm_xdmcp_manager_start (GdmXdmcpManager *manager,
- GError **error);
-gboolean gdm_xdmcp_manager_stop (GdmXdmcpManager *manager,
- GError **error);
-
-G_END_DECLS
-
-#endif /* __GDM_XDMCP_MANAGER_H */