aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHyunho <hhshin@google.com>2022-11-02 01:10:09 +0000
committerHyunho <hhshin@google.com>2022-12-13 11:27:04 +0000
commit09c468419841562de2a67f25f82715b0b3e6e58d (patch)
treebf5036e98b340f21f4c52c2e1f3be870c4129159
parent31f3630abbcb1118e616906523d6adcd5c76773b (diff)
downloadims-09c468419841562de2a67f25f82715b0b3e6e58d.tar.gz
Changed the interface between the caller and the framework for subscriptions.
In order to more debug issues during the subscription, the caller should have access to the sip information. To access the sip information, using the created SipDetails class. The existing interface change to set the SipDetails class as a parameter. Bug: b/238192079 Test: cts CtsTelephonyTestCases:RcsUceAdapterTest Test: atest UceControllerTest SubscribeCoordinatorTest SubscribeRequestTest UceRequestManagerTest Change-Id: Iadb98971b7b12911d079bc4a9c99f2cd7e7ee78e
-rw-r--r--src/java/com/android/ims/rcs/uce/UceController.java12
-rw-r--r--src/java/com/android/ims/rcs/uce/eab/EabBulkCapabilityUpdater.java5
-rw-r--r--src/java/com/android/ims/rcs/uce/request/CapabilityRequestResponse.java34
-rw-r--r--src/java/com/android/ims/rcs/uce/request/OptionsRequestCoordinator.java4
-rw-r--r--src/java/com/android/ims/rcs/uce/request/SubscribeRequest.java32
-rw-r--r--src/java/com/android/ims/rcs/uce/request/SubscribeRequestCoordinator.java39
-rw-r--r--src/java/com/android/ims/rcs/uce/request/UceRequestCoordinator.java51
-rw-r--r--src/java/com/android/ims/rcs/uce/request/UceRequestManager.java8
-rw-r--r--tests/src/com/android/ims/rcs/uce/UceControllerTest.java8
-rw-r--r--tests/src/com/android/ims/rcs/uce/request/SubscribeCoordinatorTest.java45
-rw-r--r--tests/src/com/android/ims/rcs/uce/request/SubscribeRequestTest.java27
-rw-r--r--tests/src/com/android/ims/rcs/uce/request/UceRequestManagerTest.java9
12 files changed, 191 insertions, 83 deletions
diff --git a/src/java/com/android/ims/rcs/uce/UceController.java b/src/java/com/android/ims/rcs/uce/UceController.java
index 429b5518..aeab0611 100644
--- a/src/java/com/android/ims/rcs/uce/UceController.java
+++ b/src/java/com/android/ims/rcs/uce/UceController.java
@@ -635,14 +635,14 @@ public class UceController {
if (uriList == null || uriList.isEmpty() || c == null) {
logw("requestCapabilities: parameter is empty");
if (c != null) {
- c.onError(RcsUceAdapter.ERROR_GENERIC_FAILURE, 0L);
+ c.onError(RcsUceAdapter.ERROR_GENERIC_FAILURE, 0L, null);
}
return;
}
if (isUnavailable()) {
logw("requestCapabilities: controller is unavailable");
- c.onError(RcsUceAdapter.ERROR_GENERIC_FAILURE, 0L);
+ c.onError(RcsUceAdapter.ERROR_GENERIC_FAILURE, 0L, null);
return;
}
@@ -655,7 +655,7 @@ public class UceController {
long retryAfterMillis = deviceStateResult.getRequestRetryAfterMillis();
logw("requestCapabilities: The device is disallowed, deviceState= " + deviceState +
", errorCode=" + errorCode + ", retryAfterMillis=" + retryAfterMillis);
- c.onError(errorCode, retryAfterMillis);
+ c.onError(errorCode, retryAfterMillis, null);
return;
}
@@ -674,14 +674,14 @@ public class UceController {
if (uri == null || c == null) {
logw("requestAvailability: parameter is empty");
if (c != null) {
- c.onError(RcsUceAdapter.ERROR_GENERIC_FAILURE, 0L);
+ c.onError(RcsUceAdapter.ERROR_GENERIC_FAILURE, 0L, null);
}
return;
}
if (isUnavailable()) {
logw("requestAvailability: controller is unavailable");
- c.onError(RcsUceAdapter.ERROR_GENERIC_FAILURE, 0L);
+ c.onError(RcsUceAdapter.ERROR_GENERIC_FAILURE, 0L, null);
return;
}
@@ -694,7 +694,7 @@ public class UceController {
long retryAfterMillis = deviceStateResult.getRequestRetryAfterMillis();
logw("requestAvailability: The device is disallowed, deviceState= " + deviceState +
", errorCode=" + errorCode + ", retryAfterMillis=" + retryAfterMillis);
- c.onError(errorCode, retryAfterMillis);
+ c.onError(errorCode, retryAfterMillis, null);
return;
}
diff --git a/src/java/com/android/ims/rcs/uce/eab/EabBulkCapabilityUpdater.java b/src/java/com/android/ims/rcs/uce/eab/EabBulkCapabilityUpdater.java
index b4406fdd..738a4fc8 100644
--- a/src/java/com/android/ims/rcs/uce/eab/EabBulkCapabilityUpdater.java
+++ b/src/java/com/android/ims/rcs/uce/eab/EabBulkCapabilityUpdater.java
@@ -37,6 +37,7 @@ import android.telephony.CarrierConfigManager;
import android.telephony.ims.ImsManager;
import android.telephony.ims.ImsRcsManager;
import android.telephony.ims.RcsContactUceCapability;
+import android.telephony.ims.SipDetails;
import android.telephony.ims.aidl.IRcsUceControllerCallback;
import android.util.Log;
@@ -142,12 +143,12 @@ public final class EabBulkCapabilityUpdater {
}
@Override
- public void onComplete() {
+ public void onComplete(SipDetails details) {
Log.d(TAG, "onComplete");
}
@Override
- public void onError(int errorCode, long retryAfterMilliseconds) {
+ public void onError(int errorCode, long retryAfterMilliseconds, SipDetails details) {
Log.d(TAG, "Refresh capabilities failed. Error code: " + errorCode
+ ", retryAfterMilliseconds: " + retryAfterMilliseconds);
if (retryAfterMilliseconds != 0) {
diff --git a/src/java/com/android/ims/rcs/uce/request/CapabilityRequestResponse.java b/src/java/com/android/ims/rcs/uce/request/CapabilityRequestResponse.java
index 97371b8b..6da31301 100644
--- a/src/java/com/android/ims/rcs/uce/request/CapabilityRequestResponse.java
+++ b/src/java/com/android/ims/rcs/uce/request/CapabilityRequestResponse.java
@@ -16,11 +16,14 @@
package com.android.ims.rcs.uce.request;
+import android.annotation.NonNull;
+import android.annotation.Nullable;
import android.net.Uri;
import android.telephony.ims.RcsContactTerminatedReason;
import android.telephony.ims.RcsContactUceCapability;
import android.telephony.ims.RcsUceAdapter;
import android.telephony.ims.RcsUceAdapter.ErrorCode;
+import android.telephony.ims.SipDetails;
import android.telephony.ims.stub.RcsCapabilityExchangeImplBase;
import android.telephony.ims.stub.RcsCapabilityExchangeImplBase.CommandCode;
import android.text.TextUtils;
@@ -85,6 +88,9 @@ public class CapabilityRequestResponse {
// The collection to record whether the request contacts have received the capabilities updated.
private Map<Uri, Boolean> mContactCapsReceived;
+ // The SIP detail information of the network response.
+ private Optional<SipDetails> mSipDetails;
+
public CapabilityRequestResponse() {
mRequestInternalError = Optional.empty();
mCommandError = Optional.empty();
@@ -99,6 +105,7 @@ public class CapabilityRequestResponse {
mUpdatedCapabilityList = new ArrayList<>();
mRemoteCaps = new HashSet<>();
mContactCapsReceived = new HashMap<>();
+ mSipDetails = Optional.empty();
}
/**
@@ -169,12 +176,20 @@ public class CapabilityRequestResponse {
/**
* Set the network response of this request which is sent by the network.
*/
- public synchronized void setNetworkResponseCode(int sipCode, String reasonPhrase,
- int reasonHeaderCause, String reasonHeaderText) {
- mNetworkRespSipCode = Optional.of(sipCode);
- mReasonPhrase = Optional.ofNullable(reasonPhrase);
- mReasonHeaderCause = Optional.of(reasonHeaderCause);
- mReasonHeaderText = Optional.ofNullable(reasonHeaderText);
+ public synchronized void setSipDetails(@NonNull SipDetails details) {
+ setNetworkResponseCode(details.getResponseCode(), details.getResponsePhrase());
+ if (details.getReasonHeaderCause() != 0) {
+ mReasonHeaderCause = Optional.of(details.getReasonHeaderCause());
+ } else {
+ mReasonHeaderCause = Optional.empty();
+ }
+ if (TextUtils.isEmpty(details.getReasonHeaderText())) {
+ mReasonHeaderText = Optional.empty();
+ } else {
+ mReasonHeaderText = Optional.ofNullable(details.getReasonHeaderText());
+ }
+
+ mSipDetails = Optional.ofNullable(details);
}
// Get the sip code of the network response.
@@ -239,6 +254,13 @@ public class CapabilityRequestResponse {
}
/**
+ * Retrieve the SIP information which received from the network.
+ */
+ public Optional<SipDetails> getSipDetails() {
+ return mSipDetails;
+ }
+
+ /**
* Add the capabilities which are retrieved from the cache.
*/
public synchronized void addCachedCapabilities(List<RcsContactUceCapability> capabilityList) {
diff --git a/src/java/com/android/ims/rcs/uce/request/OptionsRequestCoordinator.java b/src/java/com/android/ims/rcs/uce/request/OptionsRequestCoordinator.java
index a2660931..b2db1788 100644
--- a/src/java/com/android/ims/rcs/uce/request/OptionsRequestCoordinator.java
+++ b/src/java/com/android/ims/rcs/uce/request/OptionsRequestCoordinator.java
@@ -315,7 +315,7 @@ public class OptionsRequestCoordinator extends UceRequestCoordinator {
private void triggerCompletedCallback() {
try {
logd("triggerCompletedCallback");
- mCapabilitiesCallback.onComplete();
+ mCapabilitiesCallback.onComplete(null);
} catch (RemoteException e) {
logw("triggerCompletedCallback exception: " + e);
} finally {
@@ -329,7 +329,7 @@ public class OptionsRequestCoordinator extends UceRequestCoordinator {
private void triggerErrorCallback(int errorCode, long retryAfterMillis) {
try {
logd("triggerErrorCallback: errorCode=" + errorCode + ", retry=" + retryAfterMillis);
- mCapabilitiesCallback.onError(errorCode, retryAfterMillis);
+ mCapabilitiesCallback.onError(errorCode, retryAfterMillis, null);
} catch (RemoteException e) {
logw("triggerErrorCallback exception: " + e);
} finally {
diff --git a/src/java/com/android/ims/rcs/uce/request/SubscribeRequest.java b/src/java/com/android/ims/rcs/uce/request/SubscribeRequest.java
index bee71771..a306eb42 100644
--- a/src/java/com/android/ims/rcs/uce/request/SubscribeRequest.java
+++ b/src/java/com/android/ims/rcs/uce/request/SubscribeRequest.java
@@ -17,11 +17,13 @@
package com.android.ims.rcs.uce.request;
import android.annotation.NonNull;
+import android.annotation.Nullable;
import android.net.Uri;
import android.os.RemoteException;
import android.telephony.ims.RcsContactTerminatedReason;
import android.telephony.ims.RcsContactUceCapability;
import android.telephony.ims.RcsUceAdapter;
+import android.telephony.ims.SipDetails;
import android.telephony.ims.aidl.ISubscribeResponseCallback;
import android.telephony.ims.stub.RcsCapabilityExchangeImplBase.CommandCode;
@@ -53,14 +55,8 @@ public class SubscribeRequest extends CapabilityRequest {
SubscribeRequest.this.onCommandError(code);
}
@Override
- public void onNetworkResponse(int code, String reason) {
- SubscribeRequest.this.onNetworkResponse(code, reason);
- }
- @Override
- public void onNetworkRespHeader(int code, String reasonPhrase,
- int reasonHeaderCause, String reasonHeaderText) {
- SubscribeRequest.this.onNetworkResponse(code, reasonPhrase, reasonHeaderCause,
- reasonHeaderText);
+ public void onNetworkResponse(@NonNull SipDetails details) {
+ SubscribeRequest.this.onNetworkResponse(details);
}
@Override
public void onNotifyCapabilitiesUpdate(List<String> pidfXmls) {
@@ -135,28 +131,14 @@ public class SubscribeRequest extends CapabilityRequest {
}
// Receive the network response callback which is triggered by ISubscribeResponseCallback.
- private void onNetworkResponse(int sipCode, String reason) {
- logd("onNetworkResponse: code=" + sipCode + ", reason=" + reason);
- if (mIsFinished) {
- logw("onNetworkResponse: request is already finished");
- return;
- }
- mRequestResponse.setNetworkResponseCode(sipCode, reason);
- mRequestManagerCallback.notifyNetworkResponse(mCoordinatorId, mTaskId);
- }
+ private void onNetworkResponse(@NonNull SipDetails details) {
+ logd("onNetworkResponse: sip details=" + details.toString());
- // Receive the network response callback which is triggered by ISubscribeResponseCallback.
- private void onNetworkResponse(int sipCode, String reasonPhrase,
- int reasonHeaderCause, String reasonHeaderText) {
- logd("onNetworkResponse: code=" + sipCode + ", reasonPhrase=" + reasonPhrase +
- ", reasonHeaderCause=" + reasonHeaderCause +
- ", reasonHeaderText=" + reasonHeaderText);
if (mIsFinished) {
logw("onNetworkResponse: request is already finished");
return;
}
- mRequestResponse.setNetworkResponseCode(sipCode, reasonPhrase, reasonHeaderCause,
- reasonHeaderText);
+ mRequestResponse.setSipDetails(details);
mRequestManagerCallback.notifyNetworkResponse(mCoordinatorId, mTaskId);
}
diff --git a/src/java/com/android/ims/rcs/uce/request/SubscribeRequestCoordinator.java b/src/java/com/android/ims/rcs/uce/request/SubscribeRequestCoordinator.java
index 2d1736c6..26143f94 100644
--- a/src/java/com/android/ims/rcs/uce/request/SubscribeRequestCoordinator.java
+++ b/src/java/com/android/ims/rcs/uce/request/SubscribeRequestCoordinator.java
@@ -18,10 +18,12 @@ package com.android.ims.rcs.uce.request;
import static android.telephony.ims.stub.RcsCapabilityExchangeImplBase.COMMAND_CODE_GENERIC_FAILURE;
+import android.annotation.Nullable;
import android.net.Uri;
import android.os.RemoteException;
import android.telephony.ims.RcsContactUceCapability;
import android.telephony.ims.RcsUceAdapter;
+import android.telephony.ims.SipDetails;
import android.telephony.ims.aidl.IRcsUceControllerCallback;
import com.android.ims.rcs.uce.UceDeviceState.DeviceStateResult;
@@ -111,21 +113,25 @@ public class SubscribeRequestCoordinator extends UceRequestCoordinator {
private static final RequestResultCreator sNetworkRespErrorCreator = (taskId, response,
requestMgrCallback) -> {
DeviceStateResult deviceState = requestMgrCallback.getDeviceState();
+ SipDetails details = response.getSipDetails().orElse(null);
if (deviceState.isRequestForbidden()) {
int errorCode = deviceState.getErrorCode().orElse(RcsUceAdapter.ERROR_FORBIDDEN);
long retryAfter = deviceState.getRequestRetryAfterMillis();
- return RequestResult.createFailedResult(taskId, errorCode, retryAfter);
+ return RequestResult.createFailedResult(taskId, errorCode, retryAfter, details);
} else {
int errorCode = CapabilityRequestResponse.getCapabilityErrorFromSipCode(response);
long retryAfter = response.getRetryAfterMillis();
- return RequestResult.createFailedResult(taskId, errorCode, retryAfter);
+ return RequestResult.createFailedResult(taskId, errorCode, retryAfter, details);
}
};
// The RequestResult creator of the network response is not 200 OK, however, we can to treat
// it as a successful result and finish the request
private static final RequestResultCreator sNetworkRespSuccessfulCreator = (taskId, response,
- requestMgrCallback) -> RequestResult.createSuccessResult(taskId);
+ requestMgrCallback) -> {
+ SipDetails detail = response.getSipDetails().orElse(null);
+ return RequestResult.createSuccessResult(taskId, detail);
+ };
// The RequestResult creator of the request terminated.
private static final RequestResultCreator sTerminatedCreator = (taskId, response,
@@ -134,6 +140,7 @@ public class SubscribeRequestCoordinator extends UceRequestCoordinator {
TerminatedResult terminatedResult = SubscriptionTerminatedHelper.getAnalysisResult(
response.getTerminatedReason(), response.getRetryAfterMillis(),
response.haveAllRequestCapsUpdatedBeenReceived());
+ SipDetails details = response.getSipDetails().orElse(null);
if (terminatedResult.getErrorCode().isPresent()) {
// If the terminated error code is present, it means that the request is failed.
int errorCode = terminatedResult.getErrorCode().get();
@@ -143,9 +150,9 @@ public class SubscribeRequestCoordinator extends UceRequestCoordinator {
// If the network response is failed or the retryAfter is not 0, this request is failed.
long retryAfterMillis = response.getRetryAfterMillis();
int errorCode = CapabilityRequestResponse.getCapabilityErrorFromSipCode(response);
- return RequestResult.createFailedResult(taskId, errorCode, retryAfterMillis);
+ return RequestResult.createFailedResult(taskId, errorCode, retryAfterMillis, details);
} else {
- return RequestResult.createSuccessResult(taskId);
+ return RequestResult.createSuccessResult(taskId, details);
}
};
@@ -540,14 +547,23 @@ public class SubscribeRequestCoordinator extends UceRequestCoordinator {
.max(Comparator.comparingLong(result ->
result.getRetryMillis().orElse(-1L)));
+ Optional<RequestResult> optDebugInfoResult = mFinishedRequests.values().stream()
+ .filter(result -> !result.getSipDetails().isEmpty())
+ .findFirst();
+
+ SipDetails details = null;
+ if (optDebugInfoResult.isPresent()) {
+ RequestResult result = optDebugInfoResult.get();
+ details = result.getSipDetails().orElse(null);
+ }
// Trigger the callback
if (optRequestResult.isPresent()) {
RequestResult result = optRequestResult.get();
int errorCode = result.getErrorCode().orElse(DEFAULT_ERROR_CODE);
long retryAfter = result.getRetryMillis().orElse(0L);
- triggerErrorCallback(errorCode, retryAfter);
+ triggerErrorCallback(errorCode, retryAfter, details);
} else {
- triggerCompletedCallback();
+ triggerCompletedCallback(details);
}
// Notify UceRequestManager to remove this instance from the collection.
@@ -574,10 +590,10 @@ public class SubscribeRequestCoordinator extends UceRequestCoordinator {
/**
* Trigger the onComplete callback to notify the request is completed.
*/
- private void triggerCompletedCallback() {
+ private void triggerCompletedCallback(@Nullable SipDetails details) {
try {
logd("triggerCompletedCallback");
- mCapabilitiesCallback.onComplete();
+ mCapabilitiesCallback.onComplete(details);
} catch (RemoteException e) {
logw("triggerCompletedCallback exception: " + e);
} finally {
@@ -588,10 +604,11 @@ public class SubscribeRequestCoordinator extends UceRequestCoordinator {
/**
* Trigger the onError callback to notify the request is failed.
*/
- private void triggerErrorCallback(int errorCode, long retryAfterMillis) {
+ private void triggerErrorCallback(int errorCode, long retryAfterMillis,
+ @Nullable SipDetails details) {
try {
logd("triggerErrorCallback: errorCode=" + errorCode + ", retry=" + retryAfterMillis);
- mCapabilitiesCallback.onError(errorCode, retryAfterMillis);
+ mCapabilitiesCallback.onError(errorCode, retryAfterMillis, details);
} catch (RemoteException e) {
logw("triggerErrorCallback exception: " + e);
} finally {
diff --git a/src/java/com/android/ims/rcs/uce/request/UceRequestCoordinator.java b/src/java/com/android/ims/rcs/uce/request/UceRequestCoordinator.java
index eea4fbe3..5d3a35da 100644
--- a/src/java/com/android/ims/rcs/uce/request/UceRequestCoordinator.java
+++ b/src/java/com/android/ims/rcs/uce/request/UceRequestCoordinator.java
@@ -20,6 +20,7 @@ import android.annotation.IntDef;
import android.annotation.NonNull;
import android.annotation.Nullable;
import android.telephony.ims.RcsUceAdapter;
+import android.telephony.ims.SipDetails;
import android.util.Log;
import com.android.ims.rcs.uce.request.UceRequestManager.RequestManagerCallback;
@@ -135,6 +136,15 @@ public abstract class UceRequestCoordinator {
}
/**
+ * Create a RequestResult that successfully completes the request.
+ * @param taskId the task id of the UceRequest
+ * @param details The SIP information related to this request.
+ */
+ public static RequestResult createSuccessResult(long taskId, @Nullable SipDetails details) {
+ return new RequestResult(taskId, details);
+ }
+
+ /**
* Create a RequestResult for the failed request.
* @param taskId the task id of the UceRequest
* @param errorCode the error code of the failed request
@@ -144,29 +154,66 @@ public abstract class UceRequestCoordinator {
return new RequestResult(taskId, errorCode, retry);
}
+ /**
+ * Create a RequestResult for the failed request.
+ * @param taskId the task id of the UceRequest
+ * @param errorCode the error code of the failed request
+ * @param retry When the request can be retried.
+ * @param details The SIP information related to this request.
+ */
+ public static RequestResult createFailedResult(long taskId, int errorCode, long retry,
+ @Nullable SipDetails details) {
+ return new RequestResult(taskId, errorCode, retry, details);
+ }
+
private final Long mTaskId;
private final Boolean mIsSuccess;
private final Optional<Integer> mErrorCode;
private final Optional<Long> mRetryMillis;
+ private final Optional<SipDetails> mSipDetails;
/**
* The private constructor for the successful request.
*/
private RequestResult(long taskId) {
+ this(taskId, null);
+ }
+
+ /**
+ * The private constructor for the successful request.
+ */
+ private RequestResult(long taskId, SipDetails details) {
mTaskId = taskId;
mIsSuccess = true;
mErrorCode = Optional.empty();
mRetryMillis = Optional.empty();
+ if (details == null) {
+ mSipDetails = Optional.empty();
+ } else {
+ mSipDetails = Optional.ofNullable(details);
+ }
}
/**
* The private constructor for the failed request.
*/
private RequestResult(long taskId, int errorCode, long retryMillis) {
+ this(taskId, errorCode, retryMillis, null);
+ }
+
+ /**
+ * The private constructor for the failed request.
+ */
+ private RequestResult(long taskId, int errorCode, long retryMillis, SipDetails details) {
mTaskId = taskId;
mIsSuccess = false;
mErrorCode = Optional.of(errorCode);
mRetryMillis = Optional.of(retryMillis);
+ if (details == null) {
+ mSipDetails = Optional.empty();
+ } else {
+ mSipDetails = Optional.ofNullable(details);
+ }
}
public long getTaskId() {
@@ -184,6 +231,10 @@ public abstract class UceRequestCoordinator {
public Optional<Long> getRetryMillis() {
return mRetryMillis;
}
+
+ public Optional<SipDetails> getSipDetails() {
+ return mSipDetails;
+ }
}
// The default capability error code.
diff --git a/src/java/com/android/ims/rcs/uce/request/UceRequestManager.java b/src/java/com/android/ims/rcs/uce/request/UceRequestManager.java
index 85908f0c..8ff39c1b 100644
--- a/src/java/com/android/ims/rcs/uce/request/UceRequestManager.java
+++ b/src/java/com/android/ims/rcs/uce/request/UceRequestManager.java
@@ -478,7 +478,7 @@ public class UceRequestManager {
public void sendCapabilityRequest(List<Uri> uriList, boolean skipFromCache,
IRcsUceControllerCallback callback) throws RemoteException {
if (mIsDestroyed) {
- callback.onError(RcsUceAdapter.ERROR_GENERIC_FAILURE, 0L);
+ callback.onError(RcsUceAdapter.ERROR_GENERIC_FAILURE, 0L, null);
return;
}
sendRequestInternal(UceRequest.REQUEST_TYPE_CAPABILITY, uriList, skipFromCache, callback);
@@ -490,7 +490,7 @@ public class UceRequestManager {
public void sendAvailabilityRequest(Uri uri, IRcsUceControllerCallback callback)
throws RemoteException {
if (mIsDestroyed) {
- callback.onError(RcsUceAdapter.ERROR_GENERIC_FAILURE, 0L);
+ callback.onError(RcsUceAdapter.ERROR_GENERIC_FAILURE, 0L, null);
return;
}
sendRequestInternal(UceRequest.REQUEST_TYPE_AVAILABILITY,
@@ -511,7 +511,7 @@ public class UceRequestManager {
}
if (nonCachedUris.isEmpty()) {
logd("sendRequestInternal: shortcut complete, sending success result");
- callback.onComplete();
+ callback.onComplete(null);
return;
}
}
@@ -525,7 +525,7 @@ public class UceRequestManager {
if (requestCoordinator == null) {
logw("sendRequestInternal: Neither Presence nor OPTIONS are supported");
- callback.onError(RcsUceAdapter.ERROR_NOT_ENABLED, 0L);
+ callback.onError(RcsUceAdapter.ERROR_NOT_ENABLED, 0L, null);
return;
}
diff --git a/tests/src/com/android/ims/rcs/uce/UceControllerTest.java b/tests/src/com/android/ims/rcs/uce/UceControllerTest.java
index 021a7c10..79702ed5 100644
--- a/tests/src/com/android/ims/rcs/uce/UceControllerTest.java
+++ b/tests/src/com/android/ims/rcs/uce/UceControllerTest.java
@@ -147,7 +147,7 @@ public class UceControllerTest extends ImsTestBase {
List<Uri> uriList = new ArrayList<>();
uceController.requestCapabilities(uriList, mCapabilitiesCallback);
- verify(mCapabilitiesCallback).onError(RcsUceAdapter.ERROR_GENERIC_FAILURE, 0L);
+ verify(mCapabilitiesCallback).onError(RcsUceAdapter.ERROR_GENERIC_FAILURE, 0L, null);
verify(mTaskManager, never()).sendCapabilityRequest(any(), eq(false), any());
}
@@ -164,7 +164,7 @@ public class UceControllerTest extends ImsTestBase {
uriList.add(Uri.fromParts("sip", "test", null));
uceController.requestCapabilities(uriList, mCapabilitiesCallback);
- verify(mCapabilitiesCallback).onError(RcsUceAdapter.ERROR_FORBIDDEN, 0L);
+ verify(mCapabilitiesCallback).onError(RcsUceAdapter.ERROR_FORBIDDEN, 0L, null);
verify(mTaskManager, never()).sendCapabilityRequest(any(), eq(false), any());
}
@@ -194,7 +194,7 @@ public class UceControllerTest extends ImsTestBase {
Uri contact = Uri.fromParts("sip", "test", null);
uceController.requestAvailability(contact, mCapabilitiesCallback);
- verify(mCapabilitiesCallback).onError(RcsUceAdapter.ERROR_GENERIC_FAILURE, 0L);
+ verify(mCapabilitiesCallback).onError(RcsUceAdapter.ERROR_GENERIC_FAILURE, 0L, null);
verify(mTaskManager, never()).sendAvailabilityRequest(any(), any());
}
@@ -210,7 +210,7 @@ public class UceControllerTest extends ImsTestBase {
Uri contact = Uri.fromParts("sip", "test", null);
uceController.requestAvailability(contact, mCapabilitiesCallback);
- verify(mCapabilitiesCallback).onError(RcsUceAdapter.ERROR_FORBIDDEN, 0L);
+ verify(mCapabilitiesCallback).onError(RcsUceAdapter.ERROR_FORBIDDEN, 0L, null);
verify(mTaskManager, never()).sendCapabilityRequest(any(), eq(false), any());
}
diff --git a/tests/src/com/android/ims/rcs/uce/request/SubscribeCoordinatorTest.java b/tests/src/com/android/ims/rcs/uce/request/SubscribeCoordinatorTest.java
index 94ee3edb..2c0042ea 100644
--- a/tests/src/com/android/ims/rcs/uce/request/SubscribeCoordinatorTest.java
+++ b/tests/src/com/android/ims/rcs/uce/request/SubscribeCoordinatorTest.java
@@ -25,14 +25,11 @@ import static com.android.ims.rcs.uce.request.UceRequestCoordinator.REQUEST_UPDA
import static com.android.ims.rcs.uce.request.UceRequestCoordinator.REQUEST_UPDATE_RESOURCE_TERMINATED;
import static com.android.ims.rcs.uce.request.UceRequestCoordinator.REQUEST_UPDATE_TERMINATED;
-import static java.lang.Boolean.TRUE;
-
import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertTrue;
import static org.mockito.ArgumentMatchers.any;
-import static org.mockito.ArgumentMatchers.anyInt;
import static org.mockito.ArgumentMatchers.anyLong;
-import static org.mockito.ArgumentMatchers.anyString;
import static org.mockito.ArgumentMatchers.eq;
import static org.mockito.Mockito.doReturn;
import static org.mockito.Mockito.never;
@@ -41,6 +38,7 @@ import static org.mockito.Mockito.verify;
import android.net.Uri;
import android.telephony.ims.RcsContactPresenceTuple;
import android.telephony.ims.RcsContactUceCapability;
+import android.telephony.ims.SipDetails;
import android.telephony.ims.aidl.IRcsUceControllerCallback;
import androidx.test.ext.junit.runners.AndroidJUnit4;
@@ -53,18 +51,19 @@ import com.android.ims.rcs.uce.eab.EabCapabilityResult;
import com.android.ims.rcs.uce.request.UceRequestCoordinator.RequestResult;
import com.android.ims.rcs.uce.request.UceRequestManager.RequestManagerCallback;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.List;
-import java.util.Optional;
-
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.Mock;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Optional;
+
@RunWith(AndroidJUnit4.class)
public class SubscribeCoordinatorTest extends ImsTestBase {
@@ -128,6 +127,17 @@ public class SubscribeCoordinatorTest extends ImsTestBase {
@Test
@SmallTest
public void testRequestNetworkRespSuccess() throws Exception {
+ int responseCode = 200;
+ String responsePhrase = "OK";
+ int reasonHdrCause = 1;
+ String reasonHdrText = "reasonText";
+ int cSeq = 10;
+ String callId = "TestCallId";
+ SipDetails details = new SipDetails.Builder(SipDetails.METHOD_SUBSCRIBE).setCSeq(cSeq)
+ .setSipResponseCode(responseCode, responsePhrase).setCallId(callId)
+ .setSipResponseReasonHeader(reasonHdrCause, reasonHdrText).build();
+ doReturn(Optional.ofNullable(details)).when(mResponse).getSipDetails();
+
SubscribeRequestCoordinator coordinator = getSubscribeCoordinator();
doReturn(true).when(mResponse).isNetworkResponseOK();
doReturn(Optional.of(200)).when(mResponse).getNetworkRespSipCode();
@@ -139,8 +149,21 @@ public class SubscribeCoordinatorTest extends ImsTestBase {
assertEquals(1, requestList.size());
assertTrue(resultList.isEmpty());
- verify(mUceStatsWriter).setSubscribeResponse(eq(mSubId), eq(mTaskId), eq(200));
+ Iterator<RequestResult> requestResults = resultList.iterator();
+ while (requestResults.hasNext()) {
+ RequestResult req = requestResults.next();
+ SipDetails receivedInfo = req.getSipDetails().orElse(null);
+ assertNotNull(receivedInfo);
+ assertEquals(SipDetails.METHOD_SUBSCRIBE, receivedInfo.getMethod());
+ assertEquals(cSeq, receivedInfo.getCSeq());
+ assertEquals(responseCode, receivedInfo.getResponseCode());
+ assertEquals(responsePhrase, receivedInfo.getResponsePhrase());
+ assertEquals(reasonHdrCause, receivedInfo.getReasonHeaderCause());
+ assertEquals(reasonHdrText, receivedInfo.getReasonHeaderText());
+ assertEquals(callId, receivedInfo.getCallId());
+ }
+ verify(mUceStatsWriter).setSubscribeResponse(eq(mSubId), eq(mTaskId), eq(200));
verify(mRequest, never()).onFinish();
}
diff --git a/tests/src/com/android/ims/rcs/uce/request/SubscribeRequestTest.java b/tests/src/com/android/ims/rcs/uce/request/SubscribeRequestTest.java
index b4f9cca4..543ad6d2 100644
--- a/tests/src/com/android/ims/rcs/uce/request/SubscribeRequestTest.java
+++ b/tests/src/com/android/ims/rcs/uce/request/SubscribeRequestTest.java
@@ -19,7 +19,9 @@ package com.android.ims.rcs.uce.request;
import static android.telephony.ims.stub.RcsCapabilityExchangeImplBase.COMMAND_CODE_NOT_SUPPORTED;
import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.ArgumentMatchers.anyInt;
import static org.mockito.ArgumentMatchers.anyLong;
+import static org.mockito.ArgumentMatchers.anyString;
import static org.mockito.ArgumentMatchers.eq;
import static org.mockito.Mockito.doReturn;
import static org.mockito.Mockito.never;
@@ -28,6 +30,7 @@ import static org.mockito.Mockito.verify;
import android.net.Uri;
import android.telephony.ims.RcsContactTerminatedReason;
import android.telephony.ims.RcsUceAdapter;
+import android.telephony.ims.SipDetails;
import android.telephony.ims.aidl.ISubscribeResponseCallback;
import androidx.test.ext.junit.runners.AndroidJUnit4;
@@ -36,10 +39,6 @@ import androidx.test.filters.SmallTest;
import com.android.ims.ImsTestBase;
import com.android.ims.rcs.uce.presence.subscribe.SubscribeController;
import com.android.ims.rcs.uce.request.UceRequestManager.RequestManagerCallback;
-import com.android.ims.rcs.uce.util.NetworkSipCode;
-
-import java.util.ArrayList;
-import java.util.List;
import org.junit.After;
import org.junit.Before;
@@ -47,6 +46,9 @@ import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.Mock;
+import java.util.ArrayList;
+import java.util.List;
+
@RunWith(AndroidJUnit4.class)
public class SubscribeRequestTest extends ImsTestBase {
@@ -88,6 +90,7 @@ public class SubscribeRequestTest extends ImsTestBase {
subscribeRequest.requestCapabilities(uriList);
verify(mRequestResponse).setRequestInternalError(RcsUceAdapter.ERROR_GENERIC_FAILURE);
+ verify(mRequestResponse, never()).setSipDetails(any());
verify(mRequestManagerCallback).notifyRequestError(eq(mCoordId), anyLong());
verify(mSubscribeController, never()).requestCapabilities(any(), any());
}
@@ -101,6 +104,7 @@ public class SubscribeRequestTest extends ImsTestBase {
callback.onCommandError(COMMAND_CODE_NOT_SUPPORTED);
verify(mRequestResponse).setCommandError(COMMAND_CODE_NOT_SUPPORTED);
+ verify(mRequestResponse, never()).setSipDetails(any(SipDetails.class));
verify(mRequestManagerCallback).notifyCommandError(eq(mCoordId), anyLong());
}
@@ -109,12 +113,16 @@ public class SubscribeRequestTest extends ImsTestBase {
public void testNetworkResponse() throws Exception {
SubscribeRequest subscribeRequest = getSubscribeRequest();
- int sipCode = NetworkSipCode.SIP_CODE_FORBIDDEN;
- String reason = "forbidden";
+ int sipCode = 200;
+ String reason = "OK";
+ SipDetails details = new SipDetails.Builder(SipDetails.METHOD_SUBSCRIBE).setCSeq(1)
+ .setSipResponseCode(sipCode, reason).setCallId("callId").build();
+
ISubscribeResponseCallback callback = subscribeRequest.getResponseCallback();
- callback.onNetworkResponse(sipCode, reason);
+ callback.onNetworkResponse(details);
- verify(mRequestResponse).setNetworkResponseCode(sipCode, reason);
+ verify(mRequestResponse).setSipDetails(eq(details));
+ verify(mRequestResponse, never()).setNetworkResponseCode(anyInt(), anyString());
verify(mRequestManagerCallback).notifyNetworkResponse(eq(mCoordId), anyLong());
}
@@ -130,6 +138,7 @@ public class SubscribeRequestTest extends ImsTestBase {
callback.onResourceTerminated(list);
verify(mRequestResponse).addTerminatedResource(list);
+ verify(mRequestResponse, never()).setSipDetails(any());
verify(mRequestManagerCallback).notifyResourceTerminated(eq(mCoordId), anyLong());
}
@@ -144,6 +153,7 @@ public class SubscribeRequestTest extends ImsTestBase {
callback.onNotifyCapabilitiesUpdate(pidfXml);
verify(mRequestResponse).addUpdatedCapabilities(any());
+ verify(mRequestResponse, never()).setSipDetails(any());
verify(mRequestManagerCallback).notifyCapabilitiesUpdated(eq(mCoordId), anyLong());
}
@@ -159,6 +169,7 @@ public class SubscribeRequestTest extends ImsTestBase {
callback.onTerminated(reason, retryAfterMillis);
verify(mRequestResponse).setTerminated(reason, retryAfterMillis);
+ verify(mRequestResponse, never()).setSipDetails(any());
verify(mRequestManagerCallback).notifyTerminated(eq(mCoordId), anyLong());
}
diff --git a/tests/src/com/android/ims/rcs/uce/request/UceRequestManagerTest.java b/tests/src/com/android/ims/rcs/uce/request/UceRequestManagerTest.java
index b380eac9..fa8214ed 100644
--- a/tests/src/com/android/ims/rcs/uce/request/UceRequestManagerTest.java
+++ b/tests/src/com/android/ims/rcs/uce/request/UceRequestManagerTest.java
@@ -31,6 +31,7 @@ import static com.android.ims.rcs.uce.request.UceRequestCoordinator.REQUEST_UPDA
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.ArgumentMatchers.anyLong;
+import static org.mockito.ArgumentMatchers.eq;
import static org.mockito.Mockito.doReturn;
import static org.mockito.Mockito.never;
import static org.mockito.Mockito.verify;
@@ -133,7 +134,7 @@ public class UceRequestManagerTest extends ImsTestBase {
waitForHandlerAction(handler, 500L);
verify(mUceRequest, never()).executeRequest();
- verify(mCapabilitiesCallback).onError(RcsUceAdapter.ERROR_GENERIC_FAILURE, 0L);
+ verify(mCapabilitiesCallback).onError(RcsUceAdapter.ERROR_GENERIC_FAILURE, 0L, null);
}
/**
@@ -164,7 +165,7 @@ public class UceRequestManagerTest extends ImsTestBase {
verify(mCapabilitiesCallback).onCapabilitiesReceived(
cachedNumbers.stream().map(EabCapabilityResult::getContactCapabilities).collect(
Collectors.toList()));
- verify(mCapabilitiesCallback).onComplete();
+ verify(mCapabilitiesCallback).onComplete(eq(null));
// The cache should have been hit, so no network requests should have been generated.
verify(mRequestRepository, never()).addRequestCoordinator(any());
}
@@ -196,7 +197,7 @@ public class UceRequestManagerTest extends ImsTestBase {
waitForHandlerAction(handler, 500L);
// Extract caps from EabCapabilityResult and ensure the Lists match.
verify(mCapabilitiesCallback, never()).onCapabilitiesReceived(any());
- verify(mCapabilitiesCallback, never()).onComplete();
+ verify(mCapabilitiesCallback, never()).onComplete(any());
// A network request should have been generated for the expired contact.
verify(mRequestRepository).addRequestCoordinator(any());
}
@@ -240,7 +241,7 @@ public class UceRequestManagerTest extends ImsTestBase {
// Extract caps from EabCapabilityResult and ensure the Lists match.
verify(mCapabilitiesCallback).onCapabilitiesReceived(
Collections.singletonList(cachedItem.getContactCapabilities()));
- verify(mCapabilitiesCallback, never()).onComplete();
+ verify(mCapabilitiesCallback, never()).onComplete(any());
// The cache should have been hit, but there was also entry that was not in the cache, so
// ensure that is requested.
verify(mRequestRepository).addRequestCoordinator(any());