summaryrefslogtreecommitdiffstats
path: root/dbus
diff options
context:
space:
mode:
authorJohn (J5) Palmieri <johnp@redhat.com>2005-06-15 16:20:28 +0000
committerJohn (J5) Palmieri <johnp@redhat.com>2005-06-15 16:20:28 +0000
commit6043a0be440c916d6e78463c7e850d9b172b8d6f (patch)
tree8ffe58e4939533b08108ddb3928d6bfe873362ed /dbus
parenta93f9c04acedc37277ef60dc7225464b8b62f0ee (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')
-rw-r--r--dbus/dbus-connection.c53
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);