diff options
author | Android (Google) Code Review <android-gerrit@google.com> | 2009-09-17 14:53:45 -0400 |
---|---|---|
committer | Android (Google) Code Review <android-gerrit@google.com> | 2009-09-17 14:53:45 -0400 |
commit | 8460be7a57117d786adf2e1233ef02c4e96f0030 (patch) | |
tree | cbeb47fdabaf6819446afc15df81cf02a6bd40bf /telephony/java/com | |
parent | 3065a3cad069b847165c99a38a251c072950d07f (diff) | |
parent | 9d34319f1ce5be4124a0b6293162587f4573496f (diff) | |
download | frameworks_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.java | 20 | ||||
-rwxr-xr-x | telephony/java/com/android/internal/telephony/cdma/SmsMessage.java | 15 |
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(); + } } |