From a1a6c2d7d6817c776c66a14a846b698041320060 Mon Sep 17 00:00:00 2001 From: Denis Kenzior Date: Mon, 2 Jul 2018 12:25:47 -0500 Subject: [PATCH] device: Introduce __device_connect_network The version with '__' prefix is the raw version that returns errnos. The version without '__' prefix deals with D-Bus error conversion. --- src/device.c | 49 ++++++++++++++++++++++++++++++------------------- src/device.h | 2 ++ 2 files changed, 32 insertions(+), 19 deletions(-) diff --git a/src/device.c b/src/device.c index f8ce1dcb..3ac753bd 100644 --- a/src/device.c +++ b/src/device.c @@ -1693,34 +1693,27 @@ bool device_set_autoconnect(struct device *device, bool autoconnect) return true; } -void device_connect_network(struct device *device, struct network *network, - struct scan_bss *bss, - struct l_dbus_message *message) +int __device_connect_network(struct device *device, struct network *network, + struct scan_bss *bss) { struct l_dbus *dbus = dbus_get_bus(); struct handshake_state *hs; + int r; + + if (device_is_busy(device)) + return -EBUSY; hs = device_handshake_setup(device, network, bss); + if (!hs) + return -ENOTSUP; - if (!hs) { - if (message) - l_dbus_send(dbus, dbus_error_not_supported(message)); - - return; - } - - if (netdev_connect(device->netdev, bss, hs, device_netdev_event, - device_connect_cb, device) < 0) { + r = netdev_connect(device->netdev, bss, hs, device_netdev_event, + device_connect_cb, device); + if (r < 0) { handshake_state_free(hs); - - if (message) - l_dbus_send(dbus, dbus_error_failed(message)); - - return; + return r; } - device->connect_pending = l_dbus_message_ref(message); - device->connected_bss = bss; device->connected_network = network; @@ -1730,6 +1723,24 @@ void device_connect_network(struct device *device, struct network *network, IWD_DEVICE_INTERFACE, "ConnectedNetwork"); l_dbus_property_changed(dbus, network_get_path(network), IWD_NETWORK_INTERFACE, "Connected"); + + return 0; +} + +void device_connect_network(struct device *device, struct network *network, + struct scan_bss *bss, + struct l_dbus_message *message) +{ + int err = __device_connect_network(device, network, bss); + + if (err < 0) { + struct l_dbus *dbus = dbus_get_bus(); + + l_dbus_send(dbus, dbus_error_from_errno(err, message)); + return; + } + + device->connect_pending = l_dbus_message_ref(message); } static void device_scan_triggered(int err, void *user_data) diff --git a/src/device.h b/src/device.h index e13d082b..39480e32 100644 --- a/src/device.h +++ b/src/device.h @@ -79,6 +79,8 @@ struct network *device_network_find(struct device *device, const char *ssid, enum security security); bool device_set_autoconnect(struct device *device, bool autoconnect); +int __device_connect_network(struct device *device, struct network *network, + struct scan_bss *bss); void device_connect_network(struct device *device, struct network *network, struct scan_bss *bss, struct l_dbus_message *message);