16ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius/* 26ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius * hidl interface for wpa_supplicant daemon 36ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius * Copyright (c) 2004-2016, Jouni Malinen <j@w1.fi> 46ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius * Copyright (c) 2004-2016, Roshan Pius <rpius@google.com> 56ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius * 66ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius * This software may be distributed under the terms of the BSD license. 76ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius * See README for more details. 86ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius */ 96ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius 106ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius#ifndef MISC_UTILS_H_ 116ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius#define MISC_UTILS_H_ 126ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius 136ca7b54de22e93958b79bae0a4428107e08cb778Roshan Piusextern "C" { 146ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius#include "wpabuf.h" 156ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius} 166ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius 176ca7b54de22e93958b79bae0a4428107e08cb778Roshan Piusnamespace { 186ca7b54de22e93958b79bae0a4428107e08cb778Roshan Piusconstexpr size_t kWpsPinNumDigits = 8; 196ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius// Custom deleter for wpabuf. 206ca7b54de22e93958b79bae0a4428107e08cb778Roshan Piusvoid freeWpaBuf(wpabuf *ptr) { wpabuf_free(ptr); } 216ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius} // namespace 226ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius 236ca7b54de22e93958b79bae0a4428107e08cb778Roshan Piusnamespace android { 246ca7b54de22e93958b79bae0a4428107e08cb778Roshan Piusnamespace hardware { 256ca7b54de22e93958b79bae0a4428107e08cb778Roshan Piusnamespace wifi { 266ca7b54de22e93958b79bae0a4428107e08cb778Roshan Piusnamespace supplicant { 276ca7b54de22e93958b79bae0a4428107e08cb778Roshan Piusnamespace V1_1 { 286ca7b54de22e93958b79bae0a4428107e08cb778Roshan Piusnamespace implementation { 296ca7b54de22e93958b79bae0a4428107e08cb778Roshan Piusnamespace misc_utils { 306ca7b54de22e93958b79bae0a4428107e08cb778Roshan Piususing wpabuf_unique_ptr = std::unique_ptr<wpabuf, void (*)(wpabuf *)>; 316ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius 326ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius// Creates a unique_ptr for wpabuf ptr with a custom deleter. 336ca7b54de22e93958b79bae0a4428107e08cb778Roshan Piusinline wpabuf_unique_ptr createWpaBufUniquePtr(struct wpabuf *raw_ptr) 346ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius{ 356ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius return {raw_ptr, freeWpaBuf}; 366ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius} 376ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius 386ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius// Creates a wpabuf ptr with a custom deleter copying the data from the provided 396ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius// vector. 406ca7b54de22e93958b79bae0a4428107e08cb778Roshan Piusinline wpabuf_unique_ptr convertVectorToWpaBuf(const std::vector<uint8_t> &data) 416ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius{ 426ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius return createWpaBufUniquePtr( 436ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius wpabuf_alloc_copy(data.data(), data.size())); 446ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius} 456ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius 466ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius// Copies the provided wpabuf contents to a std::vector. 476ca7b54de22e93958b79bae0a4428107e08cb778Roshan Piusinline std::vector<uint8_t> convertWpaBufToVector(const struct wpabuf *buf) 486ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius{ 496ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius if (buf) { 506ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius return std::vector<uint8_t>( 516ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius wpabuf_head_u8(buf), wpabuf_head_u8(buf) + wpabuf_len(buf)); 526ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius } else { 536ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius return std::vector<uint8_t>(); 546ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius } 556ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius} 566ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius 576ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius// Returns a string holding the wps pin. 586ca7b54de22e93958b79bae0a4428107e08cb778Roshan Piusinline std::string convertWpsPinToString(int pin) 596ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius{ 606ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius char pin_str[kWpsPinNumDigits + 1]; 616ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius snprintf(pin_str, sizeof(pin_str), "%08d", pin); 626ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius return pin_str; 636ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius} 646ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius 656ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius} // namespace misc_utils 666ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius} // namespace implementation 676ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius} // namespace V1_1 686ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius} // namespace supplicant 696ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius} // namespace wifi 706ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius} // namespace hardware 716ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius} // namespace android 726ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius#endif // MISC_UTILS_H_ 73