summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLubomir Rintel <lkundrak@v3.sk>2016-07-12 11:37:18 +0200
committerLubomir Rintel <lkundrak@v3.sk>2016-08-01 13:52:36 +0200
commit2c24de581468f1744bf1806e40fb7de3027ea106 (patch)
tree4c4c41804e1ebd1943c9c2aca4f2416614b3e376
parent1a0dfd31c4af5f3e42b4fc8363a2065d8c5a325b (diff)
downloadNetworkManager-2c24de581468f1744bf1806e40fb7de3027ea106.tar.gz
cli/device: add completion to wifi hotspot subcommand
-rw-r--r--clients/cli/devices.c62
1 files changed, 28 insertions, 34 deletions
diff --git a/clients/cli/devices.c b/clients/cli/devices.c
index 06f610e7f8..8c255fc828 100644
--- a/clients/cli/devices.c
+++ b/clients/cli/devices.c
@@ -3312,66 +3312,65 @@ do_device_wifi_hotspot (NmCli *nmc, int argc, char **argv)
GBytes *ssid_bytes;
GError *error = NULL;
- /* Not (yet?) supported */
- if (nmc->complete)
- return nmc->return_value;
-
/* Set default timeout waiting for operation completion. */
if (nmc->timeout == -1)
nmc->timeout = 60;
+ devices = nmc_get_devices_sorted (nmc->client);
+
while (argc > 0) {
+ if (argc == 1 && nmc->complete) {
+ nmc_complete_strings (*argv, "ifname", "con-name", "ssid", "band",
+ "channel", "password", NULL);
+ }
+
if (strcmp (*argv, "ifname") == 0) {
if (next_arg (&argc, &argv) != 0) {
g_string_printf (nmc->return_text, _("Error: %s argument is missing."), *(argv-1));
- nmc->return_value = NMC_RESULT_ERROR_USER_INPUT;
- goto error;
+ return NMC_RESULT_ERROR_USER_INPUT;
}
ifname = *argv;
+ if (argc == 1 && nmc->complete)
+ complete_device (devices, ifname, TRUE);
} else if (strcmp (*argv, "con-name") == 0) {
if (next_arg (&argc, &argv) != 0) {
g_string_printf (nmc->return_text, _("Error: %s argument is missing."), *(argv-1));
- nmc->return_value = NMC_RESULT_ERROR_USER_INPUT;
- goto error;
+ return NMC_RESULT_ERROR_USER_INPUT;
}
con_name = *argv;
} else if (strcmp (*argv, "ssid") == 0) {
if (next_arg (&argc, &argv) != 0) {
g_string_printf (nmc->return_text, _("Error: %s argument is missing."), *(argv-1));
- nmc->return_value = NMC_RESULT_ERROR_USER_INPUT;
- goto error;
+ return NMC_RESULT_ERROR_USER_INPUT;
}
ssid = *argv;
if (strlen (ssid) > 32) {
g_string_printf (nmc->return_text, _("Error: ssid is too long."));
- nmc->return_value = NMC_RESULT_ERROR_USER_INPUT;
- goto error;
+ return NMC_RESULT_ERROR_USER_INPUT;
}
} else if (strcmp (*argv, "band") == 0) {
if (next_arg (&argc, &argv) != 0) {
g_string_printf (nmc->return_text, _("Error: %s argument is missing."), *(argv-1));
- nmc->return_value = NMC_RESULT_ERROR_USER_INPUT;
- goto error;
+ return NMC_RESULT_ERROR_USER_INPUT;
}
band = *argv;
+ if (argc == 1 && nmc->complete)
+ nmc_complete_strings (band, "a", "bg", NULL);
if (strcmp (band, "a") && strcmp (band, "bg")) {
g_string_printf (nmc->return_text, _("Error: band argument value '%s' is invalid; use 'a' or 'bg'."),
band);
- nmc->return_value = NMC_RESULT_ERROR_USER_INPUT;
- goto error;
+ return NMC_RESULT_ERROR_USER_INPUT;
}
} else if (strcmp (*argv, "channel") == 0) {
if (next_arg (&argc, &argv) != 0) {
g_string_printf (nmc->return_text, _("Error: %s argument is missing."), *(argv-1));
- nmc->return_value = NMC_RESULT_ERROR_USER_INPUT;
- goto error;
+ return NMC_RESULT_ERROR_USER_INPUT;
}
channel = *argv;
} else if (strcmp (*argv, "password") == 0) {
if (next_arg (&argc, &argv) != 0) {
g_string_printf (nmc->return_text, _("Error: %s argument is missing."), *(argv-1));
- nmc->return_value = NMC_RESULT_ERROR_USER_INPUT;
- goto error;
+ return NMC_RESULT_ERROR_USER_INPUT;
}
password = *argv;
/* --show-password is deprecated in favour of global --show-secrets option */
@@ -3380,8 +3379,7 @@ do_device_wifi_hotspot (NmCli *nmc, int argc, char **argv)
show_password = TRUE;
} else {
g_string_printf (nmc->return_text, _("Error: Unknown parameter %s."), *argv);
- nmc->return_value = NMC_RESULT_ERROR_USER_INPUT;
- goto error;
+ return NMC_RESULT_ERROR_USER_INPUT;
}
argc--;
@@ -3389,6 +3387,9 @@ do_device_wifi_hotspot (NmCli *nmc, int argc, char **argv)
}
show_password = nmc->show_secrets || show_password;
+ if (nmc->complete)
+ return nmc->return_value;
+
/* Verify band and channel parameters */
if (!channel) {
if (g_strcmp0 (band, "bg") == 0)
@@ -3399,20 +3400,17 @@ do_device_wifi_hotspot (NmCli *nmc, int argc, char **argv)
if (channel) {
if (!band) {
g_string_printf (nmc->return_text, _("Error: channel requires band too."));
- nmc->return_value = NMC_RESULT_ERROR_USER_INPUT;
- goto error;
+ return NMC_RESULT_ERROR_USER_INPUT;
}
if ( !nmc_string_to_uint (channel, TRUE, 1, 5825, &channel_int)
|| !nm_utils_wifi_is_channel_valid (channel_int, band)) {
g_string_printf (nmc->return_text, _("Error: channel '%s' not valid for band '%s'."),
channel, band);
- nmc->return_value = NMC_RESULT_ERROR_USER_INPUT;
- goto error;
+ return NMC_RESULT_ERROR_USER_INPUT;
}
}
/* Find Wi-Fi device. When no ifname is provided, the first Wi-Fi is used. */
- devices = nmc_get_devices_sorted (nmc->client);
device = find_wifi_device_by_iface (devices, ifname, NULL);
if (!device) {
@@ -3420,8 +3418,7 @@ do_device_wifi_hotspot (NmCli *nmc, int argc, char **argv)
g_string_printf (nmc->return_text, _("Error: Device '%s' is not a Wi-Fi device."), ifname);
else
g_string_printf (nmc->return_text, _("Error: No Wi-Fi device found."));
- nmc->return_value = NMC_RESULT_ERROR_UNKNOWN;
- goto error;
+ return NMC_RESULT_ERROR_UNKNOWN;
}
/* Check device supported mode */
@@ -3433,8 +3430,7 @@ do_device_wifi_hotspot (NmCli *nmc, int argc, char **argv)
else {
g_string_printf (nmc->return_text, _("Error: Device '%s' supports neither AP nor Ad-Hoc mode."),
nm_device_get_iface (device));
- nmc->return_value = NMC_RESULT_ERROR_UNKNOWN;
- goto error;
+ return NMC_RESULT_ERROR_UNKNOWN;
}
/* Create a connection with appropriate parameters */
@@ -3467,9 +3463,8 @@ do_device_wifi_hotspot (NmCli *nmc, int argc, char **argv)
if (!set_wireless_security_for_hotspot (s_wsec, wifi_mode, caps, password, show_password, &error)) {
g_object_unref (connection);
g_string_printf (nmc->return_text, _("Error: Invalid 'password': %s."), error->message);
- nmc->return_value = NMC_RESULT_ERROR_UNKNOWN;
g_clear_error (&error);
- goto error;
+ return NMC_RESULT_ERROR_UNKNOWN;
}
s_ip4 = (NMSettingIPConfig *) nm_setting_ip4_config_new ();
@@ -3497,7 +3492,6 @@ do_device_wifi_hotspot (NmCli *nmc, int argc, char **argv)
add_and_activate_cb,
info);
-error:
return nmc->return_value;
}