[PATCHv2] Dbus: Sending peer device information in DeviceFound event.

Dan Williams dcbw at redhat.com
Fri Jun 17 09:11:54 PDT 2016


On Fri, 2016-06-17 at 10:37 +0530, Nishant Chaprana wrote:
> This sends appends peer device information in DeviceFound event.
> Now the signature of DeviceFound will be changed to "oa{sv}" from
> "o".
> This change is required because in case there are large number of
> peers
> in the range of own device, then applications which have registered
> DeviceFound event will call GetAll for peer properties and Supplicant
> will get busy processing large number of found peers and GetAll from
> Applicaitons.

Like I said before, changing the signature of the DeviceFound D-Bus
signal is an API break and that's not good.  D-Bus method and signal
signatures are like C/C++ function signatures: changing them will break
things that listen for hte signal or call the method, just like a
binary link error.

You probably want to leave the existing signal alone, and create a
completely new signal with the signature that you want (eg, oa{sv}).
 Maybe "DeviceFoundEx" or "DeviceFoundProperties" or something like
that.

Dan

> This is similar to CTRL interface P2P-DEVICE-FOUND event which
> contains peer
> information in it. This will enable all applications to extract peer
> information
> from event itself and it would not be required to make extra dbus
> call for peer property
> which would be creating extra load over supplicant as well on
> applicaiton.
> 
> Signed-off-by: Nishant Chaprana <n.chaprana at samsung.com>
> ---
>  doc/dbus.doxygen               | 12 +++++++++++-
>  wpa_supplicant/dbus/dbus_new.c | 15 ++++++++++-----
>  2 files changed, 21 insertions(+), 6 deletions(-)
> 
> diff --git a/doc/dbus.doxygen b/doc/dbus.doxygen
> index 28ee371..71bd038 100644
> --- a/doc/dbus.doxygen
> +++ b/doc/dbus.doxygen
> @@ -1628,7 +1628,17 @@ Interface for performing P2P (Wi-Fi Peer-to-
> Peer) P2P Device operations.
>  
>  <ul>
>    <li>
> -    <h3>DeviceFound ( o : path )</h3>
> +	<h3>DeviceFound ( o : path, a{sv} : properties )</h3>
> +	<p>A new peer device has been found.</p>
> +	<h4>Arguments</h4>
> +	<dl>
> +	  <dt>o : path</dt>
> +	  <dd>A D-Bus path to an object representing the found peer
> device.</dd>
> +	</dl>
> +	<dl>
> +	  <dt>a{sv} : properties</dt>
> +	  <dd>A dictionary containing properties of found peer
> device.</dd>
> +	</dl>
>    </li>
>  
>    <li>
> diff --git a/wpa_supplicant/dbus/dbus_new.c
> b/wpa_supplicant/dbus/dbus_new.c
> index 0263b2c..87df427 100644
> --- a/wpa_supplicant/dbus/dbus_new.c
> +++ b/wpa_supplicant/dbus/dbus_new.c
> @@ -3349,6 +3349,7 @@ static const struct wpa_dbus_signal_desc
> wpas_dbus_interface_signals[] = {
>  	{ "DeviceFound", WPAS_DBUS_NEW_IFACE_P2PDEVICE,
>  	  {
>  		  { "path", "o", ARG_OUT },
> +		  { "properties", "a{sv}", ARG_OUT },
>  		  END_ARGS
>  	  }
>  	},
> @@ -3800,12 +3801,13 @@ static const struct wpa_dbus_signal_desc
> wpas_dbus_p2p_peer_signals[] = {
>   *	In case of peer objects, it would be emitted by either
>   *	the "interface object" or by "peer objects"
>   * @sig_name: signal name - DeviceFound
> + * @properties: determines if add second argument with object
> properties
>   *
> - * Notify listeners about event related with newly found p2p peer
> device
> + * Notify listeners about event related with p2p peer device
>   */
>  static void wpas_dbus_signal_peer(struct wpa_supplicant *wpa_s,
>  				  const u8 *dev_addr, const char
> *interface,
> -				  const char *sig_name)
> +				  const char *sig_name, int
> properties)
>  {
>  	struct wpas_dbus_priv *iface;
>  	DBusMessage *msg;
> @@ -3833,7 +3835,10 @@ static void wpas_dbus_signal_peer(struct
> wpa_supplicant *wpa_s,
>  	dbus_message_iter_init_append(msg, &iter);
>  	path = peer_obj_path;
>  	if (!dbus_message_iter_append_basic(&iter,
> DBUS_TYPE_OBJECT_PATH,
> -					    &path))
> +					    &path) ||
> +	    (properties && !wpa_dbus_get_object_properties(
> +		     iface, peer_obj_path,
> WPAS_DBUS_NEW_IFACE_P2P_PEER,
> +		     &iter)))
>  		wpa_printf(MSG_ERROR, "dbus: Failed to construct
> signal");
>  	else
>  		dbus_connection_send(iface->con, msg, NULL);
> @@ -3854,7 +3859,7 @@ void wpas_dbus_signal_peer_device_found(struct
> wpa_supplicant *wpa_s,
>  {
>  	wpas_dbus_signal_peer(wpa_s, dev_addr,
>  			      WPAS_DBUS_NEW_IFACE_P2PDEVICE,
> -			      "DeviceFound");
> +			      "DeviceFound", TRUE);
>  }
>  
>  /**
> @@ -3869,7 +3874,7 @@ void wpas_dbus_signal_peer_device_lost(struct
> wpa_supplicant *wpa_s,
>  {
>  	wpas_dbus_signal_peer(wpa_s, dev_addr,
>  			      WPAS_DBUS_NEW_IFACE_P2PDEVICE,
> -			      "DeviceLost");
> +			      "DeviceLost", FALSE);
>  }
>  
>  /**



More information about the Hostap mailing list