From 86c198cbb20d75d774c694ebd735133a962be601 Mon Sep 17 00:00:00 2001 From: Tomasz Bursztyka Date: Fri, 20 Apr 2012 15:18:35 +0300 Subject: gsupplicant: Add WPS specific capabilities handling for network --- gsupplicant/gsupplicant.h | 3 +++ gsupplicant/supplicant.c | 39 ++++++++++++++++++++++++++++++++++++++- 2 files changed, 41 insertions(+), 1 deletion(-) (limited to 'gsupplicant') diff --git a/gsupplicant/gsupplicant.h b/gsupplicant/gsupplicant.h index d5f5a29e..7e790506 100644 --- a/gsupplicant/gsupplicant.h +++ b/gsupplicant/gsupplicant.h @@ -226,6 +226,9 @@ const char *g_supplicant_network_get_security(GSupplicantNetwork *network); dbus_int16_t g_supplicant_network_get_signal(GSupplicantNetwork *network); dbus_uint16_t g_supplicant_network_get_frequency(GSupplicantNetwork *network); dbus_bool_t g_supplicant_network_get_wps(GSupplicantNetwork *network); +dbus_bool_t g_supplicant_network_is_wps_active(GSupplicantNetwork *network); +dbus_bool_t g_supplicant_network_is_wps_pbc(GSupplicantNetwork *network); +dbus_bool_t g_supplicant_network_is_wps_advertizing(GSupplicantNetwork *network); struct _GSupplicantCallbacks { void (*system_ready) (void); diff --git a/gsupplicant/supplicant.c b/gsupplicant/supplicant.c index b44ea69a..25a88af0 100644 --- a/gsupplicant/supplicant.c +++ b/gsupplicant/supplicant.c @@ -204,6 +204,7 @@ struct _GSupplicantNetwork { GSupplicantMode mode; GSupplicantSecurity security; dbus_bool_t wps; + unsigned int wps_capabilities; GHashTable *bss_table; GHashTable *config_table; }; @@ -860,6 +861,39 @@ dbus_bool_t g_supplicant_network_get_wps(GSupplicantNetwork *network) return network->wps; } +dbus_bool_t g_supplicant_network_is_wps_active(GSupplicantNetwork *network) +{ + if (network == NULL) + return FALSE; + + if (network->wps_capabilities & G_SUPPLICANT_WPS_CONFIGURED) + return TRUE; + + return FALSE; +} + +dbus_bool_t g_supplicant_network_is_wps_pbc(GSupplicantNetwork *network) +{ + if (network == NULL) + return FALSE; + + if (network->wps_capabilities & G_SUPPLICANT_WPS_PBC) + return TRUE; + + return FALSE; +} + +dbus_bool_t g_supplicant_network_is_wps_advertizing(GSupplicantNetwork *network) +{ + if (network == NULL) + return FALSE; + + if (network->wps_capabilities & G_SUPPLICANT_WPS_REGISTRAR) + return TRUE; + + return FALSE; +} + static void merge_network(GSupplicantNetwork *network) { GString *str; @@ -1098,9 +1132,12 @@ static void add_bss_to_network(struct g_supplicant_bss *bss) network->best_bss = bss; network->wps = FALSE; - if ((bss->keymgmt & G_SUPPLICANT_KEYMGMT_WPS) != 0) + if ((bss->keymgmt & G_SUPPLICANT_KEYMGMT_WPS) != 0) { network->wps = TRUE; + network->wps_capabilities |= bss->wps_capabilities; + } + network->bss_table = g_hash_table_new_full(g_str_hash, g_str_equal, NULL, remove_bss); -- cgit v1.2.3