From patchwork Mon Jun 2 14:42:08 2014 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Tomasz Bursztyka X-Patchwork-Id: 354948 Return-Path: X-Original-To: patchwork-incoming@ozlabs.org Delivered-To: patchwork-incoming@ozlabs.org Received: from maxx.maxx.shmoo.com (maxx.shmoo.com [205.134.188.171]) (using TLSv1 with cipher ADH-AES256-SHA (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 9848C140083 for ; Tue, 3 Jun 2014 00:45:01 +1000 (EST) Received: from localhost (localhost [127.0.0.1]) by maxx.maxx.shmoo.com (Postfix) with ESMTP id 4ECD29D2E5; Mon, 2 Jun 2014 10:44:47 -0400 (EDT) X-Virus-Scanned: amavisd-new at maxx.shmoo.com Received: from maxx.maxx.shmoo.com ([127.0.0.1]) by localhost (maxx.shmoo.com [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id jcRQxkRJcSuW; Mon, 2 Jun 2014 10:44:47 -0400 (EDT) Received: from maxx.shmoo.com (localhost [127.0.0.1]) by maxx.maxx.shmoo.com (Postfix) with ESMTP id C9CDD9D330; Mon, 2 Jun 2014 10:43:05 -0400 (EDT) X-Original-To: mailman-post+hostap@maxx.shmoo.com Delivered-To: mailman-post+hostap@maxx.shmoo.com Received: from localhost (localhost [127.0.0.1]) by maxx.maxx.shmoo.com (Postfix) with ESMTP id C8AC99D32C for ; Mon, 2 Jun 2014 10:43:03 -0400 (EDT) X-Virus-Scanned: amavisd-new at maxx.shmoo.com Received: from maxx.maxx.shmoo.com ([127.0.0.1]) by localhost (maxx.shmoo.com [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id YHq-mm5PCpSz for ; Mon, 2 Jun 2014 10:42:57 -0400 (EDT) Received: from mga11.intel.com (mga11.intel.com [192.55.52.93]) by maxx.maxx.shmoo.com (Postfix) with ESMTP id C28C79D2DD for ; Mon, 2 Jun 2014 10:42:25 -0400 (EDT) Received: from fmsmga002.fm.intel.com ([10.253.24.26]) by fmsmga102.fm.intel.com with ESMTP; 02 Jun 2014 07:42:25 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="4.98,957,1392192000"; d="scan'208";a="548530429" Received: from ldsaruwe-mobl.gar.corp.intel.com (HELO rd-190.ger.corp.intel.com) ([10.252.123.160]) by fmsmga002.fm.intel.com with ESMTP; 02 Jun 2014 07:42:23 -0700 From: Tomasz Bursztyka To: hostap@lists.shmoo.com Subject: [PATCH 7/7] dbus: Add PropertiesChanged signal to Peer object Date: Mon, 2 Jun 2014 17:42:08 +0300 Message-Id: <1401720128-3545-8-git-send-email-tomasz.bursztyka@linux.intel.com> X-Mailer: git-send-email 1.8.5.5 In-Reply-To: <1401720128-3545-1-git-send-email-tomasz.bursztyka@linux.intel.com> References: <1401720128-3545-1-git-send-email-tomasz.bursztyka@linux.intel.com> Cc: eduardoabinader@gmail.com X-BeenThere: hostap@lists.shmoo.com X-Mailman-Version: 2.1.11 Precedence: list List-Id: HostAP Project List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Sender: hostap-bounces@lists.shmoo.com Errors-To: hostap-bounces@lists.shmoo.com This signal will be thrown when a Peer gets in or goes away from a group. Signed-off-by: Tomasz Bursztyka --- wpa_supplicant/dbus/dbus_new.c | 98 ++++++++++++++++++++++++++++++++++++++++-- wpa_supplicant/dbus/dbus_new.h | 9 ++++ 2 files changed, 104 insertions(+), 3 deletions(-) diff --git a/wpa_supplicant/dbus/dbus_new.c b/wpa_supplicant/dbus/dbus_new.c index 5c9accf..10a8b66 100644 --- a/wpa_supplicant/dbus/dbus_new.c +++ b/wpa_supplicant/dbus/dbus_new.c @@ -24,6 +24,7 @@ #include "dbus_common_i.h" #include "dbus_new_handlers_p2p.h" #include "p2p/p2p.h" +#include "../p2p_supplicant.h" #ifdef CONFIG_AP /* until needed by something else */ @@ -1151,6 +1152,68 @@ static int wpas_dbus_get_group_obj_path(struct wpa_supplicant *wpa_s, } +struct group_changed_data { + struct wpa_supplicant *wpa_s; + struct p2p_peer_info *info; +}; + + +static int match_group_where_peer_is_client(struct p2p_group *group, + void *user_data) +{ + struct group_changed_data *data = user_data; + const struct p2p_group_config *cfg; + struct wpa_supplicant *wpa_s_go; + + if (!p2p_group_is_client_connected(group, data->info->p2p_device_addr)) + return 1; + + cfg = p2p_group_get_config(group); + + wpa_s_go = wpas_get_p2p_go_iface(data->wpa_s, cfg->ssid, + cfg->ssid_len); + if (wpa_s_go != NULL && wpa_s_go == data->wpa_s) { + wpas_dbus_signal_peer_groups_changed( + data->wpa_s->parent, data->info->p2p_device_addr); + return 0; + } + + return 1; +} + + +static void signal_peer_groups_changed(struct p2p_peer_info *info, + void *user_data) +{ + struct group_changed_data *data = user_data; + struct wpa_supplicant *wpa_s_go; + + wpa_s_go = wpas_get_p2p_client_iface(data->wpa_s, + info->p2p_device_addr); + if (wpa_s_go != NULL && wpa_s_go == data->wpa_s) { + wpas_dbus_signal_peer_groups_changed(data->wpa_s->parent, + info->p2p_device_addr); + return; + } + + data->info = info; + p2p_loop_on_all_group(data->wpa_s->global->p2p, + match_group_where_peer_is_client, data); + data->info = NULL; +} + + +static void peer_groups_changed(struct wpa_supplicant *wpa_s) +{ + struct group_changed_data data = {}; + + data.wpa_s = wpa_s; + + p2p_loop_on_known_peers(wpa_s->global->p2p, + signal_peer_groups_changed, &data); +} + + /** * wpas_dbus_signal_p2p_group_started - Signals P2P group has * started. Emitted when a group is successfully started @@ -1211,6 +1274,9 @@ void wpas_dbus_signal_p2p_group_started(struct wpa_supplicant *wpa_s, dbus_connection_send(iface->con, msg, NULL); + if (client) + peer_groups_changed(wpa_s); + nomem: dbus_message_unref(msg); } @@ -1435,8 +1501,10 @@ void wpas_dbus_signal_p2p_peer_joined(struct wpa_supplicant *wpa_s, goto err; dbus_connection_send(iface->con, msg, NULL); - dbus_message_unref(msg); + + wpas_dbus_signal_peer_groups_changed(wpa_s->parent, peer_addr); + return; err: @@ -1489,8 +1557,10 @@ void wpas_dbus_signal_p2p_peer_disconnected(struct wpa_supplicant *wpa_s, goto err; dbus_connection_send(iface->con, msg, NULL); - dbus_message_unref(msg); + + wpas_dbus_signal_peer_groups_changed(wpa_s->parent, peer_addr); + return; err: @@ -3279,7 +3349,13 @@ static const struct wpa_dbus_property_desc wpas_dbus_p2p_peer_properties[] = { }; static const struct wpa_dbus_signal_desc wpas_dbus_p2p_peer_signals[] = { - + /* Deprecated: use org.freedesktop.DBus.Properties.PropertiesChanged */ + { "PropertiesChanged", WPAS_DBUS_NEW_IFACE_P2P_PEER, + { + { "properties", "a{sv}", ARG_OUT }, + END_ARGS + } + }, { NULL, NULL, { END_ARGS } } }; @@ -3463,6 +3539,20 @@ int wpas_dbus_unregister_peer(struct wpa_supplicant *wpa_s, } +void wpas_dbus_signal_peer_groups_changed(struct wpa_supplicant *wpa_s, + const u8 *dev_addr) +{ + char peer_obj_path[WPAS_DBUS_OBJECT_PATH_MAX]; + + os_snprintf(peer_obj_path, WPAS_DBUS_OBJECT_PATH_MAX, + "%s/" WPAS_DBUS_NEW_P2P_PEERS_PART "/" COMPACT_MACSTR, + wpa_s->dbus_new_path, MAC2STR(dev_addr)); + + wpa_dbus_mark_property_changed(wpa_s->global->dbus, peer_obj_path, + WPAS_DBUS_NEW_IFACE_P2P_PEER, "Groups"); +} + + static const struct wpa_dbus_property_desc wpas_dbus_p2p_group_properties[] = { { "Members", WPAS_DBUS_NEW_IFACE_P2P_GROUP, "ao", wpas_dbus_getter_p2p_group_members, @@ -3608,6 +3698,8 @@ void wpas_dbus_unregister_p2p_group(struct wpa_supplicant *wpa_s, return; } + peer_groups_changed(wpa_s); + wpa_printf(MSG_DEBUG, "dbus: Unregister group object '%s'", wpa_s->dbus_groupobj_path); diff --git a/wpa_supplicant/dbus/dbus_new.h b/wpa_supplicant/dbus/dbus_new.h index 9e0ec89..d8b5f00 100644 --- a/wpa_supplicant/dbus/dbus_new.h +++ b/wpa_supplicant/dbus/dbus_new.h @@ -173,6 +173,9 @@ int wpas_dbus_unregister_peer(struct wpa_supplicant *wpa_s, const u8 *dev_addr); void wpas_dbus_signal_peer_device_lost(struct wpa_supplicant *wpa_s, const u8 *dev_addr); + +void wpas_dbus_signal_peer_groups_changed(struct wpa_supplicant *wpa_s, + const u8 *dev_addr); void wpas_dbus_signal_p2p_group_removed(struct wpa_supplicant *wpa_s, const char *role); void wpas_dbus_signal_p2p_provision_discovery(struct wpa_supplicant *wpa_s, @@ -352,6 +355,12 @@ static inline int wpas_dbus_unregister_peer(struct wpa_supplicant *wpa_s, } static inline void +wpas_dbus_signal_peer_groups_changed(struct wpa_supplicant *wpa_s, + const u8 *dev_addr) +{ +} + +static inline void wpas_dbus_signal_p2p_group_removed(struct wpa_supplicant *wpa_s, const char *role) {