diff options
author | Samuel Ortiz <sameo@linux.intel.com> | 2011-02-03 00:23:13 +0100 |
---|---|---|
committer | Samuel Ortiz <sameo@linux.intel.com> | 2011-02-03 00:23:13 +0100 |
commit | c0e306d373d4dd9119400cef0f4473783974975e (patch) | |
tree | 2c20cd1d6e2337139a59954d24d6545421122878 /gsupplicant | |
parent | 11a61177bbd78969e7d95cca0d3bd083ab0b1106 (diff) | |
download | connman-c0e306d373d4dd9119400cef0f4473783974975e.tar.gz connman-c0e306d373d4dd9119400cef0f4473783974975e.tar.bz2 connman-c0e306d373d4dd9119400cef0f4473783974975e.zip |
gsupplicant: Set WPA ciphers
Diffstat (limited to 'gsupplicant')
-rw-r--r-- | gsupplicant/gsupplicant.h | 2 | ||||
-rw-r--r-- | gsupplicant/supplicant.c | 61 |
2 files changed, 63 insertions, 0 deletions
diff --git a/gsupplicant/gsupplicant.h b/gsupplicant/gsupplicant.h index e018adad..c6d10abc 100644 --- a/gsupplicant/gsupplicant.h +++ b/gsupplicant/gsupplicant.h @@ -110,6 +110,8 @@ struct _GSupplicantSSID { unsigned int scan_ssid; GSupplicantMode mode; GSupplicantSecurity security; + unsigned int pairwise_cipher; + unsigned int group_cipher; unsigned int freq; const char *eap; const char *passphrase; diff --git a/gsupplicant/supplicant.c b/gsupplicant/supplicant.c index 909dc847..3dc50913 100644 --- a/gsupplicant/supplicant.c +++ b/gsupplicant/supplicant.c @@ -2667,6 +2667,65 @@ static void add_network_security_eap(DBusMessageIter *dict, g_free(eap_value); } +static void add_network_security_ciphers(DBusMessageIter *dict, + GSupplicantSSID *ssid) +{ + unsigned int p_cipher, g_cipher, i; + char *pairwise, *group; + char *pair_ciphers[4]; + char *group_ciphers[5]; + + p_cipher = ssid->pairwise_cipher; + g_cipher = ssid->group_cipher; + + if (p_cipher == 0 && g_cipher == 0) + return; + + i = 0; + + if (p_cipher & G_SUPPLICANT_PAIRWISE_CCMP) + pair_ciphers[i++] = "CCMP"; + + if (p_cipher & G_SUPPLICANT_PAIRWISE_TKIP) + pair_ciphers[i++] = "TKIP"; + + if (p_cipher & G_SUPPLICANT_PAIRWISE_NONE) + pair_ciphers[i++] = "NONE"; + + pair_ciphers[i] = NULL; + + i = 0; + + if (g_cipher & G_SUPPLICANT_GROUP_CCMP) + group_ciphers[i++] = "CCMP"; + + if (g_cipher & G_SUPPLICANT_GROUP_TKIP) + group_ciphers[i++] = "TKIP"; + + if (g_cipher & G_SUPPLICANT_GROUP_WEP104) + group_ciphers[i++] = "WEP104"; + + if (g_cipher & G_SUPPLICANT_GROUP_WEP40) + group_ciphers[i++] = "WEP40"; + + group_ciphers[i] = NULL; + + pairwise = g_strjoinv(" ", pair_ciphers); + group = g_strjoinv(" ", group_ciphers); + + SUPPLICANT_DBG("cipher %s %s", pairwise, group); + + supplicant_dbus_dict_append_basic(dict, "pairwise", + DBUS_TYPE_STRING, + &pairwise); + supplicant_dbus_dict_append_basic(dict, "group", + DBUS_TYPE_STRING, + &group); + + g_free(pairwise); + g_free(group); +} + static void add_network_security(DBusMessageIter *dict, GSupplicantSSID *ssid) { char *key_mgmt; @@ -2688,6 +2747,8 @@ static void add_network_security(DBusMessageIter *dict, GSupplicantSSID *ssid) break; } + add_network_security_ciphers(dict, ssid); + supplicant_dbus_dict_append_basic(dict, "key_mgmt", DBUS_TYPE_STRING, &key_mgmt); } |