ComprehensionTlvpublic class ComprehensionTlv extends Object Class for representing COMPREHENSION-TLV objects. |
Fields Summary |
---|
private int | mTag | private boolean | mCr | private int | mLength | private int | mValueIndex | private byte[] | mRawValue |
Constructors Summary |
---|
protected ComprehensionTlv(int tag, boolean cr, int length, byte[] data, int valueIndex)Constructor. Private on purpose. Use
{@link #decodeMany(byte[], int) decodeMany} or
{@link #decode(byte[], int) decode} method.
mTag = tag;
mCr = cr;
mLength = length;
mValueIndex = valueIndex;
mRawValue = data;
|
Methods Summary |
---|
public static com.android.internal.telephony.gsm.stk.ComprehensionTlv | decode(byte[] data, int startIndex)Parses an COMPREHENSION-TLV object from a byte array.
try {
int curIndex = startIndex;
int endIndex = data.length;
/* tag */
int tag;
boolean cr; // Comprehension required flag
int temp = data[curIndex++] & 0xff;
switch (temp) {
case 0:
case 0xff:
case 0x80:
throw new ResultException(ResultCode.CMD_DATA_NOT_UNDERSTOOD);
case 0x7f: // tag is in three-byte format
tag = ((data[curIndex] & 0xff) << 8)
| (data[curIndex + 1] & 0xff);
cr = (tag & 0x8000) != 0;
tag &= ~0x8000;
curIndex += 2;
break;
default: // tag is in single-byte format
tag = temp;
cr = (tag & 0x80) != 0;
tag &= ~0x80;
break;
}
/* length */
int length;
temp = data[curIndex++] & 0xff;
if (temp < 0x80) {
length = temp;
} else if (temp == 0x81) {
length = data[curIndex++] & 0xff;
if (length < 0x80) {
throw new ResultException(
ResultCode.CMD_DATA_NOT_UNDERSTOOD);
}
} else if (temp == 0x82) {
length = ((data[curIndex] & 0xff) << 8)
| (data[curIndex + 1] & 0xff);
curIndex += 2;
if (length < 0x100) {
throw new ResultException(
ResultCode.CMD_DATA_NOT_UNDERSTOOD);
}
} else if (temp == 0x83) {
length = ((data[curIndex] & 0xff) << 16)
| ((data[curIndex + 1] & 0xff) << 8)
| (data[curIndex + 2] & 0xff);
curIndex += 3;
if (length < 0x10000) {
throw new ResultException(
ResultCode.CMD_DATA_NOT_UNDERSTOOD);
}
} else {
throw new ResultException(ResultCode.CMD_DATA_NOT_UNDERSTOOD);
}
return new ComprehensionTlv(tag, cr, length, data, curIndex);
} catch (IndexOutOfBoundsException e) {
throw new ResultException(ResultCode.CMD_DATA_NOT_UNDERSTOOD);
}
| public static java.util.List | decodeMany(byte[] data, int startIndex)Parses a list of COMPREHENSION-TLV objects from a byte array.
ArrayList<ComprehensionTlv> items = new ArrayList<ComprehensionTlv>();
int endIndex = data.length;
while (startIndex < endIndex) {
ComprehensionTlv ctlv = ComprehensionTlv.decode(data, startIndex);
items.add(ctlv);
startIndex = ctlv.mValueIndex + ctlv.mLength;
}
return items;
| public int | getLength()
return mLength;
| public byte[] | getRawValue()
return mRawValue;
| public int | getTag()
return mTag;
| public int | getValueIndex()
return mValueIndex;
| public boolean | isComprehensionRequired()
return mCr;
|
|