Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 079ad20d authored by Tammo Spalink's avatar Tammo Spalink
Browse files

cdma sms encoding tweaks and logging / debugging annotations.

parent 1c1629da
Loading
Loading
Loading
Loading
+6 −4
Original line number Diff line number Diff line
@@ -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;
+8 −3
Original line number Diff line number Diff line
@@ -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?
+1 −1
Original line number Diff line number Diff line
@@ -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 + "'");