summaryrefslogtreecommitdiffstats
path: root/dbus/dbus-connection.c
diff options
context:
space:
mode:
authorAnders Carlsson <andersca@codefactory.se>2003-01-19 21:55:49 +0000
committerAnders Carlsson <andersca@codefactory.se>2003-01-19 21:55:49 +0000
commitf0dbc1bdd06e1cb4f32b7fe05ee1287ae5f9df85 (patch)
tree9d830da02f403ef3a111bd68b04bfa916413690c /dbus/dbus-connection.c
parent037192972af12511ca1476b9604d1603f382d8f9 (diff)
2003-01-19 Anders Carlsson <andersca@codefactory.se>
* dbus/Makefile.am: Add dbus-timeout.[cħ] * dbus/dbus-connection.c: (_dbus_connection_new_for_transport): Create a DBusTimeoutList. (dbus_connection_set_timeout_functions): Add new function to set timeout callbacks * dbus/dbus-connection.h: Add public DBusTimeout API. * dbus/dbus-message.c: (dbus_message_get_service): * dbus/dbus-message.h: New function. * dbus/dbus-server.c: Fix small doc typo. * dbus/dbus-timeout.[ch]: New files for mainloop timeouts.
Diffstat (limited to 'dbus/dbus-connection.c')
-rw-r--r--dbus/dbus-connection.c39
1 files changed, 39 insertions, 0 deletions
diff --git a/dbus/dbus-connection.c b/dbus/dbus-connection.c
index 4b9d4caa..25114964 100644
--- a/dbus/dbus-connection.c
+++ b/dbus/dbus-connection.c
@@ -23,6 +23,7 @@
#include "dbus-connection.h"
#include "dbus-list.h"
+#include "dbus-timeout.h"
#include "dbus-transport.h"
#include "dbus-watch.h"
#include "dbus-connection-internal.h"
@@ -82,6 +83,7 @@ struct DBusConnection
DBusTransport *transport; /**< Object that sends/receives messages over network. */
DBusWatchList *watches; /**< Stores active watches. */
+ DBusTimeoutList *timeouts; /**< Stores active timeouts. */
DBusDisconnectFunction disconnect_function; /**< Callback on disconnect. */
void *disconnect_data; /**< Data for disconnect callback. */
@@ -291,6 +293,7 @@ _dbus_connection_new_for_transport (DBusTransport *transport)
{
DBusConnection *connection;
DBusWatchList *watch_list;
+ DBusTimeoutList *timeout_list;
DBusHashTable *handler_table;
watch_list = NULL;
@@ -301,6 +304,10 @@ _dbus_connection_new_for_transport (DBusTransport *transport)
if (watch_list == NULL)
goto error;
+ timeout_list = _dbus_timeout_list_new ();
+ if (timeout_list == NULL)
+ goto error;
+
handler_table =
_dbus_hash_table_new (DBUS_HASH_STRING,
dbus_free, NULL);
@@ -314,6 +321,7 @@ _dbus_connection_new_for_transport (DBusTransport *transport)
connection->refcount = 1;
connection->transport = transport;
connection->watches = watch_list;
+ connection->timeouts = timeout_list;
connection->handler_table = handler_table;
connection->filter_list = NULL;
@@ -930,6 +938,37 @@ dbus_connection_set_watch_functions (DBusConnection *connection,
}
/**
+ * Sets the timeout functions for the connection. These functions are
+ * responsible for making the application's main loop aware of timeouts.
+ * When using Qt, typically the DBusAddTimeoutFunction would create a
+ * QTimer. When using GLib, the DBusAddTimeoutFunction would call
+ * g_timeout_add.
+ *
+ * The DBusTimeout can be queried for the timer interval using
+ * dbus_timeout_get_interval.
+ *
+ * Once a timeout occurs, dbus_timeout_handle should be call to invoke
+ * the timeout's callback.
+ */
+void
+dbus_connection_set_timeout_functions (DBusConnection *connection,
+ DBusAddTimeoutFunction add_function,
+ DBusRemoveTimeoutFunction remove_function,
+ void *data,
+ DBusFreeFunction free_data_function)
+{
+ /* ref connection for slightly better reentrancy */
+ dbus_connection_ref (connection);
+
+ _dbus_timeout_list_set_functions (connection->timeouts,
+ add_function, remove_function,
+ data, free_data_function);
+
+ /* drop our paranoid refcount */
+ dbus_connection_unref (connection);
+}
+
+/**
* Called to notify the connection when a previously-added watch
* is ready for reading or writing, or has an exception such
* as a hangup.