10825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville/* 20825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * Copyright (C) 2006 The Android Open Source Project 30825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * 40825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * Licensed under the Apache License, Version 2.0 (the "License"); 50825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * you may not use this file except in compliance with the License. 60825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * You may obtain a copy of the License at 70825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * 80825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * http://www.apache.org/licenses/LICENSE-2.0 90825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * 100825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * Unless required by applicable law or agreed to in writing, software 110825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * distributed under the License is distributed on an "AS IS" BASIS, 120825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 130825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * See the License for the specific language governing permissions and 140825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * limitations under the License. 150825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville */ 160825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 170825495a331bb44df395a0cdb79fab85e68db5d5Wink Savillepackage com.android.internal.telephony.cdma.sms; 180825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 190825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleimport android.telephony.TelephonyManager; 20115632cc56f813bd21543f8532c763d7d2968046Jake Hambyimport android.test.AndroidTestCase; 21115632cc56f813bd21543f8532c763d7d2968046Jake Hambyimport android.test.suitebuilder.annotation.SmallTest; 220825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 23115632cc56f813bd21543f8532c763d7d2968046Jake Hambyimport com.android.internal.telephony.GsmAlphabet.TextEncodingDetails; 240825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleimport com.android.internal.telephony.SmsHeader; 250825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleimport com.android.internal.telephony.cdma.SmsMessage; 260825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleimport com.android.internal.util.HexDump; 270825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 280825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleimport java.util.ArrayList; 29115632cc56f813bd21543f8532c763d7d2968046Jake Hambyimport java.util.Arrays; 300825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 310825495a331bb44df395a0cdb79fab85e68db5d5Wink Savillepublic class CdmaSmsTest extends AndroidTestCase { 32115632cc56f813bd21543f8532c763d7d2968046Jake Hamby 33115632cc56f813bd21543f8532c763d7d2968046Jake Hamby // CJK ideographs, Hiragana, Katakana, full width letters, Cyrillic, etc. 34115632cc56f813bd21543f8532c763d7d2968046Jake Hamby private static final String sUnicodeChars = "\u4e00\u4e01\u4e02\u4e03" + 35115632cc56f813bd21543f8532c763d7d2968046Jake Hamby "\u4e04\u4e05\u4e06\u4e07\u4e08\u4e09\u4e0a\u4e0b\u4e0c\u4e0d" + 36115632cc56f813bd21543f8532c763d7d2968046Jake Hamby "\u4e0e\u4e0f\u3041\u3042\u3043\u3044\u3045\u3046\u3047\u3048" + 37115632cc56f813bd21543f8532c763d7d2968046Jake Hamby "\u30a1\u30a2\u30a3\u30a4\u30a5\u30a6\u30a7\u30a8" + 38115632cc56f813bd21543f8532c763d7d2968046Jake Hamby "\uff10\uff11\uff12\uff13\uff14\uff15\uff16\uff17\uff18" + 39115632cc56f813bd21543f8532c763d7d2968046Jake Hamby "\uff70\uff71\uff72\uff73\uff74\uff75\uff76\uff77\uff78" + 40115632cc56f813bd21543f8532c763d7d2968046Jake Hamby "\u0400\u0401\u0402\u0403\u0404\u0405\u0406\u0407\u0408" + 41115632cc56f813bd21543f8532c763d7d2968046Jake Hamby "\u00a2\u00a9\u00ae\u2122"; 420825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 430825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville @SmallTest 440825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public void testCdmaSmsAddrParsing() throws Exception { 450825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville CdmaSmsAddress addr = CdmaSmsAddress.parse("6502531000"); 460825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(addr.ton, CdmaSmsAddress.TON_UNKNOWN); 470825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(addr.digitMode, CdmaSmsAddress.DIGIT_MODE_4BIT_DTMF); 480825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(addr.numberMode, CdmaSmsAddress.NUMBER_MODE_NOT_DATA_NETWORK); 490825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(addr.numberOfDigits, 10); 500825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(addr.origBytes.length, 10); 510825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville byte[] data = {6, 5, 10, 2, 5, 3, 1, 10, 10, 10}; 520825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville for (int i = 0; i < data.length; i++) { 530825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(addr.origBytes[i], data[i]); 540825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 550825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville addr = CdmaSmsAddress.parse("(650) 253-1000"); 560825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(addr.ton, CdmaSmsAddress.TON_UNKNOWN); 570825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(addr.digitMode, CdmaSmsAddress.DIGIT_MODE_4BIT_DTMF); 580825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(addr.numberMode, CdmaSmsAddress.NUMBER_MODE_NOT_DATA_NETWORK); 590825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(addr.numberOfDigits, 10); 600825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(addr.origBytes.length, 10); 610825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville byte[] data2 = {6, 5, 10, 2, 5, 3, 1, 10, 10, 10}; 620825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville for (int i = 0; i < data2.length; i++) { 630825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(addr.origBytes[i], data2[i]); 640825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 650825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville addr = CdmaSmsAddress.parse("650.253.1000"); 660825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(addr.ton, CdmaSmsAddress.TON_UNKNOWN); 670825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(addr.digitMode, CdmaSmsAddress.DIGIT_MODE_4BIT_DTMF); 680825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(addr.numberMode, CdmaSmsAddress.NUMBER_MODE_NOT_DATA_NETWORK); 690825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(addr.numberOfDigits, 10); 700825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(addr.origBytes.length, 10); 710825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville byte[] data5 = {6, 5, 10, 2, 5, 3, 1, 10, 10, 10}; 720825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville for (int i = 0; i < data2.length; i++) { 730825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(addr.origBytes[i], data5[i]); 740825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 750825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville addr = CdmaSmsAddress.parse("(+886) 917 222 555"); 760825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(addr.ton, CdmaSmsAddress.TON_INTERNATIONAL_OR_IP); 770825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(addr.digitMode, CdmaSmsAddress.DIGIT_MODE_4BIT_DTMF); 780825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(addr.numberMode, CdmaSmsAddress.NUMBER_MODE_NOT_DATA_NETWORK); 790825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(addr.numberOfDigits, 12); 800825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(addr.origBytes.length, 12); 810825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville byte[] data3 = {8, 8, 6, 9, 1, 7, 2, 2, 2, 5, 5, 5}; 820825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville for (int i = 0; i < data3.length; i++) { 830825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(addr.origBytes[i], data3[i]); 840825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 850825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville addr = CdmaSmsAddress.parse("(650) *253-1000 #600"); 860825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville byte[] data4 = {6, 5, 10, 11, 2, 5, 3, 1, 10, 10, 10, 12, 6, 10, 10}; 870825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville for (int i = 0; i < data4.length; i++) { 880825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(addr.origBytes[i], data4[i]); 890825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 900825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville String input = "x@y.com,a@b.com"; 910825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville addr = CdmaSmsAddress.parse(input); 920825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(addr.ton, CdmaSmsAddress.TON_NATIONAL_OR_EMAIL); 930825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(addr.digitMode, CdmaSmsAddress.DIGIT_MODE_8BIT_CHAR); 940825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(addr.numberMode, CdmaSmsAddress.NUMBER_MODE_DATA_NETWORK); 950825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(addr.numberOfDigits, 15); 960825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(addr.origBytes.length, 15); 970825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(new String(addr.origBytes), input); 980825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville addr = CdmaSmsAddress.parse("foo bar"); 990825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(addr.ton, CdmaSmsAddress.TON_UNKNOWN); 1000825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(addr.digitMode, CdmaSmsAddress.DIGIT_MODE_8BIT_CHAR); 1010825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(addr.numberMode, CdmaSmsAddress.NUMBER_MODE_DATA_NETWORK); 1020825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(addr.numberOfDigits, 6); 1030825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(addr.origBytes.length, 6); 1040825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(new String(addr.origBytes), "foobar"); 1050825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville addr = CdmaSmsAddress.parse("f\noo\tb a\rr"); 1060825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(new String(addr.origBytes), "foobar"); 1070825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(CdmaSmsAddress.parse("f\u0000oo bar"), null); 1080825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(CdmaSmsAddress.parse("f\u0007oo bar"), null); 1090825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(CdmaSmsAddress.parse("f\u0080oo bar"), null); 1100825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(CdmaSmsAddress.parse("f\u1ECFboo\u001fbar"), null); 1110825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(CdmaSmsAddress.parse("f\u0080oo bar"), null); 1120825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 1130825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 1140825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville @SmallTest 1150825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public void testUserData7bitGsm() throws Exception { 1160825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville String pdu = "00031040900112488ea794e074d69e1b7392c270326cde9e98"; 1170825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville BearerData bearerData = BearerData.decode(HexDump.hexStringToByteArray(pdu)); 1180825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals("Test standard SMS", bearerData.userData.payloadStr); 1190825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 1200825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 1210825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville @SmallTest 1220825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public void testUserData7bitAscii() throws Exception { 1230825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville String pdu = "0003100160010610262d5ab500"; 1240825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville BearerData bearerData = BearerData.decode(HexDump.hexStringToByteArray(pdu)); 1250825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals("bjjj", bearerData.userData.payloadStr); 1260825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 1270825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 1280825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville @SmallTest 1290825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public void testUserData7bitAsciiTwo() throws Exception { 1300825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville String pdu = "00031001d00109104539b4d052ebb3d0"; 1310825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville BearerData bearerData = BearerData.decode(HexDump.hexStringToByteArray(pdu)); 1320825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals("SMS Rulz", bearerData.userData.payloadStr); 1330825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 1340825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 1350825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville @SmallTest 1360825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public void testUserDataIa5() throws Exception { 1370825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville String pdu = "00031002100109184539b4d052ebb3d0"; 1380825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville BearerData bearerData = BearerData.decode(HexDump.hexStringToByteArray(pdu)); 1390825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals("SMS Rulz", bearerData.userData.payloadStr); 1400825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 1410825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 1420825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville @SmallTest 1430825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public void testUserData7bitAsciiFeedback() throws Exception { 1440825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville BearerData bearerData = new BearerData(); 1450825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville bearerData.messageType = BearerData.MESSAGE_TYPE_DELIVER; 1460825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville bearerData.messageId = 0; 1470825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville bearerData.hasUserDataHeader = false; 1480825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville UserData userData = new UserData(); 1490825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville userData.payloadStr = "Test standard SMS"; 1500825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville userData.msgEncoding = UserData.ENCODING_7BIT_ASCII; 1510825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville userData.msgEncodingSet = true; 1520825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville bearerData.userData = userData; 1530825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville byte []encodedSms = BearerData.encode(bearerData); 1540825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville BearerData revBearerData = BearerData.decode(encodedSms); 1550825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(BearerData.MESSAGE_TYPE_DELIVER, revBearerData.messageType); 1560825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(0, revBearerData.messageId); 1570825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(false, revBearerData.hasUserDataHeader); 1580825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(userData.msgEncoding, revBearerData.userData.msgEncoding); 1590825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(userData.payloadStr.length(), revBearerData.userData.numFields); 1600825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(userData.payloadStr, revBearerData.userData.payloadStr); 1610825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville userData.payloadStr = "Test \u007f standard \u0000 SMS"; 1620825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville revBearerData = BearerData.decode(BearerData.encode(bearerData)); 1630825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals("Test standard SMS", revBearerData.userData.payloadStr); 1640825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville userData.payloadStr = "Test \n standard \r SMS"; 1650825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville revBearerData = BearerData.decode(BearerData.encode(bearerData)); 1660825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(userData.payloadStr, revBearerData.userData.payloadStr); 1670825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville userData.payloadStr = ""; 1680825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville revBearerData = BearerData.decode(BearerData.encode(bearerData)); 1690825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(userData.payloadStr, revBearerData.userData.payloadStr); 1700825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 1710825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 1720825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville @SmallTest 1730825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public void testUserData7bitGsmFeedback() throws Exception { 1740825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville BearerData bearerData = new BearerData(); 1750825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville bearerData.messageType = BearerData.MESSAGE_TYPE_DELIVER; 1760825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville bearerData.messageId = 0; 1770825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville bearerData.hasUserDataHeader = false; 1780825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville UserData userData = new UserData(); 1790825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville userData.payloadStr = "Test standard SMS"; 1800825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville userData.msgEncoding = UserData.ENCODING_GSM_7BIT_ALPHABET; 1810825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville userData.msgEncodingSet = true; 1820825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville bearerData.userData = userData; 1830825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville byte []encodedSms = BearerData.encode(bearerData); 1840825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville BearerData revBearerData = BearerData.decode(encodedSms); 1850825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(BearerData.MESSAGE_TYPE_DELIVER, revBearerData.messageType); 1860825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(0, revBearerData.messageId); 1870825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(false, revBearerData.hasUserDataHeader); 1880825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(userData.msgEncoding, revBearerData.userData.msgEncoding); 1890825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(userData.payloadStr.length(), revBearerData.userData.numFields); 1900825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(userData.payloadStr, revBearerData.userData.payloadStr); 1910825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville userData.payloadStr = "1234567"; 1920825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville revBearerData = BearerData.decode(BearerData.encode(bearerData)); 1930825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(userData.payloadStr, revBearerData.userData.payloadStr); 1940825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville userData.payloadStr = ""; 1950825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville revBearerData = BearerData.decode(BearerData.encode(bearerData)); 1960825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(userData.payloadStr, revBearerData.userData.payloadStr); 1970825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville userData.payloadStr = "12345678901234567890123456789012345678901234567890" + 1980825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville "12345678901234567890123456789012345678901234567890" + 1990825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville "12345678901234567890123456789012345678901234567890" + 2000825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville "1234567890"; 2010825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville revBearerData = BearerData.decode(BearerData.encode(bearerData)); 2020825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(userData.payloadStr, revBearerData.userData.payloadStr); 2030825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville userData.payloadStr = "Test \u007f illegal \u0000 SMS chars"; 2040825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville revBearerData = BearerData.decode(BearerData.encode(bearerData)); 2050825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals("Test illegal SMS chars", revBearerData.userData.payloadStr); 2060825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville userData.payloadStr = "More @ testing\nis great^|^~woohoo"; 2070825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville revBearerData = BearerData.decode(BearerData.encode(bearerData)); 2080825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(userData.payloadStr, revBearerData.userData.payloadStr); 2090825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville SmsHeader.ConcatRef concatRef = new SmsHeader.ConcatRef(); 2100825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville concatRef.refNumber = 0xEE; 2110825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville concatRef.msgCount = 2; 2120825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville concatRef.seqNumber = 2; 2130825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville concatRef.isEightBits = true; 2140825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville SmsHeader smsHeader = new SmsHeader(); 2150825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville smsHeader.concatRef = concatRef; 2160825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville byte[] encodedHeader = SmsHeader.toByteArray(smsHeader); 2170825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville userData.userDataHeader = smsHeader; 2180825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville revBearerData = BearerData.decode(BearerData.encode(bearerData)); 2190825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(userData.payloadStr, revBearerData.userData.payloadStr); 2200825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville SmsHeader decodedHeader = revBearerData.userData.userDataHeader; 2210825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(decodedHeader.concatRef.refNumber, concatRef.refNumber); 2220825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(decodedHeader.concatRef.msgCount, concatRef.msgCount); 2230825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(decodedHeader.concatRef.seqNumber, concatRef.seqNumber); 2240825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 2250825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 2260825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville @SmallTest 2270825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public void testUserDataUtf16Feedback() throws Exception { 2280825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville BearerData bearerData = new BearerData(); 2290825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville bearerData.messageType = BearerData.MESSAGE_TYPE_DELIVER; 2300825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville bearerData.messageId = 0; 2310825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville bearerData.hasUserDataHeader = false; 2320825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville UserData userData = new UserData(); 2330825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville userData.payloadStr = "\u0160u\u1E5B\u0301r\u1ECFg\uD835\uDC1At\u00E9\u4E002\u3042"; 2340825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville userData.msgEncoding = UserData.ENCODING_UNICODE_16; 2350825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville userData.msgEncodingSet = true; 2360825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville bearerData.userData = userData; 2370825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville byte []encodedSms = BearerData.encode(bearerData); 2380825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville BearerData revBearerData = BearerData.decode(encodedSms); 2390825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(BearerData.MESSAGE_TYPE_DELIVER, revBearerData.messageType); 2400825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(0, revBearerData.messageId); 2410825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(false, revBearerData.hasUserDataHeader); 2420825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(userData.msgEncoding, revBearerData.userData.msgEncoding); 2430825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(userData.payloadStr.length(), revBearerData.userData.numFields); 2440825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(userData.payloadStr, revBearerData.userData.payloadStr); 2450825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville userData.msgEncoding = UserData.ENCODING_OCTET; 2460825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville userData.msgEncodingSet = false; 2470825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville revBearerData = BearerData.decode(BearerData.encode(bearerData)); 2480825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(BearerData.MESSAGE_TYPE_DELIVER, revBearerData.messageType); 2490825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(0, revBearerData.messageId); 2500825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(false, revBearerData.hasUserDataHeader); 2510825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(userData.msgEncoding, revBearerData.userData.msgEncoding); 2520825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(userData.payloadStr.length(), revBearerData.userData.numFields); 2530825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(userData.payloadStr, revBearerData.userData.payloadStr); 2540825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville userData.payloadStr = "1234567"; 2550825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville revBearerData = BearerData.decode(BearerData.encode(bearerData)); 2560825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(userData.payloadStr, revBearerData.userData.payloadStr); 2570825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville userData.payloadStr = ""; 2580825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville revBearerData = BearerData.decode(BearerData.encode(bearerData)); 2590825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(userData.payloadStr, revBearerData.userData.payloadStr); 2600825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 2610825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 2620825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville @SmallTest 2630825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public void testMonolithicOne() throws Exception { 2640825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville String pdu = "0003200010010410168d2002010503060812011101590501c706069706180000000701c108" + 2650825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville "01c00901800a01e00b01030c01c00d01070e05039acc13880f018011020566"; 2660825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville BearerData bearerData = BearerData.decode(HexDump.hexStringToByteArray(pdu)); 2670825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(bearerData.messageType, BearerData.MESSAGE_TYPE_SUBMIT); 2680825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(bearerData.messageId, 1); 2690825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(bearerData.priority, BearerData.PRIORITY_EMERGENCY); 2700825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(bearerData.privacy, BearerData.PRIVACY_CONFIDENTIAL); 2710825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(bearerData.userAckReq, true); 2720825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(bearerData.readAckReq, true); 2730825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(bearerData.deliveryAckReq, true); 2740825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(bearerData.reportReq, false); 2750825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(bearerData.numberOfMessages, 3); 2760825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(bearerData.alert, BearerData.ALERT_HIGH_PRIO); 2770825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(bearerData.language, BearerData.LANGUAGE_HEBREW); 2780825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(bearerData.callbackNumber.digitMode, CdmaSmsAddress.DIGIT_MODE_4BIT_DTMF); 2790825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(bearerData.callbackNumber.numberMode, 2800825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville CdmaSmsAddress.NUMBER_MODE_NOT_DATA_NETWORK); 2810825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(bearerData.callbackNumber.ton, CdmaSmsAddress.TON_UNKNOWN); 2820825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(bearerData.callbackNumber.numberPlan, CdmaSmsAddress.NUMBERING_PLAN_UNKNOWN); 2830825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(bearerData.callbackNumber.numberOfDigits, 7); 2840825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(bearerData.callbackNumber.address, "3598271"); 2850825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(bearerData.displayMode, BearerData.DISPLAY_MODE_USER); 2860825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(bearerData.depositIndex, 1382); 2870825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(bearerData.userResponseCode, 5); 2880825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(bearerData.msgCenterTimeStamp.year, 2008); 2890825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(bearerData.msgCenterTimeStamp.month, 11); 2900825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(bearerData.msgCenterTimeStamp.monthDay, 1); 2910825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(bearerData.msgCenterTimeStamp.hour, 11); 2920825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(bearerData.msgCenterTimeStamp.minute, 1); 2930825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(bearerData.msgCenterTimeStamp.second, 59); 2940825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(bearerData.validityPeriodAbsolute, null); 2950825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(bearerData.validityPeriodRelative, 193); 2960825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(bearerData.deferredDeliveryTimeAbsolute.year, 1997); 2970825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(bearerData.deferredDeliveryTimeAbsolute.month, 5); 2980825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(bearerData.deferredDeliveryTimeAbsolute.monthDay, 18); 2990825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(bearerData.deferredDeliveryTimeAbsolute.hour, 0); 3000825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(bearerData.deferredDeliveryTimeAbsolute.minute, 0); 3010825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(bearerData.deferredDeliveryTimeAbsolute.second, 0); 3020825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(bearerData.deferredDeliveryTimeRelative, 199); 3030825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(bearerData.hasUserDataHeader, false); 3040825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(bearerData.userData.msgEncoding, UserData.ENCODING_7BIT_ASCII); 3050825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(bearerData.userData.numFields, 2); 3060825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(bearerData.userData.payloadStr, "hi"); 3070825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 3080825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 3090825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville @SmallTest 3100825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public void testMonolithicTwo() throws Exception { 3110825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville String pdu = "0003200010010410168d200201050306081201110159050192060697061800000007013d0" + 3120825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville "801c00901800a01e00b01030c01c00d01070e05039acc13880f018011020566"; 3130825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville BearerData bearerData = BearerData.decode(HexDump.hexStringToByteArray(pdu)); 3140825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(bearerData.messageType, BearerData.MESSAGE_TYPE_SUBMIT); 3150825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(bearerData.messageId, 1); 3160825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(bearerData.priority, BearerData.PRIORITY_EMERGENCY); 3170825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(bearerData.privacy, BearerData.PRIVACY_CONFIDENTIAL); 3180825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(bearerData.userAckReq, true); 3190825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(bearerData.readAckReq, true); 3200825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(bearerData.deliveryAckReq, true); 3210825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(bearerData.reportReq, false); 3220825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(bearerData.numberOfMessages, 3); 3230825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(bearerData.alert, BearerData.ALERT_HIGH_PRIO); 3240825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(bearerData.language, BearerData.LANGUAGE_HEBREW); 3250825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(bearerData.callbackNumber.digitMode, CdmaSmsAddress.DIGIT_MODE_4BIT_DTMF); 3260825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(bearerData.callbackNumber.numberMode, 3270825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville CdmaSmsAddress.NUMBER_MODE_NOT_DATA_NETWORK); 3280825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(bearerData.callbackNumber.ton, CdmaSmsAddress.TON_UNKNOWN); 3290825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(bearerData.callbackNumber.numberPlan, CdmaSmsAddress.NUMBERING_PLAN_UNKNOWN); 3300825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(bearerData.callbackNumber.numberOfDigits, 7); 3310825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(bearerData.callbackNumber.address, "3598271"); 3320825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(bearerData.displayMode, BearerData.DISPLAY_MODE_USER); 3330825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(bearerData.depositIndex, 1382); 3340825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(bearerData.userResponseCode, 5); 3350825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(bearerData.msgCenterTimeStamp.year, 2008); 3360825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(bearerData.msgCenterTimeStamp.month, 11); 3370825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(bearerData.msgCenterTimeStamp.monthDay, 1); 3380825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(bearerData.msgCenterTimeStamp.hour, 11); 3390825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(bearerData.msgCenterTimeStamp.minute, 1); 3400825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(bearerData.msgCenterTimeStamp.second, 59); 3410825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(bearerData.validityPeriodAbsolute, null); 3420825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(bearerData.validityPeriodRelative, 61); 3430825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(bearerData.deferredDeliveryTimeAbsolute.year, 1997); 3440825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(bearerData.deferredDeliveryTimeAbsolute.month, 5); 3450825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(bearerData.deferredDeliveryTimeAbsolute.monthDay, 18); 3460825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(bearerData.deferredDeliveryTimeAbsolute.hour, 0); 3470825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(bearerData.deferredDeliveryTimeAbsolute.minute, 0); 3480825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(bearerData.deferredDeliveryTimeAbsolute.second, 0); 3490825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(bearerData.deferredDeliveryTimeRelative, 146); 3500825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(bearerData.hasUserDataHeader, false); 3510825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(bearerData.userData.msgEncoding, UserData.ENCODING_7BIT_ASCII); 3520825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(bearerData.userData.numFields, 2); 3530825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(bearerData.userData.payloadStr, "hi"); 3540825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 3550825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 3560825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville @SmallTest 3570825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public void testUserDataHeaderConcatRefFeedback() throws Exception { 3580825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville BearerData bearerData = new BearerData(); 3590825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville bearerData.messageType = BearerData.MESSAGE_TYPE_DELIVER; 3600825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville bearerData.messageId = 55; 3610825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville SmsHeader.ConcatRef concatRef = new SmsHeader.ConcatRef(); 3620825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville concatRef.refNumber = 0xEE; 3630825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville concatRef.msgCount = 2; 3640825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville concatRef.seqNumber = 2; 3650825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville concatRef.isEightBits = true; 3660825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville SmsHeader smsHeader = new SmsHeader(); 3670825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville smsHeader.concatRef = concatRef; 3680825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville byte[] encodedHeader = SmsHeader.toByteArray(smsHeader); 3690825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville SmsHeader decodedHeader = SmsHeader.fromByteArray(encodedHeader); 3700825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(decodedHeader.concatRef.refNumber, concatRef.refNumber); 3710825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(decodedHeader.concatRef.msgCount, concatRef.msgCount); 3720825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(decodedHeader.concatRef.seqNumber, concatRef.seqNumber); 3730825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(decodedHeader.concatRef.isEightBits, concatRef.isEightBits); 3740825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(decodedHeader.portAddrs, null); 3750825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville UserData userData = new UserData(); 3760825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville userData.payloadStr = "User Data Header (UDH) feedback test"; 3770825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville userData.userDataHeader = smsHeader; 3780825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville bearerData.userData = userData; 3790825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville byte[] encodedSms = BearerData.encode(bearerData); 3800825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville BearerData revBearerData = BearerData.decode(encodedSms); 3810825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville decodedHeader = revBearerData.userData.userDataHeader; 3820825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(decodedHeader.concatRef.refNumber, concatRef.refNumber); 3830825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(decodedHeader.concatRef.msgCount, concatRef.msgCount); 3840825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(decodedHeader.concatRef.seqNumber, concatRef.seqNumber); 3850825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(decodedHeader.concatRef.isEightBits, concatRef.isEightBits); 3860825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(decodedHeader.portAddrs, null); 3870825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 3880825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 3890825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville @SmallTest 3900825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public void testUserDataHeaderIllegalConcatRef() throws Exception { 3910825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville BearerData bearerData = new BearerData(); 3920825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville bearerData.messageType = BearerData.MESSAGE_TYPE_DELIVER; 3930825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville bearerData.messageId = 55; 3940825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville SmsHeader.ConcatRef concatRef = new SmsHeader.ConcatRef(); 3950825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville concatRef.refNumber = 0x10; 3960825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville concatRef.msgCount = 0; 3970825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville concatRef.seqNumber = 2; 3980825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville concatRef.isEightBits = true; 3990825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville SmsHeader smsHeader = new SmsHeader(); 4000825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville smsHeader.concatRef = concatRef; 4010825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville byte[] encodedHeader = SmsHeader.toByteArray(smsHeader); 4020825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville SmsHeader decodedHeader = SmsHeader.fromByteArray(encodedHeader); 4030825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(decodedHeader.concatRef, null); 4040825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville concatRef.isEightBits = false; 4050825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville encodedHeader = SmsHeader.toByteArray(smsHeader); 4060825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville decodedHeader = SmsHeader.fromByteArray(encodedHeader); 4070825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(decodedHeader.concatRef, null); 4080825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville concatRef.msgCount = 1; 4090825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville concatRef.seqNumber = 2; 4100825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville encodedHeader = SmsHeader.toByteArray(smsHeader); 4110825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville decodedHeader = SmsHeader.fromByteArray(encodedHeader); 4120825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(decodedHeader.concatRef, null); 4130825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville concatRef.msgCount = 1; 4140825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville concatRef.seqNumber = 0; 4150825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville encodedHeader = SmsHeader.toByteArray(smsHeader); 4160825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville decodedHeader = SmsHeader.fromByteArray(encodedHeader); 4170825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(decodedHeader.concatRef, null); 4180825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville concatRef.msgCount = 2; 4190825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville concatRef.seqNumber = 1; 4200825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville encodedHeader = SmsHeader.toByteArray(smsHeader); 4210825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville decodedHeader = SmsHeader.fromByteArray(encodedHeader); 4220825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(decodedHeader.concatRef.msgCount, 2); 4230825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(decodedHeader.concatRef.seqNumber, 1); 4240825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 4250825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 4260825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville @SmallTest 4270825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public void testUserDataHeaderMixedFeedback() throws Exception { 4280825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville BearerData bearerData = new BearerData(); 4290825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville bearerData.messageType = BearerData.MESSAGE_TYPE_DELIVER; 4300825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville bearerData.messageId = 42; 4310825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville SmsHeader.ConcatRef concatRef = new SmsHeader.ConcatRef(); 4320825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville concatRef.refNumber = 0x34; 4330825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville concatRef.msgCount = 5; 4340825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville concatRef.seqNumber = 2; 4350825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville concatRef.isEightBits = false; 4360825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville SmsHeader.PortAddrs portAddrs = new SmsHeader.PortAddrs(); 4370825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville portAddrs.destPort = 88; 4380825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville portAddrs.origPort = 66; 4390825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville portAddrs.areEightBits = false; 4400825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville SmsHeader smsHeader = new SmsHeader(); 4410825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville smsHeader.concatRef = concatRef; 4420825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville smsHeader.portAddrs = portAddrs; 4430825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville byte[] encodedHeader = SmsHeader.toByteArray(smsHeader); 4440825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville SmsHeader decodedHeader = SmsHeader.fromByteArray(encodedHeader); 4450825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(decodedHeader.concatRef.refNumber, concatRef.refNumber); 4460825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(decodedHeader.concatRef.msgCount, concatRef.msgCount); 4470825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(decodedHeader.concatRef.seqNumber, concatRef.seqNumber); 4480825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(decodedHeader.concatRef.isEightBits, concatRef.isEightBits); 4490825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(decodedHeader.portAddrs.destPort, portAddrs.destPort); 4500825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(decodedHeader.portAddrs.origPort, portAddrs.origPort); 4510825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(decodedHeader.portAddrs.areEightBits, portAddrs.areEightBits); 4520825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville UserData userData = new UserData(); 4530825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville userData.payloadStr = "User Data Header (UDH) feedback test"; 4540825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville userData.userDataHeader = smsHeader; 4550825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville bearerData.userData = userData; 4560825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville byte[] encodedSms = BearerData.encode(bearerData); 4570825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville BearerData revBearerData = BearerData.decode(encodedSms); 4580825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville decodedHeader = revBearerData.userData.userDataHeader; 4590825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(decodedHeader.concatRef.refNumber, concatRef.refNumber); 4600825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(decodedHeader.concatRef.msgCount, concatRef.msgCount); 4610825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(decodedHeader.concatRef.seqNumber, concatRef.seqNumber); 4620825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(decodedHeader.concatRef.isEightBits, concatRef.isEightBits); 4630825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(decodedHeader.portAddrs.destPort, portAddrs.destPort); 4640825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(decodedHeader.portAddrs.origPort, portAddrs.origPort); 4650825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(decodedHeader.portAddrs.areEightBits, portAddrs.areEightBits); 4660825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 4670825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 4680825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville @SmallTest 4690825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public void testReplyOption() throws Exception { 4700825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville String pdu1 = "0003104090011648b6a794e0705476bf77bceae934fe5f6d94d87450080a0180"; 4710825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville BearerData bd1 = BearerData.decode(HexDump.hexStringToByteArray(pdu1)); 4720825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals("Test Acknowledgement 1", bd1.userData.payloadStr); 4730825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(true, bd1.userAckReq); 4740825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(false, bd1.deliveryAckReq); 4750825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(false, bd1.readAckReq); 4760825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(false, bd1.reportReq); 4770825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville String pdu2 = "0003104090011648b6a794e0705476bf77bceae934fe5f6d94d87490080a0140"; 4780825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville BearerData bd2 = BearerData.decode(HexDump.hexStringToByteArray(pdu2)); 4790825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals("Test Acknowledgement 2", bd2.userData.payloadStr); 4800825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(false, bd2.userAckReq); 4810825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(true, bd2.deliveryAckReq); 4820825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(false, bd2.readAckReq); 4830825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(false, bd2.reportReq); 4840825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville String pdu3 = "0003104090011648b6a794e0705476bf77bceae934fe5f6d94d874d0080a0120"; 4850825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville BearerData bd3 = BearerData.decode(HexDump.hexStringToByteArray(pdu3)); 4860825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals("Test Acknowledgement 3", bd3.userData.payloadStr); 4870825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(false, bd3.userAckReq); 4880825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(false, bd3.deliveryAckReq); 4890825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(true, bd3.readAckReq); 4900825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(false, bd3.reportReq); 4910825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville String pdu4 = "0003104090011648b6a794e0705476bf77bceae934fe5f6d94d87510080a0110"; 4920825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville BearerData bd4 = BearerData.decode(HexDump.hexStringToByteArray(pdu4)); 4930825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals("Test Acknowledgement 4", bd4.userData.payloadStr); 4940825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(false, bd4.userAckReq); 4950825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(false, bd4.deliveryAckReq); 4960825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(false, bd4.readAckReq); 4970825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(true, bd4.reportReq); 4980825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 4990825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 5000825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville @SmallTest 5010825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public void testReplyOptionFeedback() throws Exception { 5020825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville BearerData bearerData = new BearerData(); 5030825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville bearerData.messageType = BearerData.MESSAGE_TYPE_DELIVER; 5040825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville bearerData.messageId = 0; 5050825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville bearerData.hasUserDataHeader = false; 5060825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville UserData userData = new UserData(); 5070825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville userData.payloadStr = "test reply option"; 5080825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville bearerData.userData = userData; 5090825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville bearerData.userAckReq = true; 5100825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville byte []encodedSms = BearerData.encode(bearerData); 5110825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville BearerData revBearerData = BearerData.decode(encodedSms); 5120825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(true, revBearerData.userAckReq); 5130825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(false, revBearerData.deliveryAckReq); 5140825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(false, revBearerData.readAckReq); 5150825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(false, revBearerData.reportReq); 5160825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville bearerData.userAckReq = false; 5170825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville bearerData.deliveryAckReq = true; 5180825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville encodedSms = BearerData.encode(bearerData); 5190825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville revBearerData = BearerData.decode(encodedSms); 5200825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(false, revBearerData.userAckReq); 5210825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(true, revBearerData.deliveryAckReq); 5220825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(false, revBearerData.readAckReq); 5230825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(false, revBearerData.reportReq); 5240825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville bearerData.deliveryAckReq = false; 5250825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville bearerData.readAckReq = true; 5260825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville encodedSms = BearerData.encode(bearerData); 5270825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville revBearerData = BearerData.decode(encodedSms); 5280825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(false, revBearerData.userAckReq); 5290825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(false, revBearerData.deliveryAckReq); 5300825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(true, revBearerData.readAckReq); 5310825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(false, revBearerData.reportReq); 5320825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville bearerData.readAckReq = false; 5330825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville bearerData.reportReq = true; 5340825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville encodedSms = BearerData.encode(bearerData); 5350825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville revBearerData = BearerData.decode(encodedSms); 5360825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(false, revBearerData.userAckReq); 5370825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(false, revBearerData.deliveryAckReq); 5380825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(false, revBearerData.readAckReq); 5390825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(true, revBearerData.reportReq); 5400825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 5410825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 5420825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville @SmallTest 5430825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public void testNumberOfMessages() throws Exception { 5440825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // Note that the message text below does not properly reflect 5450825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // the message count. The author of these messages was 5460825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // apparently unaware that the values are bcd encoded, and the 5470825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // values being tested against (not the ones in the message 5480825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // text) are actually correct. 5490825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville String pdu1 = "000310409001124896a794e07595f69f199540ea759a0dc8e00b0163"; 5500825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville BearerData bd1 = BearerData.decode(HexDump.hexStringToByteArray(pdu1)); 5510825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals("Test Voice mail 99", bd1.userData.payloadStr); 5520825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(63, bd1.numberOfMessages); 5530825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville String pdu2 = "00031040900113489ea794e07595f69f199540ea759a0988c0600b0164"; 5540825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville BearerData bd2 = BearerData.decode(HexDump.hexStringToByteArray(pdu2)); 5550825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals("Test Voice mail 100", bd2.userData.payloadStr); 5560825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(64, bd2.numberOfMessages); 5570825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 5580825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 5590825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville @SmallTest 5600825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public void testCallbackNum() throws Exception { 5610825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville String pdu1 = "00031040900112488ea794e070d436cb638bc5e035ce2f97900e06910431323334"; 5620825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville BearerData bd1 = BearerData.decode(HexDump.hexStringToByteArray(pdu1)); 5630825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals("Test Callback nbr", bd1.userData.payloadStr); 5640825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(CdmaSmsAddress.DIGIT_MODE_8BIT_CHAR, bd1.callbackNumber.digitMode); 5650825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(CdmaSmsAddress.TON_INTERNATIONAL_OR_IP, bd1.callbackNumber.ton); 5660825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(CdmaSmsAddress.NUMBER_MODE_NOT_DATA_NETWORK, bd1.callbackNumber.numberMode); 5670825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(CdmaSmsAddress.NUMBERING_PLAN_ISDN_TELEPHONY, bd1.callbackNumber.numberPlan); 5680825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals("1234", bd1.callbackNumber.address); 5690825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 5700825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 5710825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville @SmallTest 5720825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public void testCallbackNumDtmf() throws Exception { 5730825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville String pdu1 = "00031002300109104539b4d052ebb3d00e07052d4c90a55080"; 5740825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville BearerData bd1 = BearerData.decode(HexDump.hexStringToByteArray(pdu1)); 5750825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals("SMS Rulz", bd1.userData.payloadStr); 5760825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(CdmaSmsAddress.DIGIT_MODE_4BIT_DTMF, bd1.callbackNumber.digitMode); 5770825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(CdmaSmsAddress.TON_UNKNOWN, bd1.callbackNumber.ton); 5780825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(CdmaSmsAddress.NUMBER_MODE_NOT_DATA_NETWORK, bd1.callbackNumber.numberMode); 5790825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(CdmaSmsAddress.NUMBERING_PLAN_UNKNOWN, bd1.callbackNumber.numberPlan); 5800825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals("5099214001", bd1.callbackNumber.address); 5810825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 5820825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 5830825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville @SmallTest 5840825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public void testCallbackNumFeedback() throws Exception { 5850825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville BearerData bearerData = new BearerData(); 5860825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville bearerData.messageType = BearerData.MESSAGE_TYPE_DELIVER; 5870825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville bearerData.messageId = 0; 5880825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville bearerData.hasUserDataHeader = false; 5890825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville UserData userData = new UserData(); 5900825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville userData.payloadStr = "test callback number"; 5910825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville bearerData.userData = userData; 5920825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville CdmaSmsAddress addr = new CdmaSmsAddress(); 5930825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville addr.digitMode = CdmaSmsAddress.DIGIT_MODE_8BIT_CHAR; 5940825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville addr.ton = CdmaSmsAddress.TON_NATIONAL_OR_EMAIL; 5950825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville addr.numberMode = CdmaSmsAddress.NUMBER_MODE_NOT_DATA_NETWORK; 5960825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville addr.numberPlan = CdmaSmsAddress.NUMBERING_PLAN_UNKNOWN; 5970825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville addr.address = "8005551212"; 5980825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville addr.numberOfDigits = (byte)addr.address.length(); 5990825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville bearerData.callbackNumber = addr; 6000825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville byte []encodedSms = BearerData.encode(bearerData); 6010825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville BearerData revBearerData = BearerData.decode(encodedSms); 6020825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville CdmaSmsAddress revAddr = revBearerData.callbackNumber; 6030825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(addr.digitMode, revAddr.digitMode); 6040825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(addr.ton, revAddr.ton); 6050825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(addr.numberMode, revAddr.numberMode); 6060825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(addr.numberPlan, revAddr.numberPlan); 6070825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(addr.numberOfDigits, revAddr.numberOfDigits); 6080825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(addr.address, revAddr.address); 6090825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville addr.address = "8*55#1012"; 6100825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville addr.numberOfDigits = (byte)addr.address.length(); 6110825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville addr.digitMode = CdmaSmsAddress.DIGIT_MODE_4BIT_DTMF; 6120825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville encodedSms = BearerData.encode(bearerData); 6130825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville revBearerData = BearerData.decode(encodedSms); 6140825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville revAddr = revBearerData.callbackNumber; 6150825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(addr.digitMode, revAddr.digitMode); 6160825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(addr.numberOfDigits, revAddr.numberOfDigits); 6170825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(addr.address, revAddr.address); 6180825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 6190825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 6200825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville @SmallTest 6210825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public void testPrivacyIndicator() throws Exception { 6220825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville String pdu1 = "0003104090010c485f4194dfea34becf61b840090140"; 6230825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville BearerData bd1 = BearerData.decode(HexDump.hexStringToByteArray(pdu1)); 6240825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(bd1.privacy, BearerData.PRIVACY_RESTRICTED); 6250825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville String pdu2 = "0003104090010c485f4194dfea34becf61b840090180"; 6260825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville BearerData bd2 = BearerData.decode(HexDump.hexStringToByteArray(pdu2)); 6270825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(bd2.privacy, BearerData.PRIVACY_CONFIDENTIAL); 6280825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville String pdu3 = "0003104090010c485f4194dfea34becf61b8400901c0"; 6290825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville BearerData bd3 = BearerData.decode(HexDump.hexStringToByteArray(pdu3)); 6300825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(bd3.privacy, BearerData.PRIVACY_SECRET); 6310825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 6320825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 6330825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville @SmallTest 6340825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public void testPrivacyIndicatorFeedback() throws Exception { 6350825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville BearerData bearerData = new BearerData(); 6360825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville bearerData.messageType = BearerData.MESSAGE_TYPE_DELIVER; 6370825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville bearerData.messageId = 0; 6380825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville bearerData.hasUserDataHeader = false; 6390825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville UserData userData = new UserData(); 6400825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville userData.payloadStr = "test privacy indicator"; 6410825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville bearerData.userData = userData; 6420825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville bearerData.privacy = BearerData.PRIVACY_SECRET; 6430825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville bearerData.privacyIndicatorSet = true; 6440825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville byte []encodedSms = BearerData.encode(bearerData); 6450825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville BearerData revBearerData = BearerData.decode(encodedSms); 6460825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(revBearerData.userData.payloadStr, userData.payloadStr); 6470825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(revBearerData.privacyIndicatorSet, true); 6480825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(revBearerData.privacy, BearerData.PRIVACY_SECRET); 6490825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville bearerData.privacy = BearerData.PRIVACY_RESTRICTED; 6500825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville encodedSms = BearerData.encode(bearerData); 6510825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville revBearerData = BearerData.decode(encodedSms); 6520825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(revBearerData.privacy, BearerData.PRIVACY_RESTRICTED); 6530825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 6540825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 6550825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville @SmallTest 6560825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public void testMsgDeliveryAlert() throws Exception { 6570825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville String pdu1 = "0003104090010d4866a794e07055965b91d040300c0100"; 6580825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville BearerData bd1 = BearerData.decode(HexDump.hexStringToByteArray(pdu1)); 6590825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(bd1.alert, 0); 6600825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(bd1.userData.payloadStr, "Test Alert 0"); 6610825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville String pdu2 = "0003104090010d4866a794e07055965b91d140300c0140"; 6620825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville BearerData bd2 = BearerData.decode(HexDump.hexStringToByteArray(pdu2)); 6630825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(bd2.alert, 1); 6640825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(bd2.userData.payloadStr, "Test Alert 1"); 6650825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville String pdu3 = "0003104090010d4866a794e07055965b91d240300c0180"; 6660825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville BearerData bd3 = BearerData.decode(HexDump.hexStringToByteArray(pdu3)); 6670825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(bd3.alert, 2); 6680825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(bd3.userData.payloadStr, "Test Alert 2"); 6690825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville String pdu4 = "0003104090010d4866a794e07055965b91d340300c01c0"; 6700825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville BearerData bd4 = BearerData.decode(HexDump.hexStringToByteArray(pdu4)); 6710825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(bd4.alert, 3); 6720825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(bd4.userData.payloadStr, "Test Alert 3"); 6730825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville String pdu5 = "00031000000126114F4CBCFA20DB979F3C39F2A0C9976" + 6740825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville "69ED979794187665E5D1028EFA7A6840E1062D3D39A900C028000"; 6750825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville BearerData bd5 = BearerData.decode(HexDump.hexStringToByteArray(pdu5)); 6760825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(bd5.alert, BearerData.ALERT_MEDIUM_PRIO); 6770825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(bd5.userData.payloadStr, "test message delivery alert (with 8 bits)"); 6780825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville String pdu6 = "00031000000126114F4CBCFA20DB979F3C39F2A0C9976" + 6790825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville "69ED979794187665E5D1028EFA7A6840C1062D3D39A900C00"; 6800825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville BearerData bd6 = BearerData.decode(HexDump.hexStringToByteArray(pdu6)); 6810825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(bd6.userData.payloadStr, "test message delivery alert (with 0 bits)"); 6820825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(bd6.alertIndicatorSet, false); 6830825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 6840825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 6850825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville @SmallTest 6860825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public void testMiscParams() throws Exception { 6870825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville String pdu1 = "00031002400109104539b4d052ebb3d00c0180"; 6880825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville BearerData bd1 = BearerData.decode(HexDump.hexStringToByteArray(pdu1)); 6890825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(bd1.alert, BearerData.ALERT_MEDIUM_PRIO); 6900825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(bd1.userData.payloadStr, "SMS Rulz"); 6910825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville String pdu2 = "00031002500109104539b4d052ebb3d00801800901c0"; 6920825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville BearerData bd2 = BearerData.decode(HexDump.hexStringToByteArray(pdu2)); 6930825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(bd2.priority, BearerData.PRIORITY_URGENT); 6940825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(bd2.privacy, BearerData.PRIVACY_SECRET); 6950825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(bd2.userData.payloadStr, "SMS Rulz"); 6960825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville String pdu3 = "00031002600109104539b4d052ebb3d00901400c01c0"; 6970825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville BearerData bd3 = BearerData.decode(HexDump.hexStringToByteArray(pdu3)); 6980825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(bd3.privacy, BearerData.PRIVACY_RESTRICTED); 6990825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(bd3.alert, BearerData.ALERT_HIGH_PRIO); 7000825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(bd3.userData.payloadStr, "SMS Rulz"); 7010825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville String pdu4 = "00031002700109104539b4d052ebb3d00f0105"; 7020825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville BearerData bd4 = BearerData.decode(HexDump.hexStringToByteArray(pdu4)); 7030825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(bd4.displayMode, BearerData.DISPLAY_MODE_IMMEDIATE); 7040825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(bd4.userData.payloadStr, "SMS Rulz"); 7050825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 7060825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville @SmallTest 7070825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public void testMsgDeliveryAlertFeedback() throws Exception { 7080825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville BearerData bearerData = new BearerData(); 7090825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville bearerData.messageType = BearerData.MESSAGE_TYPE_DELIVER; 7100825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville bearerData.messageId = 0; 7110825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville bearerData.hasUserDataHeader = false; 7120825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville UserData userData = new UserData(); 7130825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville userData.payloadStr = "test message delivery alert"; 7140825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville bearerData.userData = userData; 7150825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville bearerData.alert = BearerData.ALERT_MEDIUM_PRIO; 7160825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville bearerData.alertIndicatorSet = true; 7170825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville byte []encodedSms = BearerData.encode(bearerData); 7180825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville BearerData revBearerData = BearerData.decode(encodedSms); 7190825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(revBearerData.userData.payloadStr, userData.payloadStr); 7200825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(revBearerData.alertIndicatorSet, true); 7210825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(revBearerData.alert, bearerData.alert); 7220825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville bearerData.alert = BearerData.ALERT_HIGH_PRIO; 7230825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville encodedSms = BearerData.encode(bearerData); 7240825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville revBearerData = BearerData.decode(encodedSms); 7250825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(revBearerData.userData.payloadStr, userData.payloadStr); 7260825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(revBearerData.alertIndicatorSet, true); 7270825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(revBearerData.alert, bearerData.alert); 7280825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 7290825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 7300825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville @SmallTest 7310825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public void testLanguageIndicator() throws Exception { 7320825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville String pdu1 = "0003104090011748bea794e0731436ef3bd7c2e0352eef27a1c263fe58080d0101"; 7330825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville BearerData bd1 = BearerData.decode(HexDump.hexStringToByteArray(pdu1)); 7340825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(bd1.userData.payloadStr, "Test Language indicator"); 7350825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(bd1.language, BearerData.LANGUAGE_ENGLISH); 7360825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville String pdu2 = "0003104090011748bea794e0731436ef3bd7c2e0352eef27a1c263fe58080d0106"; 7370825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville BearerData bd2 = BearerData.decode(HexDump.hexStringToByteArray(pdu2)); 7380825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(bd2.userData.payloadStr, "Test Language indicator"); 7390825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(bd2.language, BearerData.LANGUAGE_CHINESE); 7400825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 7410825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 7420825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville @SmallTest 7430825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public void testLanguageIndicatorFeedback() throws Exception { 7440825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville BearerData bearerData = new BearerData(); 7450825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville bearerData.messageType = BearerData.MESSAGE_TYPE_DELIVER; 7460825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville bearerData.messageId = 0; 7470825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville bearerData.hasUserDataHeader = false; 7480825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville UserData userData = new UserData(); 7490825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville userData.payloadStr = "test language indicator"; 7500825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville bearerData.userData = userData; 7510825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville bearerData.language = BearerData.LANGUAGE_ENGLISH; 7520825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville bearerData.languageIndicatorSet = true; 7530825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville byte []encodedSms = BearerData.encode(bearerData); 7540825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville BearerData revBearerData = BearerData.decode(encodedSms); 7550825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(revBearerData.userData.payloadStr, userData.payloadStr); 7560825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(revBearerData.languageIndicatorSet, true); 7570825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(revBearerData.language, bearerData.language); 7580825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville bearerData.language = BearerData.LANGUAGE_KOREAN; 7590825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville encodedSms = BearerData.encode(bearerData); 7600825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville revBearerData = BearerData.decode(encodedSms); 7610825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(revBearerData.userData.payloadStr, userData.payloadStr); 7620825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(revBearerData.languageIndicatorSet, true); 7630825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(revBearerData.language, bearerData.language); 7640825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 7650825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 7660825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville @SmallTest 7670825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public void testDisplayMode() throws Exception { 7680825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville String pdu1 = "0003104090010c485f4194dfea34becf61b8400f0100"; 7690825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville BearerData bd1 = BearerData.decode(HexDump.hexStringToByteArray(pdu1)); 7700825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(bd1.displayMode, BearerData.DISPLAY_MODE_IMMEDIATE); 7710825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville String pdu2 = "0003104090010c485f4194dfea34becf61b8400f0140"; 7720825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville BearerData bd2 = BearerData.decode(HexDump.hexStringToByteArray(pdu2)); 7730825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(bd2.displayMode, BearerData.DISPLAY_MODE_DEFAULT); 7740825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville String pdu3 = "0003104090010c485f4194dfea34becf61b8400f0180"; 7750825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville BearerData bd3 = BearerData.decode(HexDump.hexStringToByteArray(pdu3)); 7760825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(bd3.displayMode, BearerData.DISPLAY_MODE_USER); 7770825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 7780825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 7790825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville @SmallTest 7800825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public void testDisplayModeFeedback() throws Exception { 7810825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville BearerData bearerData = new BearerData(); 7820825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville bearerData.messageType = BearerData.MESSAGE_TYPE_DELIVER; 7830825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville bearerData.messageId = 0; 7840825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville bearerData.hasUserDataHeader = false; 7850825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville UserData userData = new UserData(); 7860825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville userData.payloadStr = "test display mode"; 7870825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville bearerData.userData = userData; 7880825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville bearerData.displayMode = BearerData.DISPLAY_MODE_IMMEDIATE; 7890825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville bearerData.displayModeSet = true; 7900825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville byte []encodedSms = BearerData.encode(bearerData); 7910825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville BearerData revBearerData = BearerData.decode(encodedSms); 7920825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(revBearerData.userData.payloadStr, userData.payloadStr); 7930825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(revBearerData.displayModeSet, true); 7940825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(revBearerData.displayMode, bearerData.displayMode); 7950825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville bearerData.displayMode = BearerData.DISPLAY_MODE_USER; 7960825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville encodedSms = BearerData.encode(bearerData); 7970825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville revBearerData = BearerData.decode(encodedSms); 7980825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(revBearerData.userData.payloadStr, userData.payloadStr); 7990825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(revBearerData.displayModeSet, true); 8000825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(revBearerData.displayMode, bearerData.displayMode); 8010825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 8020825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 8030825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville @SmallTest 8040825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public void testIs91() throws Exception { 8050825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville String pdu1 = "000320001001070c2039acc13880"; 8060825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville BearerData bd1 = BearerData.decode(HexDump.hexStringToByteArray(pdu1)); 8070825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(bd1.callbackNumber.address, "3598271"); 8080825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville String pdu4 = "000320001001080c283c314724b34e"; 8090825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville BearerData bd4 = BearerData.decode(HexDump.hexStringToByteArray(pdu4)); 8100825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(bd4.userData.payloadStr, "ABCDEFG"); 8110825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 8120825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 8130825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville @SmallTest 8140825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public void testUserDataHeaderWithEightCharMsg() throws Exception { 815115632cc56f813bd21543f8532c763d7d2968046Jake Hamby encodeDecodeAssertEquals("01234567", 2, 2, false); 816115632cc56f813bd21543f8532c763d7d2968046Jake Hamby } 817115632cc56f813bd21543f8532c763d7d2968046Jake Hamby 818115632cc56f813bd21543f8532c763d7d2968046Jake Hamby private void encodeDecodeAssertEquals(String payload, int index, int total, 819115632cc56f813bd21543f8532c763d7d2968046Jake Hamby boolean oddLengthHeader) throws Exception { 8200825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville BearerData bearerData = new BearerData(); 8210825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville bearerData.messageType = BearerData.MESSAGE_TYPE_DELIVER; 8220825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville bearerData.messageId = 55; 8230825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville SmsHeader smsHeader = new SmsHeader(); 824115632cc56f813bd21543f8532c763d7d2968046Jake Hamby if (oddLengthHeader) { 825115632cc56f813bd21543f8532c763d7d2968046Jake Hamby // Odd length header to verify correct UTF-16 header padding 826115632cc56f813bd21543f8532c763d7d2968046Jake Hamby SmsHeader.MiscElt miscElt = new SmsHeader.MiscElt(); 827115632cc56f813bd21543f8532c763d7d2968046Jake Hamby miscElt.id = 0x27; // reserved for future use; ignored on decode 828115632cc56f813bd21543f8532c763d7d2968046Jake Hamby miscElt.data = new byte[]{0x12, 0x34}; 829115632cc56f813bd21543f8532c763d7d2968046Jake Hamby smsHeader.miscEltList.add(miscElt); 830115632cc56f813bd21543f8532c763d7d2968046Jake Hamby } else { 831115632cc56f813bd21543f8532c763d7d2968046Jake Hamby // Even length header normally generated for concatenated SMS. 832115632cc56f813bd21543f8532c763d7d2968046Jake Hamby SmsHeader.ConcatRef concatRef = new SmsHeader.ConcatRef(); 833115632cc56f813bd21543f8532c763d7d2968046Jake Hamby concatRef.refNumber = 0xEE; 834115632cc56f813bd21543f8532c763d7d2968046Jake Hamby concatRef.msgCount = total; 835115632cc56f813bd21543f8532c763d7d2968046Jake Hamby concatRef.seqNumber = index; 836115632cc56f813bd21543f8532c763d7d2968046Jake Hamby concatRef.isEightBits = true; 837115632cc56f813bd21543f8532c763d7d2968046Jake Hamby smsHeader.concatRef = concatRef; 838115632cc56f813bd21543f8532c763d7d2968046Jake Hamby } 839115632cc56f813bd21543f8532c763d7d2968046Jake Hamby byte[] encodeHeader = SmsHeader.toByteArray(smsHeader); 840115632cc56f813bd21543f8532c763d7d2968046Jake Hamby if (oddLengthHeader) { 841115632cc56f813bd21543f8532c763d7d2968046Jake Hamby assertEquals(4, encodeHeader.length); // 5 bytes with UDH length 842115632cc56f813bd21543f8532c763d7d2968046Jake Hamby } else { 843115632cc56f813bd21543f8532c763d7d2968046Jake Hamby assertEquals(5, encodeHeader.length); // 6 bytes with UDH length 844115632cc56f813bd21543f8532c763d7d2968046Jake Hamby } 8450825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville UserData userData = new UserData(); 846115632cc56f813bd21543f8532c763d7d2968046Jake Hamby userData.payloadStr = payload; 8470825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville userData.userDataHeader = smsHeader; 8480825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville bearerData.userData = userData; 8490825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville byte[] encodedSms = BearerData.encode(bearerData); 8500825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville BearerData revBearerData = BearerData.decode(encodedSms); 8510825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(userData.payloadStr, revBearerData.userData.payloadStr); 852115632cc56f813bd21543f8532c763d7d2968046Jake Hamby assertTrue(revBearerData.hasUserDataHeader); 853115632cc56f813bd21543f8532c763d7d2968046Jake Hamby byte[] header = SmsHeader.toByteArray(revBearerData.userData.userDataHeader); 854115632cc56f813bd21543f8532c763d7d2968046Jake Hamby if (oddLengthHeader) { 855115632cc56f813bd21543f8532c763d7d2968046Jake Hamby assertEquals(4, header.length); // 5 bytes with UDH length 856115632cc56f813bd21543f8532c763d7d2968046Jake Hamby } else { 857115632cc56f813bd21543f8532c763d7d2968046Jake Hamby assertEquals(5, header.length); // 6 bytes with UDH length 858115632cc56f813bd21543f8532c763d7d2968046Jake Hamby } 859115632cc56f813bd21543f8532c763d7d2968046Jake Hamby assertTrue(Arrays.equals(encodeHeader, header)); 8600825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 8610825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 8620825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville @SmallTest 8630825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public void testFragmentText() throws Exception { 8640825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville boolean isCdmaPhone = (TelephonyManager.getDefault().getPhoneType() == 8650825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville TelephonyManager.PHONE_TYPE_CDMA); 8660825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // Valid 160 character ASCII text. 8670825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville String text1 = "123456789012345678901234567890123456789012345678901234567890" + 8680825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville "1234567890123456789012345678901234567890123456789012345678901234567890" + 8690825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville "12345678901234567890123456789["; 8700825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville TextEncodingDetails ted = SmsMessage.calculateLength(text1, false); 8710825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(ted.msgCount, 1); 8720825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(ted.codeUnitCount, 160); 8730825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(ted.codeUnitSize, 1); 8740825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville if (isCdmaPhone) { 8750825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville ArrayList<String> fragments = android.telephony.SmsMessage.fragmentText(text1); 8760825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(fragments.size(), 1); 8770825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 8780825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 8790825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville /* 8800825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville This is not a valid test: we will never encode a single-segment 8810825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville EMS message. Leaving this here, since we may try to support 8820825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville this in the future. 8830825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 8840825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // Valid 160 character GSM text -- the last character is 8850825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // non-ASCII, and so this will currently generate a singleton 8860825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // EMS message, which is not necessarily supported by Verizon. 8870825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville String text2 = "123456789012345678901234567890123456789012345678901234567890" + 8880825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville "1234567890123456789012345678901234567890123456789012345678901234567890" + 8890825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville "12345678901234567890123456789\u00a3"; // Trailing pound-currency sign. 8900825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville ted = SmsMessage.calculateLength(text2, false); 8910825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(ted.msgCount, 1); 8920825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(ted.codeUnitCount, 160); 8930825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(ted.codeUnitSize, 1); 8940825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville if (isCdmaPhone) { 8950825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville ArrayList<String> fragments = android.telephony.SmsMessage.fragmentText(text2); 8960825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(fragments.size(), 1); 8970825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 8980825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville */ 8990825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 9000825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // *IF* we supported single-segment EMS, this text would result in a 9010825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // single fragment with 7-bit encoding. But we don't, so this text 9020825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // results in three fragments of 16-bit encoding. 9030825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville String text2 = "123456789012345678901234567890123456789012345678901234567890" + 9040825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville "1234567890123456789012345678901234567890123456789012345678901234567890" + 9050825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville "12345678901234567890123456789\u00a3"; // Trailing pound-currency sign. 9060825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville ted = SmsMessage.calculateLength(text2, false); 9070825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(3, ted.msgCount); 9080825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(160, ted.codeUnitCount); 9090825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(3, ted.codeUnitSize); 9100825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville if (isCdmaPhone) { 9110825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville ArrayList<String> fragments = android.telephony.SmsMessage.fragmentText(text2); 9120825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(3, fragments.size()); 913115632cc56f813bd21543f8532c763d7d2968046Jake Hamby 914115632cc56f813bd21543f8532c763d7d2968046Jake Hamby for (int i = 0; i < 3; i++) { 915115632cc56f813bd21543f8532c763d7d2968046Jake Hamby encodeDecodeAssertEquals(fragments.get(i), i + 1, 3, false); 916115632cc56f813bd21543f8532c763d7d2968046Jake Hamby encodeDecodeAssertEquals(fragments.get(i), i + 1, 3, true); 917115632cc56f813bd21543f8532c763d7d2968046Jake Hamby } 9180825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 9190825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 920115632cc56f813bd21543f8532c763d7d2968046Jake Hamby // Test case for multi-part UTF-16 message. 921115632cc56f813bd21543f8532c763d7d2968046Jake Hamby String text3 = sUnicodeChars + sUnicodeChars + sUnicodeChars; 922115632cc56f813bd21543f8532c763d7d2968046Jake Hamby ted = SmsMessage.calculateLength(text3, false); 923115632cc56f813bd21543f8532c763d7d2968046Jake Hamby assertEquals(3, ted.msgCount); 924115632cc56f813bd21543f8532c763d7d2968046Jake Hamby assertEquals(189, ted.codeUnitCount); 925115632cc56f813bd21543f8532c763d7d2968046Jake Hamby assertEquals(3, ted.codeUnitSize); 926115632cc56f813bd21543f8532c763d7d2968046Jake Hamby if (isCdmaPhone) { 927115632cc56f813bd21543f8532c763d7d2968046Jake Hamby ArrayList<String> fragments = android.telephony.SmsMessage.fragmentText(text3); 928115632cc56f813bd21543f8532c763d7d2968046Jake Hamby assertEquals(3, fragments.size()); 929115632cc56f813bd21543f8532c763d7d2968046Jake Hamby 930115632cc56f813bd21543f8532c763d7d2968046Jake Hamby for (int i = 0; i < 3; i++) { 931115632cc56f813bd21543f8532c763d7d2968046Jake Hamby encodeDecodeAssertEquals(fragments.get(i), i + 1, 3, false); 932115632cc56f813bd21543f8532c763d7d2968046Jake Hamby encodeDecodeAssertEquals(fragments.get(i), i + 1, 3, true); 933115632cc56f813bd21543f8532c763d7d2968046Jake Hamby } 934115632cc56f813bd21543f8532c763d7d2968046Jake Hamby } 9350825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 9360825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville} 937