diff options
author | Anders Carlsson <andersca@codefactory.se> | 2003-01-19 21:55:49 +0000 |
---|---|---|
committer | Anders Carlsson <andersca@codefactory.se> | 2003-01-19 21:55:49 +0000 |
commit | f0dbc1bdd06e1cb4f32b7fe05ee1287ae5f9df85 (patch) | |
tree | 9d830da02f403ef3a111bd68b04bfa916413690c /dbus/dbus-connection.c | |
parent | 037192972af12511ca1476b9604d1603f382d8f9 (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.c | 39 |
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. |