diff options
author | Gabriel Biren <gbiren@google.com> | 2023-05-12 18:24:44 +0000 |
---|---|---|
committer | Android (Google) Code Review <android-gerrit@google.com> | 2023-05-12 18:24:44 +0000 |
commit | 18a02d8c7de05ee5fb20d190f97053a27b31220e (patch) | |
tree | cd0f11b260f01ca6fd307cad1a43980a3cd66a7c /wpa_supplicant | |
parent | e2fad41387f69ed12ad120a39b604fa1d8d07bf5 (diff) | |
parent | 1629ad8e9f385b52999f80f1a434247a1c488ecd (diff) | |
download | wpa_supplicant_8-18a02d8c7de05ee5fb20d190f97053a27b31220e.tar.gz |
Merge "Add callback path from wpa_supplicant core to AidlManager::listAliases." into udc-dev
Diffstat (limited to 'wpa_supplicant')
-rw-r--r-- | wpa_supplicant/aidl/aidl.cpp | 11 | ||||
-rw-r--r-- | wpa_supplicant/aidl/aidl.h | 5 | ||||
-rw-r--r-- | wpa_supplicant/aidl/aidl_manager.cpp | 35 | ||||
-rw-r--r-- | wpa_supplicant/aidl/aidl_manager.h | 1 | ||||
-rw-r--r-- | wpa_supplicant/notify.c | 4 | ||||
-rw-r--r-- | wpa_supplicant/notify.h | 1 |
6 files changed, 57 insertions, 0 deletions
diff --git a/wpa_supplicant/aidl/aidl.cpp b/wpa_supplicant/aidl/aidl.cpp index 614d66d3..6a22a2a6 100644 --- a/wpa_supplicant/aidl/aidl.cpp +++ b/wpa_supplicant/aidl/aidl.cpp @@ -1074,6 +1074,17 @@ ssize_t wpas_aidl_get_certificate(const char* alias, uint8_t** value) return aidl_manager->getCertificate(alias, value); } +ssize_t wpas_aidl_list_aliases(const char *prefix, char ***aliases) +{ + AidlManager *aidl_manager = AidlManager::getInstance(); + if (!aidl_manager) + return -1; + + wpa_printf(MSG_INFO, "Requesting aliases from framework"); + + return aidl_manager->listAliases(prefix, aliases); +} + void wpas_aidl_notify_qos_policy_scs_response(struct wpa_supplicant *wpa_s, unsigned int count, int **scs_resp) { diff --git a/wpa_supplicant/aidl/aidl.h b/wpa_supplicant/aidl/aidl.h index f4afc7ef..f9b374ea 100644 --- a/wpa_supplicant/aidl/aidl.h +++ b/wpa_supplicant/aidl/aidl.h @@ -146,6 +146,7 @@ extern "C" void wpas_aidl_notify_qos_policy_request(struct wpa_supplicant *wpa_s, struct dscp_policy_data *policies, int num_policies); ssize_t wpas_aidl_get_certificate(const char* alias, uint8_t** value); + ssize_t wpas_aidl_list_aliases(const char *prefix, char ***aliases); void wpas_aidl_notify_qos_policy_scs_response(struct wpa_supplicant *wpa_s, unsigned int count, int **scs_resp); #else // CONFIG_CTRL_IFACE_AIDL @@ -334,6 +335,10 @@ static ssize_t wpas_aidl_get_certificate(const char* alias, uint8_t** value) { return -1; } +static ssize_t wpas_aidl_list_aliases(const char *prefix, char ***aliases) +{ + return -1; +} static void wpas_aidl_notify_qos_policy_scs_response(struct wpa_supplicant *wpa_s, unsigned int count, int **scs_resp) {} #endif // CONFIG_CTRL_IFACE_AIDL diff --git a/wpa_supplicant/aidl/aidl_manager.cpp b/wpa_supplicant/aidl/aidl_manager.cpp index 89b5432b..8c061a0c 100644 --- a/wpa_supplicant/aidl/aidl_manager.cpp +++ b/wpa_supplicant/aidl/aidl_manager.cpp @@ -2607,6 +2607,41 @@ ssize_t AidlManager::getCertificate(const char* alias, uint8_t** value) { return -1; } +ssize_t AidlManager::listAliases(const char *prefix, char ***aliases) { + if (prefix == nullptr || aliases == nullptr) { + wpa_printf(MSG_ERROR, "Null pointer argument was passed to listAliases"); + return -1; + } + + if (auto results = + certificate_utils::listAliases(prefix, non_standard_cert_callback_)) { + int count = results->size(); + *aliases = (char **) os_malloc(sizeof(char *) * count); + if (*aliases == nullptr) { + wpa_printf(MSG_ERROR, "listAliases: os_malloc alias array error"); + return -1; + } + os_memset(*aliases, 0, sizeof(char *) * count); + + int index = 0; + for (auto it = results->begin(); it != results->end(); ++it) { + int alias_len = it->length(); + char *alias = (char *) os_malloc(alias_len + 1); + if (alias == nullptr) { + wpa_printf(MSG_ERROR, "listAliases: os_malloc alias string error"); + for (int i = 0; i < index; ++i) os_free((*aliases)[i]); + os_free(*aliases); + return -1; + } + os_memcpy(alias, it->data(), alias_len + 1); + (*aliases)[index] = alias; + index++; + } + return count; + } + return -1; +} + QosPolicyScsResponseStatusCode getQosPolicyScsResponseStatusCode(int scsResponseCode) { QosPolicyScsResponseStatusCode status = QosPolicyScsResponseStatusCode::TIMEOUT; diff --git a/wpa_supplicant/aidl/aidl_manager.h b/wpa_supplicant/aidl/aidl_manager.h index 2173a0d7..fcea1f72 100644 --- a/wpa_supplicant/aidl/aidl_manager.h +++ b/wpa_supplicant/aidl/aidl_manager.h @@ -164,6 +164,7 @@ public: struct dscp_policy_data *policies, int num_policies); ssize_t getCertificate(const char* alias, uint8_t** value); + ssize_t listAliases(const char *prefix, char ***aliases); void notifyQosPolicyScsResponse(struct wpa_supplicant *wpa_s, unsigned int count, int **scs_resp); diff --git a/wpa_supplicant/notify.c b/wpa_supplicant/notify.c index cd272e39..943897df 100644 --- a/wpa_supplicant/notify.c +++ b/wpa_supplicant/notify.c @@ -1372,6 +1372,10 @@ ssize_t wpas_get_certificate(const char *alias, uint8_t** value) return wpas_aidl_get_certificate(alias, value); } +ssize_t wpas_list_aliases(const char *prefix, char ***aliases) +{ + return wpas_aidl_list_aliases(prefix, aliases); +} void wpas_notify_signal_change(struct wpa_supplicant *wpa_s) { diff --git a/wpa_supplicant/notify.h b/wpa_supplicant/notify.h index 84ef8982..bc2bd64a 100644 --- a/wpa_supplicant/notify.h +++ b/wpa_supplicant/notify.h @@ -223,6 +223,7 @@ void wpas_notify_qos_policy_request(struct wpa_supplicant *wpa_s, struct dscp_policy_data *policies, int num_policies); void wpas_notify_frequency_changed(struct wpa_supplicant *wpa_s, int frequency); ssize_t wpas_get_certificate(const char *alias, uint8_t** value); +ssize_t wpas_list_aliases(const char *prefix, char ***aliases); void wpas_notify_pmk_cache_added(struct wpa_supplicant *wpa_s, struct rsn_pmksa_cache_entry *entry); void wpas_notify_signal_change(struct wpa_supplicant *wpa_s); |