summaryrefslogtreecommitdiff
path: root/plugins
diff options
context:
space:
mode:
authorMarcel Holtmann <marcel@holtmann.org>2009-03-31 18:51:21 -0700
committerMarcel Holtmann <marcel@holtmann.org>2009-03-31 18:51:21 -0700
commitdea4825d7f5677ea92163f31a5fb38238a520772 (patch)
tree2fc8e22882b9441f8151bade7bf3bf274efd75d4 /plugins
parenta0f99ce23943d691636a6a27d647ca42a85fcd24 (diff)
downloadconnman-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.c30
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");