OSDN Git Service

cdma sms encoding tweaks and logging / debugging annotations.
authorTammo Spalink <tammo@google.com>
Mon, 17 Aug 2009 21:16:08 +0000 (14:16 -0700)
committerTammo Spalink <tammo@google.com>
Thu, 20 Aug 2009 18:18:04 +0000 (11:18 -0700)
telephony/java/com/android/internal/telephony/cdma/SmsMessage.java
telephony/java/com/android/internal/telephony/cdma/sms/BearerData.java
telephony/java/com/android/internal/telephony/cdma/sms/UserData.java

index 9c04305..93426a1 100755 (executable)
@@ -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;
index fefeb12..721729d 100644 (file)
@@ -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?
index 9b6e19d..d93852c 100644 (file)
@@ -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 + "'");