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 4348a57c9ac6516c0f34a9593d6ffd64173fdf6953Jake Hamby // "Hello, world" in Japanese. 4448a57c9ac6516c0f34a9593d6ffd64173fdf6953Jake Hamby private static final String sHelloWorldJa = "\u3053\u3093\u306b\u3061\u306f\u4e16\u754c"; 4548a57c9ac6516c0f34a9593d6ffd64173fdf6953Jake Hamby 460825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville @SmallTest 470825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public void testCdmaSmsAddrParsing() throws Exception { 480825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville CdmaSmsAddress addr = CdmaSmsAddress.parse("6502531000"); 490825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(addr.ton, CdmaSmsAddress.TON_UNKNOWN); 500825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(addr.digitMode, CdmaSmsAddress.DIGIT_MODE_4BIT_DTMF); 510825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(addr.numberMode, CdmaSmsAddress.NUMBER_MODE_NOT_DATA_NETWORK); 520825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(addr.numberOfDigits, 10); 530825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(addr.origBytes.length, 10); 540825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville byte[] data = {6, 5, 10, 2, 5, 3, 1, 10, 10, 10}; 550825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville for (int i = 0; i < data.length; i++) { 560825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(addr.origBytes[i], data[i]); 570825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 580825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville addr = CdmaSmsAddress.parse("(650) 253-1000"); 590825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(addr.ton, CdmaSmsAddress.TON_UNKNOWN); 600825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(addr.digitMode, CdmaSmsAddress.DIGIT_MODE_4BIT_DTMF); 610825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(addr.numberMode, CdmaSmsAddress.NUMBER_MODE_NOT_DATA_NETWORK); 620825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(addr.numberOfDigits, 10); 630825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(addr.origBytes.length, 10); 640825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville byte[] data2 = {6, 5, 10, 2, 5, 3, 1, 10, 10, 10}; 650825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville for (int i = 0; i < data2.length; i++) { 660825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(addr.origBytes[i], data2[i]); 670825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 680825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville addr = CdmaSmsAddress.parse("650.253.1000"); 690825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(addr.ton, CdmaSmsAddress.TON_UNKNOWN); 700825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(addr.digitMode, CdmaSmsAddress.DIGIT_MODE_4BIT_DTMF); 710825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(addr.numberMode, CdmaSmsAddress.NUMBER_MODE_NOT_DATA_NETWORK); 720825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(addr.numberOfDigits, 10); 730825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(addr.origBytes.length, 10); 740825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville byte[] data5 = {6, 5, 10, 2, 5, 3, 1, 10, 10, 10}; 750825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville for (int i = 0; i < data2.length; i++) { 760825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(addr.origBytes[i], data5[i]); 770825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 780825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville addr = CdmaSmsAddress.parse("(+886) 917 222 555"); 790825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(addr.ton, CdmaSmsAddress.TON_INTERNATIONAL_OR_IP); 800825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(addr.digitMode, CdmaSmsAddress.DIGIT_MODE_4BIT_DTMF); 810825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(addr.numberMode, CdmaSmsAddress.NUMBER_MODE_NOT_DATA_NETWORK); 820825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(addr.numberOfDigits, 12); 830825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(addr.origBytes.length, 12); 840825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville byte[] data3 = {8, 8, 6, 9, 1, 7, 2, 2, 2, 5, 5, 5}; 850825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville for (int i = 0; i < data3.length; i++) { 860825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(addr.origBytes[i], data3[i]); 870825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 880825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville addr = CdmaSmsAddress.parse("(650) *253-1000 #600"); 890825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville byte[] data4 = {6, 5, 10, 11, 2, 5, 3, 1, 10, 10, 10, 12, 6, 10, 10}; 900825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville for (int i = 0; i < data4.length; i++) { 910825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(addr.origBytes[i], data4[i]); 920825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 930825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville String input = "x@y.com,a@b.com"; 940825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville addr = CdmaSmsAddress.parse(input); 950825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(addr.ton, CdmaSmsAddress.TON_NATIONAL_OR_EMAIL); 960825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(addr.digitMode, CdmaSmsAddress.DIGIT_MODE_8BIT_CHAR); 970825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(addr.numberMode, CdmaSmsAddress.NUMBER_MODE_DATA_NETWORK); 980825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(addr.numberOfDigits, 15); 990825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(addr.origBytes.length, 15); 1000825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(new String(addr.origBytes), input); 1010825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville addr = CdmaSmsAddress.parse("foo bar"); 1020825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(addr.ton, CdmaSmsAddress.TON_UNKNOWN); 1030825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(addr.digitMode, CdmaSmsAddress.DIGIT_MODE_8BIT_CHAR); 1040825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(addr.numberMode, CdmaSmsAddress.NUMBER_MODE_DATA_NETWORK); 1050825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(addr.numberOfDigits, 6); 1060825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(addr.origBytes.length, 6); 1070825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(new String(addr.origBytes), "foobar"); 1080825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville addr = CdmaSmsAddress.parse("f\noo\tb a\rr"); 1090825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(new String(addr.origBytes), "foobar"); 1100825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(CdmaSmsAddress.parse("f\u0000oo bar"), null); 1110825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(CdmaSmsAddress.parse("f\u0007oo bar"), null); 1120825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(CdmaSmsAddress.parse("f\u0080oo bar"), null); 1130825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(CdmaSmsAddress.parse("f\u1ECFboo\u001fbar"), null); 1140825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(CdmaSmsAddress.parse("f\u0080oo bar"), null); 1150825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 1160825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 1170825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville @SmallTest 1180825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public void testUserData7bitGsm() throws Exception { 1190825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville String pdu = "00031040900112488ea794e074d69e1b7392c270326cde9e98"; 1200825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville BearerData bearerData = BearerData.decode(HexDump.hexStringToByteArray(pdu)); 1210825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals("Test standard SMS", bearerData.userData.payloadStr); 1220825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 1230825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 1240825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville @SmallTest 1250825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public void testUserData7bitAscii() throws Exception { 1260825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville String pdu = "0003100160010610262d5ab500"; 1270825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville BearerData bearerData = BearerData.decode(HexDump.hexStringToByteArray(pdu)); 1280825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals("bjjj", bearerData.userData.payloadStr); 1290825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 1300825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 1310825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville @SmallTest 1320825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public void testUserData7bitAsciiTwo() throws Exception { 1330825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville String pdu = "00031001d00109104539b4d052ebb3d0"; 1340825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville BearerData bearerData = BearerData.decode(HexDump.hexStringToByteArray(pdu)); 1350825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals("SMS Rulz", bearerData.userData.payloadStr); 1360825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 1370825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 1380825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville @SmallTest 1390825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public void testUserDataIa5() throws Exception { 1400825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville String pdu = "00031002100109184539b4d052ebb3d0"; 1410825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville BearerData bearerData = BearerData.decode(HexDump.hexStringToByteArray(pdu)); 1420825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals("SMS Rulz", bearerData.userData.payloadStr); 1430825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 1440825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 1450825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville @SmallTest 1460825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public void testUserData7bitAsciiFeedback() throws Exception { 1470825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville BearerData bearerData = new BearerData(); 1480825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville bearerData.messageType = BearerData.MESSAGE_TYPE_DELIVER; 1490825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville bearerData.messageId = 0; 1500825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville bearerData.hasUserDataHeader = false; 1510825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville UserData userData = new UserData(); 1520825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville userData.payloadStr = "Test standard SMS"; 1530825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville userData.msgEncoding = UserData.ENCODING_7BIT_ASCII; 1540825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville userData.msgEncodingSet = true; 1550825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville bearerData.userData = userData; 1560825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville byte []encodedSms = BearerData.encode(bearerData); 1570825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville BearerData revBearerData = BearerData.decode(encodedSms); 1580825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(BearerData.MESSAGE_TYPE_DELIVER, revBearerData.messageType); 1590825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(0, revBearerData.messageId); 1600825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(false, revBearerData.hasUserDataHeader); 1610825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(userData.msgEncoding, revBearerData.userData.msgEncoding); 1620825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(userData.payloadStr.length(), revBearerData.userData.numFields); 1630825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(userData.payloadStr, revBearerData.userData.payloadStr); 1640825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville userData.payloadStr = "Test \u007f standard \u0000 SMS"; 1650825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville revBearerData = BearerData.decode(BearerData.encode(bearerData)); 1660825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals("Test standard SMS", revBearerData.userData.payloadStr); 1670825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville userData.payloadStr = "Test \n standard \r SMS"; 1680825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville revBearerData = BearerData.decode(BearerData.encode(bearerData)); 1690825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(userData.payloadStr, revBearerData.userData.payloadStr); 1700825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville userData.payloadStr = ""; 1710825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville revBearerData = BearerData.decode(BearerData.encode(bearerData)); 1720825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(userData.payloadStr, revBearerData.userData.payloadStr); 1730825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 1740825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 1750825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville @SmallTest 1760825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public void testUserData7bitGsmFeedback() throws Exception { 1770825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville BearerData bearerData = new BearerData(); 1780825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville bearerData.messageType = BearerData.MESSAGE_TYPE_DELIVER; 1790825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville bearerData.messageId = 0; 1800825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville bearerData.hasUserDataHeader = false; 1810825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville UserData userData = new UserData(); 1820825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville userData.payloadStr = "Test standard SMS"; 1830825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville userData.msgEncoding = UserData.ENCODING_GSM_7BIT_ALPHABET; 1840825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville userData.msgEncodingSet = true; 1850825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville bearerData.userData = userData; 1860825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville byte []encodedSms = BearerData.encode(bearerData); 1870825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville BearerData revBearerData = BearerData.decode(encodedSms); 1880825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(BearerData.MESSAGE_TYPE_DELIVER, revBearerData.messageType); 1890825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(0, revBearerData.messageId); 1900825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(false, revBearerData.hasUserDataHeader); 1910825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(userData.msgEncoding, revBearerData.userData.msgEncoding); 1920825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(userData.payloadStr.length(), revBearerData.userData.numFields); 1930825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(userData.payloadStr, revBearerData.userData.payloadStr); 1940825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville userData.payloadStr = "1234567"; 1950825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville revBearerData = BearerData.decode(BearerData.encode(bearerData)); 1960825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(userData.payloadStr, revBearerData.userData.payloadStr); 1970825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville userData.payloadStr = ""; 1980825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville revBearerData = BearerData.decode(BearerData.encode(bearerData)); 1990825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(userData.payloadStr, revBearerData.userData.payloadStr); 2000825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville userData.payloadStr = "12345678901234567890123456789012345678901234567890" + 2010825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville "12345678901234567890123456789012345678901234567890" + 2020825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville "12345678901234567890123456789012345678901234567890" + 2030825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville "1234567890"; 2040825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville revBearerData = BearerData.decode(BearerData.encode(bearerData)); 2050825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(userData.payloadStr, revBearerData.userData.payloadStr); 2060825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville userData.payloadStr = "Test \u007f illegal \u0000 SMS chars"; 2070825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville revBearerData = BearerData.decode(BearerData.encode(bearerData)); 2080825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals("Test illegal SMS chars", revBearerData.userData.payloadStr); 2090825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville userData.payloadStr = "More @ testing\nis great^|^~woohoo"; 2100825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville revBearerData = BearerData.decode(BearerData.encode(bearerData)); 2110825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(userData.payloadStr, revBearerData.userData.payloadStr); 2120825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville SmsHeader.ConcatRef concatRef = new SmsHeader.ConcatRef(); 2130825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville concatRef.refNumber = 0xEE; 2140825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville concatRef.msgCount = 2; 2150825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville concatRef.seqNumber = 2; 2160825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville concatRef.isEightBits = true; 2170825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville SmsHeader smsHeader = new SmsHeader(); 2180825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville smsHeader.concatRef = concatRef; 2190825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville byte[] encodedHeader = SmsHeader.toByteArray(smsHeader); 2200825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville userData.userDataHeader = smsHeader; 2210825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville revBearerData = BearerData.decode(BearerData.encode(bearerData)); 2220825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(userData.payloadStr, revBearerData.userData.payloadStr); 2230825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville SmsHeader decodedHeader = revBearerData.userData.userDataHeader; 2240825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(decodedHeader.concatRef.refNumber, concatRef.refNumber); 2250825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(decodedHeader.concatRef.msgCount, concatRef.msgCount); 2260825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(decodedHeader.concatRef.seqNumber, concatRef.seqNumber); 2270825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 2280825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 2290825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville @SmallTest 2300825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public void testUserDataUtf16Feedback() throws Exception { 2310825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville BearerData bearerData = new BearerData(); 2320825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville bearerData.messageType = BearerData.MESSAGE_TYPE_DELIVER; 2330825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville bearerData.messageId = 0; 2340825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville bearerData.hasUserDataHeader = false; 2350825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville UserData userData = new UserData(); 2360825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville userData.payloadStr = "\u0160u\u1E5B\u0301r\u1ECFg\uD835\uDC1At\u00E9\u4E002\u3042"; 2370825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville userData.msgEncoding = UserData.ENCODING_UNICODE_16; 2380825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville userData.msgEncodingSet = true; 2390825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville bearerData.userData = userData; 2400825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville byte []encodedSms = BearerData.encode(bearerData); 2410825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville BearerData revBearerData = BearerData.decode(encodedSms); 2420825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(BearerData.MESSAGE_TYPE_DELIVER, revBearerData.messageType); 2430825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(0, revBearerData.messageId); 2440825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(false, revBearerData.hasUserDataHeader); 2450825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(userData.msgEncoding, revBearerData.userData.msgEncoding); 2460825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(userData.payloadStr.length(), revBearerData.userData.numFields); 2470825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(userData.payloadStr, revBearerData.userData.payloadStr); 2480825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville userData.msgEncoding = UserData.ENCODING_OCTET; 2490825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville userData.msgEncodingSet = false; 2500825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville revBearerData = BearerData.decode(BearerData.encode(bearerData)); 2510825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(BearerData.MESSAGE_TYPE_DELIVER, revBearerData.messageType); 2520825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(0, revBearerData.messageId); 2530825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(false, revBearerData.hasUserDataHeader); 2540825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(userData.msgEncoding, revBearerData.userData.msgEncoding); 2550825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(userData.payloadStr.length(), revBearerData.userData.numFields); 2560825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(userData.payloadStr, revBearerData.userData.payloadStr); 2570825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville userData.payloadStr = "1234567"; 2580825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville revBearerData = BearerData.decode(BearerData.encode(bearerData)); 2590825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(userData.payloadStr, revBearerData.userData.payloadStr); 2600825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville userData.payloadStr = ""; 2610825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville revBearerData = BearerData.decode(BearerData.encode(bearerData)); 2620825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(userData.payloadStr, revBearerData.userData.payloadStr); 2630825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 2640825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 2650825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville @SmallTest 2660825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public void testMonolithicOne() throws Exception { 2670825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville String pdu = "0003200010010410168d2002010503060812011101590501c706069706180000000701c108" + 2680825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville "01c00901800a01e00b01030c01c00d01070e05039acc13880f018011020566"; 2690825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville BearerData bearerData = BearerData.decode(HexDump.hexStringToByteArray(pdu)); 2700825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(bearerData.messageType, BearerData.MESSAGE_TYPE_SUBMIT); 2710825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(bearerData.messageId, 1); 2720825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(bearerData.priority, BearerData.PRIORITY_EMERGENCY); 2730825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(bearerData.privacy, BearerData.PRIVACY_CONFIDENTIAL); 2740825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(bearerData.userAckReq, true); 2750825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(bearerData.readAckReq, true); 2760825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(bearerData.deliveryAckReq, true); 2770825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(bearerData.reportReq, false); 2780825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(bearerData.numberOfMessages, 3); 2790825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(bearerData.alert, BearerData.ALERT_HIGH_PRIO); 2800825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(bearerData.language, BearerData.LANGUAGE_HEBREW); 2810825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(bearerData.callbackNumber.digitMode, CdmaSmsAddress.DIGIT_MODE_4BIT_DTMF); 2820825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(bearerData.callbackNumber.numberMode, 2830825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville CdmaSmsAddress.NUMBER_MODE_NOT_DATA_NETWORK); 2840825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(bearerData.callbackNumber.ton, CdmaSmsAddress.TON_UNKNOWN); 2850825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(bearerData.callbackNumber.numberPlan, CdmaSmsAddress.NUMBERING_PLAN_UNKNOWN); 2860825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(bearerData.callbackNumber.numberOfDigits, 7); 2870825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(bearerData.callbackNumber.address, "3598271"); 2880825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(bearerData.displayMode, BearerData.DISPLAY_MODE_USER); 2890825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(bearerData.depositIndex, 1382); 2900825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(bearerData.userResponseCode, 5); 2910825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(bearerData.msgCenterTimeStamp.year, 2008); 2920825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(bearerData.msgCenterTimeStamp.month, 11); 2930825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(bearerData.msgCenterTimeStamp.monthDay, 1); 2940825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(bearerData.msgCenterTimeStamp.hour, 11); 2950825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(bearerData.msgCenterTimeStamp.minute, 1); 2960825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(bearerData.msgCenterTimeStamp.second, 59); 2970825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(bearerData.validityPeriodAbsolute, null); 2980825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(bearerData.validityPeriodRelative, 193); 2990825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(bearerData.deferredDeliveryTimeAbsolute.year, 1997); 3000825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(bearerData.deferredDeliveryTimeAbsolute.month, 5); 3010825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(bearerData.deferredDeliveryTimeAbsolute.monthDay, 18); 3020825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(bearerData.deferredDeliveryTimeAbsolute.hour, 0); 3030825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(bearerData.deferredDeliveryTimeAbsolute.minute, 0); 3040825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(bearerData.deferredDeliveryTimeAbsolute.second, 0); 3050825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(bearerData.deferredDeliveryTimeRelative, 199); 3060825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(bearerData.hasUserDataHeader, false); 3070825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(bearerData.userData.msgEncoding, UserData.ENCODING_7BIT_ASCII); 3080825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(bearerData.userData.numFields, 2); 3090825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(bearerData.userData.payloadStr, "hi"); 3100825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 3110825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 3120825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville @SmallTest 3130825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public void testMonolithicTwo() throws Exception { 3140825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville String pdu = "0003200010010410168d200201050306081201110159050192060697061800000007013d0" + 3150825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville "801c00901800a01e00b01030c01c00d01070e05039acc13880f018011020566"; 3160825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville BearerData bearerData = BearerData.decode(HexDump.hexStringToByteArray(pdu)); 3170825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(bearerData.messageType, BearerData.MESSAGE_TYPE_SUBMIT); 3180825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(bearerData.messageId, 1); 3190825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(bearerData.priority, BearerData.PRIORITY_EMERGENCY); 3200825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(bearerData.privacy, BearerData.PRIVACY_CONFIDENTIAL); 3210825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(bearerData.userAckReq, true); 3220825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(bearerData.readAckReq, true); 3230825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(bearerData.deliveryAckReq, true); 3240825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(bearerData.reportReq, false); 3250825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(bearerData.numberOfMessages, 3); 3260825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(bearerData.alert, BearerData.ALERT_HIGH_PRIO); 3270825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(bearerData.language, BearerData.LANGUAGE_HEBREW); 3280825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(bearerData.callbackNumber.digitMode, CdmaSmsAddress.DIGIT_MODE_4BIT_DTMF); 3290825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(bearerData.callbackNumber.numberMode, 3300825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville CdmaSmsAddress.NUMBER_MODE_NOT_DATA_NETWORK); 3310825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(bearerData.callbackNumber.ton, CdmaSmsAddress.TON_UNKNOWN); 3320825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(bearerData.callbackNumber.numberPlan, CdmaSmsAddress.NUMBERING_PLAN_UNKNOWN); 3330825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(bearerData.callbackNumber.numberOfDigits, 7); 3340825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(bearerData.callbackNumber.address, "3598271"); 3350825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(bearerData.displayMode, BearerData.DISPLAY_MODE_USER); 3360825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(bearerData.depositIndex, 1382); 3370825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(bearerData.userResponseCode, 5); 3380825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(bearerData.msgCenterTimeStamp.year, 2008); 3390825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(bearerData.msgCenterTimeStamp.month, 11); 3400825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(bearerData.msgCenterTimeStamp.monthDay, 1); 3410825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(bearerData.msgCenterTimeStamp.hour, 11); 3420825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(bearerData.msgCenterTimeStamp.minute, 1); 3430825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(bearerData.msgCenterTimeStamp.second, 59); 3440825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(bearerData.validityPeriodAbsolute, null); 3450825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(bearerData.validityPeriodRelative, 61); 3460825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(bearerData.deferredDeliveryTimeAbsolute.year, 1997); 3470825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(bearerData.deferredDeliveryTimeAbsolute.month, 5); 3480825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(bearerData.deferredDeliveryTimeAbsolute.monthDay, 18); 3490825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(bearerData.deferredDeliveryTimeAbsolute.hour, 0); 3500825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(bearerData.deferredDeliveryTimeAbsolute.minute, 0); 3510825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(bearerData.deferredDeliveryTimeAbsolute.second, 0); 3520825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(bearerData.deferredDeliveryTimeRelative, 146); 3530825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(bearerData.hasUserDataHeader, false); 3540825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(bearerData.userData.msgEncoding, UserData.ENCODING_7BIT_ASCII); 3550825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(bearerData.userData.numFields, 2); 3560825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(bearerData.userData.payloadStr, "hi"); 3570825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 3580825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 3590825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville @SmallTest 3600825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public void testUserDataHeaderConcatRefFeedback() throws Exception { 3610825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville BearerData bearerData = new BearerData(); 3620825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville bearerData.messageType = BearerData.MESSAGE_TYPE_DELIVER; 3630825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville bearerData.messageId = 55; 3640825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville SmsHeader.ConcatRef concatRef = new SmsHeader.ConcatRef(); 3650825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville concatRef.refNumber = 0xEE; 3660825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville concatRef.msgCount = 2; 3670825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville concatRef.seqNumber = 2; 3680825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville concatRef.isEightBits = true; 3690825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville SmsHeader smsHeader = new SmsHeader(); 3700825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville smsHeader.concatRef = concatRef; 3710825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville byte[] encodedHeader = SmsHeader.toByteArray(smsHeader); 3720825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville SmsHeader decodedHeader = SmsHeader.fromByteArray(encodedHeader); 3730825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(decodedHeader.concatRef.refNumber, concatRef.refNumber); 3740825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(decodedHeader.concatRef.msgCount, concatRef.msgCount); 3750825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(decodedHeader.concatRef.seqNumber, concatRef.seqNumber); 3760825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(decodedHeader.concatRef.isEightBits, concatRef.isEightBits); 3770825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(decodedHeader.portAddrs, null); 3780825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville UserData userData = new UserData(); 3790825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville userData.payloadStr = "User Data Header (UDH) feedback test"; 3800825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville userData.userDataHeader = smsHeader; 3810825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville bearerData.userData = userData; 3820825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville byte[] encodedSms = BearerData.encode(bearerData); 3830825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville BearerData revBearerData = BearerData.decode(encodedSms); 3840825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville decodedHeader = revBearerData.userData.userDataHeader; 3850825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(decodedHeader.concatRef.refNumber, concatRef.refNumber); 3860825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(decodedHeader.concatRef.msgCount, concatRef.msgCount); 3870825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(decodedHeader.concatRef.seqNumber, concatRef.seqNumber); 3880825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(decodedHeader.concatRef.isEightBits, concatRef.isEightBits); 3890825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(decodedHeader.portAddrs, null); 3900825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 3910825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 3920825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville @SmallTest 3930825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public void testUserDataHeaderIllegalConcatRef() throws Exception { 3940825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville BearerData bearerData = new BearerData(); 3950825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville bearerData.messageType = BearerData.MESSAGE_TYPE_DELIVER; 3960825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville bearerData.messageId = 55; 3970825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville SmsHeader.ConcatRef concatRef = new SmsHeader.ConcatRef(); 3980825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville concatRef.refNumber = 0x10; 3990825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville concatRef.msgCount = 0; 4000825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville concatRef.seqNumber = 2; 4010825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville concatRef.isEightBits = true; 4020825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville SmsHeader smsHeader = new SmsHeader(); 4030825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville smsHeader.concatRef = concatRef; 4040825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville byte[] encodedHeader = SmsHeader.toByteArray(smsHeader); 4050825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville SmsHeader decodedHeader = SmsHeader.fromByteArray(encodedHeader); 4060825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(decodedHeader.concatRef, null); 4070825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville concatRef.isEightBits = false; 4080825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville encodedHeader = SmsHeader.toByteArray(smsHeader); 4090825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville decodedHeader = SmsHeader.fromByteArray(encodedHeader); 4100825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(decodedHeader.concatRef, null); 4110825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville concatRef.msgCount = 1; 4120825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville concatRef.seqNumber = 2; 4130825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville encodedHeader = SmsHeader.toByteArray(smsHeader); 4140825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville decodedHeader = SmsHeader.fromByteArray(encodedHeader); 4150825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(decodedHeader.concatRef, null); 4160825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville concatRef.msgCount = 1; 4170825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville concatRef.seqNumber = 0; 4180825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville encodedHeader = SmsHeader.toByteArray(smsHeader); 4190825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville decodedHeader = SmsHeader.fromByteArray(encodedHeader); 4200825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(decodedHeader.concatRef, null); 4210825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville concatRef.msgCount = 2; 4220825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville concatRef.seqNumber = 1; 4230825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville encodedHeader = SmsHeader.toByteArray(smsHeader); 4240825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville decodedHeader = SmsHeader.fromByteArray(encodedHeader); 4250825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(decodedHeader.concatRef.msgCount, 2); 4260825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(decodedHeader.concatRef.seqNumber, 1); 4270825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 4280825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 4290825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville @SmallTest 4300825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public void testUserDataHeaderMixedFeedback() throws Exception { 4310825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville BearerData bearerData = new BearerData(); 4320825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville bearerData.messageType = BearerData.MESSAGE_TYPE_DELIVER; 4330825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville bearerData.messageId = 42; 4340825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville SmsHeader.ConcatRef concatRef = new SmsHeader.ConcatRef(); 4350825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville concatRef.refNumber = 0x34; 4360825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville concatRef.msgCount = 5; 4370825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville concatRef.seqNumber = 2; 4380825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville concatRef.isEightBits = false; 4390825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville SmsHeader.PortAddrs portAddrs = new SmsHeader.PortAddrs(); 4400825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville portAddrs.destPort = 88; 4410825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville portAddrs.origPort = 66; 4420825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville portAddrs.areEightBits = false; 4430825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville SmsHeader smsHeader = new SmsHeader(); 4440825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville smsHeader.concatRef = concatRef; 4450825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville smsHeader.portAddrs = portAddrs; 4460825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville byte[] encodedHeader = SmsHeader.toByteArray(smsHeader); 4470825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville SmsHeader decodedHeader = SmsHeader.fromByteArray(encodedHeader); 4480825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(decodedHeader.concatRef.refNumber, concatRef.refNumber); 4490825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(decodedHeader.concatRef.msgCount, concatRef.msgCount); 4500825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(decodedHeader.concatRef.seqNumber, concatRef.seqNumber); 4510825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(decodedHeader.concatRef.isEightBits, concatRef.isEightBits); 4520825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(decodedHeader.portAddrs.destPort, portAddrs.destPort); 4530825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(decodedHeader.portAddrs.origPort, portAddrs.origPort); 4540825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(decodedHeader.portAddrs.areEightBits, portAddrs.areEightBits); 4550825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville UserData userData = new UserData(); 4560825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville userData.payloadStr = "User Data Header (UDH) feedback test"; 4570825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville userData.userDataHeader = smsHeader; 4580825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville bearerData.userData = userData; 4590825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville byte[] encodedSms = BearerData.encode(bearerData); 4600825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville BearerData revBearerData = BearerData.decode(encodedSms); 4610825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville decodedHeader = revBearerData.userData.userDataHeader; 4620825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(decodedHeader.concatRef.refNumber, concatRef.refNumber); 4630825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(decodedHeader.concatRef.msgCount, concatRef.msgCount); 4640825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(decodedHeader.concatRef.seqNumber, concatRef.seqNumber); 4650825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(decodedHeader.concatRef.isEightBits, concatRef.isEightBits); 4660825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(decodedHeader.portAddrs.destPort, portAddrs.destPort); 4670825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(decodedHeader.portAddrs.origPort, portAddrs.origPort); 4680825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(decodedHeader.portAddrs.areEightBits, portAddrs.areEightBits); 4690825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 4700825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 4710825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville @SmallTest 4720825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public void testReplyOption() throws Exception { 4730825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville String pdu1 = "0003104090011648b6a794e0705476bf77bceae934fe5f6d94d87450080a0180"; 4740825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville BearerData bd1 = BearerData.decode(HexDump.hexStringToByteArray(pdu1)); 4750825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals("Test Acknowledgement 1", bd1.userData.payloadStr); 4760825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(true, bd1.userAckReq); 4770825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(false, bd1.deliveryAckReq); 4780825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(false, bd1.readAckReq); 4790825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(false, bd1.reportReq); 4800825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville String pdu2 = "0003104090011648b6a794e0705476bf77bceae934fe5f6d94d87490080a0140"; 4810825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville BearerData bd2 = BearerData.decode(HexDump.hexStringToByteArray(pdu2)); 4820825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals("Test Acknowledgement 2", bd2.userData.payloadStr); 4830825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(false, bd2.userAckReq); 4840825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(true, bd2.deliveryAckReq); 4850825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(false, bd2.readAckReq); 4860825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(false, bd2.reportReq); 4870825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville String pdu3 = "0003104090011648b6a794e0705476bf77bceae934fe5f6d94d874d0080a0120"; 4880825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville BearerData bd3 = BearerData.decode(HexDump.hexStringToByteArray(pdu3)); 4890825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals("Test Acknowledgement 3", bd3.userData.payloadStr); 4900825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(false, bd3.userAckReq); 4910825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(false, bd3.deliveryAckReq); 4920825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(true, bd3.readAckReq); 4930825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(false, bd3.reportReq); 4940825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville String pdu4 = "0003104090011648b6a794e0705476bf77bceae934fe5f6d94d87510080a0110"; 4950825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville BearerData bd4 = BearerData.decode(HexDump.hexStringToByteArray(pdu4)); 4960825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals("Test Acknowledgement 4", bd4.userData.payloadStr); 4970825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(false, bd4.userAckReq); 4980825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(false, bd4.deliveryAckReq); 4990825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(false, bd4.readAckReq); 5000825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(true, bd4.reportReq); 5010825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 5020825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 5030825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville @SmallTest 5040825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public void testReplyOptionFeedback() throws Exception { 5050825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville BearerData bearerData = new BearerData(); 5060825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville bearerData.messageType = BearerData.MESSAGE_TYPE_DELIVER; 5070825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville bearerData.messageId = 0; 5080825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville bearerData.hasUserDataHeader = false; 5090825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville UserData userData = new UserData(); 5100825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville userData.payloadStr = "test reply option"; 5110825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville bearerData.userData = userData; 5120825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville bearerData.userAckReq = true; 5130825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville byte []encodedSms = BearerData.encode(bearerData); 5140825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville BearerData revBearerData = BearerData.decode(encodedSms); 5150825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(true, revBearerData.userAckReq); 5160825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(false, revBearerData.deliveryAckReq); 5170825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(false, revBearerData.readAckReq); 5180825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(false, revBearerData.reportReq); 5190825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville bearerData.userAckReq = false; 5200825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville bearerData.deliveryAckReq = true; 5210825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville encodedSms = BearerData.encode(bearerData); 5220825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville revBearerData = BearerData.decode(encodedSms); 5230825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(false, revBearerData.userAckReq); 5240825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(true, revBearerData.deliveryAckReq); 5250825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(false, revBearerData.readAckReq); 5260825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(false, revBearerData.reportReq); 5270825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville bearerData.deliveryAckReq = false; 5280825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville bearerData.readAckReq = true; 5290825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville encodedSms = BearerData.encode(bearerData); 5300825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville revBearerData = BearerData.decode(encodedSms); 5310825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(false, revBearerData.userAckReq); 5320825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(false, revBearerData.deliveryAckReq); 5330825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(true, revBearerData.readAckReq); 5340825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(false, revBearerData.reportReq); 5350825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville bearerData.readAckReq = false; 5360825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville bearerData.reportReq = true; 5370825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville encodedSms = BearerData.encode(bearerData); 5380825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville revBearerData = BearerData.decode(encodedSms); 5390825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(false, revBearerData.userAckReq); 5400825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(false, revBearerData.deliveryAckReq); 5410825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(false, revBearerData.readAckReq); 5420825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(true, revBearerData.reportReq); 5430825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 5440825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 5450825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville @SmallTest 5460825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public void testNumberOfMessages() throws Exception { 5470825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // Note that the message text below does not properly reflect 5480825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // the message count. The author of these messages was 5490825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // apparently unaware that the values are bcd encoded, and the 5500825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // values being tested against (not the ones in the message 5510825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // text) are actually correct. 5520825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville String pdu1 = "000310409001124896a794e07595f69f199540ea759a0dc8e00b0163"; 5530825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville BearerData bd1 = BearerData.decode(HexDump.hexStringToByteArray(pdu1)); 5540825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals("Test Voice mail 99", bd1.userData.payloadStr); 5550825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(63, bd1.numberOfMessages); 5560825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville String pdu2 = "00031040900113489ea794e07595f69f199540ea759a0988c0600b0164"; 5570825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville BearerData bd2 = BearerData.decode(HexDump.hexStringToByteArray(pdu2)); 5580825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals("Test Voice mail 100", bd2.userData.payloadStr); 5590825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(64, bd2.numberOfMessages); 5600825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 5610825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 5620825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville @SmallTest 5630825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public void testCallbackNum() throws Exception { 5640825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville String pdu1 = "00031040900112488ea794e070d436cb638bc5e035ce2f97900e06910431323334"; 5650825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville BearerData bd1 = BearerData.decode(HexDump.hexStringToByteArray(pdu1)); 5660825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals("Test Callback nbr", bd1.userData.payloadStr); 5670825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(CdmaSmsAddress.DIGIT_MODE_8BIT_CHAR, bd1.callbackNumber.digitMode); 5680825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(CdmaSmsAddress.TON_INTERNATIONAL_OR_IP, bd1.callbackNumber.ton); 5690825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(CdmaSmsAddress.NUMBER_MODE_NOT_DATA_NETWORK, bd1.callbackNumber.numberMode); 5700825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(CdmaSmsAddress.NUMBERING_PLAN_ISDN_TELEPHONY, bd1.callbackNumber.numberPlan); 5710825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals("1234", bd1.callbackNumber.address); 5720825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 5730825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 5740825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville @SmallTest 5750825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public void testCallbackNumDtmf() throws Exception { 5760825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville String pdu1 = "00031002300109104539b4d052ebb3d00e07052d4c90a55080"; 5770825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville BearerData bd1 = BearerData.decode(HexDump.hexStringToByteArray(pdu1)); 5780825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals("SMS Rulz", bd1.userData.payloadStr); 5790825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(CdmaSmsAddress.DIGIT_MODE_4BIT_DTMF, bd1.callbackNumber.digitMode); 5800825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(CdmaSmsAddress.TON_UNKNOWN, bd1.callbackNumber.ton); 5810825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(CdmaSmsAddress.NUMBER_MODE_NOT_DATA_NETWORK, bd1.callbackNumber.numberMode); 5820825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(CdmaSmsAddress.NUMBERING_PLAN_UNKNOWN, bd1.callbackNumber.numberPlan); 5830825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals("5099214001", bd1.callbackNumber.address); 5840825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 5850825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 5860825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville @SmallTest 5870825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public void testCallbackNumFeedback() throws Exception { 5880825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville BearerData bearerData = new BearerData(); 5890825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville bearerData.messageType = BearerData.MESSAGE_TYPE_DELIVER; 5900825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville bearerData.messageId = 0; 5910825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville bearerData.hasUserDataHeader = false; 5920825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville UserData userData = new UserData(); 5930825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville userData.payloadStr = "test callback number"; 5940825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville bearerData.userData = userData; 5950825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville CdmaSmsAddress addr = new CdmaSmsAddress(); 5960825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville addr.digitMode = CdmaSmsAddress.DIGIT_MODE_8BIT_CHAR; 5970825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville addr.ton = CdmaSmsAddress.TON_NATIONAL_OR_EMAIL; 5980825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville addr.numberMode = CdmaSmsAddress.NUMBER_MODE_NOT_DATA_NETWORK; 5990825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville addr.numberPlan = CdmaSmsAddress.NUMBERING_PLAN_UNKNOWN; 6000825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville addr.address = "8005551212"; 6010825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville addr.numberOfDigits = (byte)addr.address.length(); 6020825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville bearerData.callbackNumber = addr; 6030825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville byte []encodedSms = BearerData.encode(bearerData); 6040825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville BearerData revBearerData = BearerData.decode(encodedSms); 6050825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville CdmaSmsAddress revAddr = revBearerData.callbackNumber; 6060825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(addr.digitMode, revAddr.digitMode); 6070825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(addr.ton, revAddr.ton); 6080825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(addr.numberMode, revAddr.numberMode); 6090825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(addr.numberPlan, revAddr.numberPlan); 6100825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(addr.numberOfDigits, revAddr.numberOfDigits); 6110825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(addr.address, revAddr.address); 6120825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville addr.address = "8*55#1012"; 6130825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville addr.numberOfDigits = (byte)addr.address.length(); 6140825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville addr.digitMode = CdmaSmsAddress.DIGIT_MODE_4BIT_DTMF; 6150825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville encodedSms = BearerData.encode(bearerData); 6160825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville revBearerData = BearerData.decode(encodedSms); 6170825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville revAddr = revBearerData.callbackNumber; 6180825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(addr.digitMode, revAddr.digitMode); 6190825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(addr.numberOfDigits, revAddr.numberOfDigits); 6200825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(addr.address, revAddr.address); 6210825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 6220825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 6230825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville @SmallTest 6240825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public void testPrivacyIndicator() throws Exception { 6250825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville String pdu1 = "0003104090010c485f4194dfea34becf61b840090140"; 6260825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville BearerData bd1 = BearerData.decode(HexDump.hexStringToByteArray(pdu1)); 6270825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(bd1.privacy, BearerData.PRIVACY_RESTRICTED); 6280825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville String pdu2 = "0003104090010c485f4194dfea34becf61b840090180"; 6290825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville BearerData bd2 = BearerData.decode(HexDump.hexStringToByteArray(pdu2)); 6300825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(bd2.privacy, BearerData.PRIVACY_CONFIDENTIAL); 6310825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville String pdu3 = "0003104090010c485f4194dfea34becf61b8400901c0"; 6320825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville BearerData bd3 = BearerData.decode(HexDump.hexStringToByteArray(pdu3)); 6330825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(bd3.privacy, BearerData.PRIVACY_SECRET); 6340825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 6350825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 6360825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville @SmallTest 6370825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public void testPrivacyIndicatorFeedback() throws Exception { 6380825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville BearerData bearerData = new BearerData(); 6390825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville bearerData.messageType = BearerData.MESSAGE_TYPE_DELIVER; 6400825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville bearerData.messageId = 0; 6410825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville bearerData.hasUserDataHeader = false; 6420825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville UserData userData = new UserData(); 6430825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville userData.payloadStr = "test privacy indicator"; 6440825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville bearerData.userData = userData; 6450825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville bearerData.privacy = BearerData.PRIVACY_SECRET; 6460825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville bearerData.privacyIndicatorSet = true; 6470825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville byte []encodedSms = BearerData.encode(bearerData); 6480825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville BearerData revBearerData = BearerData.decode(encodedSms); 6490825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(revBearerData.userData.payloadStr, userData.payloadStr); 6500825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(revBearerData.privacyIndicatorSet, true); 6510825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(revBearerData.privacy, BearerData.PRIVACY_SECRET); 6520825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville bearerData.privacy = BearerData.PRIVACY_RESTRICTED; 6530825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville encodedSms = BearerData.encode(bearerData); 6540825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville revBearerData = BearerData.decode(encodedSms); 6550825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(revBearerData.privacy, BearerData.PRIVACY_RESTRICTED); 6560825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 6570825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 6580825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville @SmallTest 6590825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public void testMsgDeliveryAlert() throws Exception { 6600825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville String pdu1 = "0003104090010d4866a794e07055965b91d040300c0100"; 6610825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville BearerData bd1 = BearerData.decode(HexDump.hexStringToByteArray(pdu1)); 6620825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(bd1.alert, 0); 6630825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(bd1.userData.payloadStr, "Test Alert 0"); 6640825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville String pdu2 = "0003104090010d4866a794e07055965b91d140300c0140"; 6650825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville BearerData bd2 = BearerData.decode(HexDump.hexStringToByteArray(pdu2)); 6660825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(bd2.alert, 1); 6670825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(bd2.userData.payloadStr, "Test Alert 1"); 6680825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville String pdu3 = "0003104090010d4866a794e07055965b91d240300c0180"; 6690825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville BearerData bd3 = BearerData.decode(HexDump.hexStringToByteArray(pdu3)); 6700825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(bd3.alert, 2); 6710825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(bd3.userData.payloadStr, "Test Alert 2"); 6720825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville String pdu4 = "0003104090010d4866a794e07055965b91d340300c01c0"; 6730825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville BearerData bd4 = BearerData.decode(HexDump.hexStringToByteArray(pdu4)); 6740825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(bd4.alert, 3); 6750825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(bd4.userData.payloadStr, "Test Alert 3"); 6760825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville String pdu5 = "00031000000126114F4CBCFA20DB979F3C39F2A0C9976" + 6770825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville "69ED979794187665E5D1028EFA7A6840E1062D3D39A900C028000"; 6780825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville BearerData bd5 = BearerData.decode(HexDump.hexStringToByteArray(pdu5)); 6790825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(bd5.alert, BearerData.ALERT_MEDIUM_PRIO); 6800825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(bd5.userData.payloadStr, "test message delivery alert (with 8 bits)"); 6810825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville String pdu6 = "00031000000126114F4CBCFA20DB979F3C39F2A0C9976" + 6820825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville "69ED979794187665E5D1028EFA7A6840C1062D3D39A900C00"; 6830825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville BearerData bd6 = BearerData.decode(HexDump.hexStringToByteArray(pdu6)); 6840825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(bd6.userData.payloadStr, "test message delivery alert (with 0 bits)"); 6850825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(bd6.alertIndicatorSet, false); 6860825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 6870825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 6880825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville @SmallTest 6890825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public void testMiscParams() throws Exception { 6900825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville String pdu1 = "00031002400109104539b4d052ebb3d00c0180"; 6910825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville BearerData bd1 = BearerData.decode(HexDump.hexStringToByteArray(pdu1)); 6920825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(bd1.alert, BearerData.ALERT_MEDIUM_PRIO); 6930825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(bd1.userData.payloadStr, "SMS Rulz"); 6940825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville String pdu2 = "00031002500109104539b4d052ebb3d00801800901c0"; 6950825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville BearerData bd2 = BearerData.decode(HexDump.hexStringToByteArray(pdu2)); 6960825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(bd2.priority, BearerData.PRIORITY_URGENT); 6970825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(bd2.privacy, BearerData.PRIVACY_SECRET); 6980825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(bd2.userData.payloadStr, "SMS Rulz"); 6990825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville String pdu3 = "00031002600109104539b4d052ebb3d00901400c01c0"; 7000825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville BearerData bd3 = BearerData.decode(HexDump.hexStringToByteArray(pdu3)); 7010825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(bd3.privacy, BearerData.PRIVACY_RESTRICTED); 7020825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(bd3.alert, BearerData.ALERT_HIGH_PRIO); 7030825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(bd3.userData.payloadStr, "SMS Rulz"); 7040825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville String pdu4 = "00031002700109104539b4d052ebb3d00f0105"; 7050825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville BearerData bd4 = BearerData.decode(HexDump.hexStringToByteArray(pdu4)); 7060825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(bd4.displayMode, BearerData.DISPLAY_MODE_IMMEDIATE); 7070825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(bd4.userData.payloadStr, "SMS Rulz"); 7080825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 7090825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville @SmallTest 7100825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public void testMsgDeliveryAlertFeedback() throws Exception { 7110825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville BearerData bearerData = new BearerData(); 7120825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville bearerData.messageType = BearerData.MESSAGE_TYPE_DELIVER; 7130825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville bearerData.messageId = 0; 7140825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville bearerData.hasUserDataHeader = false; 7150825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville UserData userData = new UserData(); 7160825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville userData.payloadStr = "test message delivery alert"; 7170825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville bearerData.userData = userData; 7180825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville bearerData.alert = BearerData.ALERT_MEDIUM_PRIO; 7190825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville bearerData.alertIndicatorSet = true; 7200825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville byte []encodedSms = BearerData.encode(bearerData); 7210825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville BearerData revBearerData = BearerData.decode(encodedSms); 7220825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(revBearerData.userData.payloadStr, userData.payloadStr); 7230825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(revBearerData.alertIndicatorSet, true); 7240825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(revBearerData.alert, bearerData.alert); 7250825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville bearerData.alert = BearerData.ALERT_HIGH_PRIO; 7260825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville encodedSms = BearerData.encode(bearerData); 7270825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville revBearerData = BearerData.decode(encodedSms); 7280825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(revBearerData.userData.payloadStr, userData.payloadStr); 7290825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(revBearerData.alertIndicatorSet, true); 7300825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(revBearerData.alert, bearerData.alert); 7310825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 7320825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 7330825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville @SmallTest 7340825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public void testLanguageIndicator() throws Exception { 7350825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville String pdu1 = "0003104090011748bea794e0731436ef3bd7c2e0352eef27a1c263fe58080d0101"; 7360825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville BearerData bd1 = BearerData.decode(HexDump.hexStringToByteArray(pdu1)); 7370825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(bd1.userData.payloadStr, "Test Language indicator"); 7380825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(bd1.language, BearerData.LANGUAGE_ENGLISH); 7390825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville String pdu2 = "0003104090011748bea794e0731436ef3bd7c2e0352eef27a1c263fe58080d0106"; 7400825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville BearerData bd2 = BearerData.decode(HexDump.hexStringToByteArray(pdu2)); 7410825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(bd2.userData.payloadStr, "Test Language indicator"); 7420825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(bd2.language, BearerData.LANGUAGE_CHINESE); 7430825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 7440825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 7450825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville @SmallTest 7460825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public void testLanguageIndicatorFeedback() throws Exception { 7470825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville BearerData bearerData = new BearerData(); 7480825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville bearerData.messageType = BearerData.MESSAGE_TYPE_DELIVER; 7490825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville bearerData.messageId = 0; 7500825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville bearerData.hasUserDataHeader = false; 7510825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville UserData userData = new UserData(); 7520825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville userData.payloadStr = "test language indicator"; 7530825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville bearerData.userData = userData; 7540825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville bearerData.language = BearerData.LANGUAGE_ENGLISH; 7550825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville bearerData.languageIndicatorSet = true; 7560825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville byte []encodedSms = BearerData.encode(bearerData); 7570825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville BearerData revBearerData = BearerData.decode(encodedSms); 7580825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(revBearerData.userData.payloadStr, userData.payloadStr); 7590825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(revBearerData.languageIndicatorSet, true); 7600825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(revBearerData.language, bearerData.language); 7610825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville bearerData.language = BearerData.LANGUAGE_KOREAN; 7620825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville encodedSms = BearerData.encode(bearerData); 7630825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville revBearerData = BearerData.decode(encodedSms); 7640825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(revBearerData.userData.payloadStr, userData.payloadStr); 7650825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(revBearerData.languageIndicatorSet, true); 7660825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(revBearerData.language, bearerData.language); 7670825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 7680825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 7690825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville @SmallTest 7700825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public void testDisplayMode() throws Exception { 7710825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville String pdu1 = "0003104090010c485f4194dfea34becf61b8400f0100"; 7720825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville BearerData bd1 = BearerData.decode(HexDump.hexStringToByteArray(pdu1)); 7730825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(bd1.displayMode, BearerData.DISPLAY_MODE_IMMEDIATE); 7740825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville String pdu2 = "0003104090010c485f4194dfea34becf61b8400f0140"; 7750825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville BearerData bd2 = BearerData.decode(HexDump.hexStringToByteArray(pdu2)); 7760825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(bd2.displayMode, BearerData.DISPLAY_MODE_DEFAULT); 7770825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville String pdu3 = "0003104090010c485f4194dfea34becf61b8400f0180"; 7780825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville BearerData bd3 = BearerData.decode(HexDump.hexStringToByteArray(pdu3)); 7790825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(bd3.displayMode, BearerData.DISPLAY_MODE_USER); 7800825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 7810825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 7820825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville @SmallTest 7830825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public void testDisplayModeFeedback() throws Exception { 7840825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville BearerData bearerData = new BearerData(); 7850825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville bearerData.messageType = BearerData.MESSAGE_TYPE_DELIVER; 7860825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville bearerData.messageId = 0; 7870825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville bearerData.hasUserDataHeader = false; 7880825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville UserData userData = new UserData(); 7890825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville userData.payloadStr = "test display mode"; 7900825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville bearerData.userData = userData; 7910825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville bearerData.displayMode = BearerData.DISPLAY_MODE_IMMEDIATE; 7920825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville bearerData.displayModeSet = true; 7930825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville byte []encodedSms = BearerData.encode(bearerData); 7940825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville BearerData revBearerData = BearerData.decode(encodedSms); 7950825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(revBearerData.userData.payloadStr, userData.payloadStr); 7960825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(revBearerData.displayModeSet, true); 7970825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(revBearerData.displayMode, bearerData.displayMode); 7980825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville bearerData.displayMode = BearerData.DISPLAY_MODE_USER; 7990825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville encodedSms = BearerData.encode(bearerData); 8000825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville revBearerData = BearerData.decode(encodedSms); 8010825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(revBearerData.userData.payloadStr, userData.payloadStr); 8020825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(revBearerData.displayModeSet, true); 8030825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(revBearerData.displayMode, bearerData.displayMode); 8040825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 8050825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 8060825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville @SmallTest 8070825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public void testIs91() throws Exception { 8080825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville String pdu1 = "000320001001070c2039acc13880"; 8090825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville BearerData bd1 = BearerData.decode(HexDump.hexStringToByteArray(pdu1)); 8100825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(bd1.callbackNumber.address, "3598271"); 8110825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville String pdu4 = "000320001001080c283c314724b34e"; 8120825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville BearerData bd4 = BearerData.decode(HexDump.hexStringToByteArray(pdu4)); 8130825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(bd4.userData.payloadStr, "ABCDEFG"); 8140825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 8150825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 8160825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville @SmallTest 8170825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public void testUserDataHeaderWithEightCharMsg() throws Exception { 81848a57c9ac6516c0f34a9593d6ffd64173fdf6953Jake Hamby SmsHeader smsHeader = getConcatUserDataHeader(2, 2); 81948a57c9ac6516c0f34a9593d6ffd64173fdf6953Jake Hamby encodeDecodeAssertEquals("01234567", smsHeader, -1); 82048a57c9ac6516c0f34a9593d6ffd64173fdf6953Jake Hamby SmsHeader smsHeader2 = getOddLengthUserDataHeader(); 82148a57c9ac6516c0f34a9593d6ffd64173fdf6953Jake Hamby encodeDecodeAssertEquals("01234567", smsHeader2, -1); 822115632cc56f813bd21543f8532c763d7d2968046Jake Hamby } 823115632cc56f813bd21543f8532c763d7d2968046Jake Hamby 82448a57c9ac6516c0f34a9593d6ffd64173fdf6953Jake Hamby @SmallTest 82548a57c9ac6516c0f34a9593d6ffd64173fdf6953Jake Hamby public void testShiftJis() throws Exception { 82648a57c9ac6516c0f34a9593d6ffd64173fdf6953Jake Hamby encodeDecodeAssertEquals(sHelloWorldJa, null, UserData.ENCODING_UNICODE_16); 82748a57c9ac6516c0f34a9593d6ffd64173fdf6953Jake Hamby encodeDecodeAssertEquals(sHelloWorldJa, null, UserData.ENCODING_SHIFT_JIS); 82848a57c9ac6516c0f34a9593d6ffd64173fdf6953Jake Hamby } 82948a57c9ac6516c0f34a9593d6ffd64173fdf6953Jake Hamby 83048a57c9ac6516c0f34a9593d6ffd64173fdf6953Jake Hamby @SmallTest 83148a57c9ac6516c0f34a9593d6ffd64173fdf6953Jake Hamby public void testIgnoreReservedSubparam() throws Exception { 8320825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville BearerData bearerData = new BearerData(); 8330825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville bearerData.messageType = BearerData.MESSAGE_TYPE_DELIVER; 83448a57c9ac6516c0f34a9593d6ffd64173fdf6953Jake Hamby bearerData.messageId = 1234; 83548a57c9ac6516c0f34a9593d6ffd64173fdf6953Jake Hamby UserData userData = new UserData(); 83648a57c9ac6516c0f34a9593d6ffd64173fdf6953Jake Hamby userData.payloadStr = sHelloWorldJa; 83748a57c9ac6516c0f34a9593d6ffd64173fdf6953Jake Hamby bearerData.userData = userData; 83848a57c9ac6516c0f34a9593d6ffd64173fdf6953Jake Hamby byte[] encodedSms = BearerData.encode(bearerData); 83948a57c9ac6516c0f34a9593d6ffd64173fdf6953Jake Hamby BearerData revBearerData = BearerData.decode(encodedSms); 84048a57c9ac6516c0f34a9593d6ffd64173fdf6953Jake Hamby assertEquals(userData.payloadStr, revBearerData.userData.payloadStr); 84148a57c9ac6516c0f34a9593d6ffd64173fdf6953Jake Hamby 84248a57c9ac6516c0f34a9593d6ffd64173fdf6953Jake Hamby byte[] smsWithValidSubparam = Arrays.copyOf(encodedSms, encodedSms.length + 5); 84348a57c9ac6516c0f34a9593d6ffd64173fdf6953Jake Hamby smsWithValidSubparam[encodedSms.length] = 0x18; // BearerData.SUBPARAM_ID_LAST_DEFINED + 1 84448a57c9ac6516c0f34a9593d6ffd64173fdf6953Jake Hamby smsWithValidSubparam[encodedSms.length + 1] = 3; 84548a57c9ac6516c0f34a9593d6ffd64173fdf6953Jake Hamby smsWithValidSubparam[encodedSms.length + 2] = 0x12; 84648a57c9ac6516c0f34a9593d6ffd64173fdf6953Jake Hamby smsWithValidSubparam[encodedSms.length + 3] = 0x34; 84748a57c9ac6516c0f34a9593d6ffd64173fdf6953Jake Hamby smsWithValidSubparam[encodedSms.length + 4] = 0x56; 84848a57c9ac6516c0f34a9593d6ffd64173fdf6953Jake Hamby revBearerData = BearerData.decode(smsWithValidSubparam); 84948a57c9ac6516c0f34a9593d6ffd64173fdf6953Jake Hamby assertEquals(userData.payloadStr, revBearerData.userData.payloadStr); 85048a57c9ac6516c0f34a9593d6ffd64173fdf6953Jake Hamby 85148a57c9ac6516c0f34a9593d6ffd64173fdf6953Jake Hamby smsWithValidSubparam = Arrays.copyOf(encodedSms, encodedSms.length + 2); 85248a57c9ac6516c0f34a9593d6ffd64173fdf6953Jake Hamby smsWithValidSubparam[encodedSms.length] = 0x18; 85348a57c9ac6516c0f34a9593d6ffd64173fdf6953Jake Hamby smsWithValidSubparam[encodedSms.length + 1] = 0; 85448a57c9ac6516c0f34a9593d6ffd64173fdf6953Jake Hamby revBearerData = BearerData.decode(smsWithValidSubparam); 85548a57c9ac6516c0f34a9593d6ffd64173fdf6953Jake Hamby assertEquals(userData.payloadStr, revBearerData.userData.payloadStr); 85648a57c9ac6516c0f34a9593d6ffd64173fdf6953Jake Hamby 85748a57c9ac6516c0f34a9593d6ffd64173fdf6953Jake Hamby byte[] smsWithInvalidSubparam = Arrays.copyOf(encodedSms, encodedSms.length + 2); 85848a57c9ac6516c0f34a9593d6ffd64173fdf6953Jake Hamby smsWithInvalidSubparam[encodedSms.length] = 0x18; 85948a57c9ac6516c0f34a9593d6ffd64173fdf6953Jake Hamby smsWithInvalidSubparam[encodedSms.length + 1] = (byte) 1; 86048a57c9ac6516c0f34a9593d6ffd64173fdf6953Jake Hamby revBearerData = BearerData.decode(smsWithInvalidSubparam); 86148a57c9ac6516c0f34a9593d6ffd64173fdf6953Jake Hamby assertNull(revBearerData); 86248a57c9ac6516c0f34a9593d6ffd64173fdf6953Jake Hamby } 86348a57c9ac6516c0f34a9593d6ffd64173fdf6953Jake Hamby 86448a57c9ac6516c0f34a9593d6ffd64173fdf6953Jake Hamby // Return a user data header for a concatenated message 86548a57c9ac6516c0f34a9593d6ffd64173fdf6953Jake Hamby private static SmsHeader getConcatUserDataHeader(int index, int total) { 8660825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville SmsHeader smsHeader = new SmsHeader(); 86748a57c9ac6516c0f34a9593d6ffd64173fdf6953Jake Hamby SmsHeader.ConcatRef concatRef = new SmsHeader.ConcatRef(); 86848a57c9ac6516c0f34a9593d6ffd64173fdf6953Jake Hamby concatRef.refNumber = 0xEE; 86948a57c9ac6516c0f34a9593d6ffd64173fdf6953Jake Hamby concatRef.msgCount = total; 87048a57c9ac6516c0f34a9593d6ffd64173fdf6953Jake Hamby concatRef.seqNumber = index; 87148a57c9ac6516c0f34a9593d6ffd64173fdf6953Jake Hamby concatRef.isEightBits = true; 87248a57c9ac6516c0f34a9593d6ffd64173fdf6953Jake Hamby smsHeader.concatRef = concatRef; 87348a57c9ac6516c0f34a9593d6ffd64173fdf6953Jake Hamby return smsHeader; 87448a57c9ac6516c0f34a9593d6ffd64173fdf6953Jake Hamby } 87548a57c9ac6516c0f34a9593d6ffd64173fdf6953Jake Hamby 87648a57c9ac6516c0f34a9593d6ffd64173fdf6953Jake Hamby // Return a user data header of odd length to verify correct UTF-16 header padding 87748a57c9ac6516c0f34a9593d6ffd64173fdf6953Jake Hamby private static SmsHeader getOddLengthUserDataHeader() { 87848a57c9ac6516c0f34a9593d6ffd64173fdf6953Jake Hamby SmsHeader smsHeader = new SmsHeader(); 87948a57c9ac6516c0f34a9593d6ffd64173fdf6953Jake Hamby SmsHeader.MiscElt miscElt = new SmsHeader.MiscElt(); 88048a57c9ac6516c0f34a9593d6ffd64173fdf6953Jake Hamby miscElt.id = 0x27; // reserved for future use; ignored on decode 88148a57c9ac6516c0f34a9593d6ffd64173fdf6953Jake Hamby miscElt.data = new byte[]{0x12, 0x34}; 88248a57c9ac6516c0f34a9593d6ffd64173fdf6953Jake Hamby smsHeader.miscEltList.add(miscElt); 88348a57c9ac6516c0f34a9593d6ffd64173fdf6953Jake Hamby return smsHeader; 88448a57c9ac6516c0f34a9593d6ffd64173fdf6953Jake Hamby } 88548a57c9ac6516c0f34a9593d6ffd64173fdf6953Jake Hamby 88648a57c9ac6516c0f34a9593d6ffd64173fdf6953Jake Hamby private static void encodeDecodeAssertEquals(String payload, SmsHeader smsHeader, 88748a57c9ac6516c0f34a9593d6ffd64173fdf6953Jake Hamby int msgEncoding) throws Exception { 88848a57c9ac6516c0f34a9593d6ffd64173fdf6953Jake Hamby BearerData bearerData = new BearerData(); 88948a57c9ac6516c0f34a9593d6ffd64173fdf6953Jake Hamby bearerData.messageType = BearerData.MESSAGE_TYPE_DELIVER; 89048a57c9ac6516c0f34a9593d6ffd64173fdf6953Jake Hamby bearerData.messageId = 55; 8910825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville UserData userData = new UserData(); 892115632cc56f813bd21543f8532c763d7d2968046Jake Hamby userData.payloadStr = payload; 89348a57c9ac6516c0f34a9593d6ffd64173fdf6953Jake Hamby userData.userDataHeader = smsHeader; // may be null 89448a57c9ac6516c0f34a9593d6ffd64173fdf6953Jake Hamby if (msgEncoding != -1) { 89548a57c9ac6516c0f34a9593d6ffd64173fdf6953Jake Hamby userData.msgEncoding = msgEncoding; 89648a57c9ac6516c0f34a9593d6ffd64173fdf6953Jake Hamby userData.msgEncodingSet = true; 89748a57c9ac6516c0f34a9593d6ffd64173fdf6953Jake Hamby } 8980825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville bearerData.userData = userData; 8990825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville byte[] encodedSms = BearerData.encode(bearerData); 9000825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville BearerData revBearerData = BearerData.decode(encodedSms); 9010825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(userData.payloadStr, revBearerData.userData.payloadStr); 90248a57c9ac6516c0f34a9593d6ffd64173fdf6953Jake Hamby if (smsHeader != null) { 90348a57c9ac6516c0f34a9593d6ffd64173fdf6953Jake Hamby assertTrue(revBearerData.hasUserDataHeader); 90448a57c9ac6516c0f34a9593d6ffd64173fdf6953Jake Hamby byte[] encodeHeader = SmsHeader.toByteArray(smsHeader); 90548a57c9ac6516c0f34a9593d6ffd64173fdf6953Jake Hamby byte[] decodeHeader = SmsHeader.toByteArray(revBearerData.userData.userDataHeader); 90648a57c9ac6516c0f34a9593d6ffd64173fdf6953Jake Hamby assertTrue(Arrays.equals(encodeHeader, decodeHeader)); 907115632cc56f813bd21543f8532c763d7d2968046Jake Hamby } else { 90848a57c9ac6516c0f34a9593d6ffd64173fdf6953Jake Hamby assertFalse(revBearerData.hasUserDataHeader); 909115632cc56f813bd21543f8532c763d7d2968046Jake Hamby } 9100825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 9110825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 9120825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville @SmallTest 9130825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public void testFragmentText() throws Exception { 9140825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville boolean isCdmaPhone = (TelephonyManager.getDefault().getPhoneType() == 9150825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville TelephonyManager.PHONE_TYPE_CDMA); 9160825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // Valid 160 character ASCII text. 9170825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville String text1 = "123456789012345678901234567890123456789012345678901234567890" + 9180825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville "1234567890123456789012345678901234567890123456789012345678901234567890" + 9190825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville "12345678901234567890123456789["; 9203ce96a061c2c6e24f4ff3bd237e18c29fc0c0108Amit Mahajan TextEncodingDetails ted = SmsMessage.calculateLength(text1, false, true); 9210825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(ted.msgCount, 1); 9220825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(ted.codeUnitCount, 160); 9230825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(ted.codeUnitSize, 1); 9240825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville if (isCdmaPhone) { 9250825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville ArrayList<String> fragments = android.telephony.SmsMessage.fragmentText(text1); 9260825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(fragments.size(), 1); 9270825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 9280825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 9290825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville /* 9300825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville This is not a valid test: we will never encode a single-segment 9310825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville EMS message. Leaving this here, since we may try to support 9320825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville this in the future. 9330825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 9340825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // Valid 160 character GSM text -- the last character is 9350825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // non-ASCII, and so this will currently generate a singleton 9360825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // EMS message, which is not necessarily supported by Verizon. 9370825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville String text2 = "123456789012345678901234567890123456789012345678901234567890" + 9380825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville "1234567890123456789012345678901234567890123456789012345678901234567890" + 9390825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville "12345678901234567890123456789\u00a3"; // Trailing pound-currency sign. 9400825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville ted = SmsMessage.calculateLength(text2, false); 9410825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(ted.msgCount, 1); 9420825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(ted.codeUnitCount, 160); 9430825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(ted.codeUnitSize, 1); 9440825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville if (isCdmaPhone) { 9450825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville ArrayList<String> fragments = android.telephony.SmsMessage.fragmentText(text2); 9460825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(fragments.size(), 1); 9470825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 9480825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville */ 9490825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 9500825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // *IF* we supported single-segment EMS, this text would result in a 9510825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // single fragment with 7-bit encoding. But we don't, so this text 9520825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // results in three fragments of 16-bit encoding. 9530825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville String text2 = "123456789012345678901234567890123456789012345678901234567890" + 9540825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville "1234567890123456789012345678901234567890123456789012345678901234567890" + 9550825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville "12345678901234567890123456789\u00a3"; // Trailing pound-currency sign. 9563ce96a061c2c6e24f4ff3bd237e18c29fc0c0108Amit Mahajan ted = SmsMessage.calculateLength(text2, false, true); 9570825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(3, ted.msgCount); 9580825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(160, ted.codeUnitCount); 9590825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(3, ted.codeUnitSize); 9600825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville if (isCdmaPhone) { 9610825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville ArrayList<String> fragments = android.telephony.SmsMessage.fragmentText(text2); 9620825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville assertEquals(3, fragments.size()); 963115632cc56f813bd21543f8532c763d7d2968046Jake Hamby 964115632cc56f813bd21543f8532c763d7d2968046Jake Hamby for (int i = 0; i < 3; i++) { 96548a57c9ac6516c0f34a9593d6ffd64173fdf6953Jake Hamby SmsHeader header = getConcatUserDataHeader(i + 1, 3); 96648a57c9ac6516c0f34a9593d6ffd64173fdf6953Jake Hamby SmsHeader header2 = getOddLengthUserDataHeader(); 96748a57c9ac6516c0f34a9593d6ffd64173fdf6953Jake Hamby encodeDecodeAssertEquals(fragments.get(i), header, -1); 96848a57c9ac6516c0f34a9593d6ffd64173fdf6953Jake Hamby encodeDecodeAssertEquals(fragments.get(i), header2, -1); 969115632cc56f813bd21543f8532c763d7d2968046Jake Hamby } 9700825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 9710825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 972115632cc56f813bd21543f8532c763d7d2968046Jake Hamby // Test case for multi-part UTF-16 message. 973115632cc56f813bd21543f8532c763d7d2968046Jake Hamby String text3 = sUnicodeChars + sUnicodeChars + sUnicodeChars; 9743ce96a061c2c6e24f4ff3bd237e18c29fc0c0108Amit Mahajan ted = SmsMessage.calculateLength(text3, false, true); 975115632cc56f813bd21543f8532c763d7d2968046Jake Hamby assertEquals(3, ted.msgCount); 976115632cc56f813bd21543f8532c763d7d2968046Jake Hamby assertEquals(189, ted.codeUnitCount); 977115632cc56f813bd21543f8532c763d7d2968046Jake Hamby assertEquals(3, ted.codeUnitSize); 978115632cc56f813bd21543f8532c763d7d2968046Jake Hamby if (isCdmaPhone) { 979115632cc56f813bd21543f8532c763d7d2968046Jake Hamby ArrayList<String> fragments = android.telephony.SmsMessage.fragmentText(text3); 980115632cc56f813bd21543f8532c763d7d2968046Jake Hamby assertEquals(3, fragments.size()); 981115632cc56f813bd21543f8532c763d7d2968046Jake Hamby 982115632cc56f813bd21543f8532c763d7d2968046Jake Hamby for (int i = 0; i < 3; i++) { 98348a57c9ac6516c0f34a9593d6ffd64173fdf6953Jake Hamby SmsHeader header = getConcatUserDataHeader(i + 1, 3); 98448a57c9ac6516c0f34a9593d6ffd64173fdf6953Jake Hamby SmsHeader header2 = getOddLengthUserDataHeader(); 98548a57c9ac6516c0f34a9593d6ffd64173fdf6953Jake Hamby encodeDecodeAssertEquals(fragments.get(i), header, -1); 98648a57c9ac6516c0f34a9593d6ffd64173fdf6953Jake Hamby encodeDecodeAssertEquals(fragments.get(i), header2, -1); 987115632cc56f813bd21543f8532c763d7d2968046Jake Hamby } 988115632cc56f813bd21543f8532c763d7d2968046Jake Hamby } 9890825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 9900825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville} 991