diff options
author | Chengyi Zhao <chengyi1.zhao@archermind.com> | 2013-07-10 15:37:50 +0800 |
---|---|---|
committer | Zhang zhengguang <zhengguang.zhang@intel.com> | 2013-07-12 16:28:11 +0800 |
commit | 5832e8fd04b57c7b4e7e01f3b0464bcf523a3401 (patch) | |
tree | 2260a81c8e9dccce78db1e3afbcce801ec855d9b | |
parent | 4081b47458481efed695eb87e9a135eb4aff8dc0 (diff) | |
download | connman-5832e8fd04b57c7b4e7e01f3b0464bcf523a3401.tar.gz connman-5832e8fd04b57c7b4e7e01f3b0464bcf523a3401.tar.bz2 connman-5832e8fd04b57c7b4e7e01f3b0464bcf523a3401.zip |
Tethering: Add handling for wpa_supplicant authorized/deauthorized signals
-rw-r--r-- | gsupplicant/gsupplicant.h | 2 | ||||
-rw-r--r-- | gsupplicant/supplicant.c | 55 |
2 files changed, 57 insertions, 0 deletions
diff --git a/gsupplicant/gsupplicant.h b/gsupplicant/gsupplicant.h index 18dd0422..0cbbe027 100644 --- a/gsupplicant/gsupplicant.h +++ b/gsupplicant/gsupplicant.h @@ -264,6 +264,8 @@ struct _GSupplicantCallbacks { void (*network_removed) (GSupplicantNetwork *network); void (*network_changed) (GSupplicantNetwork *network, const char *property); + void (*add_station) (const char *mac); + void (*remove_station) (const char *mac); void (*debug) (const char *str); }; diff --git a/gsupplicant/supplicant.c b/gsupplicant/supplicant.c index cb2a31f3..c7bdeb82 100644 --- a/gsupplicant/supplicant.c +++ b/gsupplicant/supplicant.c @@ -2314,6 +2314,56 @@ static void signal_wps_event(const char *path, DBusMessageIter *iter) supplicant_dbus_property_foreach(iter, wps_event_args, interface); } +static void signal_station_connected(const char *path, DBusMessageIter *iter) +{ + GSupplicantInterface *interface; + const char *sta_mac = NULL; + + SUPPLICANT_DBG("path %s %s", path, SUPPLICANT_PATH); + + if (callbacks_pointer->add_station == NULL) + return; + + if (g_strcmp0(path, "/") == 0) + return; + + interface = g_hash_table_lookup(interface_table, path); + if (interface == NULL) + return; + + dbus_message_iter_get_basic(iter, &sta_mac); + if (sta_mac == NULL) + return; + + SUPPLICANT_DBG("New station %s connected", sta_mac); + callbacks_pointer->add_station(sta_mac); +} + +static void signal_station_disconnected(const char *path, DBusMessageIter *iter) +{ + GSupplicantInterface *interface; + const char *sta_mac = NULL; + + SUPPLICANT_DBG("path %s %s", path, SUPPLICANT_PATH); + + if (callbacks_pointer->remove_station == NULL) + return; + + if (g_strcmp0(path, "/") == 0) + return; + + interface = g_hash_table_lookup(interface_table, path); + if (interface == NULL) + return; + + dbus_message_iter_get_basic(iter, &sta_mac); + if (sta_mac == NULL) + return; + + SUPPLICANT_DBG("Station %s disconnected", sta_mac); + callbacks_pointer->remove_station(sta_mac); +} + static struct { const char *interface; const char *member; @@ -2338,6 +2388,11 @@ static struct { { SUPPLICANT_INTERFACE ".Interface.WPS", "Credentials", signal_wps_credentials }, { SUPPLICANT_INTERFACE ".Interface.WPS", "Event", signal_wps_event }, + { SUPPLICANT_INTERFACE".Interface", "StaAuthorized", + signal_station_connected }, + { SUPPLICANT_INTERFACE".Interface", "StaDeauthorized", + signal_station_disconnected }, + { } }; |