diff options
Diffstat (limited to 'wpa_supplicant/hidl/1.0/misc_utils.h')
-rw-r--r-- | wpa_supplicant/hidl/1.0/misc_utils.h | 72 |
1 files changed, 72 insertions, 0 deletions
diff --git a/wpa_supplicant/hidl/1.0/misc_utils.h b/wpa_supplicant/hidl/1.0/misc_utils.h new file mode 100644 index 00000000..354ec328 --- /dev/null +++ b/wpa_supplicant/hidl/1.0/misc_utils.h @@ -0,0 +1,72 @@ +/* + * hidl interface for wpa_supplicant daemon + * Copyright (c) 2004-2016, Jouni Malinen <j@w1.fi> + * Copyright (c) 2004-2016, Roshan Pius <rpius@google.com> + * + * This software may be distributed under the terms of the BSD license. + * See README for more details. + */ + +#ifndef MISC_UTILS_H_ +#define MISC_UTILS_H_ + +extern "C" { +#include "wpabuf.h" +} + +namespace { +constexpr size_t kWpsPinNumDigits = 8; +// Custom deleter for wpabuf. +void freeWpaBuf(wpabuf *ptr) { wpabuf_free(ptr); } +} // namespace + +namespace android { +namespace hardware { +namespace wifi { +namespace supplicant { +namespace V1_0 { +namespace implementation { +namespace misc_utils { +using wpabuf_unique_ptr = std::unique_ptr<wpabuf, void (*)(wpabuf *)>; + +// Creates a unique_ptr for wpabuf ptr with a custom deleter. +inline wpabuf_unique_ptr createWpaBufUniquePtr(struct wpabuf *raw_ptr) +{ + return {raw_ptr, freeWpaBuf}; +} + +// Creates a wpabuf ptr with a custom deleter copying the data from the provided +// vector. +inline wpabuf_unique_ptr convertVectorToWpaBuf(const std::vector<uint8_t> &data) +{ + return createWpaBufUniquePtr( + wpabuf_alloc_copy(data.data(), data.size())); +} + +// Copies the provided wpabuf contents to a std::vector. +inline std::vector<uint8_t> convertWpaBufToVector(const struct wpabuf *buf) +{ + if (buf) { + return std::vector<uint8_t>( + wpabuf_head_u8(buf), wpabuf_head_u8(buf) + wpabuf_len(buf)); + } else { + return std::vector<uint8_t>(); + } +} + +// Returns a string holding the wps pin. +inline std::string convertWpsPinToString(int pin) +{ + char pin_str[kWpsPinNumDigits + 1]; + snprintf(pin_str, sizeof(pin_str), "%08d", pin); + return pin_str; +} + +} // namespace misc_utils +} // namespace implementation +} // namespace V1_0 +} // namespace supplicant +} // namespace wifi +} // namespace hardware +} // namespace android +#endif // MISC_UTILS_H_ |