mirror of
https://git.kernel.org/pub/scm/network/wireless/iwd.git
synced 2026-02-06 09:48:08 +01:00
dbus: register interface before acquiring name
If the interface isn't available by the time we acquire the well-known name, clients can get confused when the expected interfaces are missing during bus activation.
This commit is contained in:
parent
3e7a8feee0
commit
b49ed01626
38
src/main.c
38
src/main.c
@ -197,29 +197,12 @@ static void request_name_callback(struct l_dbus *dbus, bool success,
|
|||||||
{
|
{
|
||||||
if (!success) {
|
if (!success) {
|
||||||
l_error("Name request failed");
|
l_error("Name request failed");
|
||||||
goto fail_exit;
|
l_main_quit();
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!l_dbus_object_manager_enable(dbus, "/"))
|
|
||||||
l_warn("Unable to register the ObjectManager");
|
|
||||||
|
|
||||||
if (!l_dbus_object_add_interface(dbus, IWD_BASE_PATH,
|
|
||||||
IWD_DAEMON_INTERFACE,
|
|
||||||
NULL) ||
|
|
||||||
!l_dbus_object_add_interface(dbus, IWD_BASE_PATH,
|
|
||||||
L_DBUS_INTERFACE_PROPERTIES,
|
|
||||||
NULL))
|
|
||||||
l_info("Unable to add %s and/or %s at %s",
|
|
||||||
IWD_DAEMON_INTERFACE, L_DBUS_INTERFACE_PROPERTIES,
|
|
||||||
IWD_BASE_PATH);
|
|
||||||
|
|
||||||
/* TODO: Always request nl80211 for now, ignoring auto-loading */
|
/* TODO: Always request nl80211 for now, ignoring auto-loading */
|
||||||
l_genl_request_family(genl, NL80211_GENL_NAME, nl80211_appeared,
|
l_genl_request_family(genl, NL80211_GENL_NAME, nl80211_appeared,
|
||||||
NULL, NULL);
|
NULL, NULL);
|
||||||
return;
|
|
||||||
|
|
||||||
fail_exit:
|
|
||||||
l_main_quit();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static struct l_dbus_message *iwd_dbus_get_info(struct l_dbus *dbus,
|
static struct l_dbus_message *iwd_dbus_get_info(struct l_dbus *dbus,
|
||||||
@ -249,12 +232,25 @@ static void dbus_ready(void *user_data)
|
|||||||
{
|
{
|
||||||
struct l_dbus *dbus = user_data;
|
struct l_dbus *dbus = user_data;
|
||||||
|
|
||||||
l_dbus_name_acquire(dbus, "net.connman.iwd", false, false, false,
|
|
||||||
request_name_callback, NULL);
|
|
||||||
|
|
||||||
l_dbus_register_interface(dbus, IWD_DAEMON_INTERFACE,
|
l_dbus_register_interface(dbus, IWD_DAEMON_INTERFACE,
|
||||||
iwd_setup_deamon_interface,
|
iwd_setup_deamon_interface,
|
||||||
NULL, false);
|
NULL, false);
|
||||||
|
|
||||||
|
if (!l_dbus_object_manager_enable(dbus, "/"))
|
||||||
|
l_warn("Unable to register the ObjectManager");
|
||||||
|
|
||||||
|
if (!l_dbus_object_add_interface(dbus, IWD_BASE_PATH,
|
||||||
|
IWD_DAEMON_INTERFACE,
|
||||||
|
NULL) ||
|
||||||
|
!l_dbus_object_add_interface(dbus, IWD_BASE_PATH,
|
||||||
|
L_DBUS_INTERFACE_PROPERTIES,
|
||||||
|
NULL))
|
||||||
|
l_info("Unable to add %s and/or %s at %s",
|
||||||
|
IWD_DAEMON_INTERFACE, L_DBUS_INTERFACE_PROPERTIES,
|
||||||
|
IWD_BASE_PATH);
|
||||||
|
|
||||||
|
l_dbus_name_acquire(dbus, "net.connman.iwd", false, false, false,
|
||||||
|
request_name_callback, NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void dbus_disconnected(void *user_data)
|
static void dbus_disconnected(void *user_data)
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user