aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGabriel Biren <gbiren@google.com>2023-05-12 19:04:13 +0000
committerAutomerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>2023-05-12 19:04:13 +0000
commite91ad4eb3d7cb2e446bbcea754beb7cbee3a4e18 (patch)
treecd0f11b260f01ca6fd307cad1a43980a3cd66a7c
parentdfa517168eff2c439e838294fe482f5fc3a43c1f (diff)
parent18a02d8c7de05ee5fb20d190f97053a27b31220e (diff)
downloadwpa_supplicant_8-e91ad4eb3d7cb2e446bbcea754beb7cbee3a4e18.tar.gz
Merge "Add callback path from wpa_supplicant core to AidlManager::listAliases." into udc-dev am: 18a02d8c7d
Original change: https://googleplex-android-review.googlesource.com/c/platform/external/wpa_supplicant_8/+/23180746 Change-Id: Id4553639880490067ae2f038445bccc40bedefac Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
-rw-r--r--wpa_supplicant/aidl/aidl.cpp11
-rw-r--r--wpa_supplicant/aidl/aidl.h5
-rw-r--r--wpa_supplicant/aidl/aidl_manager.cpp35
-rw-r--r--wpa_supplicant/aidl/aidl_manager.h1
-rw-r--r--wpa_supplicant/notify.c4
-rw-r--r--wpa_supplicant/notify.h1
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);