diff options
author | John (J5) Palmieri <johnp@redhat.com> | 2005-06-15 16:20:28 +0000 |
---|---|---|
committer | John (J5) Palmieri <johnp@redhat.com> | 2005-06-15 16:20:28 +0000 |
commit | 6043a0be440c916d6e78463c7e850d9b172b8d6f (patch) | |
tree | 8ffe58e4939533b08108ddb3928d6bfe873362ed /dbus/dbus-connection.c | |
parent | a93f9c04acedc37277ef60dc7225464b8b62f0ee (diff) |
* dbus/dbus-connection.c (_dbus_connection_peer_filter): New method
(_dbus_connection_run_builtin_filters): New method
(dbus_connection_dispatch): Run the builtin filters which in turn
runs the peer filter which handles Ping messages.
* doc/TODO:
- Ping isn't handled: This patch fixes it
- Add a test case for the Ping message: added TODO item
Diffstat (limited to 'dbus/dbus-connection.c')
-rw-r--r-- | dbus/dbus-connection.c | 53 |
1 files changed, 52 insertions, 1 deletions
diff --git a/dbus/dbus-connection.c b/dbus/dbus-connection.c index b2bc6a73..10a2d0f2 100644 --- a/dbus/dbus-connection.c +++ b/dbus/dbus-connection.c @@ -3362,6 +3362,53 @@ dbus_connection_get_dispatch_status (DBusConnection *connection) } /** +* Filter funtion for handling the Peer standard interface +**/ +static DBusHandlerResult +_dbus_connection_peer_filter (DBusConnection *connection, + DBusMessage *message) +{ + if (dbus_message_is_method_call (message, + DBUS_INTERFACE_PEER, + "Ping")) + { + DBusMessage *ret; + dbus_bool_t sent; + + ret = dbus_message_new_method_return (message); + if (ret == NULL) + return DBUS_HANDLER_RESULT_NEED_MEMORY; + + sent = dbus_connection_send (connection, ret, NULL); + dbus_message_unref (ret); + + if (!sent) + return DBUS_HANDLER_RESULT_NEED_MEMORY; + + return DBUS_HANDLER_RESULT_HANDLED; + } + + + return DBUS_HANDLER_RESULT_NOT_YET_HANDLED; +} + +/** +* Processes all builtin filter functions +* +* If the spec specifies a standard interface +* they should be processed from this method +**/ +static DBusHandlerResult +_dbus_connection_run_builtin_filters (DBusConnection *connection, + DBusMessage *message) +{ + /* We just run one filter for now but have the option to run more + if the spec calls for it in the future */ + + return _dbus_connection_peer_filter (connection, message); +} + +/** * Processes data buffered while handling watches, queueing zero or * more incoming messages. Then pops the first-received message from * the current incoming message queue, runs any handlers for it, and @@ -3469,7 +3516,11 @@ dbus_connection_dispatch (DBusConnection *connection) result = DBUS_HANDLER_RESULT_HANDLED; goto out; } - + + result = _dbus_connection_run_builtin_filters (connection, message); + if (result != DBUS_HANDLER_RESULT_NOT_YET_HANDLED) + goto out; + if (!_dbus_list_copy (&connection->filter_list, &filter_list_copy)) { _dbus_connection_release_dispatch (connection); |