summaryrefslogtreecommitdiffstats
path: root/telephony/java/com
diff options
context:
space:
mode:
authorAndroid (Google) Code Review <android-gerrit@google.com>2009-09-17 14:53:45 -0400
committerAndroid (Google) Code Review <android-gerrit@google.com>2009-09-17 14:53:45 -0400
commit8460be7a57117d786adf2e1233ef02c4e96f0030 (patch)
treecbeb47fdabaf6819446afc15df81cf02a6bd40bf /telephony/java/com
parent3065a3cad069b847165c99a38a251c072950d07f (diff)
parent9d34319f1ce5be4124a0b6293162587f4573496f (diff)
downloadframeworks_base-8460be7a57117d786adf2e1233ef02c4e96f0030.zip
frameworks_base-8460be7a57117d786adf2e1233ef02c4e96f0030.tar.gz
frameworks_base-8460be7a57117d786adf2e1233ef02c4e96f0030.tar.bz2
Merge change 25535 into eclair
* changes: CDMA Check for network duplicate sms
Diffstat (limited to 'telephony/java/com')
-rw-r--r--telephony/java/com/android/internal/telephony/cdma/CdmaSMSDispatcher.java20
-rwxr-xr-xtelephony/java/com/android/internal/telephony/cdma/SmsMessage.java15
2 files changed, 33 insertions, 2 deletions
diff --git a/telephony/java/com/android/internal/telephony/cdma/CdmaSMSDispatcher.java b/telephony/java/com/android/internal/telephony/cdma/CdmaSMSDispatcher.java
index 386dc3d46..730dc49 100644
--- a/telephony/java/com/android/internal/telephony/cdma/CdmaSMSDispatcher.java
+++ b/telephony/java/com/android/internal/telephony/cdma/CdmaSMSDispatcher.java
@@ -48,6 +48,7 @@ import com.android.internal.util.HexDump;
import java.io.ByteArrayOutputStream;
import java.util.ArrayList;
+import java.util.Arrays;
import java.util.HashMap;
import java.lang.Boolean;
@@ -57,6 +58,9 @@ final class CdmaSMSDispatcher extends SMSDispatcher {
private CDMAPhone mCdmaPhone;
+ private byte[] mLastDispatchedSmsFingerprint;
+ private byte[] mLastAcknowledgedSmsFingerprint;
+
CdmaSMSDispatcher(CDMAPhone phone) {
super(phone);
mCdmaPhone = phone;
@@ -104,8 +108,14 @@ final class CdmaSMSDispatcher extends SMSDispatcher {
return Intents.RESULT_SMS_GENERIC_ERROR;
}
- // Decode BD stream and set sms variables.
+ // See if we have a network duplicate SMS.
SmsMessage sms = (SmsMessage) smsb;
+ mLastDispatchedSmsFingerprint = sms.getIncomingSmsFingerprint();
+ if (mLastAcknowledgedSmsFingerprint != null &&
+ Arrays.equals(mLastDispatchedSmsFingerprint, mLastAcknowledgedSmsFingerprint)) {
+ return Intents.RESULT_SMS_HANDLED;
+ }
+ // Decode BD stream and set sms variables.
sms.parseSms();
int teleService = sms.getTeleService();
boolean handled = false;
@@ -433,7 +443,13 @@ final class CdmaSMSDispatcher extends SMSDispatcher {
}
if (mCm != null) {
- mCm.acknowledgeLastIncomingCdmaSms(success, resultToCause(result), response);
+ int causeCode = resultToCause(result);
+ mCm.acknowledgeLastIncomingCdmaSms(success, causeCode, response);
+
+ if (causeCode == 0) {
+ mLastAcknowledgedSmsFingerprint = mLastDispatchedSmsFingerprint;
+ }
+ mLastDispatchedSmsFingerprint = null;
}
}
diff --git a/telephony/java/com/android/internal/telephony/cdma/SmsMessage.java b/telephony/java/com/android/internal/telephony/cdma/SmsMessage.java
index 266d127..3e491d1 100755
--- a/telephony/java/com/android/internal/telephony/cdma/SmsMessage.java
+++ b/telephony/java/com/android/internal/telephony/cdma/SmsMessage.java
@@ -794,5 +794,20 @@ public class SmsMessage extends SmsMessageBase {
return mBearerData.numberOfMessages;
}
+ /**
+ * Returns a byte array that can be use to uniquely identify a received SMS message.
+ * C.S0015-B 4.3.1.6 Unique Message Identification.
+ *
+ * @return byte array uniquely identifying the message.
+ * @hide
+ */
+ /* package */ byte[] getIncomingSmsFingerprint() {
+ ByteArrayOutputStream output = new ByteArrayOutputStream();
+
+ output.write(mEnvelope.teleService);
+ output.write(mEnvelope.origAddress.origBytes, 0, mEnvelope.origAddress.origBytes.length);
+ output.write(mEnvelope.bearerData, 0, mEnvelope.bearerData.length);
+ return output.toByteArray();
+ }
}