Merge change 22093 into eclair
* changes: cdma sms encoding tweaks and logging / debugging annotations.
This commit is contained in:
@@ -67,6 +67,7 @@ import static android.telephony.SmsMessage.MessageClass;
|
|||||||
*/
|
*/
|
||||||
public class SmsMessage extends SmsMessageBase {
|
public class SmsMessage extends SmsMessageBase {
|
||||||
static final String LOG_TAG = "CDMA";
|
static final String LOG_TAG = "CDMA";
|
||||||
|
private final static Boolean DBG_SMS = false;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Status of a previously submitted SMS.
|
* Status of a previously submitted SMS.
|
||||||
@@ -541,6 +542,7 @@ public class SmsMessage extends SmsMessageBase {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
mBearerData = BearerData.decode(mEnvelope.bearerData);
|
mBearerData = BearerData.decode(mEnvelope.bearerData);
|
||||||
|
if (DBG_SMS) Log.d(LOG_TAG, "MT (decoded) BearerData = " + mBearerData);
|
||||||
messageRef = mBearerData.messageId;
|
messageRef = mBearerData.messageId;
|
||||||
if (mBearerData.userData != null) {
|
if (mBearerData.userData != null) {
|
||||||
userData = mBearerData.userData.payload;
|
userData = mBearerData.userData.payload;
|
||||||
@@ -644,14 +646,14 @@ public class SmsMessage extends SmsMessageBase {
|
|||||||
bearerData.reportReq = false;
|
bearerData.reportReq = false;
|
||||||
|
|
||||||
bearerData.userData = userData;
|
bearerData.userData = userData;
|
||||||
bearerData.hasUserDataHeader = (userData.userDataHeader != null);
|
|
||||||
|
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 ?
|
int teleservice = bearerData.hasUserDataHeader ?
|
||||||
SmsEnvelope.TELESERVICE_WEMT : SmsEnvelope.TELESERVICE_WMT;
|
SmsEnvelope.TELESERVICE_WEMT : SmsEnvelope.TELESERVICE_WMT;
|
||||||
|
|
||||||
byte[] encodedBearerData = BearerData.encode(bearerData);
|
|
||||||
if (encodedBearerData == null) return null;
|
|
||||||
|
|
||||||
SmsEnvelope envelope = new SmsEnvelope();
|
SmsEnvelope envelope = new SmsEnvelope();
|
||||||
envelope.messageType = SmsEnvelope.MESSAGE_TYPE_POINT_TO_POINT;
|
envelope.messageType = SmsEnvelope.MESSAGE_TYPE_POINT_TO_POINT;
|
||||||
envelope.teleService = teleservice;
|
envelope.teleService = teleservice;
|
||||||
|
|||||||
@@ -484,7 +484,7 @@ public final class BearerData {
|
|||||||
Gsm7bitCodingResult result = new Gsm7bitCodingResult();
|
Gsm7bitCodingResult result = new Gsm7bitCodingResult();
|
||||||
result.data = new byte[fullData.length - 1];
|
result.data = new byte[fullData.length - 1];
|
||||||
System.arraycopy(fullData, 1, result.data, 0, fullData.length - 1);
|
System.arraycopy(fullData, 1, result.data, 0, fullData.length - 1);
|
||||||
result.septets = fullData[0];
|
result.septets = fullData[0] & 0x00FF;
|
||||||
return result;
|
return result;
|
||||||
} catch (com.android.internal.telephony.EncodeException ex) {
|
} catch (com.android.internal.telephony.EncodeException ex) {
|
||||||
throw new CodingException("7bit GSM encode failed: " + ex);
|
throw new CodingException("7bit GSM encode failed: " + ex);
|
||||||
@@ -498,6 +498,7 @@ public final class BearerData {
|
|||||||
int udhSeptets = ((udhBytes * 8) + 6) / 7;
|
int udhSeptets = ((udhBytes * 8) + 6) / 7;
|
||||||
Gsm7bitCodingResult gcr = encode7bitGsm(uData.payloadStr, udhSeptets, force);
|
Gsm7bitCodingResult gcr = encode7bitGsm(uData.payloadStr, udhSeptets, force);
|
||||||
uData.msgEncoding = UserData.ENCODING_GSM_7BIT_ALPHABET;
|
uData.msgEncoding = UserData.ENCODING_GSM_7BIT_ALPHABET;
|
||||||
|
uData.msgEncodingSet = true;
|
||||||
uData.numFields = gcr.septets;
|
uData.numFields = gcr.septets;
|
||||||
uData.payload = gcr.data;
|
uData.payload = gcr.data;
|
||||||
uData.payload[0] = (byte)udhData.length;
|
uData.payload[0] = (byte)udhData.length;
|
||||||
@@ -512,6 +513,8 @@ public final class BearerData {
|
|||||||
int udhCodeUnits = (udhBytes + 1) / 2;
|
int udhCodeUnits = (udhBytes + 1) / 2;
|
||||||
int udhPadding = udhBytes % 2;
|
int udhPadding = udhBytes % 2;
|
||||||
int payloadCodeUnits = payload.length / 2;
|
int payloadCodeUnits = payload.length / 2;
|
||||||
|
uData.msgEncoding = UserData.ENCODING_UNICODE_16;
|
||||||
|
uData.msgEncodingSet = true;
|
||||||
uData.numFields = udhCodeUnits + payloadCodeUnits;
|
uData.numFields = udhCodeUnits + payloadCodeUnits;
|
||||||
uData.payload = new byte[uData.numFields * 2];
|
uData.payload = new byte[uData.numFields * 2];
|
||||||
uData.payload[0] = (byte)udhData.length;
|
uData.payload[0] = (byte)udhData.length;
|
||||||
@@ -606,14 +609,16 @@ public final class BearerData {
|
|||||||
* copies by passing outStream directly.
|
* copies by passing outStream directly.
|
||||||
*/
|
*/
|
||||||
encodeUserDataPayload(bData.userData);
|
encodeUserDataPayload(bData.userData);
|
||||||
|
bData.hasUserDataHeader = bData.userData.userDataHeader != null;
|
||||||
|
|
||||||
if (bData.userData.payload.length > SmsMessage.MAX_USER_DATA_BYTES) {
|
if (bData.userData.payload.length > SmsMessage.MAX_USER_DATA_BYTES) {
|
||||||
throw new CodingException("encoded user data too large (" +
|
throw new CodingException("encoded user data too large (" +
|
||||||
bData.userData.payload.length +
|
bData.userData.payload.length +
|
||||||
" > " + SmsMessage.MAX_USER_DATA_BYTES + " bytes)");
|
" > " + 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 = (userData.payload.length * 8) - (userData.numFields * 7);
|
||||||
* userData.paddingBits = 0; // XXX this seems better, but why?
|
* userData.paddingBits = 0; // XXX this seems better, but why?
|
||||||
|
|||||||
@@ -154,7 +154,7 @@ public class UserData {
|
|||||||
builder.append("{ msgEncoding=" + (msgEncodingSet ? msgEncoding : "unset"));
|
builder.append("{ msgEncoding=" + (msgEncodingSet ? msgEncoding : "unset"));
|
||||||
builder.append(", msgType=" + msgType);
|
builder.append(", msgType=" + msgType);
|
||||||
builder.append(", paddingBits=" + paddingBits);
|
builder.append(", paddingBits=" + paddingBits);
|
||||||
builder.append(", numFields=" + (int)numFields);
|
builder.append(", numFields=" + numFields);
|
||||||
builder.append(", userDataHeader=" + userDataHeader);
|
builder.append(", userDataHeader=" + userDataHeader);
|
||||||
builder.append(", payload='" + HexDump.toHexString(payload) + "'");
|
builder.append(", payload='" + HexDump.toHexString(payload) + "'");
|
||||||
builder.append(", payloadStr='" + payloadStr + "'");
|
builder.append(", payloadStr='" + payloadStr + "'");
|
||||||
|
|||||||
Reference in New Issue
Block a user