diff mbox

[3/7] Adding AutoScan interface method to set or unset autoscan parameters

Message ID 1340697952-4209-4-git-send-email-tomasz.bursztyka@linux.intel.com
State Accepted
Commit 67892d5c0daa12d60790b5bb73c99e1891148511
Headers show

Commit Message

Tomasz Bursztyka June 26, 2012, 8:05 a.m. UTC
Signed-hostap: Tomasz Bursztyka <tomasz.bursztyka@linux.intel.com>
---
 doc/dbus.doxygen                        |   16 +++++++++++
 wpa_supplicant/dbus/dbus_new.c          |    9 ++++++
 wpa_supplicant/dbus/dbus_new_handlers.c |   44 +++++++++++++++++++++++++++++++
 wpa_supplicant/dbus/dbus_new_handlers.h |    5 +++
 4 files changed, 74 insertions(+), 0 deletions(-)

Comments

Jouni Malinen June 26, 2012, 4:04 p.m. UTC | #1
On Tue, Jun 26, 2012 at 11:05:48AM +0300, Tomasz Bursztyka wrote:
> diff --git a/wpa_supplicant/dbus/dbus_new_handlers.c b/wpa_supplicant/dbus/dbus_new_handlers.c
> +DBusMessage * wpas_dbus_handler_autoscan(DBusMessage *message,
> +					 struct wpa_supplicant *wpa_s)
> +{

> +	if (wpa_s->conf->autoscan != NULL) {
> +		os_free(wpa_s->conf->autoscan);
> +		wpa_s->conf->autoscan = NULL;
> +	}

I'm changing this to be done only if the command succeeds.

> +	if (arg != NULL && os_strlen(arg) > 0) {

> +	} else if (os_strlen(arg) == 0)

And this not to dereference arg without checking that it is not NULL.
diff mbox

Patch

diff --git a/doc/dbus.doxygen b/doc/dbus.doxygen
index b298dd8..478dcc5 100644
--- a/doc/dbus.doxygen
+++ b/doc/dbus.doxygen
@@ -316,6 +316,22 @@  fi.w1.wpa_supplicant1.CreateInterface.
 	  <dd>A blob with the specified name doesn't exist.</dd>
 	</dl>
       </li>
+      <li>
+      	<h3>AutoScan ( s : arg ) --> nothing</h3>
+	<p>Set autoscan parameters for the interface.</p>
+	<h4>Arguments</h4>
+	<dl>
+	  <dt>s : arg</dt>
+	  <dd>Autoscan parameter line or empty to unset autoscan.</dd>
+	</dl>
+	<h4>Possible errors</h4>
+	<dl>
+	  <dt>fi.w1.wpa_supplicant1.NoMemory</dt>
+	  <dd>Needed memory was not possible to get allocated.</dd>
+	  <dt>fi.w1.wpa_supplicant1.InvalidArgs</dt>
+	  <dd>Invalid entries were found in the passed argument.</dd>
+	</dl>
+       </li>
     </ul>
 
 \subsection dbus_interface_properties Properties
diff --git a/wpa_supplicant/dbus/dbus_new.c b/wpa_supplicant/dbus/dbus_new.c
index f7393d9..a8e87d5 100644
--- a/wpa_supplicant/dbus/dbus_new.c
+++ b/wpa_supplicant/dbus/dbus_new.c
@@ -1920,6 +1920,15 @@  static const struct wpa_dbus_method_desc wpas_dbus_global_methods[] = {
 		  END_ARGS
 	  }
 	},
+#ifdef CONFIG_AUTOSCAN
+	{ "AutoScan", WPAS_DBUS_NEW_IFACE_INTERFACE,
+	  (WPADBusMethodHandler) &wpas_dbus_handler_autoscan,
+	  {
+		  { "arg", "s", ARG_IN },
+		  END_ARGS
+	  }
+	},
+#endif /* CONFIG_AUTOSCAN */
 	{ NULL, NULL, NULL, { END_ARGS } }
 };
 
diff --git a/wpa_supplicant/dbus/dbus_new_handlers.c b/wpa_supplicant/dbus/dbus_new_handlers.c
index 1c7592d..2d2c6dd 100644
--- a/wpa_supplicant/dbus/dbus_new_handlers.c
+++ b/wpa_supplicant/dbus/dbus_new_handlers.c
@@ -1810,6 +1810,50 @@  DBusMessage * wpas_dbus_handler_flush_bss(DBusMessage *message,
 	return NULL;
 }
 
+#ifdef CONFIG_AUTOSCAN
+/**
+ * wpas_dbus_handler_autoscan - Set autoscan parameters for the interface
+ * @message: Pointer to incoming dbus message
+ * @wpa_s: wpa_supplicant structure for a network interface
+ * Returns: NULL
+ *
+ * Handler function for "AutoScan" method call of network interface.
+ */
+DBusMessage * wpas_dbus_handler_autoscan(DBusMessage *message,
+					 struct wpa_supplicant *wpa_s)
+{
+	DBusMessage *reply = NULL;
+	enum wpa_states state = wpa_s->wpa_state;
+	char *arg;
+
+	dbus_message_get_args(message, NULL, DBUS_TYPE_STRING, &arg,
+			      DBUS_TYPE_INVALID);
+
+	if (wpa_s->conf->autoscan != NULL) {
+		os_free(wpa_s->conf->autoscan);
+		wpa_s->conf->autoscan = NULL;
+	}
+
+	if (arg != NULL && os_strlen(arg) > 0) {
+		wpa_s->conf->autoscan = os_strdup(arg);
+		if (wpa_s->conf->autoscan == NULL) {
+			reply = dbus_message_new_error(message,
+						       DBUS_ERROR_NO_MEMORY,
+						       NULL);
+		}
+
+		if (state == WPA_DISCONNECTED || state == WPA_INACTIVE)
+			autoscan_init(wpa_s);
+	} else if (os_strlen(arg) == 0)
+		autoscan_deinit(wpa_s);
+	else
+		reply = dbus_message_new_error(message,
+					       DBUS_ERROR_INVALID_ARGS,
+					       NULL);
+
+	return reply;
+}
+#endif /* CONFIG_AUTOSCAN */
 
 /**
  * wpas_dbus_getter_capabilities - Return interface capabilities
diff --git a/wpa_supplicant/dbus/dbus_new_handlers.h b/wpa_supplicant/dbus/dbus_new_handlers.h
index d78aa20..c8b8a94 100644
--- a/wpa_supplicant/dbus/dbus_new_handlers.h
+++ b/wpa_supplicant/dbus/dbus_new_handlers.h
@@ -124,6 +124,11 @@  DBusMessage * wpas_dbus_handler_remove_blob(DBusMessage *message,
 DBusMessage * wpas_dbus_handler_flush_bss(DBusMessage *message,
 					  struct wpa_supplicant *wpa_s);
 
+#ifdef CONFIG_AUTOSCAN
+DBusMessage * wpas_dbus_handler_autoscan(DBusMessage *message,
+					 struct wpa_supplicant *wpa_s);
+#endif /* CONFIG_AUTOSCAN */
+
 dbus_bool_t wpas_dbus_getter_capabilities(DBusMessageIter *iter,
 					  DBusError *error, void *user_data);