From 079ad20da7df79f26880c9076967dc3fbce6528c Mon Sep 17 00:00:00 2001 From: Tammo Spalink Date: Mon, 17 Aug 2009 14:16:08 -0700 Subject: [PATCH] cdma sms encoding tweaks and logging / debugging annotations. --- .../java/com/android/internal/telephony/cdma/SmsMessage.java | 10 ++++++---- .../com/android/internal/telephony/cdma/sms/BearerData.java | 11 ++++++++--- .../com/android/internal/telephony/cdma/sms/UserData.java | 2 +- 3 files changed, 15 insertions(+), 8 deletions(-) diff --git a/telephony/java/com/android/internal/telephony/cdma/SmsMessage.java b/telephony/java/com/android/internal/telephony/cdma/SmsMessage.java index 9c043057498c..93426a1b89ad 100755 --- a/telephony/java/com/android/internal/telephony/cdma/SmsMessage.java +++ b/telephony/java/com/android/internal/telephony/cdma/SmsMessage.java @@ -67,6 +67,7 @@ import static android.telephony.SmsMessage.MessageClass; */ public class SmsMessage extends SmsMessageBase { static final String LOG_TAG = "CDMA"; + private final static Boolean DBG_SMS = false; /** * Status of a previously submitted SMS. @@ -541,6 +542,7 @@ public class SmsMessage extends SmsMessageBase { return; } mBearerData = BearerData.decode(mEnvelope.bearerData); + if (DBG_SMS) Log.d(LOG_TAG, "MT (decoded) BearerData = " + mBearerData); messageRef = mBearerData.messageId; if (mBearerData.userData != null) { userData = mBearerData.userData.payload; @@ -644,14 +646,14 @@ public class SmsMessage extends SmsMessageBase { bearerData.reportReq = false; bearerData.userData = userData; - bearerData.hasUserDataHeader = (userData.userDataHeader != null); - - int teleservice = bearerData.hasUserDataHeader ? - SmsEnvelope.TELESERVICE_WEMT : SmsEnvelope.TELESERVICE_WMT; byte[] encodedBearerData = BearerData.encode(bearerData); + if (DBG_SMS) Log.d(LOG_TAG, "MO (encoded) BearerData = " + bearerData); if (encodedBearerData == null) return null; + int teleservice = bearerData.hasUserDataHeader ? + SmsEnvelope.TELESERVICE_WEMT : SmsEnvelope.TELESERVICE_WMT; + SmsEnvelope envelope = new SmsEnvelope(); envelope.messageType = SmsEnvelope.MESSAGE_TYPE_POINT_TO_POINT; envelope.teleService = teleservice; diff --git a/telephony/java/com/android/internal/telephony/cdma/sms/BearerData.java b/telephony/java/com/android/internal/telephony/cdma/sms/BearerData.java index fefeb12b4584..721729d9bf27 100644 --- a/telephony/java/com/android/internal/telephony/cdma/sms/BearerData.java +++ b/telephony/java/com/android/internal/telephony/cdma/sms/BearerData.java @@ -484,7 +484,7 @@ public final class BearerData { Gsm7bitCodingResult result = new Gsm7bitCodingResult(); result.data = new byte[fullData.length - 1]; System.arraycopy(fullData, 1, result.data, 0, fullData.length - 1); - result.septets = fullData[0]; + result.septets = fullData[0] & 0x00FF; return result; } catch (com.android.internal.telephony.EncodeException ex) { throw new CodingException("7bit GSM encode failed: " + ex); @@ -498,6 +498,7 @@ public final class BearerData { int udhSeptets = ((udhBytes * 8) + 6) / 7; Gsm7bitCodingResult gcr = encode7bitGsm(uData.payloadStr, udhSeptets, force); uData.msgEncoding = UserData.ENCODING_GSM_7BIT_ALPHABET; + uData.msgEncodingSet = true; uData.numFields = gcr.septets; uData.payload = gcr.data; uData.payload[0] = (byte)udhData.length; @@ -512,6 +513,8 @@ public final class BearerData { int udhCodeUnits = (udhBytes + 1) / 2; int udhPadding = udhBytes % 2; int payloadCodeUnits = payload.length / 2; + uData.msgEncoding = UserData.ENCODING_UNICODE_16; + uData.msgEncodingSet = true; uData.numFields = udhCodeUnits + payloadCodeUnits; uData.payload = new byte[uData.numFields * 2]; uData.payload[0] = (byte)udhData.length; @@ -606,14 +609,16 @@ public final class BearerData { * copies by passing outStream directly. */ encodeUserDataPayload(bData.userData); + bData.hasUserDataHeader = bData.userData.userDataHeader != null; + if (bData.userData.payload.length > SmsMessage.MAX_USER_DATA_BYTES) { throw new CodingException("encoded user data too large (" + bData.userData.payload.length + " > " + SmsMessage.MAX_USER_DATA_BYTES + " bytes)"); } - /** - * XXX/TODO: figure out what the right answer is WRT padding bits + /* + * TODO(cleanup): figure out what the right answer is WRT paddingBits field * * userData.paddingBits = (userData.payload.length * 8) - (userData.numFields * 7); * userData.paddingBits = 0; // XXX this seems better, but why? diff --git a/telephony/java/com/android/internal/telephony/cdma/sms/UserData.java b/telephony/java/com/android/internal/telephony/cdma/sms/UserData.java index 9b6e19d7d674..d93852cb0061 100644 --- a/telephony/java/com/android/internal/telephony/cdma/sms/UserData.java +++ b/telephony/java/com/android/internal/telephony/cdma/sms/UserData.java @@ -154,7 +154,7 @@ public class UserData { builder.append("{ msgEncoding=" + (msgEncodingSet ? msgEncoding : "unset")); builder.append(", msgType=" + msgType); builder.append(", paddingBits=" + paddingBits); - builder.append(", numFields=" + (int)numFields); + builder.append(", numFields=" + numFields); builder.append(", userDataHeader=" + userDataHeader); builder.append(", payload='" + HexDump.toHexString(payload) + "'"); builder.append(", payloadStr='" + payloadStr + "'"); -- 2.11.0