1 /* 2 * hidl interface for wpa_supplicant daemon 3 * Copyright (c) 2004-2016, Jouni Malinen <j@w1.fi> 4 * Copyright (c) 2004-2016, Roshan Pius <rpius@google.com> 5 * 6 * This software may be distributed under the terms of the BSD license. 7 * See README for more details. 8 */ 9 10 #ifndef MISC_UTILS_H_ 11 #define MISC_UTILS_H_ 12 13 extern "C" 14 { 15 #include "wpabuf.h" 16 } 17 18 namespace { 19 constexpr size_t kWpsPinNumDigits = 8; 20 // Custom deleter for wpabuf. freeWpaBuf(wpabuf * ptr)21void freeWpaBuf(wpabuf *ptr) { wpabuf_free(ptr); } 22 } // namespace 23 24 namespace android { 25 namespace hardware { 26 namespace wifi { 27 namespace supplicant { 28 namespace V1_2 { 29 namespace implementation { 30 namespace misc_utils { 31 using wpabuf_unique_ptr = std::unique_ptr<wpabuf, void (*)(wpabuf *)>; 32 33 // Creates a unique_ptr for wpabuf ptr with a custom deleter. createWpaBufUniquePtr(struct wpabuf * raw_ptr)34inline wpabuf_unique_ptr createWpaBufUniquePtr(struct wpabuf *raw_ptr) 35 { 36 return {raw_ptr, freeWpaBuf}; 37 } 38 39 // Creates a wpabuf ptr with a custom deleter copying the data from the provided 40 // vector. convertVectorToWpaBuf(const std::vector<uint8_t> & data)41inline wpabuf_unique_ptr convertVectorToWpaBuf(const std::vector<uint8_t> &data) 42 { 43 return createWpaBufUniquePtr( 44 wpabuf_alloc_copy(data.data(), data.size())); 45 } 46 47 // Copies the provided wpabuf contents to a std::vector. convertWpaBufToVector(const struct wpabuf * buf)48inline std::vector<uint8_t> convertWpaBufToVector(const struct wpabuf *buf) 49 { 50 if (buf) { 51 return std::vector<uint8_t>( 52 wpabuf_head_u8(buf), wpabuf_head_u8(buf) + wpabuf_len(buf)); 53 } else { 54 return std::vector<uint8_t>(); 55 } 56 } 57 58 // Returns a string holding the wps pin. convertWpsPinToString(int pin)59inline std::string convertWpsPinToString(int pin) 60 { 61 char pin_str[kWpsPinNumDigits + 1]; 62 snprintf(pin_str, sizeof(pin_str), "%08d", pin); 63 return pin_str; 64 } 65 66 } // namespace misc_utils 67 } // namespace implementation 68 } // namespace V1_2 69 } // namespace supplicant 70 } // namespace wifi 71 } // namespace hardware 72 } // namespace android 73 #endif // MISC_UTILS_H_ 74