CDMA incoming MMS fixes

Need to correctly interpret WAP Datagram data. Specifically the
source and destination ports are only included in the 1st segment,
not subsequent segments but the original implementation was looking
for the ports for all segments.
This commit is contained in:
David Krause
2009-06-16 12:41:16 -05:00
committed by Wink Saville
parent 4a64bded06
commit 5c7d9e8194
2 changed files with 16 additions and 7 deletions

View File

@ -78,6 +78,7 @@ public abstract class SMSDispatcher extends Handler {
protected static final String[] RAW_PROJECTION = new String[] {
"pdu",
"sequence",
"destination_port",
};
static final int MAIL_SEND_SMS = 1;

View File

@ -168,8 +168,8 @@ final class CdmaSMSDispatcher extends SMSDispatcher {
int index = 0;
int msgType;
int sourcePort;
int destinationPort;
int sourcePort = 0;
int destinationPort = 0;
msgType = pdu[index++];
if (msgType != 0){
@ -179,11 +179,14 @@ final class CdmaSMSDispatcher extends SMSDispatcher {
totalSegments = pdu[index++]; // >=1
segment = pdu[index++]; // >=0
//process WDP segment
sourcePort = (0xFF & pdu[index++]) << 8;
sourcePort |= 0xFF & pdu[index++];
destinationPort = (0xFF & pdu[index++]) << 8;
destinationPort |= 0xFF & pdu[index++];
// Only the first segment contains sourcePort and destination Port
if (segment == 0) {
//process WDP segment
sourcePort = (0xFF & pdu[index++]) << 8;
sourcePort |= 0xFF & pdu[index++];
destinationPort = (0xFF & pdu[index++]) << 8;
destinationPort |= 0xFF & pdu[index++];
}
// Lookup all other related parts
StringBuilder where = new StringBuilder("reference_number =");
@ -224,6 +227,11 @@ final class CdmaSMSDispatcher extends SMSDispatcher {
for (int i = 0; i < cursorCount; i++) {
cursor.moveToNext();
int cursorSequence = (int)cursor.getLong(sequenceColumn);
// Read the destination port from the first segment
if (cursorSequence == 0) {
int destinationPortColumn = cursor.getColumnIndex("destination_port");
destinationPort = (int)cursor.getLong(destinationPortColumn);
}
pdus[cursorSequence] = HexDump.hexStringToByteArray(
cursor.getString(pduColumn));
}