aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKiwon Park <kiwonp@google.com>2023-08-30 01:40:40 +0000
committerAutomerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>2023-08-30 01:40:40 +0000
commit45075276889ccdf199b676e6d7eee83e2a5e288a (patch)
tree62ac0f7564a7981742b8bbc3aadc6e647fe1f84a
parentff6843f0f96d19754125eecb1c390dc596b808d2 (diff)
parentfbf271e5cf8c51e49824a7fa4afa8c7bc1701a2e (diff)
downloadservice_entitlement-45075276889ccdf199b676e6d7eee83e2a5e288a.tar.gz
Fix crash when Build.MANUFACTURER is longer than 4 and cap terminal_model and terminal_sw_version according to GSMA RCC.14. am: 8bfb8ba163 am: 43b99228d8 am: 62c2e9f888 am: c0d3bf480a am: fbf271e5cf
Original change: https://android-review.googlesource.com/c/platform/frameworks/libs/service_entitlement/+/2727181 Change-Id: I48ff7a5b426a0028aa780e7d84728f4e74efd8f7 Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
-rw-r--r--java/com/android/libraries/entitlement/ServiceEntitlementRequest.java2
-rw-r--r--java/com/android/libraries/entitlement/eapaka/EapAkaApi.java73
-rw-r--r--tests/src/com/android/libraries/entitlement/eapaka/EapAkaApiTest.java74
3 files changed, 124 insertions, 25 deletions
diff --git a/java/com/android/libraries/entitlement/ServiceEntitlementRequest.java b/java/com/android/libraries/entitlement/ServiceEntitlementRequest.java
index 6398d4e..291384d 100644
--- a/java/com/android/libraries/entitlement/ServiceEntitlementRequest.java
+++ b/java/com/android/libraries/entitlement/ServiceEntitlementRequest.java
@@ -130,7 +130,7 @@ public abstract class ServiceEntitlementRequest {
.setAuthenticationToken("")
.setTemporaryToken("")
.setTerminalId("")
- .setTerminalVendor(Build.MANUFACTURER.substring(0, 4))
+ .setTerminalVendor(Build.MANUFACTURER)
.setTerminalModel(Build.MODEL)
.setTerminalSoftwareVersion(VERSION.RELEASE)
.setAppName("")
diff --git a/java/com/android/libraries/entitlement/eapaka/EapAkaApi.java b/java/com/android/libraries/entitlement/eapaka/EapAkaApi.java
index 24f7686..4590211 100644
--- a/java/com/android/libraries/entitlement/eapaka/EapAkaApi.java
+++ b/java/com/android/libraries/entitlement/eapaka/EapAkaApi.java
@@ -105,6 +105,11 @@ public class EapAkaApi {
// at most three times.
private static final int MAX_EAP_AKA_ATTEMPTS = 3;
+ // Max TERMINAL_* string length according to GSMA RCC.14 section 2.4
+ private static final int MAX_TERMINAL_VENDOR_LENGTH = 4;
+ private static final int MAX_TERMINAL_MODEL_LENGTH = 10;
+ private static final int MAX_TERMINAL_SOFTWARE_VERSION_LENGTH = 20;
+
private final Context mContext;
private final int mSimSubscriptionId;
private final HttpClient mHttpClient;
@@ -330,18 +335,13 @@ public class EapAkaApi {
.addRequestProperty(HttpHeaders.COOKIE, cookies)
.setTimeoutInSec(carrierConfig.timeoutInSec())
.setNetwork(carrierConfig.network());
- if (!TextUtils.isEmpty(carrierConfig.clientTs43())
- && !TextUtils.isEmpty(terminalVendor)
- && !TextUtils.isEmpty(terminalModel)
- && !TextUtils.isEmpty(terminalSoftwareVersion)) {
String userAgent =
- String.format(
- "PRD-TS43 term-%s/%s %s/%s OS-Android/%s",
+ getUserAgent(
+ carrierConfig.clientTs43(),
terminalVendor,
terminalModel,
- carrierConfig.clientTs43(),
- mAppVersion,
terminalSoftwareVersion);
+ if (!TextUtils.isEmpty(userAgent)) {
builder.addRequestProperty(HttpHeaders.USER_AGENT, userAgent);
}
return mHttpClient.request(builder.build());
@@ -506,9 +506,17 @@ public class EapAkaApi {
urlBuilder
// Identity and Authentication parameters
- .appendQueryParameter(TERMINAL_VENDOR, request.terminalVendor())
- .appendQueryParameter(TERMINAL_MODEL, request.terminalModel())
- .appendQueryParameter(TERMIAL_SW_VERSION, request.terminalSoftwareVersion())
+ .appendQueryParameter(
+ TERMINAL_VENDOR,
+ trimString(request.terminalVendor(), MAX_TERMINAL_VENDOR_LENGTH))
+ .appendQueryParameter(
+ TERMINAL_MODEL,
+ trimString(request.terminalModel(), MAX_TERMINAL_MODEL_LENGTH))
+ .appendQueryParameter(
+ TERMIAL_SW_VERSION,
+ trimString(
+ request.terminalSoftwareVersion(),
+ MAX_TERMINAL_SOFTWARE_VERSION_LENGTH))
// General Service parameters
.appendQueryParameter(VERS, Integer.toString(request.configurationVersion()))
.appendQueryParameter(ENTITLEMENT_VERSION, request.entitlementVersion());
@@ -582,18 +590,13 @@ public class EapAkaApi {
.addRequestProperty(HttpHeaders.ACCEPT, contentType)
.setTimeoutInSec(carrierConfig.timeoutInSec())
.setNetwork(carrierConfig.network());
- if (!TextUtils.isEmpty(carrierConfig.clientTs43())
- && !TextUtils.isEmpty(terminalVendor)
- && !TextUtils.isEmpty(terminalModel)
- && !TextUtils.isEmpty(terminalSoftwareVersion)) {
- String userAgent =
- String.format(
- "PRD-TS43 term-%s/%s %s/%s OS-Android/%s",
- terminalVendor,
- terminalModel,
- carrierConfig.clientTs43(),
- mAppVersion,
- terminalSoftwareVersion);
+ String userAgent =
+ getUserAgent(
+ carrierConfig.clientTs43(),
+ terminalVendor,
+ terminalModel,
+ terminalSoftwareVersion);
+ if (!TextUtils.isEmpty(userAgent)) {
builder.addRequestProperty(HttpHeaders.USER_AGENT, userAgent);
}
return mHttpClient.request(builder.build());
@@ -651,6 +654,30 @@ public class EapAkaApi {
return "";
}
+ private String getUserAgent(
+ String clientTs43,
+ String terminalVendor,
+ String terminalModel,
+ String terminalSoftwareVersion) {
+ if (!TextUtils.isEmpty(clientTs43)
+ && !TextUtils.isEmpty(terminalVendor)
+ && !TextUtils.isEmpty(terminalModel)
+ && !TextUtils.isEmpty(terminalSoftwareVersion)) {
+ return String.format(
+ "PRD-TS43 term-%s/%s %s/%s OS-Android/%s",
+ trimString(terminalVendor, MAX_TERMINAL_VENDOR_LENGTH),
+ trimString(terminalModel, MAX_TERMINAL_MODEL_LENGTH),
+ clientTs43,
+ mAppVersion,
+ trimString(terminalSoftwareVersion, MAX_TERMINAL_SOFTWARE_VERSION_LENGTH));
+ }
+ return "";
+ }
+
+ private String trimString(String s, int maxLength) {
+ return s.substring(0, Math.min(s.length(), maxLength));
+ }
+
/**
* Returns the IMSI EAP value. The resulting realm part of the Root NAI in 3GPP TS 23.003 clause
* 19.3.2 will be in the form:
diff --git a/tests/src/com/android/libraries/entitlement/eapaka/EapAkaApiTest.java b/tests/src/com/android/libraries/entitlement/eapaka/EapAkaApiTest.java
index caddfb2..6dafef3 100644
--- a/tests/src/com/android/libraries/entitlement/eapaka/EapAkaApiTest.java
+++ b/tests/src/com/android/libraries/entitlement/eapaka/EapAkaApiTest.java
@@ -102,9 +102,15 @@ public class EapAkaApiTest {
private static final String ACCEPT_CONTENT_TYPE_JSON_AND_XML =
"application/vnd.gsma.eap-relay.v1.0+json, text/vnd.wap.connectivity-xml";
private static final String BYPASS_EAP_AKA_RESPONSE = "abc";
- private static final String VENDOR = "VENDOR";
+ private static final String VENDOR = "VEND";
private static final String MODEL = "MODEL";
private static final String SW_VERSION = "SW_VERSION";
+ private static final String LONG_VENDOR = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa";
+ private static final String LONG_MODEL = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa";
+ private static final String LONG_SW_VERSION = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa";
+ private static final String LONG_VENDOR_TRIMMED = "aaaa";
+ private static final String LONG_MODEL_TRIMMED = "aaaaaaaaaa";
+ private static final String LONG_SW_VERSION_TRIMMED = "aaaaaaaaaaaaaaaaaaaa";
private static final String APP_VERSION = "APP_VERSION";
@Rule public final MockitoRule rule = MockitoJUnit.rule();
@@ -622,6 +628,36 @@ public class EapAkaApiTest {
}
@Test
+ public void queryEntitlementStatus_terminalVendorModelSWVersionTrimmed() throws Exception {
+ CarrierConfig carrierConfig =
+ CarrierConfig.builder()
+ .setServerUrl(TEST_URL)
+ .setClientTs43(CarrierConfig.CLIENT_TS_43_IMS_ENTITLEMENT)
+ .build();
+ ServiceEntitlementRequest request =
+ ServiceEntitlementRequest.builder()
+ .setAuthenticationToken(TOKEN)
+ .setTerminalVendor(LONG_VENDOR)
+ .setTerminalModel(LONG_MODEL)
+ .setTerminalSoftwareVersion(LONG_SW_VERSION)
+ .build();
+
+ mEapAkaApi.queryEntitlementStatus(
+ ImmutableList.of(ServiceEntitlement.APP_VOWIFI), carrierConfig, request);
+
+ verify(mMockHttpClient).request(mHttpRequestCaptor.capture());
+ String urlParams =
+ String.format(
+ "terminal_vendor=%s&terminal_model=%s&terminal_sw_version=%s",
+ LONG_VENDOR_TRIMMED, LONG_MODEL_TRIMMED, LONG_SW_VERSION_TRIMMED);
+ assertThat(
+ mHttpRequestCaptor
+ .getValue()
+ .url())
+ .contains(urlParams);
+ }
+
+ @Test
public void queryEntitlementStatus_userAgentSet() throws Exception {
CarrierConfig carrierConfig =
CarrierConfig.builder()
@@ -706,6 +742,42 @@ public class EapAkaApiTest {
}
@Test
+ public void queryEntitlementStatus_userAgentTrimmed() throws Exception {
+ CarrierConfig carrierConfig =
+ CarrierConfig.builder()
+ .setServerUrl(TEST_URL)
+ .setClientTs43(CarrierConfig.CLIENT_TS_43_IMS_ENTITLEMENT)
+ .build();
+ ServiceEntitlementRequest request =
+ ServiceEntitlementRequest.builder()
+ .setAuthenticationToken(TOKEN)
+ .setTerminalVendor(LONG_VENDOR)
+ .setTerminalModel(LONG_MODEL)
+ .setTerminalSoftwareVersion(LONG_SW_VERSION)
+ .build();
+
+ mEapAkaApi.queryEntitlementStatus(
+ ImmutableList.of(ServiceEntitlement.APP_VOWIFI), carrierConfig, request);
+
+ verify(mMockHttpClient).request(mHttpRequestCaptor.capture());
+ String userAgent =
+ String.format(
+ "PRD-TS43 term-%s/%s %s/%s OS-Android/%s",
+ LONG_VENDOR_TRIMMED,
+ LONG_MODEL_TRIMMED,
+ carrierConfig.clientTs43(),
+ APP_VERSION,
+ LONG_SW_VERSION_TRIMMED);
+ assertThat(
+ mHttpRequestCaptor
+ .getValue()
+ .requestProperties()
+ .get(HttpHeaders.USER_AGENT)
+ .get(0))
+ .isEqualTo(userAgent);
+ }
+
+ @Test
public void performEsimOdsaOperation_noAuthenticationToken_returnsResult() throws Exception {
when(mMockTelephonyManagerForSubId.getIccAuthentication(
TelephonyManager.APPTYPE_USIM,