Merge "Use API TcpKeepalivePacketData in ClientModeImpl"
diff --git a/service/java/com/android/server/wifi/ClientModeImpl.java b/service/java/com/android/server/wifi/ClientModeImpl.java
index daa9866..520999e 100644
--- a/service/java/com/android/server/wifi/ClientModeImpl.java
+++ b/service/java/com/android/server/wifi/ClientModeImpl.java
@@ -16,6 +16,7 @@
package com.android.server.wifi;
+import static android.net.util.KeepalivePacketDataUtil.parseTcpKeepalivePacketData;
import static android.net.wifi.WifiConfiguration.NetworkSelectionStatus.DISABLED_NO_INTERNET_PERMANENT;
import static android.net.wifi.WifiConfiguration.NetworkSelectionStatus.DISABLED_NO_INTERNET_TEMPORARY;
import static android.net.wifi.WifiManager.WIFI_FEATURE_FILS_SHA256;
@@ -58,6 +59,7 @@
import android.net.SocketKeepalive;
import android.net.StaticIpConfiguration;
import android.net.TcpKeepalivePacketData;
+import android.net.TcpKeepalivePacketDataParcelable;
import android.net.Uri;
import android.net.ip.IIpClient;
import android.net.ip.IpClientCallbacks;
@@ -112,6 +114,7 @@
import com.android.internal.util.Protocol;
import com.android.internal.util.State;
import com.android.internal.util.StateMachine;
+import com.android.modules.utils.build.SdkLevel;
import com.android.net.module.util.Inet4AddressUtils;
import com.android.server.wifi.MboOceController.BtmFrameData;
import com.android.server.wifi.WifiCarrierInfoManager.SimAuthRequestData;
@@ -5041,10 +5044,23 @@
final NattKeepalivePacketData pkt =
(NattKeepalivePacketData) message.obj;
mIpClient.addKeepalivePacketFilter(slot, pkt);
- } else if (message.obj instanceof TcpKeepalivePacketData) {
- final TcpKeepalivePacketData pkt =
- (TcpKeepalivePacketData) message.obj;
- mIpClient.addKeepalivePacketFilter(slot, pkt);
+ } else if (SdkLevel.isAtLeastS()) {
+ if (message.obj instanceof TcpKeepalivePacketData) {
+ final TcpKeepalivePacketData pkt =
+ (TcpKeepalivePacketData) message.obj;
+ mIpClient.addKeepalivePacketFilter(slot, pkt);
+ }
+ // Otherwise unsupported keepalive data class: skip
+ } else {
+ // Before S, non-NattKeepalivePacketData KeepalivePacketData would be
+ // the not-yet-SystemApi android.net.TcpKeepalivePacketData.
+ // Attempt to parse TcpKeepalivePacketDataParcelable from the
+ // KeepalivePacketData superclass.
+ final TcpKeepalivePacketDataParcelable p =
+ parseTcpKeepalivePacketData((KeepalivePacketData) message.obj);
+ if (p != null) {
+ mIpClient.addKeepalivePacketFilter(slot, p);
+ }
}
}
break;