9d34319f1c
In some cases a sms acknowledgement might be lost. The network will then resend the same sms. These duplicate sms should be acknowledged but not shown to the user. C.S0015-B 4.3.1.6 Unique Message Identification. The fields used to identify a message are: * Message Identifier, * Originating Address, * Originating Subaddress, and * Message Center Time Stamp. Since some of the fields are optional, the Teleservice Layer shall use as many of the fields as are present in the SMS message to determine message uniqueness. Mobile stations should discard repeated messages. 1. Add a fingerprint function to SmsMessage.java. This returns a byte array to be used as a unique identifier. Parts that make up the identifier are the originating address, teleservice id and the bearerdata. Using all of the bearerdata saves parsing time. There are no random bits allowed in the standard. This makes binary comparison possible. Using all of the bearerdata accounts for the message id, smsc timestamp and "... shall use as many of the fields as are present in the SMS message". 2. Have CdmaSMSDispatcher.dispatchMessage() pull a fingerprint and check if it matches the last acknowledged fingerprint. When it matches return and signal that message was handled. 3. Have CdmaSMSDispatcher.acknowledgeLastIncomingSms() take the last dispatched fingerprint move it to the last acknowledged fingerprint. Only do this if processing of the sms was successful. Change-Id: If79f8fe40896cd290940b7ccd5a17531ab937b60