D-Bus: Indicate whether created group is persistent or not

This adds an extra parameter in GroupStarted signal to indicate whether
the created group is Persistent or not. It is similar to the
[PERSISTENT] tag which comes in P2P-GROUP-STARTED over the control
interface.

Signed-off-by: Nishant Chaprana <n.chaprana@samsung.com>
This commit is contained in:
Nishant Chaprana 2016-05-30 13:08:31 +05:30 committed by Jouni Malinen
parent aa59370b34
commit 4fe50bbc8e
5 changed files with 20 additions and 25 deletions

View File

@ -1256,12 +1256,11 @@ static void peer_groups_changed(struct wpa_supplicant *wpa_s)
* @wpa_s: %wpa_supplicant network interface data * @wpa_s: %wpa_supplicant network interface data
* @ssid: SSID object * @ssid: SSID object
* @client: this device is P2P client * @client: this device is P2P client
* @network_id: network id of the group started, use instead of ssid->id * @persistent: 0 - non persistent group, 1 - persistent group
* to account for persistent groups
*/ */
void wpas_dbus_signal_p2p_group_started(struct wpa_supplicant *wpa_s, void wpas_dbus_signal_p2p_group_started(struct wpa_supplicant *wpa_s,
const struct wpa_ssid *ssid, const struct wpa_ssid *ssid,
int client, int network_id) int client, int persistent)
{ {
DBusMessage *msg; DBusMessage *msg;
DBusMessageIter iter, dict_iter; DBusMessageIter iter, dict_iter;
@ -1300,6 +1299,7 @@ void wpas_dbus_signal_p2p_group_started(struct wpa_supplicant *wpa_s,
wpa_s->dbus_new_path) || wpa_s->dbus_new_path) ||
!wpa_dbus_dict_append_string(&dict_iter, "role", !wpa_dbus_dict_append_string(&dict_iter, "role",
client ? "client" : "GO") || client ? "client" : "GO") ||
!wpa_dbus_dict_append_bool(&dict_iter, "persistent", persistent) ||
!wpa_dbus_dict_append_object_path(&dict_iter, "group_object", !wpa_dbus_dict_append_object_path(&dict_iter, "group_object",
wpa_s->dbus_groupobj_path) || wpa_s->dbus_groupobj_path) ||
!wpa_dbus_dict_close_write(&iter, &dict_iter)) { !wpa_dbus_dict_close_write(&iter, &dict_iter)) {

View File

@ -191,7 +191,7 @@ void wpas_dbus_signal_p2p_go_neg_req(struct wpa_supplicant *wpa_s,
u8 go_intent); u8 go_intent);
void wpas_dbus_signal_p2p_group_started(struct wpa_supplicant *wpa_s, void wpas_dbus_signal_p2p_group_started(struct wpa_supplicant *wpa_s,
const struct wpa_ssid *ssid, const struct wpa_ssid *ssid,
int client, int network_id); int client, int persistent);
void wpas_dbus_signal_p2p_group_formation_failure(struct wpa_supplicant *wpa_s, void wpas_dbus_signal_p2p_group_formation_failure(struct wpa_supplicant *wpa_s,
const char *reason); const char *reason);
void wpas_dbus_register_p2p_group(struct wpa_supplicant *wpa_s, void wpas_dbus_register_p2p_group(struct wpa_supplicant *wpa_s,
@ -402,7 +402,7 @@ static inline void wpas_dbus_signal_p2p_go_neg_req(struct wpa_supplicant *wpa_s,
static inline void static inline void
wpas_dbus_signal_p2p_group_started(struct wpa_supplicant *wpa_s, wpas_dbus_signal_p2p_group_started(struct wpa_supplicant *wpa_s,
const struct wpa_ssid *ssid, const struct wpa_ssid *ssid,
int client, int network_id) int client, int persistent)
{ {
} }

View File

@ -668,13 +668,13 @@ void wpas_notify_p2p_provision_discovery(struct wpa_supplicant *wpa_s,
void wpas_notify_p2p_group_started(struct wpa_supplicant *wpa_s, void wpas_notify_p2p_group_started(struct wpa_supplicant *wpa_s,
struct wpa_ssid *ssid, int network_id, struct wpa_ssid *ssid, int persistent,
int client) int client)
{ {
/* Notify a group has been started */ /* Notify a group has been started */
wpas_dbus_register_p2p_group(wpa_s, ssid); wpas_dbus_register_p2p_group(wpa_s, ssid);
wpas_dbus_signal_p2p_group_started(wpa_s, ssid, client, network_id); wpas_dbus_signal_p2p_group_started(wpa_s, ssid, client, persistent);
} }

View File

@ -113,7 +113,7 @@ void wpas_notify_p2p_provision_discovery(struct wpa_supplicant *wpa_s,
u16 config_methods, u16 config_methods,
unsigned int generated_pin); unsigned int generated_pin);
void wpas_notify_p2p_group_started(struct wpa_supplicant *wpa_s, void wpas_notify_p2p_group_started(struct wpa_supplicant *wpa_s,
struct wpa_ssid *ssid, int network_id, struct wpa_ssid *ssid, int persistent,
int client); int client);
void wpas_notify_p2p_group_formation_failure(struct wpa_supplicant *wpa_s, void wpas_notify_p2p_group_formation_failure(struct wpa_supplicant *wpa_s,
const char *reason); const char *reason);

View File

@ -1301,7 +1301,6 @@ static void wpas_group_formation_completed(struct wpa_supplicant *wpa_s,
int client; int client;
int persistent; int persistent;
u8 go_dev_addr[ETH_ALEN]; u8 go_dev_addr[ETH_ALEN];
int network_id = -1;
/* /*
* This callback is likely called for the main interface. Update wpa_s * This callback is likely called for the main interface. Update wpa_s
@ -1376,16 +1375,15 @@ static void wpas_group_formation_completed(struct wpa_supplicant *wpa_s,
} }
if (persistent) if (persistent)
network_id = wpas_p2p_store_persistent_group(wpa_s->p2pdev, wpas_p2p_store_persistent_group(wpa_s->p2pdev,
ssid, go_dev_addr); ssid, go_dev_addr);
else { else {
os_free(wpa_s->global->add_psk); os_free(wpa_s->global->add_psk);
wpa_s->global->add_psk = NULL; wpa_s->global->add_psk = NULL;
} }
if (network_id < 0 && ssid)
network_id = ssid->id;
if (!client) { if (!client) {
wpas_notify_p2p_group_started(wpa_s, ssid, network_id, 0); wpas_notify_p2p_group_started(wpa_s, ssid, persistent, 0);
os_get_reltime(&wpa_s->global->p2p_go_wait_client); os_get_reltime(&wpa_s->global->p2p_go_wait_client);
} }
} }
@ -1750,7 +1748,6 @@ static void p2p_go_configured(void *ctx, void *data)
struct wpa_supplicant *wpa_s = ctx; struct wpa_supplicant *wpa_s = ctx;
struct p2p_go_neg_results *params = data; struct p2p_go_neg_results *params = data;
struct wpa_ssid *ssid; struct wpa_ssid *ssid;
int network_id = -1;
wpa_s->ap_configured_cb = NULL; wpa_s->ap_configured_cb = NULL;
wpa_s->ap_configured_cb_ctx = NULL; wpa_s->ap_configured_cb_ctx = NULL;
@ -1797,14 +1794,14 @@ static void p2p_go_configured(void *ctx, void *data)
os_get_reltime(&wpa_s->global->p2p_go_wait_client); os_get_reltime(&wpa_s->global->p2p_go_wait_client);
if (params->persistent_group) { if (params->persistent_group) {
network_id = wpas_p2p_store_persistent_group( wpas_p2p_store_persistent_group(
wpa_s->p2pdev, ssid, wpa_s->p2pdev, ssid,
wpa_s->global->p2p_dev_addr); wpa_s->global->p2p_dev_addr);
wpas_p2p_add_psk_list(wpa_s, ssid); wpas_p2p_add_psk_list(wpa_s, ssid);
} }
if (network_id < 0)
network_id = ssid->id; wpas_notify_p2p_group_started(wpa_s, ssid,
wpas_notify_p2p_group_started(wpa_s, ssid, network_id, 0); params->persistent_group, 0);
wpas_p2p_cross_connect_setup(wpa_s); wpas_p2p_cross_connect_setup(wpa_s);
wpas_p2p_set_group_idle_timeout(wpa_s); wpas_p2p_set_group_idle_timeout(wpa_s);
@ -6941,7 +6938,6 @@ void wpas_p2p_completed(struct wpa_supplicant *wpa_s)
{ {
struct wpa_ssid *ssid = wpa_s->current_ssid; struct wpa_ssid *ssid = wpa_s->current_ssid;
u8 go_dev_addr[ETH_ALEN]; u8 go_dev_addr[ETH_ALEN];
int network_id = -1;
int persistent; int persistent;
int freq; int freq;
u8 ip[3 * 4]; u8 ip[3 * 4];
@ -7000,11 +6996,10 @@ void wpas_p2p_completed(struct wpa_supplicant *wpa_s)
ip_addr); ip_addr);
if (persistent) if (persistent)
network_id = wpas_p2p_store_persistent_group(wpa_s->p2pdev, wpas_p2p_store_persistent_group(wpa_s->p2pdev,
ssid, go_dev_addr); ssid, go_dev_addr);
if (network_id < 0)
network_id = ssid->id; wpas_notify_p2p_group_started(wpa_s, ssid, persistent, 1);
wpas_notify_p2p_group_started(wpa_s, ssid, network_id, 1);
} }