/* * hidl interface for wpa_supplicant daemon * Copyright (c) 2004-2016, Jouni Malinen * Copyright (c) 2004-2016, Roshan Pius * * 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; // 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 &data) { return createWpaBufUniquePtr( wpabuf_alloc_copy(data.data(), data.size())); } // Copies the provided wpabuf contents to a std::vector. inline std::vector convertWpaBufToVector(const struct wpabuf *buf) { if (buf) { return std::vector( wpabuf_head_u8(buf), wpabuf_head_u8(buf) + wpabuf_len(buf)); } else { return std::vector(); } } // 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_