All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH 3/3] wsc: Accept extra IEs in wsc_enrollee_new
@ 2020-01-13 13:36 Andrew Zaborowski
  0 siblings, 0 replies; 2+ messages in thread
From: Andrew Zaborowski @ 2020-01-13 13:36 UTC (permalink / raw)
  To: iwd

[-- Attachment #1: Type: text/plain, Size: 3117 bytes --]

---
 src/wsc.c | 23 ++++++++++++++---------
 src/wsc.h |  1 +
 2 files changed, 15 insertions(+), 9 deletions(-)

diff --git a/src/wsc.c b/src/wsc.c
index 74fe8aa8..56018825 100644
--- a/src/wsc.c
+++ b/src/wsc.c
@@ -320,7 +320,8 @@ static inline enum wsc_rf_band freq_to_rf_band(uint32_t freq)
 }
 
 static int wsc_enrollee_connect(struct wsc_enrollee *wsce, struct scan_bss *bss,
-					const char *pin)
+					const char *pin, struct iovec *ies,
+					unsigned int ies_num)
 {
 	struct handshake_state *hs;
 	struct l_settings *settings = l_settings_new();
@@ -328,7 +329,7 @@ static int wsc_enrollee_connect(struct wsc_enrollee *wsce, struct scan_bss *bss,
 	struct wsc_association_request request;
 	uint8_t *pdu;
 	size_t pdu_len;
-	struct iovec ie_iov;
+	struct iovec ie_iov[1 + ies_num];
 
 	hs = netdev_handshake_state_new(wsce->netdev);
 
@@ -372,19 +373,22 @@ static int wsc_enrollee_connect(struct wsc_enrollee *wsce, struct scan_bss *bss,
 		goto error;
 	}
 
-	ie_iov.iov_base = ie_tlv_encapsulate_wsc_payload(pdu, pdu_len,
-							&ie_iov.iov_len);
+	ie_iov[0].iov_base = ie_tlv_encapsulate_wsc_payload(pdu, pdu_len,
+							&ie_iov[0].iov_len);
 	l_free(pdu);
 
-	if (!ie_iov.iov_base) {
+	if (!ie_iov[0].iov_base) {
 		r = -ENOMEM;
 		goto error;
 	}
 
-	r = netdev_connect(wsce->netdev, bss, hs, &ie_iov, 1,
+	if (ies_num)
+		memcpy(ie_iov + 1, ies, sizeof(struct iovec) * ies_num);
+
+	r = netdev_connect(wsce->netdev, bss, hs, ie_iov, 1 + ies_num,
 				wsc_enrollee_netdev_event,
 				wsc_enrollee_connect_cb, wsce);
-	l_free(ie_iov.iov_base);
+	l_free(ie_iov[0].iov_base);
 
 	if (r == 0)
 		return 0;
@@ -397,6 +401,7 @@ error:
 struct wsc_enrollee *wsc_enrollee_new(struct netdev *netdev,
 					struct scan_bss *target,
 					const char *pin,
+					struct iovec *ies, unsigned int ies_num,
 					wsc_done_cb_t done_cb, void *user_data)
 {
 	struct wsc_enrollee *wsce;
@@ -406,7 +411,7 @@ struct wsc_enrollee *wsc_enrollee_new(struct netdev *netdev,
 	wsce->done_cb = done_cb;
 	wsce->done_data = user_data;
 
-	if (wsc_enrollee_connect(wsce, target, pin) == 0)
+	if (wsc_enrollee_connect(wsce, target, pin, ies, ies_num) == 0)
 		return wsce;
 
 	wsc_enrollee_free(wsce);
@@ -577,7 +582,7 @@ static void wsc_connect(struct wsc_station_dbus *wsc)
 		l_dbus_message_get_arguments(wsc->super.pending_connect, "s",
 						&pin);
 
-	wsc->enrollee = wsc_enrollee_new(wsc->netdev, wsc->target, pin,
+	wsc->enrollee = wsc_enrollee_new(wsc->netdev, wsc->target, pin, NULL, 0,
 						wsc_dbus_done_cb, wsc);
 	if (wsc->enrollee)
 		return;
diff --git a/src/wsc.h b/src/wsc.h
index 3cb7ab18..570aa7cb 100644
--- a/src/wsc.h
+++ b/src/wsc.h
@@ -39,6 +39,7 @@ typedef void (*wsc_done_cb_t)(int err, struct wsc_credentials_info *creds,
 struct wsc_enrollee *wsc_enrollee_new(struct netdev *netdev,
 					struct scan_bss *target,
 					const char *pin,
+					struct iovec *ies, unsigned int ies_num,
 					wsc_done_cb_t done_cb, void *user_data);
 void wsc_enrollee_cancel(struct wsc_enrollee *wsce);
 
-- 
2.20.1

^ permalink raw reply related	[flat|nested] 2+ messages in thread

* [PATCH 3/3] wsc: Accept extra IEs in wsc_enrollee_new
  2020-01-16  4:29 [PATCH 1/3] wsc: Split out enrollee state machine to own object Andrew Zaborowski
@ 2020-01-16  4:29 ` Andrew Zaborowski
  0 siblings, 0 replies; 2+ messages in thread
From: Andrew Zaborowski @ 2020-01-16  4:29 UTC (permalink / raw)
  To: iwd

[-- Attachment #1: Type: text/plain, Size: 3185 bytes --]

---
 src/wsc.c | 23 ++++++++++++++---------
 src/wsc.h |  1 +
 2 files changed, 15 insertions(+), 9 deletions(-)

diff --git a/src/wsc.c b/src/wsc.c
index 4f079977..8f367c7c 100644
--- a/src/wsc.c
+++ b/src/wsc.c
@@ -324,7 +324,8 @@ static inline enum wsc_rf_band freq_to_rf_band(uint32_t freq)
 }
 
 static int wsc_enrollee_connect(struct wsc_enrollee *wsce, struct scan_bss *bss,
-					const char *pin)
+					const char *pin, struct iovec *ies,
+					unsigned int ies_num)
 {
 	struct handshake_state *hs;
 	struct l_settings *settings = l_settings_new();
@@ -332,7 +333,7 @@ static int wsc_enrollee_connect(struct wsc_enrollee *wsce, struct scan_bss *bss,
 	struct wsc_association_request request;
 	uint8_t *pdu;
 	size_t pdu_len;
-	struct iovec ie_iov;
+	struct iovec ie_iov[1 + ies_num];
 
 	hs = netdev_handshake_state_new(wsce->netdev);
 
@@ -376,19 +377,22 @@ static int wsc_enrollee_connect(struct wsc_enrollee *wsce, struct scan_bss *bss,
 		goto error;
 	}
 
-	ie_iov.iov_base = ie_tlv_encapsulate_wsc_payload(pdu, pdu_len,
-							&ie_iov.iov_len);
+	ie_iov[0].iov_base = ie_tlv_encapsulate_wsc_payload(pdu, pdu_len,
+							&ie_iov[0].iov_len);
 	l_free(pdu);
 
-	if (!ie_iov.iov_base) {
+	if (!ie_iov[0].iov_base) {
 		r = -ENOMEM;
 		goto error;
 	}
 
-	r = netdev_connect(wsce->netdev, bss, hs, &ie_iov, 1,
+	if (ies_num)
+		memcpy(ie_iov + 1, ies, sizeof(struct iovec) * ies_num);
+
+	r = netdev_connect(wsce->netdev, bss, hs, ie_iov, 1 + ies_num,
 				wsc_enrollee_netdev_event,
 				wsc_enrollee_connect_cb, wsce);
-	l_free(ie_iov.iov_base);
+	l_free(ie_iov[0].iov_base);
 
 	if (r == 0)
 		return 0;
@@ -401,6 +405,7 @@ error:
 struct wsc_enrollee *wsc_enrollee_new(struct netdev *netdev,
 					struct scan_bss *target,
 					const char *pin,
+					struct iovec *ies, unsigned int ies_num,
 					wsc_done_cb_t done_cb, void *user_data)
 {
 	struct wsc_enrollee *wsce;
@@ -410,7 +415,7 @@ struct wsc_enrollee *wsc_enrollee_new(struct netdev *netdev,
 	wsce->done_cb = done_cb;
 	wsce->done_data = user_data;
 
-	if (wsc_enrollee_connect(wsce, target, pin) == 0)
+	if (wsc_enrollee_connect(wsce, target, pin, ies, ies_num) == 0)
 		return wsce;
 
 	wsc_enrollee_free(wsce);
@@ -617,7 +622,7 @@ static void wsc_connect(struct wsc_station_dbus *wsc)
 		l_dbus_message_get_arguments(wsc->super.pending_connect, "s",
 						&pin);
 
-	wsc->enrollee = wsc_enrollee_new(wsc->netdev, wsc->target, pin,
+	wsc->enrollee = wsc_enrollee_new(wsc->netdev, wsc->target, pin, NULL, 0,
 						wsc_dbus_done_cb, wsc);
 	if (wsc->enrollee)
 		return;
diff --git a/src/wsc.h b/src/wsc.h
index fdf677b6..6596bb00 100644
--- a/src/wsc.h
+++ b/src/wsc.h
@@ -39,6 +39,7 @@ typedef void (*wsc_done_cb_t)(int err, struct wsc_credentials_info *creds,
 struct wsc_enrollee *wsc_enrollee_new(struct netdev *netdev,
 					struct scan_bss *target,
 					const char *pin,
+					struct iovec *ies, unsigned int ies_num,
 					wsc_done_cb_t done_cb, void *user_data);
 void wsc_enrollee_cancel(struct wsc_enrollee *wsce, bool defer_cb);
 void wsc_enrollee_destroy(struct wsc_enrollee *wsce);
-- 
2.20.1

^ permalink raw reply related	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2020-01-16  4:29 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-01-13 13:36 [PATCH 3/3] wsc: Accept extra IEs in wsc_enrollee_new Andrew Zaborowski
2020-01-16  4:29 [PATCH 1/3] wsc: Split out enrollee state machine to own object Andrew Zaborowski
2020-01-16  4:29 ` [PATCH 3/3] wsc: Accept extra IEs in wsc_enrollee_new Andrew Zaborowski

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.