diff options
author | Marcel Holtmann <marcel@holtmann.org> | 2009-03-31 18:51:21 -0700 |
---|---|---|
committer | Marcel Holtmann <marcel@holtmann.org> | 2009-03-31 18:51:21 -0700 |
commit | dea4825d7f5677ea92163f31a5fb38238a520772 (patch) | |
tree | 2fc8e22882b9441f8151bade7bf3bf274efd75d4 /plugins | |
parent | a0f99ce23943d691636a6a27d647ca42a85fcd24 (diff) | |
download | connman-dea4825d7f5677ea92163f31a5fb38238a520772.tar.gz connman-dea4825d7f5677ea92163f31a5fb38238a520772.tar.bz2 connman-dea4825d7f5677ea92163f31a5fb38238a520772.zip |
Set an unqiue group name based on SSID, mode and security details
Diffstat (limited to 'plugins')
-rw-r--r-- | plugins/supplicant.c | 30 |
1 files changed, 29 insertions, 1 deletions
diff --git a/plugins/supplicant.c b/plugins/supplicant.c index 4b587b8f..2009f7a0 100644 --- a/plugins/supplicant.c +++ b/plugins/supplicant.c @@ -783,6 +783,29 @@ static int initiate_scan(struct supplicant_task *task) return 0; } +static char *build_group(const unsigned char *ssid, unsigned int ssid_len, + const char *mode, const char *security) +{ + GString *str; + unsigned int i; + + if (ssid_len < 1) + return NULL; + + str = g_string_sized_new((ssid_len * 2) + 24); + if (str == NULL) + return NULL; + + g_string_append_printf(str, "wifi_"); + + for (i = 0; i < ssid_len; i++) + g_string_append_printf(str, "%02x", ssid[i]); + + g_string_append_printf(str, "_%s_%s", mode, security); + + return g_string_free(str, FALSE); +} + static void extract_addr(DBusMessageIter *value, struct supplicant_result *result) { @@ -919,8 +942,9 @@ static void properties_reply(DBusPendingCall *call, void *user_data) struct connman_network *network; DBusMessage *reply; DBusMessageIter array, dict; - const char *mode, *security; unsigned char strength; + const char *mode, *security; + char *group; DBG("task %p", task); @@ -1043,6 +1067,10 @@ static void properties_reply(DBusPendingCall *call, void *user_data) mode = (result.adhoc == TRUE) ? "adhoc" : "managed"; connman_network_set_string(network, "WiFi.Mode", mode); + group = build_group(result.ssid, result.ssid_len, mode, security); + connman_network_set_group(network, group); + g_free(group); + DBG("%s (%s %s) strength %d (%s)", result.name, mode, security, strength, (result.has_wps == TRUE) ? "WPS" : "no WPS"); |