Merge cherrypicks of ['googleplex-android-review.googlesource.com/26540886', 'googleplex-android-review.googlesource.com/26572135'] into 24Q2-release.
Change-Id: Ieca04072f0f335169aeb00467fcef1cd14028fc1
diff --git a/wpa_supplicant/aidl/aidl_manager.cpp b/wpa_supplicant/aidl/aidl_manager.cpp
index 0daa8ef..707299d 100644
--- a/wpa_supplicant/aidl/aidl_manager.cpp
+++ b/wpa_supplicant/aidl/aidl_manager.cpp
@@ -16,6 +16,7 @@
#include <android/binder_process.h>
#include <android/binder_manager.h>
#include <aidl/android/hardware/wifi/supplicant/IpVersion.h>
+#include <cutils/properties.h>
extern "C" {
#include "scan.h"
@@ -38,6 +39,7 @@
constexpr size_t kUmtsAutnLenBytes = EAP_AKA_AUTN_LEN;
const std::vector<uint8_t> kZeroBssid = {0, 0, 0, 0, 0, 0};
int32_t aidl_service_version = 0;
+int32_t aidl_client_version = 0;
using aidl::android::hardware::wifi::supplicant::GsmRand;
using aidl::android::hardware::wifi::supplicant::KeyMgmtMask;
@@ -85,6 +87,10 @@
return 1;
}
callback_list.push_back(callback);
+ if (aidl_client_version == 0) {
+ callback->getInterfaceVersion(&aidl_client_version);
+ wpa_printf(MSG_INFO, "AIDL client version: %d", aidl_client_version);
+ }
return 0;
}
@@ -414,6 +420,11 @@
return expected_version <= aidl_service_version;
}
+int32_t AidlManager::isAidlClientVersionAtLeast(int32_t expected_version)
+{
+ return expected_version <= aidl_client_version;
+}
+
int AidlManager::registerAidlService(struct wpa_global *global)
{
// Create the main aidl service object and register it.
@@ -1345,7 +1356,7 @@
std::back_inserter(aidl_vendor_elems));
}
- if (isAidlServiceVersionAtLeast(3)) {
+ if (isAidlServiceVersionAtLeast(3) && isAidlClientVersionAtLeast(3)) {
P2pDeviceFoundEventParams params;
params.srcAddress = macAddrToArray(addr);
params.p2pDeviceAddress = macAddrToArray(info->p2p_device_addr);
@@ -1363,6 +1374,7 @@
&ISupplicantP2pIfaceCallback::onDeviceFoundWithParams,
std::placeholders::_1, params));
} else {
+ // Use legacy callback if service or client interface version < 3
const std::function<
ndk::ScopedAStatus(std::shared_ptr<ISupplicantP2pIfaceCallback>)>
func = std::bind(
@@ -1607,7 +1619,7 @@
}
bool aidl_is_request = (request == 1);
- if (isAidlServiceVersionAtLeast(3)) {
+ if (isAidlServiceVersionAtLeast(3) && isAidlClientVersionAtLeast(3)) {
P2pProvisionDiscoveryCompletedEventParams params;
params.p2pDeviceAddress = macAddrToArray(dev_addr);
params.isRequest = aidl_is_request;
@@ -1623,7 +1635,7 @@
&ISupplicantP2pIfaceCallback::onProvisionDiscoveryCompletedEvent,
std::placeholders::_1, params));
} else {
- // Use legacy callback if interface version < 3
+ // Use legacy callback if service or client interface version < 3
callWithEachP2pIfaceCallback(
misc_utils::charBufToString(wpa_s->ifname),
std::bind(
@@ -1663,7 +1675,7 @@
if (!wpa_s)
return;
- if (isAidlServiceVersionAtLeast(3)) {
+ if (isAidlServiceVersionAtLeast(3) && isAidlClientVersionAtLeast(3)) {
P2pPeerClientJoinedEventParams params;
params.groupInterfaceName = misc_utils::charBufToString(wpa_group_s->ifname);
params.clientInterfaceAddress = macAddrToArray(sta);
@@ -1680,7 +1692,7 @@
&ISupplicantP2pIfaceCallback::onPeerClientJoined,
std::placeholders::_1, params));
} else {
- // Use legacy callback if interface version < 3
+ // Use legacy callback if service or client interface version < 3
callWithEachP2pIfaceCallback(
misc_utils::charBufToString(wpa_s->ifname),
std::bind(
@@ -1699,7 +1711,7 @@
if (!wpa_s)
return;
- if (isAidlServiceVersionAtLeast(3)) {
+ if (isAidlServiceVersionAtLeast(3) && isAidlClientVersionAtLeast(3)) {
P2pPeerClientDisconnectedEventParams params;
params.groupInterfaceName = misc_utils::charBufToString(wpa_group_s->ifname);
params.clientInterfaceAddress = macAddrToArray(sta);
@@ -1712,7 +1724,7 @@
&ISupplicantP2pIfaceCallback::onPeerClientDisconnected,
std::placeholders::_1, params));
} else {
- // Use legacy callback if interface version < 3
+ // Use legacy callback if service or client interface version < 3
callWithEachP2pIfaceCallback(
misc_utils::charBufToString(wpa_s->ifname),
std::bind(
diff --git a/wpa_supplicant/aidl/aidl_manager.h b/wpa_supplicant/aidl/aidl_manager.h
index b11a760..b3dfa82 100644
--- a/wpa_supplicant/aidl/aidl_manager.h
+++ b/wpa_supplicant/aidl/aidl_manager.h
@@ -172,6 +172,7 @@
// Methods called from aidl objects.
int32_t isAidlServiceVersionAtLeast(int32_t expected_version);
+ int32_t isAidlClientVersionAtLeast(int32_t expected_version);
void notifyExtRadioWorkStart(struct wpa_supplicant *wpa_s, uint32_t id);
void notifyExtRadioWorkTimeout(
struct wpa_supplicant *wpa_s, uint32_t id);