Porting cl/356728731
[RCS] Establising a msrp session after sending ack
Bug: 179342541
Test: manual
Change-Id: I1e13aa8c37dda280bbfddcc904eb6d1ada708e28
diff --git a/testapps/TestRcsApp/aosp_test_rcsclient/src/com/android/libraries/rcs/simpleclient/protocol/sip/SipUtils.java b/testapps/TestRcsApp/aosp_test_rcsclient/src/com/android/libraries/rcs/simpleclient/protocol/sip/SipUtils.java
index 2f95bef..16c829e 100644
--- a/testapps/TestRcsApp/aosp_test_rcsclient/src/com/android/libraries/rcs/simpleclient/protocol/sip/SipUtils.java
+++ b/testapps/TestRcsApp/aosp_test_rcsclient/src/com/android/libraries/rcs/simpleclient/protocol/sip/SipUtils.java
@@ -259,7 +259,7 @@
request.setCallId(invite.getCallId());
- Via via = (Via) request.getTopmostVia().clone();
+ Via via = (Via) invite.getTopmostVia().clone();
via.removeParameter("branch");
request.addHeader(via);
request.addHeader(
diff --git a/testapps/TestRcsApp/aosp_test_rcsclient/src/com/android/libraries/rcs/simpleclient/service/chat/SimpleChatSession.java b/testapps/TestRcsApp/aosp_test_rcsclient/src/com/android/libraries/rcs/simpleclient/service/chat/SimpleChatSession.java
index 74472d7..a17d0a0 100644
--- a/testapps/TestRcsApp/aosp_test_rcsclient/src/com/android/libraries/rcs/simpleclient/service/chat/SimpleChatSession.java
+++ b/testapps/TestRcsApp/aosp_test_rcsclient/src/com/android/libraries/rcs/simpleclient/service/chat/SimpleChatSession.java
@@ -339,41 +339,52 @@
return;
}
+ SimpleSdpMessage sdp;
try {
- SimpleSdpMessage sdp =
- SimpleSdpMessage.parse(new ByteArrayInputStream(response.getRawContent()));
- startMsrpSession(sdp);
+ sdp = SimpleSdpMessage.parse(new ByteArrayInputStream(response.getRawContent()));
} catch (ParseException | IOException e) {
notifyFailure("Invalid SDP in INVITE", CODE_ERROR_UNSPECIFIED);
+ return;
}
- if (mInviteRequest != null) {
- SIPRequest ack = mInviteRequest.createAckRequest((To) response.getToHeader());
- Futures.addCallback(
- mService.sendSipRequest(ack, this),
- new FutureCallback<Boolean>() {
- @Override
- public void onSuccess(Boolean result) {
- if (result) {
- mStartFuture.set(null);
- mStartFuture = null;
- } else {
- notifyFailure("Failed to send ACK", CODE_ERROR_UNSPECIFIED);
- }
- }
+ if (mInviteRequest == null) {
+ notifyFailure("No INVITE request sent out", CODE_ERROR_UNSPECIFIED);
+ return;
+ }
- @Override
- public void onFailure(Throwable t) {
+ SIPRequest ack = mInviteRequest.createAckRequest((To) response.getToHeader());
+ Futures.addCallback(
+ mService.sendSipRequest(ack, this),
+ new FutureCallback<Boolean>() {
+ @Override
+ public void onSuccess(Boolean result) {
+ if (result) {
+ startMsrpSession(sdp);
+ } else {
notifyFailure("Failed to send ACK", CODE_ERROR_UNSPECIFIED);
}
- },
- MoreExecutors.directExecutor());
- }
+ }
+
+ @Override
+ public void onFailure(Throwable t) {
+ notifyFailure("Failed to send ACK", CODE_ERROR_UNSPECIFIED);
+ }
+ },
+ MoreExecutors.directExecutor());
}
private void notifyFailure(String message, @ErrorCode int code) {
- mStartFuture.setException(new ChatServiceException(message, code));
- mStartFuture = null;
+ if (mStartFuture != null) {
+ mStartFuture.setException(new ChatServiceException(message, code));
+ mStartFuture = null;
+ }
+ }
+
+ private void notifySuccess() {
+ if (mStartFuture != null) {
+ mStartFuture.set(null);
+ mStartFuture = null;
+ }
}
private void startMsrpSession(SimpleSdpMessage remoteSdp) {
@@ -387,16 +398,17 @@
@Override
public void onSuccess(MsrpSession result) {
mMsrpSession = result;
+ notifySuccess();
}
@Override
public void onFailure(Throwable t) {
Log.e(TAG, "Failed to create msrp session", t);
+ notifyFailure("Failed to establish msrp session",
+ CODE_ERROR_UNSPECIFIED);
terminate()
.addListener(
- () -> {
- Log.d(TAG, "Session terminated");
- },
+ () -> Log.d(TAG, "Session terminated"),
MoreExecutors.directExecutor());
}
},