summaryrefslogtreecommitdiff
path: root/tools/supplicant.c
diff options
context:
space:
mode:
authorMarcel Holtmann <marcel@holtmann.org>2010-01-01 17:00:54 -0800
committerMarcel Holtmann <marcel@holtmann.org>2010-01-01 17:00:54 -0800
commit9b2f0b7c60dce9ee9f5184e499bc9ddefe6dbdfa (patch)
tree0f74d0eeb9ee0a4582ca78ca978c973c87ebc53a /tools/supplicant.c
parent0128d468175f11dc2d90480f9a3e95d4175fe937 (diff)
downloadconnman-9b2f0b7c60dce9ee9f5184e499bc9ddefe6dbdfa.tar.gz
connman-9b2f0b7c60dce9ee9f5184e499bc9ddefe6dbdfa.tar.bz2
connman-9b2f0b7c60dce9ee9f5184e499bc9ddefe6dbdfa.zip
Add initial support for scanning in supplicant test program
Diffstat (limited to 'tools/supplicant.c')
-rw-r--r--tools/supplicant.c102
1 files changed, 101 insertions, 1 deletions
diff --git a/tools/supplicant.c b/tools/supplicant.c
index 7a1d0a48..c2120991 100644
--- a/tools/supplicant.c
+++ b/tools/supplicant.c
@@ -71,6 +71,7 @@ static struct strvalmap eap_method_map[] = {
{ "GTC", SUPPLICANT_EAP_METHOD_GTC },
{ "OTP", SUPPLICANT_EAP_METHOD_OTP },
{ "LEAP", SUPPLICANT_EAP_METHOD_LEAP },
+ { "WSC", SUPPLICANT_EAP_METHOD_WSC },
{ }
};
@@ -294,6 +295,28 @@ static void callback_interface_removed(struct supplicant_interface *interface)
callbacks_pointer->interface_removed(interface);
}
+static void callback_scan_started(struct supplicant_interface *interface)
+{
+ if (callbacks_pointer == NULL)
+ return;
+
+ if (callbacks_pointer->scan_started == NULL)
+ return;
+
+ callbacks_pointer->scan_started(interface);
+}
+
+static void callback_scan_finished(struct supplicant_interface *interface)
+{
+ if (callbacks_pointer == NULL)
+ return;
+
+ if (callbacks_pointer->scan_finished == NULL)
+ return;
+
+ callbacks_pointer->scan_finished(interface);
+}
+
static void callback_network_added(struct supplicant_network *network)
{
if (callbacks_pointer == NULL)
@@ -523,6 +546,14 @@ const char *supplicant_interface_get_ifname(struct supplicant_interface *interfa
return interface->ifname;
}
+const char *supplicant_interface_get_driver(struct supplicant_interface *interface)
+{
+ if (interface == NULL)
+ return NULL;
+
+ return interface->driver;
+}
+
struct supplicant_interface *supplicant_network_get_interface(struct supplicant_network *network)
{
if (network == NULL)
@@ -583,6 +614,8 @@ static void interface_network_added(DBusMessageIter *iter, void *user_data)
return;
}
+ DBG("path %s", path);
+
supplicant_dbus_property_get_all(path,
SUPPLICANT_INTERFACE ".Interface.Network",
network_property, NULL);
@@ -979,8 +1012,13 @@ static void interface_property(const char *key, DBusMessageIter *iter,
dbus_message_iter_get_basic(iter, &scanning);
interface->scanning = scanning;
+
+ DBG("scanning %u", interface->scanning);
+
+ if (interface->scanning == TRUE)
+ callback_scan_started(interface);
} else if (g_strcmp0(key, "ApScan") == 0) {
- int apscan;
+ int apscan = 1;
dbus_message_iter_get_basic(iter, &apscan);
interface->apscan = apscan;
@@ -1201,6 +1239,20 @@ static void signal_interface_removed(const char *path, DBusMessageIter *iter)
interface_removed(iter, NULL);
}
+static void signal_scan_done(const char *path, DBusMessageIter *iter)
+{
+ struct supplicant_interface *interface;
+ dbus_bool_t success = FALSE;
+
+ interface = g_hash_table_lookup(interface_table, path);
+ if (interface == NULL)
+ return;
+
+ dbus_message_iter_get_basic(iter, &success);
+
+ callback_scan_finished(interface);
+}
+
static void signal_bss_added(const char *path, DBusMessageIter *iter)
{
struct supplicant_interface *interface;
@@ -1257,6 +1309,7 @@ static struct {
{ SUPPLICANT_INTERFACE, "InterfaceCreated", signal_interface_added },
{ SUPPLICANT_INTERFACE, "InterfaceRemoved", signal_interface_removed },
+ { SUPPLICANT_INTERFACE ".Interface", "ScanDone", signal_scan_done },
{ SUPPLICANT_INTERFACE ".Interface", "BSSAdded", signal_bss_added },
{ SUPPLICANT_INTERFACE ".Interface", "BSSRemoved", signal_bss_removed },
{ SUPPLICANT_INTERFACE ".Interface", "NetworkAdded", signal_network_added },
@@ -1598,3 +1651,50 @@ int supplicant_interface_remove(struct supplicant_interface *interface,
return 0;
}
+
+static void interface_scan_result(const char *error,
+ DBusMessageIter *iter, void *user_data)
+{
+ DBG("error %s", error);
+}
+
+static void interface_scan_params(DBusMessageIter *iter, void *user_data)
+{
+ DBusMessageIter dict;
+ const char *type = "passive";
+
+ DBG("");
+
+ supplicant_dbus_dict_open(iter, &dict);
+
+ supplicant_dbus_dict_append_basic(&dict, "Type",
+ DBUS_TYPE_STRING, &type);
+
+ supplicant_dbus_dict_close(iter, &dict);
+}
+
+int supplicant_interface_scan(struct supplicant_interface *interface)
+{
+ if (system_available == FALSE)
+ return -EFAULT;
+
+ return supplicant_dbus_method_call(interface->path,
+ SUPPLICANT_INTERFACE ".Interface", "Scan",
+ interface_scan_params, interface_scan_result, NULL);
+}
+
+static void interface_disconnect_result(const char *error,
+ DBusMessageIter *iter, void *user_data)
+{
+ DBG("error %s", error);
+}
+
+int supplicant_interface_disconnect(struct supplicant_interface *interface)
+{
+ if (system_available == FALSE)
+ return -EFAULT;
+
+ return supplicant_dbus_method_call(interface->path,
+ SUPPLICANT_INTERFACE ".Interface", "Disconnect",
+ NULL, interface_disconnect_result, NULL);
+}