From f35b3d6c9a40e6d1c5f8393a810b00599466a992 Mon Sep 17 00:00:00 2001 From: Marcel Holtmann Date: Fri, 26 Jun 2009 12:43:24 +0200 Subject: [PATCH] Add proper service group name when connecting to hidden networks --- src/device.c | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) diff --git a/src/device.c b/src/device.c index 73a6367..1fa2bc6 100644 --- a/src/device.c +++ b/src/device.c @@ -526,12 +526,35 @@ static DBusMessage *set_property(DBusConnection *conn, return g_dbus_create_reply(msg, DBUS_TYPE_INVALID); } +static char *build_group(const unsigned char *ssid, unsigned int ssid_len, + const char *mode, const char *security) +{ + GString *str; + unsigned int i; + + str = g_string_sized_new((ssid_len * 2) + 24); + if (str == NULL) + return NULL; + + if (ssid_len > 0 && ssid[0] != '\0') { + 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 DBusMessage *join_network(DBusConnection *conn, DBusMessage *msg, void *data) { struct connman_device *device = data; struct connman_network *network; enum connman_network_type type; + unsigned int ssid_size; + const char *group, *mode, *security; + const void *ssid; DBusMessageIter iter, array; int err, index; @@ -583,6 +606,13 @@ static DBusMessage *join_network(DBusConnection *conn, dbus_message_iter_next(&array); } + ssid = connman_network_get_blob(network, "WiFi.SSID", &ssid_size); + mode = connman_network_get_string(network, "WiFi.Mode"); + security = connman_network_get_string(network, "WiFi.Security"); + group = build_group(ssid, ssid_size, mode, security); + + connman_network_set_group(network, group); + index = connman_device_get_index(device); connman_network_set_index(network, index); -- 2.7.4