Commit f934a967 authored by Lennart Poettering's avatar Lennart Poettering

connection: hook UnknownObject and UnknownInterface up where appropriate

This makes use of UnknownInterface and UnknownObject where appropriate
in the D-Bus core.

Bug: https://bugs.freedesktop.org/show_bug.cgi?id=34527Reviewed-By: default avatarSimon McVittie <simon.mcvittie@collabora.co.uk>
parent 2c345146
......@@ -1921,6 +1921,7 @@ bus_driver_handle_message (DBusConnection *connection,
const char *name, *sender, *interface;
const InterfaceHandler *ih;
const MessageHandler *mh;
dbus_bool_t found_interface = FALSE;
_DBUS_ASSERT_ERROR_IS_CLEAR (error);
......@@ -1957,6 +1958,8 @@ bus_driver_handle_message (DBusConnection *connection,
if (interface != NULL && strcmp (interface, ih->name) != 0)
continue;
found_interface = TRUE;
for (mh = ih->message_handlers; mh->name != NULL; mh++)
{
if (strcmp (mh->name, name) != 0)
......@@ -1998,7 +2001,7 @@ bus_driver_handle_message (DBusConnection *connection,
_dbus_verbose ("No driver handler for message \"%s\"\n",
name);
dbus_set_error (error, DBUS_ERROR_UNKNOWN_METHOD,
dbus_set_error (error, found_interface ? DBUS_ERROR_UNKNOWN_METHOD : DBUS_ERROR_UNKNOWN_INTERFACE,
"%s does not understand message %s",
DBUS_SERVICE_DBUS, name);
......
......@@ -4523,6 +4523,7 @@ dbus_connection_dispatch (DBusConnection *connection)
DBusPendingCall *pending;
dbus_int32_t reply_serial;
DBusDispatchStatus status;
dbus_bool_t found_object;
_dbus_return_val_if_fail (connection != NULL, DBUS_DISPATCH_COMPLETE);
......@@ -4687,7 +4688,8 @@ dbus_connection_dispatch (DBusConnection *connection)
HAVE_LOCK_CHECK (connection);
result = _dbus_object_tree_dispatch_and_unlock (connection->objects,
message);
message,
&found_object);
CONNECTION_LOCK (connection);
......@@ -4726,7 +4728,7 @@ dbus_connection_dispatch (DBusConnection *connection)
}
reply = dbus_message_new_error (message,
DBUS_ERROR_UNKNOWN_METHOD,
found_object ? DBUS_ERROR_UNKNOWN_METHOD : DBUS_ERROR_UNKNOWN_OBJECT,
_dbus_string_get_const_data (&str));
_dbus_string_free (&str);
......
......@@ -745,7 +745,8 @@ handle_default_introspect_and_unlock (DBusObjectTree *tree,
*/
DBusHandlerResult
_dbus_object_tree_dispatch_and_unlock (DBusObjectTree *tree,
DBusMessage *message)
DBusMessage *message,
dbus_bool_t *found_object)
{
char **path;
dbus_bool_t exact_match;
......@@ -791,6 +792,9 @@ _dbus_object_tree_dispatch_and_unlock (DBusObjectTree *tree,
/* Find the deepest path that covers the path in the message */
subtree = find_handler (tree, (const char**) path, &exact_match);
if (found_object)
*found_object = !!subtree;
/* Build a list of all paths that cover the path in the message */
list = NULL;
......@@ -1382,7 +1386,7 @@ do_test_dispatch (DBusObjectTree *tree,
++j;
}
result = _dbus_object_tree_dispatch_and_unlock (tree, message);
result = _dbus_object_tree_dispatch_and_unlock (tree, message, NULL);
if (result == DBUS_HANDLER_RESULT_NEED_MEMORY)
goto oom;
......
......@@ -42,7 +42,8 @@ dbus_bool_t _dbus_object_tree_register (DBusObjectTree
void _dbus_object_tree_unregister_and_unlock (DBusObjectTree *tree,
const char **path);
DBusHandlerResult _dbus_object_tree_dispatch_and_unlock (DBusObjectTree *tree,
DBusMessage *message);
DBusMessage *message,
dbus_bool_t *found_object);
void* _dbus_object_tree_get_user_data_unlocked (DBusObjectTree *tree,
const char **path);
void _dbus_object_tree_free_all_unlocked (DBusObjectTree *tree);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment