aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/p2p/p2p.h4
-rw-r--r--src/p2p/p2p_go_neg.c4
-rw-r--r--wpa_supplicant/dbus/dbus_new.c8
-rw-r--r--wpa_supplicant/dbus/dbus_new.h11
-rw-r--r--wpa_supplicant/notify.c4
-rw-r--r--wpa_supplicant/notify.h2
-rw-r--r--wpa_supplicant/p2p_supplicant.c8
7 files changed, 26 insertions, 15 deletions
diff --git a/src/p2p/p2p.h b/src/p2p/p2p.h
index da2446d..6b0ba80 100644
--- a/src/p2p/p2p.h
+++ b/src/p2p/p2p.h
@@ -705,6 +705,7 @@ struct p2p_config {
* @ctx: Callback context from cb_ctx
* @src: Source address of the message triggering this notification
* @dev_passwd_id: WPS Device Password ID
+ * @go_intent: Peer's GO Intent
*
* This callback is used to notify that a P2P Device is requesting
* group owner negotiation with us, but we do not have all the
@@ -713,7 +714,8 @@ struct p2p_config {
* PIN or PBC button press. This information can be provided with a
* call to p2p_connect().
*/
- void (*go_neg_req_rx)(void *ctx, const u8 *src, u16 dev_passwd_id);
+ void (*go_neg_req_rx)(void *ctx, const u8 *src, u16 dev_passwd_id,
+ u8 go_intent);
/**
* go_neg_completed - Notification of GO Negotiation results
diff --git a/src/p2p/p2p_go_neg.c b/src/p2p/p2p_go_neg.c
index 98abf9d..63837eb 100644
--- a/src/p2p/p2p_go_neg.c
+++ b/src/p2p/p2p_go_neg.c
@@ -668,7 +668,9 @@ void p2p_process_go_neg_req(struct p2p_data *p2p, const u8 *sa,
MAC2STR(sa));
status = P2P_SC_FAIL_INFO_CURRENTLY_UNAVAILABLE;
p2p->cfg->go_neg_req_rx(p2p->cfg->cb_ctx, sa,
- msg.dev_password_id);
+ msg.dev_password_id,
+ msg.go_intent ? (*msg.go_intent >> 1) :
+ 0);
} else if (p2p->go_neg_peer && p2p->go_neg_peer != dev) {
p2p_dbg(p2p, "Already in Group Formation with another peer");
status = P2P_SC_FAIL_UNABLE_TO_ACCOMMODATE;
diff --git a/wpa_supplicant/dbus/dbus_new.c b/wpa_supplicant/dbus/dbus_new.c
index 6382d77..a97860b 100644
--- a/wpa_supplicant/dbus/dbus_new.c
+++ b/wpa_supplicant/dbus/dbus_new.c
@@ -1063,7 +1063,8 @@ error:
void wpas_dbus_signal_p2p_go_neg_req(struct wpa_supplicant *wpa_s,
- const u8 *src, u16 dev_passwd_id)
+ const u8 *src, u16 dev_passwd_id,
+ u8 go_intent)
{
DBusMessage *msg;
DBusMessageIter iter;
@@ -1097,7 +1098,9 @@ void wpas_dbus_signal_p2p_go_neg_req(struct wpa_supplicant *wpa_s,
if (!dbus_message_iter_append_basic(&iter, DBUS_TYPE_OBJECT_PATH,
&path) ||
!dbus_message_iter_append_basic(&iter, DBUS_TYPE_UINT16,
- &dev_passwd_id))
+ &dev_passwd_id) ||
+ !dbus_message_iter_append_basic(&iter, DBUS_TYPE_BYTE,
+ &go_intent))
wpa_printf(MSG_ERROR, "dbus: Failed to construct signal");
else
dbus_connection_send(iface->con, msg, NULL);
@@ -3123,6 +3126,7 @@ static const struct wpa_dbus_signal_desc wpas_dbus_interface_signals[] = {
{
{ "path", "o", ARG_OUT },
{ "dev_passwd_id", "i", ARG_OUT },
+ { "device_go_intent", "y", ARG_OUT },
END_ARGS
}
},
diff --git a/wpa_supplicant/dbus/dbus_new.h b/wpa_supplicant/dbus/dbus_new.h
index 31db8d4..86bcdbf 100644
--- a/wpa_supplicant/dbus/dbus_new.h
+++ b/wpa_supplicant/dbus/dbus_new.h
@@ -185,7 +185,8 @@ void wpas_dbus_signal_p2p_provision_discovery(struct wpa_supplicant *wpa_s,
u16 config_methods,
unsigned int generated_pin);
void wpas_dbus_signal_p2p_go_neg_req(struct wpa_supplicant *wpa_s,
- const u8 *src, u16 dev_passwd_id);
+ const u8 *src, u16 dev_passwd_id,
+ u8 go_intent);
void wpas_dbus_signal_p2p_group_started(struct wpa_supplicant *wpa_s,
const struct wpa_ssid *ssid,
int client, int network_id);
@@ -378,10 +379,10 @@ wpas_dbus_signal_p2p_provision_discovery(struct wpa_supplicant *wpa_s,
{
}
-static inline void wpas_dbus_signal_p2p_go_neg_req(
- struct wpa_supplicant *wpa_s,
- const u8 *src,
- u16 dev_passwd_id)
+static inline void wpas_dbus_signal_p2p_go_neg_req(struct wpa_supplicant *wpa_s,
+ const u8 *src,
+ u16 dev_passwd_id,
+ u8 go_intent)
{
}
diff --git a/wpa_supplicant/notify.c b/wpa_supplicant/notify.c
index 4df9d90..5cef646 100644
--- a/wpa_supplicant/notify.c
+++ b/wpa_supplicant/notify.c
@@ -561,9 +561,9 @@ void wpas_notify_p2p_group_removed(struct wpa_supplicant *wpa_s,
void wpas_notify_p2p_go_neg_req(struct wpa_supplicant *wpa_s,
- const u8 *src, u16 dev_passwd_id)
+ const u8 *src, u16 dev_passwd_id, u8 go_intent)
{
- wpas_dbus_signal_p2p_go_neg_req(wpa_s, src, dev_passwd_id);
+ wpas_dbus_signal_p2p_go_neg_req(wpa_s, src, dev_passwd_id, go_intent);
}
diff --git a/wpa_supplicant/notify.h b/wpa_supplicant/notify.h
index 1025ca8..b02a442 100644
--- a/wpa_supplicant/notify.h
+++ b/wpa_supplicant/notify.h
@@ -93,7 +93,7 @@ void wpas_notify_p2p_group_removed(struct wpa_supplicant *wpa_s,
const struct wpa_ssid *ssid,
const char *role);
void wpas_notify_p2p_go_neg_req(struct wpa_supplicant *wpa_s,
- const u8 *src, u16 dev_passwd_id);
+ const u8 *src, u16 dev_passwd_id, u8 go_intent);
void wpas_notify_p2p_go_neg_completed(struct wpa_supplicant *wpa_s,
struct p2p_go_neg_results *res);
void wpas_notify_p2p_invitation_result(struct wpa_supplicant *wpa_s,
diff --git a/wpa_supplicant/p2p_supplicant.c b/wpa_supplicant/p2p_supplicant.c
index e7a4db3..5c8a3b2 100644
--- a/wpa_supplicant/p2p_supplicant.c
+++ b/wpa_supplicant/p2p_supplicant.c
@@ -2146,13 +2146,15 @@ static void wpas_go_neg_completed(void *ctx, struct p2p_go_neg_results *res)
}
-static void wpas_go_neg_req_rx(void *ctx, const u8 *src, u16 dev_passwd_id)
+static void wpas_go_neg_req_rx(void *ctx, const u8 *src, u16 dev_passwd_id,
+ u8 go_intent)
{
struct wpa_supplicant *wpa_s = ctx;
wpa_msg_global(wpa_s, MSG_INFO, P2P_EVENT_GO_NEG_REQUEST MACSTR
- " dev_passwd_id=%u", MAC2STR(src), dev_passwd_id);
+ " dev_passwd_id=%u go_intent=%u", MAC2STR(src),
+ dev_passwd_id, go_intent);
- wpas_notify_p2p_go_neg_req(wpa_s, src, dev_passwd_id);
+ wpas_notify_p2p_go_neg_req(wpa_s, src, dev_passwd_id, go_intent);
}