From f8a51fe4c103c70bc9b611cf0d999b2472c437ce Mon Sep 17 00:00:00 2001 From: Andrew Zaborowski Date: Mon, 8 Jul 2019 18:59:33 +0200 Subject: [PATCH] wscutil: Make the primary device type parser public The P2P IE parsers can take advantage of this function --- src/wscutil.c | 30 +++++++++++++++++------------- src/wscutil.h | 3 +++ 2 files changed, 20 insertions(+), 13 deletions(-) diff --git a/src/wscutil.c b/src/wscutil.c index 15b5a407..d3a1cc91 100644 --- a/src/wscutil.c +++ b/src/wscutil.c @@ -423,26 +423,30 @@ static bool extract_public_key(struct wsc_attr_iter *iter, void *data) return true; } -static bool extract_primary_device_type(struct wsc_attr_iter *iter, void *data) +int wsc_parse_primary_device_type(const uint8_t *pdu, size_t len, + struct wsc_primary_device_type *out) { - struct wsc_primary_device_type *out = data; - const uint8_t *p; uint16_t category; - if (wsc_attr_iter_get_length(iter) != 8) - return false; - - p = wsc_attr_iter_get_data(iter); - category = l_get_be16(p); + if (len != 8) + return -EINVAL; + category = l_get_be16(pdu); if (category > 12 && category != 255) - return false; + return -EINVAL; out->category = category; - memcpy(out->oui, p + 2, 3); - out->oui_type = p[5]; - out->subcategory = l_get_be16(p + 6); - return true; + memcpy(out->oui, pdu + 2, 3); + out->oui_type = pdu[5]; + out->subcategory = l_get_be16(pdu + 6); + return 0; +} + +static bool extract_primary_device_type(struct wsc_attr_iter *iter, void *data) +{ + return wsc_parse_primary_device_type(wsc_attr_iter_get_data(iter), + wsc_attr_iter_get_length(iter), + data) == 0; } static bool extract_request_type(struct wsc_attr_iter *iter, void *data) diff --git a/src/wscutil.h b/src/wscutil.h index 23ba9f48..0e8eafca 100644 --- a/src/wscutil.h +++ b/src/wscutil.h @@ -544,6 +544,9 @@ struct wsc_done { uint8_t registrar_nonce[16]; }; +int wsc_parse_primary_device_type(const uint8_t *pdu, size_t len, + struct wsc_primary_device_type *out); + int wsc_parse_credential(const uint8_t *pdu, uint32_t len, struct wsc_credential *out);