Loading telephony/java/com/android/internal/telephony/SmsHeader.java +3 −1 Original line number Diff line number Diff line Loading @@ -190,7 +190,9 @@ public class SmsHeader { public static byte[] toByteArray(SmsHeader smsHeader) { if ((smsHeader.portAddrs == null) && (smsHeader.concatRef == null) && (smsHeader.miscEltList.size() == 0)) { (smsHeader.miscEltList.isEmpty()) && (smsHeader.languageShiftTable == 0) && (smsHeader.languageTable == 0)) { return null; } Loading telephony/java/com/android/internal/telephony/gsm/GsmSMSDispatcher.java +15 −3 Original line number Diff line number Diff line Loading @@ -239,7 +239,11 @@ public final class GsmSMSDispatcher extends SMSDispatcher { byte[] data, PendingIntent sentIntent, PendingIntent deliveryIntent) { SmsMessage.SubmitPdu pdu = SmsMessage.getSubmitPdu( scAddr, destAddr, destPort, data, (deliveryIntent != null)); if (pdu != null) { sendRawPdu(pdu.encodedScAddress, pdu.encodedMessage, sentIntent, deliveryIntent); } else { Log.e(TAG, "GsmSMSDispatcher.sendData(): getSubmitPdu() returned null"); } } /** {@inheritDoc} */ Loading @@ -248,7 +252,11 @@ public final class GsmSMSDispatcher extends SMSDispatcher { PendingIntent sentIntent, PendingIntent deliveryIntent) { SmsMessage.SubmitPdu pdu = SmsMessage.getSubmitPdu( scAddr, destAddr, text, (deliveryIntent != null)); if (pdu != null) { sendRawPdu(pdu.encodedScAddress, pdu.encodedMessage, sentIntent, deliveryIntent); } else { Log.e(TAG, "GsmSMSDispatcher.sendText(): getSubmitPdu() returned null"); } } /** {@inheritDoc} */ Loading @@ -266,7 +274,11 @@ public final class GsmSMSDispatcher extends SMSDispatcher { SmsMessage.SubmitPdu pdu = SmsMessage.getSubmitPdu(scAddress, destinationAddress, message, deliveryIntent != null, SmsHeader.toByteArray(smsHeader), encoding, smsHeader.languageTable, smsHeader.languageShiftTable); if (pdu != null) { sendRawPdu(pdu.encodedScAddress, pdu.encodedMessage, sentIntent, deliveryIntent); } else { Log.e(TAG, "GsmSMSDispatcher.sendNewSubmitPdu(): getSubmitPdu() returned null"); } } /** {@inheritDoc} */ Loading telephony/java/com/android/internal/telephony/gsm/SmsMessage.java +34 −7 Original line number Diff line number Diff line Loading @@ -16,22 +16,22 @@ package com.android.internal.telephony.gsm; import android.os.Parcel; import android.telephony.PhoneNumberUtils; import android.text.format.Time; import android.util.Log; import com.android.internal.telephony.IccUtils; import com.android.internal.telephony.EncodeException; import com.android.internal.telephony.GsmAlphabet; import com.android.internal.telephony.IccUtils; import com.android.internal.telephony.SmsHeader; import com.android.internal.telephony.SmsMessageBase; import java.io.ByteArrayOutputStream; import java.io.UnsupportedEncodingException; import static android.telephony.SmsMessage.ENCODING_16BIT; import static android.telephony.SmsMessage.ENCODING_7BIT; import static android.telephony.SmsMessage.ENCODING_8BIT; import static android.telephony.SmsMessage.ENCODING_16BIT; import static android.telephony.SmsMessage.ENCODING_KSC5601; import static android.telephony.SmsMessage.ENCODING_UNKNOWN; import static android.telephony.SmsMessage.MAX_USER_DATA_BYTES; Loading Loading @@ -240,18 +240,43 @@ public class SmsMessage extends SmsMessageBase { return null; } if (encoding == ENCODING_UNKNOWN) { // Find the best encoding to use TextEncodingDetails ted = calculateLength(message, false); encoding = ted.codeUnitSize; languageTable = ted.languageTable; languageShiftTable = ted.languageShiftTable; if (encoding == ENCODING_7BIT && (languageTable != 0 || languageShiftTable != 0)) { if (header != null) { SmsHeader smsHeader = SmsHeader.fromByteArray(header); if (smsHeader.languageTable != languageTable || smsHeader.languageShiftTable != languageShiftTable) { Log.w(LOG_TAG, "Updating language table in SMS header: " + smsHeader.languageTable + " -> " + languageTable + ", " + smsHeader.languageShiftTable + " -> " + languageShiftTable); smsHeader.languageTable = languageTable; smsHeader.languageShiftTable = languageShiftTable; header = SmsHeader.toByteArray(smsHeader); } } else { SmsHeader smsHeader = new SmsHeader(); smsHeader.languageTable = languageTable; smsHeader.languageShiftTable = languageShiftTable; header = SmsHeader.toByteArray(smsHeader); } } } SubmitPdu ret = new SubmitPdu(); // MTI = SMS-SUBMIT, UDHI = header != null byte mtiByte = (byte)(0x01 | (header != null ? 0x40 : 0x00)); ByteArrayOutputStream bo = getSubmitPduHead( scAddress, destinationAddress, mtiByte, statusReportRequested, ret); // User Data (and length) byte[] userData; if (encoding == ENCODING_UNKNOWN) { // First, try encoding it with the GSM alphabet encoding = ENCODING_7BIT; } try { if (encoding == ENCODING_7BIT) { userData = GsmAlphabet.stringToGsm7BitPackedWithHeader(message, header, Loading Loading @@ -283,6 +308,7 @@ public class SmsMessage extends SmsMessageBase { if (encoding == ENCODING_7BIT) { if ((0xff & userData[0]) > MAX_USER_DATA_SEPTETS) { // Message too long Log.e(LOG_TAG, "Message too long (" + (0xff & userData[0]) + " septets)"); return null; } // TP-Data-Coding-Scheme Loading @@ -297,6 +323,7 @@ public class SmsMessage extends SmsMessageBase { } else { // assume UCS-2 if ((0xff & userData[0]) > MAX_USER_DATA_BYTES) { // Message too long Log.e(LOG_TAG, "Message too long (" + (0xff & userData[0]) + " bytes)"); return null; } // TP-Data-Coding-Scheme Loading Loading
telephony/java/com/android/internal/telephony/SmsHeader.java +3 −1 Original line number Diff line number Diff line Loading @@ -190,7 +190,9 @@ public class SmsHeader { public static byte[] toByteArray(SmsHeader smsHeader) { if ((smsHeader.portAddrs == null) && (smsHeader.concatRef == null) && (smsHeader.miscEltList.size() == 0)) { (smsHeader.miscEltList.isEmpty()) && (smsHeader.languageShiftTable == 0) && (smsHeader.languageTable == 0)) { return null; } Loading
telephony/java/com/android/internal/telephony/gsm/GsmSMSDispatcher.java +15 −3 Original line number Diff line number Diff line Loading @@ -239,7 +239,11 @@ public final class GsmSMSDispatcher extends SMSDispatcher { byte[] data, PendingIntent sentIntent, PendingIntent deliveryIntent) { SmsMessage.SubmitPdu pdu = SmsMessage.getSubmitPdu( scAddr, destAddr, destPort, data, (deliveryIntent != null)); if (pdu != null) { sendRawPdu(pdu.encodedScAddress, pdu.encodedMessage, sentIntent, deliveryIntent); } else { Log.e(TAG, "GsmSMSDispatcher.sendData(): getSubmitPdu() returned null"); } } /** {@inheritDoc} */ Loading @@ -248,7 +252,11 @@ public final class GsmSMSDispatcher extends SMSDispatcher { PendingIntent sentIntent, PendingIntent deliveryIntent) { SmsMessage.SubmitPdu pdu = SmsMessage.getSubmitPdu( scAddr, destAddr, text, (deliveryIntent != null)); if (pdu != null) { sendRawPdu(pdu.encodedScAddress, pdu.encodedMessage, sentIntent, deliveryIntent); } else { Log.e(TAG, "GsmSMSDispatcher.sendText(): getSubmitPdu() returned null"); } } /** {@inheritDoc} */ Loading @@ -266,7 +274,11 @@ public final class GsmSMSDispatcher extends SMSDispatcher { SmsMessage.SubmitPdu pdu = SmsMessage.getSubmitPdu(scAddress, destinationAddress, message, deliveryIntent != null, SmsHeader.toByteArray(smsHeader), encoding, smsHeader.languageTable, smsHeader.languageShiftTable); if (pdu != null) { sendRawPdu(pdu.encodedScAddress, pdu.encodedMessage, sentIntent, deliveryIntent); } else { Log.e(TAG, "GsmSMSDispatcher.sendNewSubmitPdu(): getSubmitPdu() returned null"); } } /** {@inheritDoc} */ Loading
telephony/java/com/android/internal/telephony/gsm/SmsMessage.java +34 −7 Original line number Diff line number Diff line Loading @@ -16,22 +16,22 @@ package com.android.internal.telephony.gsm; import android.os.Parcel; import android.telephony.PhoneNumberUtils; import android.text.format.Time; import android.util.Log; import com.android.internal.telephony.IccUtils; import com.android.internal.telephony.EncodeException; import com.android.internal.telephony.GsmAlphabet; import com.android.internal.telephony.IccUtils; import com.android.internal.telephony.SmsHeader; import com.android.internal.telephony.SmsMessageBase; import java.io.ByteArrayOutputStream; import java.io.UnsupportedEncodingException; import static android.telephony.SmsMessage.ENCODING_16BIT; import static android.telephony.SmsMessage.ENCODING_7BIT; import static android.telephony.SmsMessage.ENCODING_8BIT; import static android.telephony.SmsMessage.ENCODING_16BIT; import static android.telephony.SmsMessage.ENCODING_KSC5601; import static android.telephony.SmsMessage.ENCODING_UNKNOWN; import static android.telephony.SmsMessage.MAX_USER_DATA_BYTES; Loading Loading @@ -240,18 +240,43 @@ public class SmsMessage extends SmsMessageBase { return null; } if (encoding == ENCODING_UNKNOWN) { // Find the best encoding to use TextEncodingDetails ted = calculateLength(message, false); encoding = ted.codeUnitSize; languageTable = ted.languageTable; languageShiftTable = ted.languageShiftTable; if (encoding == ENCODING_7BIT && (languageTable != 0 || languageShiftTable != 0)) { if (header != null) { SmsHeader smsHeader = SmsHeader.fromByteArray(header); if (smsHeader.languageTable != languageTable || smsHeader.languageShiftTable != languageShiftTable) { Log.w(LOG_TAG, "Updating language table in SMS header: " + smsHeader.languageTable + " -> " + languageTable + ", " + smsHeader.languageShiftTable + " -> " + languageShiftTable); smsHeader.languageTable = languageTable; smsHeader.languageShiftTable = languageShiftTable; header = SmsHeader.toByteArray(smsHeader); } } else { SmsHeader smsHeader = new SmsHeader(); smsHeader.languageTable = languageTable; smsHeader.languageShiftTable = languageShiftTable; header = SmsHeader.toByteArray(smsHeader); } } } SubmitPdu ret = new SubmitPdu(); // MTI = SMS-SUBMIT, UDHI = header != null byte mtiByte = (byte)(0x01 | (header != null ? 0x40 : 0x00)); ByteArrayOutputStream bo = getSubmitPduHead( scAddress, destinationAddress, mtiByte, statusReportRequested, ret); // User Data (and length) byte[] userData; if (encoding == ENCODING_UNKNOWN) { // First, try encoding it with the GSM alphabet encoding = ENCODING_7BIT; } try { if (encoding == ENCODING_7BIT) { userData = GsmAlphabet.stringToGsm7BitPackedWithHeader(message, header, Loading Loading @@ -283,6 +308,7 @@ public class SmsMessage extends SmsMessageBase { if (encoding == ENCODING_7BIT) { if ((0xff & userData[0]) > MAX_USER_DATA_SEPTETS) { // Message too long Log.e(LOG_TAG, "Message too long (" + (0xff & userData[0]) + " septets)"); return null; } // TP-Data-Coding-Scheme Loading @@ -297,6 +323,7 @@ public class SmsMessage extends SmsMessageBase { } else { // assume UCS-2 if ((0xff & userData[0]) > MAX_USER_DATA_BYTES) { // Message too long Log.e(LOG_TAG, "Message too long (" + (0xff & userData[0]) + " bytes)"); return null; } // TP-Data-Coding-Scheme Loading