From 70f74b79c3e4c88e0e7b747796f76187e4ea8259 Mon Sep 17 00:00:00 2001 From: Christian Gustafsson Date: Sun, 13 Sep 2009 20:59:47 -0500 Subject: Assemble WAP datagram correctly when segments arrive out of order The WAP assembly code will always attach the last received segment at the end of the WAP datagram. Change the code to add the current segment at the correct location during the WAP datagram assembly. Change-Id: I4cc18bf33bc68ab9a328a0107f21e3670b5026ac --- .../android/internal/telephony/cdma/CdmaSMSDispatcher.java | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) (limited to 'telephony') diff --git a/telephony/java/com/android/internal/telephony/cdma/CdmaSMSDispatcher.java b/telephony/java/com/android/internal/telephony/cdma/CdmaSMSDispatcher.java index 623d985..386dc3d46 100644 --- a/telephony/java/com/android/internal/telephony/cdma/CdmaSMSDispatcher.java +++ b/telephony/java/com/android/internal/telephony/cdma/CdmaSMSDispatcher.java @@ -299,14 +299,16 @@ final class CdmaSMSDispatcher extends SMSDispatcher { // Build up the data stream ByteArrayOutputStream output = new ByteArrayOutputStream(); - for (int i = 0; i < totalSegments-1; i++) { + for (int i = 0; i < totalSegments; i++) { // reassemble the (WSP-)pdu - output.write(pdus[i], 0, pdus[i].length); + if (i == segment) { + // This one isn't in the DB, so add it + output.write(pdu, index, pdu.length - index); + } else { + output.write(pdus[i], 0, pdus[i].length); + } } - // This one isn't in the DB, so add it - output.write(pdu, index, pdu.length - index); - byte[] datagram = output.toByteArray(); // Dispatch the PDU to applications switch (destinationPort) { -- cgit v1.1