Default to request server id if MoveItems response lacks one.
The documentation says it's a required element of the response
but dogfooder reports a crash implying otherwise.
http://msdn.microsoft.com/en-us/library/gg663427(v=exchg.80).aspx
Bug: 11186535
Change-Id: I10f64de7ccc4c6293ace40dcd6e3c4ce3eda80ab
diff --git a/src/com/android/exchange/eas/EasMoveItems.java b/src/com/android/exchange/eas/EasMoveItems.java
index 8ddb747..c1a7d2f 100644
--- a/src/com/android/exchange/eas/EasMoveItems.java
+++ b/src/com/android/exchange/eas/EasMoveItems.java
@@ -124,9 +124,23 @@
private void processResponse(final MessageMove request, final MoveResponse response) {
// TODO: Eventually this should use a transaction.
// TODO: Improve how the parser reports statuses and how we handle them here.
- if (!response.sourceMessageId.equals(request.getServerId())) {
- // TODO: This is bad, but I think we need to respect the response anyway.
- LogUtils.e(LOG_TAG, "Got a response for a message we didn't request");
+
+ final String sourceMessageId;
+
+ if (response.sourceMessageId == null) {
+ // The response didn't contain SrcMsgId, despite it being required.
+ LogUtils.e(LOG_TAG,
+ "MoveItems response for message %d has no SrcMsgId, using request's server id",
+ request.getMessageId());
+ sourceMessageId = request.getServerId();
+ } else {
+ sourceMessageId = response.sourceMessageId;
+ if (!sourceMessageId.equals(request.getServerId())) {
+ // TODO: This is bad, but we still need to process the response. Just log for now.
+ LogUtils.e(LOG_TAG,
+ "MoveItems response for message %d has SrcMsgId != request's server id",
+ request.getMessageId());
+ }
}
final ContentValues cv = new ContentValues(1);
@@ -134,8 +148,7 @@
// Restore the old mailbox id
cv.put(EmailContent.MessageColumns.MAILBOX_KEY, request.getSourceFolderKey());
} else if (response.moveStatus == MoveItemsParser.STATUS_CODE_SUCCESS) {
- if (response.newMessageId != null
- && !response.newMessageId.equals(response.sourceMessageId)) {
+ if (response.newMessageId != null && !response.newMessageId.equals(sourceMessageId)) {
cv.put(EmailContent.SyncColumns.SERVER_ID, response.newMessageId);
}
}