@@ -518,6 +518,7 @@ protected int dispatchNormalMessage(SmsMessageBase sms) {
518518 * @param address the originating address
519519 * @param referenceNumber distinguishes concatenated messages from the same sender
520520 * @param sequenceNumber the order of this segment in the message
521+ * (starting at 0 for CDMA WDP datagrams and 1 for concatenated messages).
521522 * @param messageCount the number of segments in the message
522523 * @param timestamp the service center timestamp in millis
523524 * @param destPort the destination port for the message, or -1 for no destination port
@@ -583,7 +584,11 @@ protected int processMessagePart(byte[] pdu, String address, int referenceNumber
583584 for (int i = 0 ; i < cursorCount ; i ++) {
584585 cursor .moveToNext ();
585586 int cursorSequence = cursor .getInt (SEQUENCE_COLUMN );
586- pdus [cursorSequence - 1 ] = HexDump .hexStringToByteArray (
587+ // GSM sequence numbers start at 1; CDMA WDP datagram sequence numbers start at 0
588+ if (!isCdmaWapPush ) {
589+ cursorSequence --;
590+ }
591+ pdus [cursorSequence ] = HexDump .hexStringToByteArray (
587592 cursor .getString (PDU_COLUMN ));
588593
589594 // Read the destination port from the first segment (needed for CDMA WAP PDU).
@@ -593,7 +598,12 @@ protected int processMessagePart(byte[] pdu, String address, int referenceNumber
593598 }
594599 }
595600 // This one isn't in the DB, so add it
596- pdus [sequenceNumber - 1 ] = pdu ;
601+ // GSM sequence numbers start at 1; CDMA WDP datagram sequence numbers start at 0
602+ if (isCdmaWapPush ) {
603+ pdus [sequenceNumber ] = pdu ;
604+ } else {
605+ pdus [sequenceNumber - 1 ] = pdu ;
606+ }
597607
598608 // Remove the parts from the database
599609 mResolver .delete (mRawUri , where , whereArgs );
0 commit comments