diff options
author | Marcel Holtmann <marcel@holtmann.org> | 2009-03-26 02:38:55 -0700 |
---|---|---|
committer | Marcel Holtmann <marcel@holtmann.org> | 2009-03-26 02:38:55 -0700 |
commit | 3e3cba11f4644348cbcf87dc66d8bffbffc07d5a (patch) | |
tree | ddeb76700a626634829632f9fe2be5eebd4d5525 | |
parent | 6807913ff2db5e688eb27f8c7bb7ee5534f959de (diff) | |
download | connman-3e3cba11f4644348cbcf87dc66d8bffbffc07d5a.tar.gz connman-3e3cba11f4644348cbcf87dc66d8bffbffc07d5a.tar.bz2 connman-3e3cba11f4644348cbcf87dc66d8bffbffc07d5a.zip |
Use BSSID for network connection if possible
-rw-r--r-- | plugins/supplicant.c | 24 |
1 files changed, 17 insertions, 7 deletions
diff --git a/plugins/supplicant.c b/plugins/supplicant.c index 66398673..bc75f6cf 100644 --- a/plugins/supplicant.c +++ b/plugins/supplicant.c @@ -656,12 +656,12 @@ static int disable_network(struct supplicant_task *task) static int set_network(struct supplicant_task *task, const unsigned char *network, int len, - const char *security, const char *passphrase) + const char *address, const char *security, + const char *passphrase) { DBusMessage *message, *reply; DBusMessageIter array, dict; DBusError error; - const char *scan = "1"; DBG("task %p", task); @@ -680,11 +680,19 @@ static int set_network(struct supplicant_task *task, DBUS_TYPE_STRING_AS_STRING DBUS_TYPE_VARIANT_AS_STRING DBUS_DICT_ENTRY_END_CHAR_AS_STRING, &dict); - connman_dbus_dict_append_variant(&dict, "scan_ssid", + if (len > 0 && address == NULL) { + const char *scan = "1"; + + connman_dbus_dict_append_variant(&dict, "scan_ssid", DBUS_TYPE_STRING, &scan); - connman_dbus_dict_append_array(&dict, "ssid", + connman_dbus_dict_append_array(&dict, "ssid", DBUS_TYPE_BYTE, &network, len); + } + + if (address != NULL) + connman_dbus_dict_append_variant(&dict, "bssid", + DBUS_TYPE_STRING, &address); if (g_ascii_strcasecmp(security, "wpa") == 0 || g_ascii_strcasecmp(security, "wpa2") == 0) { @@ -1385,19 +1393,21 @@ int supplicant_scan(struct connman_device *device) int supplicant_connect(struct connman_network *network) { struct supplicant_task *task; - const char *security, *passphrase; + const char *address, *security, *passphrase; const void *ssid; unsigned int ssid_len; int index; DBG("network %p", network); + address = connman_network_get_string(network, "Address"); security = connman_network_get_string(network, "WiFi.Security"); passphrase = connman_network_get_string(network, "WiFi.Passphrase"); ssid = connman_network_get_blob(network, "WiFi.SSID", &ssid_len); - DBG("security %s passphrase %s", security, passphrase); + DBG("address %s security %s passphrase %s", + address, security, passphrase); if (security == NULL && passphrase == NULL) return -EINVAL; @@ -1418,7 +1428,7 @@ int supplicant_connect(struct connman_network *network) select_network(task); disable_network(task); - set_network(task, ssid, ssid_len, security, passphrase); + set_network(task, ssid, ssid_len, address, security, passphrase); enable_network(task); |