#include "gioenumtypes.h"
#include "gdbusprivate.h"
#include "gdbusauthobserver.h"
-#include "gio-marshal.h"
#include "ginitable.h"
#include "gsocketservice.h"
#include "gthreadedsocketservice.h"
* @include: gio/gio.h
*
* #GDBusServer is a helper for listening to and accepting D-Bus
- * connections.
+ * connections. This can be used to create a new D-Bus server, allowing two
+ * peers to use the D-Bus protocol for their own specialized communication.
+ * A server instance provided in this way will not perform message routing or
+ * implement the org.freedesktop.DBus interface.
+ *
+ * To just export an object on a well-known name on a message bus, such as the
+ * session or system bus, you should instead use g_bus_own_name().
*
* <example id="gdbus-peer-to-peer"><title>D-Bus peer-to-peer example</title><programlisting><xi:include xmlns:xi="http://www.w3.org/2001/XInclude" parse="text" href="../../../../gio/tests/gdbus-example-peer.c"><xi:fallback>FIXME: MISSING XINCLUDE CONTENT</xi:fallback></xi:include></programlisting></example>
*/
gboolean is_using_listener;
gulong run_signal_handler_id;
- /* The result of g_main_context_get_thread_default() when the object
+ /* The result of g_main_context_ref_thread_default() when the object
* was created (the GObject _init() function) - this is used for delivery
* of the :new-connection GObject signal.
*/
LAST_SIGNAL,
};
-guint _signals[LAST_SIGNAL] = {0};
+static guint _signals[LAST_SIGNAL] = {0};
static void initable_iface_init (GInitableIface *initable_iface);
*/
g_free (server->nonce_file);
- if (server->main_context_at_construction != NULL)
- g_main_context_unref (server->main_context_at_construction);
+ g_main_context_unref (server->main_context_at_construction);
G_OBJECT_CLASS (g_dbus_server_parent_class)->finalize (object);
}
G_STRUCT_OFFSET (GDBusServerClass, new_connection),
g_signal_accumulator_true_handled,
NULL, /* accu_data */
- _gio_marshal_BOOLEAN__OBJECT,
+ NULL,
G_TYPE_BOOLEAN,
1,
G_TYPE_DBUS_CONNECTION);
static void
g_dbus_server_init (GDBusServer *server)
{
- server->main_context_at_construction = g_main_context_get_thread_default ();
- if (server->main_context_at_construction != NULL)
- g_main_context_ref (server->main_context_at_construction);
+ server->main_context_at_construction = g_main_context_ref_thread_default ();
}
static gboolean
* @address: A D-Bus address.
* @flags: Flags from the #GDBusServerFlags enumeration.
* @guid: A D-Bus GUID.
- * @observer: A #GDBusAuthObserver or %NULL.
- * @cancellable: A #GCancellable or %NULL.
+ * @observer: (allow-none): A #GDBusAuthObserver or %NULL.
+ * @cancellable: (allow-none): A #GCancellable or %NULL.
* @error: Return location for server or %NULL.
*
* Creates a new D-Bus server that listens on the first address in
/* ---------------------------------------------------------------------------------------------------- */
/* note that address_entry has already been validated =>
- * both host and port (guranteed to be a number in [0, 65535]) are set (family is optional)
+ * both host and port (guaranteed to be a number in [0, 65535]) are set (family is optional)
*/
static gboolean
try_tcp (GDBusServer *server,
guint n;
gsize bytes_written;
gsize bytes_remaining;
+ char *file_escaped;
server->nonce = g_new0 (guchar, 16);
for (n = 0; n < 16; n++)
bytes_remaining -= ret;
}
close (fd);
+ file_escaped = g_uri_escape_string (server->nonce_file, "/\\", FALSE);
server->client_address = g_strdup_printf ("nonce-tcp:host=%s,port=%d,noncefile=%s",
host,
port_num,
- server->nonce_file);
+ file_escaped);
+ g_free (file_escaped);
}
else
{
ret = TRUE;
out:
- g_list_foreach (resolved_addresses, (GFunc) g_object_unref, NULL);
- g_list_free (resolved_addresses);
+ g_list_free_full (resolved_addresses, g_object_unref);
g_object_unref (resolver);
return ret;
}