summaryrefslogtreecommitdiffstats
path: root/dbus/dbus-server.c
diff options
context:
space:
mode:
authorAnders Carlsson <andersca@codefactory.se>2003-01-28 14:26:49 +0000
committerAnders Carlsson <andersca@codefactory.se>2003-01-28 14:26:49 +0000
commitdec1fa3bd5f106ba5b2c749372231e3dd4bf9e7b (patch)
tree9a579d3d5b908ee5712249b4de696b89a72ffca7 /dbus/dbus-server.c
parentbec3c093cab742a953e39f1726c37345873990dc (diff)
2003-01-28 Anders Carlsson <set EMAIL_ADDRESS environment variable>
* dbus/dbus-connection-internal.h: * dbus/dbus-connection.c: (_dbus_connection_add_timeout), (_dbus_connection_remove_timeout): Add functions for adding and removing timeouts. * dbus/dbus-message.c: (dbus_message_new_from_message): Add new function that takes a message and creates an exact copy of it, but with the refcount set to 1. (check_message_handling): Fix build error. * dbus/dbus-server-protected.h: * dbus/dbus-server.c: (_dbus_server_init_base), (_dbus_server_finalize_base), (_dbus_server_add_timeout), (dbus_server_set_timeout_functions): (_dbus_server_remove_timeout): New functions so that a server can add and remove timeouts. (dbus_server_listen): Add commented out call to dbus_server_debug_new. * dbus/dbus-timeout.c: (_dbus_timeout_new): Actually set the handler, doh. * dbus/dbus-transport.c: (_dbus_transport_open): Add commented out call to dbus_transport_debug_client_new. * dbus/Makefile.am: Add dbus-transport-debug.[ch] and dbus-server-debug.[ch]
Diffstat (limited to 'dbus/dbus-server.c')
-rw-r--r--dbus/dbus-server.c57
1 files changed, 57 insertions, 0 deletions
diff --git a/dbus/dbus-server.c b/dbus/dbus-server.c
index 83b1f578..1407c477 100644
--- a/dbus/dbus-server.c
+++ b/dbus/dbus-server.c
@@ -22,6 +22,9 @@
*/
#include "dbus-server.h"
#include "dbus-server-unix.h"
+#ifdef DBUS_BUILD_TESTS
+#include "dbus-server-debug.h"
+#endif
/**
* @defgroup DBusServer DBusServer
@@ -61,11 +64,22 @@ _dbus_server_init_base (DBusServer *server,
if (server->watches == NULL)
return FALSE;
+ server->timeouts = _dbus_timeout_list_new ();
+ if (server->timeouts == NULL)
+ {
+ _dbus_watch_list_free (server->watches);
+ server->watches = NULL;
+ return FALSE;
+ }
+
server->connection_counter = _dbus_counter_new ();
if (server->connection_counter == NULL)
{
_dbus_watch_list_free (server->watches);
server->watches = NULL;
+ _dbus_timeout_list_free (server->timeouts);
+ server->timeouts = NULL;
+
return FALSE;
}
@@ -89,6 +103,7 @@ _dbus_server_finalize_base (DBusServer *server)
dbus_server_disconnect (server);
_dbus_watch_list_free (server->watches);
+ _dbus_timeout_list_free (server->timeouts);
_dbus_counter_unref (server->connection_counter);
}
@@ -119,6 +134,19 @@ _dbus_server_remove_watch (DBusServer *server,
_dbus_watch_list_remove_watch (server->watches, watch);
}
+dbus_bool_t
+_dbus_server_add_timeout (DBusServer *server,
+ DBusTimeout *timeout)
+{
+ return _dbus_timeout_list_add_timeout (server->timeouts, timeout);
+}
+
+void
+_dbus_server_remove_timeout (DBusServer *server,
+ DBusTimeout *timeout)
+{
+ _dbus_timeout_list_remove_timeout (server->timeouts, timeout);
+}
/** @} */
@@ -160,8 +188,12 @@ dbus_server_listen (const char *address,
{
DBusServer *server;
+#if 1
/* For now just pretend the address is a unix domain socket path */
server = _dbus_server_new_for_domain_socket (address, result);
+#else
+ server = _dbus_server_debug_new (address, result);
+#endif
return server;
}
@@ -286,6 +318,31 @@ dbus_server_set_watch_functions (DBusServer *server,
}
/**
+ * Sets the timeout functions for the connection. These functions are
+ * responsible for making the application's main loop aware of timeouts.
+ *
+ * This function behaves exactly like dbus_connection_set_timeout_functions();
+ * see the documentation for that routine.
+ *
+ * @param server the server.
+ * @param add_function function to add a timeout.
+ * @param remove_function function to remove a timeout.
+ * @param data data to pass to add_function and remove_function.
+ * @param free_data_function function to be called to free the data.
+ */
+void
+dbus_server_set_timeout_functions (DBusServer *server,
+ DBusAddTimeoutFunction add_function,
+ DBusRemoveTimeoutFunction remove_function,
+ void *data,
+ DBusFreeFunction free_data_function)
+{
+ _dbus_timeout_list_set_functions (server->timeouts,
+ add_function, remove_function,
+ data, free_data_function);
+}
+
+/**
* Called to notify the server when a previously-added watch
* is ready for reading or writing, or has an exception such
* as a hangup.