Add RIL interface for setNullCipherAndIntegrityEnabled
Bug: b/237529943
Test: m
Change-Id: I53403d9f710ff22fa4ceba679c770e808525e9cc
diff --git a/src/java/com/android/internal/telephony/CommandsInterface.java b/src/java/com/android/internal/telephony/CommandsInterface.java
index 2c6ff08..bfcda07 100644
--- a/src/java/com/android/internal/telephony/CommandsInterface.java
+++ b/src/java/com/android/internal/telephony/CommandsInterface.java
@@ -2930,4 +2930,14 @@
* @param bitsPerSecond The bit rate requested by the opponent UE.
*/
default void sendAnbrQuery(int mediaType, int direction, int bitsPerSecond, Message result) {}
+
+ /**
+ * Set the UE's ability to accept/reject null ciphered and/or null integrity-protected
+ * connections.
+ *
+ * @param result Callback message containing the success or failure status.
+ * @param enabled true to allow null ciphered and/or null integrity-protected connections,
+ * false to disallow.
+ */
+ default void setNullCipherAndIntegrityEnabled(Message result, boolean enabled) {}
}
diff --git a/src/java/com/android/internal/telephony/NetworkResponse.java b/src/java/com/android/internal/telephony/NetworkResponse.java
index 370335a..6d532b2 100644
--- a/src/java/com/android/internal/telephony/NetworkResponse.java
+++ b/src/java/com/android/internal/telephony/NetworkResponse.java
@@ -484,4 +484,12 @@
public int getInterfaceVersion() {
return IRadioNetworkResponse.VERSION;
}
+
+ /**
+ * @param responseInfo Response info struct containing response type, serial no. and error
+ */
+ public void setNullCipherAndIntegrityEnabledResponse(RadioResponseInfo responseInfo) {
+ RadioResponse.responseVoid(RIL.NETWORK_SERVICE, mRil, responseInfo);
+ }
+
}
diff --git a/src/java/com/android/internal/telephony/Phone.java b/src/java/com/android/internal/telephony/Phone.java
index e4502ea..ec912d3 100644
--- a/src/java/com/android/internal/telephony/Phone.java
+++ b/src/java/com/android/internal/telephony/Phone.java
@@ -4967,6 +4967,18 @@
}
/**
+ * Set the UE's ability to accept/reject null ciphered and/or null integrity-protected
+ * connections.
+ *
+ * @param result Callback message.
+ * @param enabled true to allow null ciphered and/or null integrity-protected connections,
+ * false to disallow.
+ */
+ public void setNullCipherAndIntegrityEnabled(@Nullable Message result, boolean enabled) {
+ mCi.setNullCipherAndIntegrityEnabled(result, enabled);
+ }
+
+ /**
* @return Telephony tester instance.
*/
public @Nullable TelephonyTester getTelephonyTester() {
diff --git a/src/java/com/android/internal/telephony/RIL.java b/src/java/com/android/internal/telephony/RIL.java
index 69fffe2..539e969 100644
--- a/src/java/com/android/internal/telephony/RIL.java
+++ b/src/java/com/android/internal/telephony/RIL.java
@@ -5442,6 +5442,42 @@
}
}
+ /**
+ * Set if null ciphering / null integrity modes are permitted.
+ *
+ * @param result Callback message containing the success or failure status.
+ * @param enabled true if null ciphering / null integrity modes are permitted, false otherwise
+ */
+ @Override
+ public void setNullCipherAndIntegrityEnabled(Message result, boolean enabled) {
+ RadioNetworkProxy networkProxy = getRadioServiceProxy(RadioNetworkProxy.class, result);
+ if (networkProxy.isEmpty()) return;
+ if (mRadioVersion.greaterOrEqual(RADIO_HAL_VERSION_2_1)) {
+ RILRequest rr = obtainRequest(RIL_REQUEST_SET_NULL_CIPHER_AND_INTEGRITY_ENABLED, result,
+ mRILDefaultWorkSource);
+
+ if (RILJ_LOGD) {
+ riljLog(rr.serialString() + "> " + RILUtils.requestToString(rr.mRequest));
+ }
+
+ try {
+ networkProxy.setNullCipherAndIntegrityEnabled(rr.mSerial, enabled);
+ } catch (RemoteException | RuntimeException e) {
+ handleRadioProxyExceptionForRR(
+ NETWORK_SERVICE, "setNullCipherAndIntegrityEnabled", e);
+ }
+ } else {
+ if (RILJ_LOGD) {
+ Rlog.d(RILJ_LOG_TAG, "setNullCipherAndIntegrityEnabled: REQUEST_NOT_SUPPORTED");
+ }
+ if (result != null) {
+ AsyncResult.forMessage(result, null,
+ CommandException.fromRilErrno(REQUEST_NOT_SUPPORTED));
+ result.sendToTarget();
+ }
+ }
+ }
+
//***** Private Methods
/**
* This is a helper function to be called when an indication callback is called for any radio
diff --git a/src/java/com/android/internal/telephony/RILUtils.java b/src/java/com/android/internal/telephony/RILUtils.java
index c05b669..d016db8 100644
--- a/src/java/com/android/internal/telephony/RILUtils.java
+++ b/src/java/com/android/internal/telephony/RILUtils.java
@@ -166,6 +166,7 @@
import static com.android.internal.telephony.RILConstants.RIL_REQUEST_SET_MUTE;
import static com.android.internal.telephony.RILConstants.RIL_REQUEST_SET_NETWORK_SELECTION_AUTOMATIC;
import static com.android.internal.telephony.RILConstants.RIL_REQUEST_SET_NETWORK_SELECTION_MANUAL;
+import static com.android.internal.telephony.RILConstants.RIL_REQUEST_SET_NULL_CIPHER_AND_INTEGRITY_ENABLED;
import static com.android.internal.telephony.RILConstants.RIL_REQUEST_SET_PREFERRED_DATA_MODEM;
import static com.android.internal.telephony.RILConstants.RIL_REQUEST_SET_PREFERRED_NETWORK_TYPE;
import static com.android.internal.telephony.RILConstants.RIL_REQUEST_SET_RADIO_CAPABILITY;
@@ -5177,6 +5178,8 @@
return "SEND_ANBR_QUERY";
case RIL_REQUEST_TRIGGER_EPS_FALLBACK:
return "TRIGGER_EPS_FALLBACK";
+ case RIL_REQUEST_SET_NULL_CIPHER_AND_INTEGRITY_ENABLED:
+ return "SET_NULL_CIPHER_AND_INTEGRITY_ENABLED";
default:
return "<unknown request " + request + ">";
}
diff --git a/src/java/com/android/internal/telephony/RadioNetworkProxy.java b/src/java/com/android/internal/telephony/RadioNetworkProxy.java
index 5e1cc60..c8855cd 100644
--- a/src/java/com/android/internal/telephony/RadioNetworkProxy.java
+++ b/src/java/com/android/internal/telephony/RadioNetworkProxy.java
@@ -916,4 +916,20 @@
}
// Only supported on AIDL.
}
+
+ /**
+ * Set if null ciphering / null integrity is permitted.
+ *
+ * @param serial Serial number of the request.
+ * @param enabled true if null modes are allowed, false otherwise
+ * @throws RemoteException
+ */
+ public void setNullCipherAndIntegrityEnabled(int serial,
+ boolean enabled) throws RemoteException {
+ if (isEmpty()) return;
+ if (isAidl()) {
+ mNetworkProxy.setNullCipherAndIntegrityEnabled(serial, enabled);
+ }
+ // Only supported on AIDL.
+ }
}