Home | History | Annotate | Download | only in 1.2
      1 /*
      2  * hidl interface for wpa_supplicant daemon
      3  * Copyright (c) 2004-2016, Jouni Malinen <j (at) w1.fi>
      4  * Copyright (c) 2004-2016, Roshan Pius <rpius (at) 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.
     21 void 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.
     34 inline 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.
     41 inline 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.
     48 inline 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.
     59 inline 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