183917db040bd7498ebca3b74f879dc1c9e223d8eTammo Spalink/* 283917db040bd7498ebca3b74f879dc1c9e223d8eTammo Spalink * Copyright (C) 2006 The Android Open Source Project 383917db040bd7498ebca3b74f879dc1c9e223d8eTammo Spalink * 483917db040bd7498ebca3b74f879dc1c9e223d8eTammo Spalink * Licensed under the Apache License, Version 2.0 (the "License"); 583917db040bd7498ebca3b74f879dc1c9e223d8eTammo Spalink * you may not use this file except in compliance with the License. 683917db040bd7498ebca3b74f879dc1c9e223d8eTammo Spalink * You may obtain a copy of the License at 783917db040bd7498ebca3b74f879dc1c9e223d8eTammo Spalink * 883917db040bd7498ebca3b74f879dc1c9e223d8eTammo Spalink * http://www.apache.org/licenses/LICENSE-2.0 983917db040bd7498ebca3b74f879dc1c9e223d8eTammo Spalink * 1083917db040bd7498ebca3b74f879dc1c9e223d8eTammo Spalink * Unless required by applicable law or agreed to in writing, software 1183917db040bd7498ebca3b74f879dc1c9e223d8eTammo Spalink * distributed under the License is distributed on an "AS IS" BASIS, 1283917db040bd7498ebca3b74f879dc1c9e223d8eTammo Spalink * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1383917db040bd7498ebca3b74f879dc1c9e223d8eTammo Spalink * See the License for the specific language governing permissions and 1483917db040bd7498ebca3b74f879dc1c9e223d8eTammo Spalink * limitations under the License. 1583917db040bd7498ebca3b74f879dc1c9e223d8eTammo Spalink */ 1683917db040bd7498ebca3b74f879dc1c9e223d8eTammo Spalink 171a44d5dcabc18cd5ef111f732ccff91683a1a093Neal Nguyenpackage com.android.internal.telephony.cdma.sms; 1883917db040bd7498ebca3b74f879dc1c9e223d8eTammo Spalink 19af8e23fe9ebc160ad370d3cb4d960d154316930eTammo Spalinkimport android.telephony.TelephonyManager; 20af8e23fe9ebc160ad370d3cb4d960d154316930eTammo Spalink 2183917db040bd7498ebca3b74f879dc1c9e223d8eTammo Spalinkimport com.android.internal.telephony.GsmAlphabet; 2283917db040bd7498ebca3b74f879dc1c9e223d8eTammo Spalinkimport com.android.internal.telephony.SmsHeader; 23e00dd1e5a37bed0de964b353d47a4bd7cdff532fTammo Spalinkimport com.android.internal.telephony.cdma.SmsMessage; 2483917db040bd7498ebca3b74f879dc1c9e223d8eTammo Spalinkimport com.android.internal.telephony.cdma.sms.BearerData; 2583917db040bd7498ebca3b74f879dc1c9e223d8eTammo Spalinkimport com.android.internal.telephony.cdma.sms.UserData; 2683917db040bd7498ebca3b74f879dc1c9e223d8eTammo Spalinkimport com.android.internal.telephony.cdma.sms.CdmaSmsAddress; 27e00dd1e5a37bed0de964b353d47a4bd7cdff532fTammo Spalinkimport com.android.internal.telephony.SmsMessageBase.TextEncodingDetails; 2883917db040bd7498ebca3b74f879dc1c9e223d8eTammo Spalinkimport com.android.internal.util.BitwiseInputStream; 2983917db040bd7498ebca3b74f879dc1c9e223d8eTammo Spalinkimport com.android.internal.util.BitwiseOutputStream; 3083917db040bd7498ebca3b74f879dc1c9e223d8eTammo Spalinkimport com.android.internal.util.HexDump; 3183917db040bd7498ebca3b74f879dc1c9e223d8eTammo Spalink 3283917db040bd7498ebca3b74f879dc1c9e223d8eTammo Spalinkimport android.test.AndroidTestCase; 3383917db040bd7498ebca3b74f879dc1c9e223d8eTammo Spalinkimport android.test.suitebuilder.annotation.SmallTest; 3483917db040bd7498ebca3b74f879dc1c9e223d8eTammo Spalink 35e00dd1e5a37bed0de964b353d47a4bd7cdff532fTammo Spalinkimport android.util.Log; 36e00dd1e5a37bed0de964b353d47a4bd7cdff532fTammo Spalink 3795434bfaee62161ce02012c6424f0c0c8fffccb5Tammo Spalinkimport java.util.ArrayList; 3895434bfaee62161ce02012c6424f0c0c8fffccb5Tammo Spalink 3983917db040bd7498ebca3b74f879dc1c9e223d8eTammo Spalinkpublic class CdmaSmsTest extends AndroidTestCase { 40f73dc54541f546fb966e94e73a925bbc259f9befTammo Spalink private final static String LOG_TAG = "XXX CdmaSmsTest XXX"; 4183917db040bd7498ebca3b74f879dc1c9e223d8eTammo Spalink 4283917db040bd7498ebca3b74f879dc1c9e223d8eTammo Spalink @SmallTest 431424fe0059a3fe163fb98bad807a1eb635b0a161Tammo Spalink public void testCdmaSmsAddrParsing() throws Exception { 441424fe0059a3fe163fb98bad807a1eb635b0a161Tammo Spalink CdmaSmsAddress addr = CdmaSmsAddress.parse("6502531000"); 451424fe0059a3fe163fb98bad807a1eb635b0a161Tammo Spalink assertEquals(addr.ton, CdmaSmsAddress.TON_UNKNOWN); 461424fe0059a3fe163fb98bad807a1eb635b0a161Tammo Spalink assertEquals(addr.digitMode, CdmaSmsAddress.DIGIT_MODE_4BIT_DTMF); 471424fe0059a3fe163fb98bad807a1eb635b0a161Tammo Spalink assertEquals(addr.numberMode, CdmaSmsAddress.NUMBER_MODE_NOT_DATA_NETWORK); 481424fe0059a3fe163fb98bad807a1eb635b0a161Tammo Spalink assertEquals(addr.numberOfDigits, 10); 491424fe0059a3fe163fb98bad807a1eb635b0a161Tammo Spalink assertEquals(addr.origBytes.length, 10); 501424fe0059a3fe163fb98bad807a1eb635b0a161Tammo Spalink byte[] data = {6, 5, 10, 2, 5, 3, 1, 10, 10, 10}; 511424fe0059a3fe163fb98bad807a1eb635b0a161Tammo Spalink for (int i = 0; i < data.length; i++) { 521424fe0059a3fe163fb98bad807a1eb635b0a161Tammo Spalink assertEquals(addr.origBytes[i], data[i]); 531424fe0059a3fe163fb98bad807a1eb635b0a161Tammo Spalink } 541424fe0059a3fe163fb98bad807a1eb635b0a161Tammo Spalink addr = CdmaSmsAddress.parse("(650) 253-1000"); 551424fe0059a3fe163fb98bad807a1eb635b0a161Tammo Spalink assertEquals(addr.ton, CdmaSmsAddress.TON_UNKNOWN); 561424fe0059a3fe163fb98bad807a1eb635b0a161Tammo Spalink assertEquals(addr.digitMode, CdmaSmsAddress.DIGIT_MODE_4BIT_DTMF); 571424fe0059a3fe163fb98bad807a1eb635b0a161Tammo Spalink assertEquals(addr.numberMode, CdmaSmsAddress.NUMBER_MODE_NOT_DATA_NETWORK); 581424fe0059a3fe163fb98bad807a1eb635b0a161Tammo Spalink assertEquals(addr.numberOfDigits, 10); 591424fe0059a3fe163fb98bad807a1eb635b0a161Tammo Spalink assertEquals(addr.origBytes.length, 10); 601424fe0059a3fe163fb98bad807a1eb635b0a161Tammo Spalink byte[] data2 = {6, 5, 10, 2, 5, 3, 1, 10, 10, 10}; 611424fe0059a3fe163fb98bad807a1eb635b0a161Tammo Spalink for (int i = 0; i < data2.length; i++) { 621424fe0059a3fe163fb98bad807a1eb635b0a161Tammo Spalink assertEquals(addr.origBytes[i], data2[i]); 631424fe0059a3fe163fb98bad807a1eb635b0a161Tammo Spalink } 6461aac7b377ac4878a5778457cad239fe3a50604aTammo Spalink addr = CdmaSmsAddress.parse("650.253.1000"); 6561aac7b377ac4878a5778457cad239fe3a50604aTammo Spalink assertEquals(addr.ton, CdmaSmsAddress.TON_UNKNOWN); 6661aac7b377ac4878a5778457cad239fe3a50604aTammo Spalink assertEquals(addr.digitMode, CdmaSmsAddress.DIGIT_MODE_4BIT_DTMF); 6761aac7b377ac4878a5778457cad239fe3a50604aTammo Spalink assertEquals(addr.numberMode, CdmaSmsAddress.NUMBER_MODE_NOT_DATA_NETWORK); 6861aac7b377ac4878a5778457cad239fe3a50604aTammo Spalink assertEquals(addr.numberOfDigits, 10); 6961aac7b377ac4878a5778457cad239fe3a50604aTammo Spalink assertEquals(addr.origBytes.length, 10); 7061aac7b377ac4878a5778457cad239fe3a50604aTammo Spalink byte[] data5 = {6, 5, 10, 2, 5, 3, 1, 10, 10, 10}; 7161aac7b377ac4878a5778457cad239fe3a50604aTammo Spalink for (int i = 0; i < data2.length; i++) { 7261aac7b377ac4878a5778457cad239fe3a50604aTammo Spalink assertEquals(addr.origBytes[i], data5[i]); 7361aac7b377ac4878a5778457cad239fe3a50604aTammo Spalink } 741424fe0059a3fe163fb98bad807a1eb635b0a161Tammo Spalink addr = CdmaSmsAddress.parse("(+886) 917 222 555"); 751424fe0059a3fe163fb98bad807a1eb635b0a161Tammo Spalink assertEquals(addr.ton, CdmaSmsAddress.TON_INTERNATIONAL_OR_IP); 761424fe0059a3fe163fb98bad807a1eb635b0a161Tammo Spalink assertEquals(addr.digitMode, CdmaSmsAddress.DIGIT_MODE_4BIT_DTMF); 771424fe0059a3fe163fb98bad807a1eb635b0a161Tammo Spalink assertEquals(addr.numberMode, CdmaSmsAddress.NUMBER_MODE_NOT_DATA_NETWORK); 781424fe0059a3fe163fb98bad807a1eb635b0a161Tammo Spalink assertEquals(addr.numberOfDigits, 12); 791424fe0059a3fe163fb98bad807a1eb635b0a161Tammo Spalink assertEquals(addr.origBytes.length, 12); 801424fe0059a3fe163fb98bad807a1eb635b0a161Tammo Spalink byte[] data3 = {8, 8, 6, 9, 1, 7, 2, 2, 2, 5, 5, 5}; 811424fe0059a3fe163fb98bad807a1eb635b0a161Tammo Spalink for (int i = 0; i < data3.length; i++) { 821424fe0059a3fe163fb98bad807a1eb635b0a161Tammo Spalink assertEquals(addr.origBytes[i], data3[i]); 831424fe0059a3fe163fb98bad807a1eb635b0a161Tammo Spalink } 841424fe0059a3fe163fb98bad807a1eb635b0a161Tammo Spalink addr = CdmaSmsAddress.parse("(650) *253-1000 #600"); 851424fe0059a3fe163fb98bad807a1eb635b0a161Tammo Spalink byte[] data4 = {6, 5, 10, 11, 2, 5, 3, 1, 10, 10, 10, 12, 6, 10, 10}; 861424fe0059a3fe163fb98bad807a1eb635b0a161Tammo Spalink for (int i = 0; i < data4.length; i++) { 871424fe0059a3fe163fb98bad807a1eb635b0a161Tammo Spalink assertEquals(addr.origBytes[i], data4[i]); 881424fe0059a3fe163fb98bad807a1eb635b0a161Tammo Spalink } 891424fe0059a3fe163fb98bad807a1eb635b0a161Tammo Spalink String input = "x@y.com,a@b.com"; 901424fe0059a3fe163fb98bad807a1eb635b0a161Tammo Spalink addr = CdmaSmsAddress.parse(input); 911424fe0059a3fe163fb98bad807a1eb635b0a161Tammo Spalink assertEquals(addr.ton, CdmaSmsAddress.TON_NATIONAL_OR_EMAIL); 921424fe0059a3fe163fb98bad807a1eb635b0a161Tammo Spalink assertEquals(addr.digitMode, CdmaSmsAddress.DIGIT_MODE_8BIT_CHAR); 931424fe0059a3fe163fb98bad807a1eb635b0a161Tammo Spalink assertEquals(addr.numberMode, CdmaSmsAddress.NUMBER_MODE_DATA_NETWORK); 941424fe0059a3fe163fb98bad807a1eb635b0a161Tammo Spalink assertEquals(addr.numberOfDigits, 15); 951424fe0059a3fe163fb98bad807a1eb635b0a161Tammo Spalink assertEquals(addr.origBytes.length, 15); 961424fe0059a3fe163fb98bad807a1eb635b0a161Tammo Spalink assertEquals(new String(addr.origBytes), input); 971424fe0059a3fe163fb98bad807a1eb635b0a161Tammo Spalink addr = CdmaSmsAddress.parse("foo bar"); 981424fe0059a3fe163fb98bad807a1eb635b0a161Tammo Spalink assertEquals(addr.ton, CdmaSmsAddress.TON_UNKNOWN); 991424fe0059a3fe163fb98bad807a1eb635b0a161Tammo Spalink assertEquals(addr.digitMode, CdmaSmsAddress.DIGIT_MODE_8BIT_CHAR); 1001424fe0059a3fe163fb98bad807a1eb635b0a161Tammo Spalink assertEquals(addr.numberMode, CdmaSmsAddress.NUMBER_MODE_DATA_NETWORK); 1011424fe0059a3fe163fb98bad807a1eb635b0a161Tammo Spalink assertEquals(addr.numberOfDigits, 6); 1021424fe0059a3fe163fb98bad807a1eb635b0a161Tammo Spalink assertEquals(addr.origBytes.length, 6); 1031424fe0059a3fe163fb98bad807a1eb635b0a161Tammo Spalink assertEquals(new String(addr.origBytes), "foobar"); 1041424fe0059a3fe163fb98bad807a1eb635b0a161Tammo Spalink addr = CdmaSmsAddress.parse("f\noo\tb a\rr"); 1051424fe0059a3fe163fb98bad807a1eb635b0a161Tammo Spalink assertEquals(new String(addr.origBytes), "foobar"); 1061424fe0059a3fe163fb98bad807a1eb635b0a161Tammo Spalink assertEquals(CdmaSmsAddress.parse("f\u0000oo bar"), null); 1071424fe0059a3fe163fb98bad807a1eb635b0a161Tammo Spalink assertEquals(CdmaSmsAddress.parse("f\u0007oo bar"), null); 1081424fe0059a3fe163fb98bad807a1eb635b0a161Tammo Spalink assertEquals(CdmaSmsAddress.parse("f\u0080oo bar"), null); 1091424fe0059a3fe163fb98bad807a1eb635b0a161Tammo Spalink assertEquals(CdmaSmsAddress.parse("f\u1ECFboo\u001fbar"), null); 1101424fe0059a3fe163fb98bad807a1eb635b0a161Tammo Spalink assertEquals(CdmaSmsAddress.parse("f\u0080oo bar"), null); 1111424fe0059a3fe163fb98bad807a1eb635b0a161Tammo Spalink } 1121424fe0059a3fe163fb98bad807a1eb635b0a161Tammo Spalink 1131424fe0059a3fe163fb98bad807a1eb635b0a161Tammo Spalink @SmallTest 114d2b124f97c52c566b68aff9fa58306f461686af0Tammo Spalink public void testUserData7bitGsm() throws Exception { 11583917db040bd7498ebca3b74f879dc1c9e223d8eTammo Spalink String pdu = "00031040900112488ea794e074d69e1b7392c270326cde9e98"; 11683917db040bd7498ebca3b74f879dc1c9e223d8eTammo Spalink BearerData bearerData = BearerData.decode(HexDump.hexStringToByteArray(pdu)); 11783917db040bd7498ebca3b74f879dc1c9e223d8eTammo Spalink assertEquals("Test standard SMS", bearerData.userData.payloadStr); 11883917db040bd7498ebca3b74f879dc1c9e223d8eTammo Spalink } 11983917db040bd7498ebca3b74f879dc1c9e223d8eTammo Spalink 12083917db040bd7498ebca3b74f879dc1c9e223d8eTammo Spalink @SmallTest 1218478b59f177ec97a9996b71f7fac1509ba9ef493Tammo Spalink public void testUserData7bitAscii() throws Exception { 1228478b59f177ec97a9996b71f7fac1509ba9ef493Tammo Spalink String pdu = "0003100160010610262d5ab500"; 1238478b59f177ec97a9996b71f7fac1509ba9ef493Tammo Spalink BearerData bearerData = BearerData.decode(HexDump.hexStringToByteArray(pdu)); 1248478b59f177ec97a9996b71f7fac1509ba9ef493Tammo Spalink assertEquals("bjjj", bearerData.userData.payloadStr); 1258478b59f177ec97a9996b71f7fac1509ba9ef493Tammo Spalink } 1268478b59f177ec97a9996b71f7fac1509ba9ef493Tammo Spalink 1278478b59f177ec97a9996b71f7fac1509ba9ef493Tammo Spalink @SmallTest 128d2b124f97c52c566b68aff9fa58306f461686af0Tammo Spalink public void testUserData7bitAsciiTwo() throws Exception { 129d2b124f97c52c566b68aff9fa58306f461686af0Tammo Spalink String pdu = "00031001d00109104539b4d052ebb3d0"; 130d2b124f97c52c566b68aff9fa58306f461686af0Tammo Spalink BearerData bearerData = BearerData.decode(HexDump.hexStringToByteArray(pdu)); 131d2b124f97c52c566b68aff9fa58306f461686af0Tammo Spalink assertEquals("SMS Rulz", bearerData.userData.payloadStr); 132d2b124f97c52c566b68aff9fa58306f461686af0Tammo Spalink } 133d2b124f97c52c566b68aff9fa58306f461686af0Tammo Spalink 134d2b124f97c52c566b68aff9fa58306f461686af0Tammo Spalink @SmallTest 135d2b124f97c52c566b68aff9fa58306f461686af0Tammo Spalink public void testUserDataIa5() throws Exception { 136d2b124f97c52c566b68aff9fa58306f461686af0Tammo Spalink String pdu = "00031002100109184539b4d052ebb3d0"; 137d2b124f97c52c566b68aff9fa58306f461686af0Tammo Spalink BearerData bearerData = BearerData.decode(HexDump.hexStringToByteArray(pdu)); 138d2b124f97c52c566b68aff9fa58306f461686af0Tammo Spalink assertEquals("SMS Rulz", bearerData.userData.payloadStr); 139d2b124f97c52c566b68aff9fa58306f461686af0Tammo Spalink } 140d2b124f97c52c566b68aff9fa58306f461686af0Tammo Spalink 141d2b124f97c52c566b68aff9fa58306f461686af0Tammo Spalink @SmallTest 1428478b59f177ec97a9996b71f7fac1509ba9ef493Tammo Spalink public void testUserData7bitAsciiFeedback() throws Exception { 14383917db040bd7498ebca3b74f879dc1c9e223d8eTammo Spalink BearerData bearerData = new BearerData(); 14483917db040bd7498ebca3b74f879dc1c9e223d8eTammo Spalink bearerData.messageType = BearerData.MESSAGE_TYPE_DELIVER; 14583917db040bd7498ebca3b74f879dc1c9e223d8eTammo Spalink bearerData.messageId = 0; 14683917db040bd7498ebca3b74f879dc1c9e223d8eTammo Spalink bearerData.hasUserDataHeader = false; 1478478b59f177ec97a9996b71f7fac1509ba9ef493Tammo Spalink UserData userData = new UserData(); 1488478b59f177ec97a9996b71f7fac1509ba9ef493Tammo Spalink userData.payloadStr = "Test standard SMS"; 1498478b59f177ec97a9996b71f7fac1509ba9ef493Tammo Spalink userData.msgEncoding = UserData.ENCODING_7BIT_ASCII; 1508478b59f177ec97a9996b71f7fac1509ba9ef493Tammo Spalink userData.msgEncodingSet = true; 1518478b59f177ec97a9996b71f7fac1509ba9ef493Tammo Spalink bearerData.userData = userData; 1528478b59f177ec97a9996b71f7fac1509ba9ef493Tammo Spalink byte []encodedSms = BearerData.encode(bearerData); 1538478b59f177ec97a9996b71f7fac1509ba9ef493Tammo Spalink BearerData revBearerData = BearerData.decode(encodedSms); 1548478b59f177ec97a9996b71f7fac1509ba9ef493Tammo Spalink assertEquals(BearerData.MESSAGE_TYPE_DELIVER, revBearerData.messageType); 1558478b59f177ec97a9996b71f7fac1509ba9ef493Tammo Spalink assertEquals(0, revBearerData.messageId); 1568478b59f177ec97a9996b71f7fac1509ba9ef493Tammo Spalink assertEquals(false, revBearerData.hasUserDataHeader); 1578478b59f177ec97a9996b71f7fac1509ba9ef493Tammo Spalink assertEquals(userData.msgEncoding, revBearerData.userData.msgEncoding); 1588478b59f177ec97a9996b71f7fac1509ba9ef493Tammo Spalink assertEquals(userData.payloadStr.length(), revBearerData.userData.numFields); 1598478b59f177ec97a9996b71f7fac1509ba9ef493Tammo Spalink assertEquals(userData.payloadStr, revBearerData.userData.payloadStr); 1602d65082b158564819404e556db6492272111b5b3Tammo Spalink userData.payloadStr = "Test \u007f standard \u0000 SMS"; 1612d65082b158564819404e556db6492272111b5b3Tammo Spalink revBearerData = BearerData.decode(BearerData.encode(bearerData)); 1622d65082b158564819404e556db6492272111b5b3Tammo Spalink assertEquals("Test standard SMS", revBearerData.userData.payloadStr); 1632d65082b158564819404e556db6492272111b5b3Tammo Spalink userData.payloadStr = "Test \n standard \r SMS"; 1642d65082b158564819404e556db6492272111b5b3Tammo Spalink revBearerData = BearerData.decode(BearerData.encode(bearerData)); 1652d65082b158564819404e556db6492272111b5b3Tammo Spalink assertEquals(userData.payloadStr, revBearerData.userData.payloadStr); 166e00dd1e5a37bed0de964b353d47a4bd7cdff532fTammo Spalink userData.payloadStr = ""; 167e00dd1e5a37bed0de964b353d47a4bd7cdff532fTammo Spalink revBearerData = BearerData.decode(BearerData.encode(bearerData)); 168e00dd1e5a37bed0de964b353d47a4bd7cdff532fTammo Spalink assertEquals(userData.payloadStr, revBearerData.userData.payloadStr); 1698478b59f177ec97a9996b71f7fac1509ba9ef493Tammo Spalink } 1708478b59f177ec97a9996b71f7fac1509ba9ef493Tammo Spalink 1718478b59f177ec97a9996b71f7fac1509ba9ef493Tammo Spalink @SmallTest 1728478b59f177ec97a9996b71f7fac1509ba9ef493Tammo Spalink public void testUserData7bitGsmFeedback() throws Exception { 1738478b59f177ec97a9996b71f7fac1509ba9ef493Tammo Spalink BearerData bearerData = new BearerData(); 1748478b59f177ec97a9996b71f7fac1509ba9ef493Tammo Spalink bearerData.messageType = BearerData.MESSAGE_TYPE_DELIVER; 1758478b59f177ec97a9996b71f7fac1509ba9ef493Tammo Spalink bearerData.messageId = 0; 1768478b59f177ec97a9996b71f7fac1509ba9ef493Tammo Spalink bearerData.hasUserDataHeader = false; 1778478b59f177ec97a9996b71f7fac1509ba9ef493Tammo Spalink UserData userData = new UserData(); 1788478b59f177ec97a9996b71f7fac1509ba9ef493Tammo Spalink userData.payloadStr = "Test standard SMS"; 1798478b59f177ec97a9996b71f7fac1509ba9ef493Tammo Spalink userData.msgEncoding = UserData.ENCODING_GSM_7BIT_ALPHABET; 1808478b59f177ec97a9996b71f7fac1509ba9ef493Tammo Spalink userData.msgEncodingSet = true; 1818478b59f177ec97a9996b71f7fac1509ba9ef493Tammo Spalink bearerData.userData = userData; 18283917db040bd7498ebca3b74f879dc1c9e223d8eTammo Spalink byte []encodedSms = BearerData.encode(bearerData); 18383917db040bd7498ebca3b74f879dc1c9e223d8eTammo Spalink BearerData revBearerData = BearerData.decode(encodedSms); 18483917db040bd7498ebca3b74f879dc1c9e223d8eTammo Spalink assertEquals(BearerData.MESSAGE_TYPE_DELIVER, revBearerData.messageType); 18583917db040bd7498ebca3b74f879dc1c9e223d8eTammo Spalink assertEquals(0, revBearerData.messageId); 18683917db040bd7498ebca3b74f879dc1c9e223d8eTammo Spalink assertEquals(false, revBearerData.hasUserDataHeader); 1878478b59f177ec97a9996b71f7fac1509ba9ef493Tammo Spalink assertEquals(userData.msgEncoding, revBearerData.userData.msgEncoding); 1888478b59f177ec97a9996b71f7fac1509ba9ef493Tammo Spalink assertEquals(userData.payloadStr.length(), revBearerData.userData.numFields); 1898478b59f177ec97a9996b71f7fac1509ba9ef493Tammo Spalink assertEquals(userData.payloadStr, revBearerData.userData.payloadStr); 190e00dd1e5a37bed0de964b353d47a4bd7cdff532fTammo Spalink userData.payloadStr = "1234567"; 191e00dd1e5a37bed0de964b353d47a4bd7cdff532fTammo Spalink revBearerData = BearerData.decode(BearerData.encode(bearerData)); 192e00dd1e5a37bed0de964b353d47a4bd7cdff532fTammo Spalink assertEquals(userData.payloadStr, revBearerData.userData.payloadStr); 193e00dd1e5a37bed0de964b353d47a4bd7cdff532fTammo Spalink userData.payloadStr = ""; 194e00dd1e5a37bed0de964b353d47a4bd7cdff532fTammo Spalink revBearerData = BearerData.decode(BearerData.encode(bearerData)); 195e00dd1e5a37bed0de964b353d47a4bd7cdff532fTammo Spalink assertEquals(userData.payloadStr, revBearerData.userData.payloadStr); 196e00dd1e5a37bed0de964b353d47a4bd7cdff532fTammo Spalink userData.payloadStr = "12345678901234567890123456789012345678901234567890" + 197e00dd1e5a37bed0de964b353d47a4bd7cdff532fTammo Spalink "12345678901234567890123456789012345678901234567890" + 198e00dd1e5a37bed0de964b353d47a4bd7cdff532fTammo Spalink "12345678901234567890123456789012345678901234567890" + 199e00dd1e5a37bed0de964b353d47a4bd7cdff532fTammo Spalink "1234567890"; 200e00dd1e5a37bed0de964b353d47a4bd7cdff532fTammo Spalink revBearerData = BearerData.decode(BearerData.encode(bearerData)); 201e00dd1e5a37bed0de964b353d47a4bd7cdff532fTammo Spalink assertEquals(userData.payloadStr, revBearerData.userData.payloadStr); 202e00dd1e5a37bed0de964b353d47a4bd7cdff532fTammo Spalink userData.payloadStr = "Test \u007f illegal \u0000 SMS chars"; 203e00dd1e5a37bed0de964b353d47a4bd7cdff532fTammo Spalink revBearerData = BearerData.decode(BearerData.encode(bearerData)); 204e00dd1e5a37bed0de964b353d47a4bd7cdff532fTammo Spalink assertEquals("Test illegal SMS chars", revBearerData.userData.payloadStr); 2050ff946e7b5abf51ebb0a6fb335bb3f141214c76eTammo Spalink userData.payloadStr = "More @ testing\nis great^|^~woohoo"; 2060ff946e7b5abf51ebb0a6fb335bb3f141214c76eTammo Spalink revBearerData = BearerData.decode(BearerData.encode(bearerData)); 2070ff946e7b5abf51ebb0a6fb335bb3f141214c76eTammo Spalink assertEquals(userData.payloadStr, revBearerData.userData.payloadStr); 2080fd833a50f43239e619fa383045374459f42ca49Tammo Spalink SmsHeader.ConcatRef concatRef = new SmsHeader.ConcatRef(); 2090fd833a50f43239e619fa383045374459f42ca49Tammo Spalink concatRef.refNumber = 0xEE; 2100fd833a50f43239e619fa383045374459f42ca49Tammo Spalink concatRef.msgCount = 2; 2110fd833a50f43239e619fa383045374459f42ca49Tammo Spalink concatRef.seqNumber = 2; 2120fd833a50f43239e619fa383045374459f42ca49Tammo Spalink concatRef.isEightBits = true; 2130fd833a50f43239e619fa383045374459f42ca49Tammo Spalink SmsHeader smsHeader = new SmsHeader(); 2140fd833a50f43239e619fa383045374459f42ca49Tammo Spalink smsHeader.concatRef = concatRef; 2150fd833a50f43239e619fa383045374459f42ca49Tammo Spalink byte[] encodedHeader = SmsHeader.toByteArray(smsHeader); 2160fd833a50f43239e619fa383045374459f42ca49Tammo Spalink userData.userDataHeader = smsHeader; 2170fd833a50f43239e619fa383045374459f42ca49Tammo Spalink revBearerData = BearerData.decode(BearerData.encode(bearerData)); 2180fd833a50f43239e619fa383045374459f42ca49Tammo Spalink assertEquals(userData.payloadStr, revBearerData.userData.payloadStr); 2190fd833a50f43239e619fa383045374459f42ca49Tammo Spalink SmsHeader decodedHeader = revBearerData.userData.userDataHeader; 2200fd833a50f43239e619fa383045374459f42ca49Tammo Spalink assertEquals(decodedHeader.concatRef.refNumber, concatRef.refNumber); 2210fd833a50f43239e619fa383045374459f42ca49Tammo Spalink assertEquals(decodedHeader.concatRef.msgCount, concatRef.msgCount); 2220fd833a50f43239e619fa383045374459f42ca49Tammo Spalink assertEquals(decodedHeader.concatRef.seqNumber, concatRef.seqNumber); 22383917db040bd7498ebca3b74f879dc1c9e223d8eTammo Spalink } 22483917db040bd7498ebca3b74f879dc1c9e223d8eTammo Spalink 22583917db040bd7498ebca3b74f879dc1c9e223d8eTammo Spalink @SmallTest 2268478b59f177ec97a9996b71f7fac1509ba9ef493Tammo Spalink public void testUserDataUtf16Feedback() throws Exception { 2278478b59f177ec97a9996b71f7fac1509ba9ef493Tammo Spalink BearerData bearerData = new BearerData(); 2288478b59f177ec97a9996b71f7fac1509ba9ef493Tammo Spalink bearerData.messageType = BearerData.MESSAGE_TYPE_DELIVER; 2298478b59f177ec97a9996b71f7fac1509ba9ef493Tammo Spalink bearerData.messageId = 0; 2308478b59f177ec97a9996b71f7fac1509ba9ef493Tammo Spalink bearerData.hasUserDataHeader = false; 2318478b59f177ec97a9996b71f7fac1509ba9ef493Tammo Spalink UserData userData = new UserData(); 2328478b59f177ec97a9996b71f7fac1509ba9ef493Tammo Spalink userData.payloadStr = "\u0160u\u1E5B\u0301r\u1ECFg\uD835\uDC1At\u00E9\u4E002\u3042"; 2338478b59f177ec97a9996b71f7fac1509ba9ef493Tammo Spalink userData.msgEncoding = UserData.ENCODING_UNICODE_16; 2348478b59f177ec97a9996b71f7fac1509ba9ef493Tammo Spalink userData.msgEncodingSet = true; 2358478b59f177ec97a9996b71f7fac1509ba9ef493Tammo Spalink bearerData.userData = userData; 2368478b59f177ec97a9996b71f7fac1509ba9ef493Tammo Spalink byte []encodedSms = BearerData.encode(bearerData); 2378478b59f177ec97a9996b71f7fac1509ba9ef493Tammo Spalink BearerData revBearerData = BearerData.decode(encodedSms); 2388478b59f177ec97a9996b71f7fac1509ba9ef493Tammo Spalink assertEquals(BearerData.MESSAGE_TYPE_DELIVER, revBearerData.messageType); 2398478b59f177ec97a9996b71f7fac1509ba9ef493Tammo Spalink assertEquals(0, revBearerData.messageId); 2408478b59f177ec97a9996b71f7fac1509ba9ef493Tammo Spalink assertEquals(false, revBearerData.hasUserDataHeader); 2418478b59f177ec97a9996b71f7fac1509ba9ef493Tammo Spalink assertEquals(userData.msgEncoding, revBearerData.userData.msgEncoding); 2428478b59f177ec97a9996b71f7fac1509ba9ef493Tammo Spalink assertEquals(userData.payloadStr.length(), revBearerData.userData.numFields); 2438478b59f177ec97a9996b71f7fac1509ba9ef493Tammo Spalink assertEquals(userData.payloadStr, revBearerData.userData.payloadStr); 2448478b59f177ec97a9996b71f7fac1509ba9ef493Tammo Spalink userData.msgEncoding = UserData.ENCODING_OCTET; 2458478b59f177ec97a9996b71f7fac1509ba9ef493Tammo Spalink userData.msgEncodingSet = false; 2468478b59f177ec97a9996b71f7fac1509ba9ef493Tammo Spalink revBearerData = BearerData.decode(BearerData.encode(bearerData)); 2478478b59f177ec97a9996b71f7fac1509ba9ef493Tammo Spalink assertEquals(BearerData.MESSAGE_TYPE_DELIVER, revBearerData.messageType); 2488478b59f177ec97a9996b71f7fac1509ba9ef493Tammo Spalink assertEquals(0, revBearerData.messageId); 2498478b59f177ec97a9996b71f7fac1509ba9ef493Tammo Spalink assertEquals(false, revBearerData.hasUserDataHeader); 2508478b59f177ec97a9996b71f7fac1509ba9ef493Tammo Spalink assertEquals(userData.msgEncoding, revBearerData.userData.msgEncoding); 2518478b59f177ec97a9996b71f7fac1509ba9ef493Tammo Spalink assertEquals(userData.payloadStr.length(), revBearerData.userData.numFields); 2528478b59f177ec97a9996b71f7fac1509ba9ef493Tammo Spalink assertEquals(userData.payloadStr, revBearerData.userData.payloadStr); 253e00dd1e5a37bed0de964b353d47a4bd7cdff532fTammo Spalink userData.payloadStr = "1234567"; 254e00dd1e5a37bed0de964b353d47a4bd7cdff532fTammo Spalink revBearerData = BearerData.decode(BearerData.encode(bearerData)); 255e00dd1e5a37bed0de964b353d47a4bd7cdff532fTammo Spalink assertEquals(userData.payloadStr, revBearerData.userData.payloadStr); 256e00dd1e5a37bed0de964b353d47a4bd7cdff532fTammo Spalink userData.payloadStr = ""; 257e00dd1e5a37bed0de964b353d47a4bd7cdff532fTammo Spalink revBearerData = BearerData.decode(BearerData.encode(bearerData)); 258e00dd1e5a37bed0de964b353d47a4bd7cdff532fTammo Spalink assertEquals(userData.payloadStr, revBearerData.userData.payloadStr); 25983917db040bd7498ebca3b74f879dc1c9e223d8eTammo Spalink } 26083917db040bd7498ebca3b74f879dc1c9e223d8eTammo Spalink 26183917db040bd7498ebca3b74f879dc1c9e223d8eTammo Spalink @SmallTest 262baae313f896d8048f23e4acc76e554c8aa4667bdTammo Spalink public void testMonolithicOne() throws Exception { 263baae313f896d8048f23e4acc76e554c8aa4667bdTammo Spalink String pdu = "0003200010010410168d2002010503060812011101590501c706069706180000000701c108" + 264baae313f896d8048f23e4acc76e554c8aa4667bdTammo Spalink "01c00901800a01e00b01030c01c00d01070e05039acc13880f018011020566"; 265baae313f896d8048f23e4acc76e554c8aa4667bdTammo Spalink BearerData bearerData = BearerData.decode(HexDump.hexStringToByteArray(pdu)); 266baae313f896d8048f23e4acc76e554c8aa4667bdTammo Spalink assertEquals(bearerData.messageType, BearerData.MESSAGE_TYPE_SUBMIT); 267baae313f896d8048f23e4acc76e554c8aa4667bdTammo Spalink assertEquals(bearerData.messageId, 1); 268baae313f896d8048f23e4acc76e554c8aa4667bdTammo Spalink assertEquals(bearerData.priority, BearerData.PRIORITY_EMERGENCY); 269baae313f896d8048f23e4acc76e554c8aa4667bdTammo Spalink assertEquals(bearerData.privacy, BearerData.PRIVACY_CONFIDENTIAL); 270baae313f896d8048f23e4acc76e554c8aa4667bdTammo Spalink assertEquals(bearerData.userAckReq, true); 271baae313f896d8048f23e4acc76e554c8aa4667bdTammo Spalink assertEquals(bearerData.readAckReq, true); 272baae313f896d8048f23e4acc76e554c8aa4667bdTammo Spalink assertEquals(bearerData.deliveryAckReq, true); 273baae313f896d8048f23e4acc76e554c8aa4667bdTammo Spalink assertEquals(bearerData.reportReq, false); 274baae313f896d8048f23e4acc76e554c8aa4667bdTammo Spalink assertEquals(bearerData.numberOfMessages, 3); 275baae313f896d8048f23e4acc76e554c8aa4667bdTammo Spalink assertEquals(bearerData.alert, BearerData.ALERT_HIGH_PRIO); 276baae313f896d8048f23e4acc76e554c8aa4667bdTammo Spalink assertEquals(bearerData.language, BearerData.LANGUAGE_HEBREW); 277baae313f896d8048f23e4acc76e554c8aa4667bdTammo Spalink assertEquals(bearerData.callbackNumber.digitMode, CdmaSmsAddress.DIGIT_MODE_4BIT_DTMF); 278baae313f896d8048f23e4acc76e554c8aa4667bdTammo Spalink assertEquals(bearerData.callbackNumber.numberMode, 279baae313f896d8048f23e4acc76e554c8aa4667bdTammo Spalink CdmaSmsAddress.NUMBER_MODE_NOT_DATA_NETWORK); 280baae313f896d8048f23e4acc76e554c8aa4667bdTammo Spalink assertEquals(bearerData.callbackNumber.ton, CdmaSmsAddress.TON_UNKNOWN); 281baae313f896d8048f23e4acc76e554c8aa4667bdTammo Spalink assertEquals(bearerData.callbackNumber.numberPlan, CdmaSmsAddress.NUMBERING_PLAN_UNKNOWN); 282baae313f896d8048f23e4acc76e554c8aa4667bdTammo Spalink assertEquals(bearerData.callbackNumber.numberOfDigits, 7); 283baae313f896d8048f23e4acc76e554c8aa4667bdTammo Spalink assertEquals(bearerData.callbackNumber.address, "3598271"); 284baae313f896d8048f23e4acc76e554c8aa4667bdTammo Spalink assertEquals(bearerData.displayMode, BearerData.DISPLAY_MODE_USER); 285baae313f896d8048f23e4acc76e554c8aa4667bdTammo Spalink assertEquals(bearerData.depositIndex, 1382); 286baae313f896d8048f23e4acc76e554c8aa4667bdTammo Spalink assertEquals(bearerData.userResponseCode, 5); 287baae313f896d8048f23e4acc76e554c8aa4667bdTammo Spalink assertEquals(bearerData.msgCenterTimeStamp.year, 2008); 288baae313f896d8048f23e4acc76e554c8aa4667bdTammo Spalink assertEquals(bearerData.msgCenterTimeStamp.month, 11); 289baae313f896d8048f23e4acc76e554c8aa4667bdTammo Spalink assertEquals(bearerData.msgCenterTimeStamp.monthDay, 1); 290baae313f896d8048f23e4acc76e554c8aa4667bdTammo Spalink assertEquals(bearerData.msgCenterTimeStamp.hour, 11); 291baae313f896d8048f23e4acc76e554c8aa4667bdTammo Spalink assertEquals(bearerData.msgCenterTimeStamp.minute, 1); 292baae313f896d8048f23e4acc76e554c8aa4667bdTammo Spalink assertEquals(bearerData.msgCenterTimeStamp.second, 59); 293baae313f896d8048f23e4acc76e554c8aa4667bdTammo Spalink assertEquals(bearerData.validityPeriodAbsolute, null); 294326c66d888f9b3ce82af93fe63e4828a4a4e3fbeTammo Spalink assertEquals(bearerData.validityPeriodRelative, 193); 295baae313f896d8048f23e4acc76e554c8aa4667bdTammo Spalink assertEquals(bearerData.deferredDeliveryTimeAbsolute.year, 1997); 296baae313f896d8048f23e4acc76e554c8aa4667bdTammo Spalink assertEquals(bearerData.deferredDeliveryTimeAbsolute.month, 5); 297baae313f896d8048f23e4acc76e554c8aa4667bdTammo Spalink assertEquals(bearerData.deferredDeliveryTimeAbsolute.monthDay, 18); 298baae313f896d8048f23e4acc76e554c8aa4667bdTammo Spalink assertEquals(bearerData.deferredDeliveryTimeAbsolute.hour, 0); 299baae313f896d8048f23e4acc76e554c8aa4667bdTammo Spalink assertEquals(bearerData.deferredDeliveryTimeAbsolute.minute, 0); 300baae313f896d8048f23e4acc76e554c8aa4667bdTammo Spalink assertEquals(bearerData.deferredDeliveryTimeAbsolute.second, 0); 301326c66d888f9b3ce82af93fe63e4828a4a4e3fbeTammo Spalink assertEquals(bearerData.deferredDeliveryTimeRelative, 199); 302baae313f896d8048f23e4acc76e554c8aa4667bdTammo Spalink assertEquals(bearerData.hasUserDataHeader, false); 303baae313f896d8048f23e4acc76e554c8aa4667bdTammo Spalink assertEquals(bearerData.userData.msgEncoding, UserData.ENCODING_7BIT_ASCII); 304baae313f896d8048f23e4acc76e554c8aa4667bdTammo Spalink assertEquals(bearerData.userData.numFields, 2); 305baae313f896d8048f23e4acc76e554c8aa4667bdTammo Spalink assertEquals(bearerData.userData.payloadStr, "hi"); 306baae313f896d8048f23e4acc76e554c8aa4667bdTammo Spalink } 307baae313f896d8048f23e4acc76e554c8aa4667bdTammo Spalink 308baae313f896d8048f23e4acc76e554c8aa4667bdTammo Spalink @SmallTest 309baae313f896d8048f23e4acc76e554c8aa4667bdTammo Spalink public void testMonolithicTwo() throws Exception { 310baae313f896d8048f23e4acc76e554c8aa4667bdTammo Spalink String pdu = "0003200010010410168d200201050306081201110159050192060697061800000007013d0" + 311baae313f896d8048f23e4acc76e554c8aa4667bdTammo Spalink "801c00901800a01e00b01030c01c00d01070e05039acc13880f018011020566"; 312baae313f896d8048f23e4acc76e554c8aa4667bdTammo Spalink BearerData bearerData = BearerData.decode(HexDump.hexStringToByteArray(pdu)); 313baae313f896d8048f23e4acc76e554c8aa4667bdTammo Spalink assertEquals(bearerData.messageType, BearerData.MESSAGE_TYPE_SUBMIT); 314baae313f896d8048f23e4acc76e554c8aa4667bdTammo Spalink assertEquals(bearerData.messageId, 1); 315baae313f896d8048f23e4acc76e554c8aa4667bdTammo Spalink assertEquals(bearerData.priority, BearerData.PRIORITY_EMERGENCY); 316baae313f896d8048f23e4acc76e554c8aa4667bdTammo Spalink assertEquals(bearerData.privacy, BearerData.PRIVACY_CONFIDENTIAL); 317baae313f896d8048f23e4acc76e554c8aa4667bdTammo Spalink assertEquals(bearerData.userAckReq, true); 318baae313f896d8048f23e4acc76e554c8aa4667bdTammo Spalink assertEquals(bearerData.readAckReq, true); 319baae313f896d8048f23e4acc76e554c8aa4667bdTammo Spalink assertEquals(bearerData.deliveryAckReq, true); 320baae313f896d8048f23e4acc76e554c8aa4667bdTammo Spalink assertEquals(bearerData.reportReq, false); 321baae313f896d8048f23e4acc76e554c8aa4667bdTammo Spalink assertEquals(bearerData.numberOfMessages, 3); 322baae313f896d8048f23e4acc76e554c8aa4667bdTammo Spalink assertEquals(bearerData.alert, BearerData.ALERT_HIGH_PRIO); 323baae313f896d8048f23e4acc76e554c8aa4667bdTammo Spalink assertEquals(bearerData.language, BearerData.LANGUAGE_HEBREW); 324baae313f896d8048f23e4acc76e554c8aa4667bdTammo Spalink assertEquals(bearerData.callbackNumber.digitMode, CdmaSmsAddress.DIGIT_MODE_4BIT_DTMF); 325baae313f896d8048f23e4acc76e554c8aa4667bdTammo Spalink assertEquals(bearerData.callbackNumber.numberMode, 326baae313f896d8048f23e4acc76e554c8aa4667bdTammo Spalink CdmaSmsAddress.NUMBER_MODE_NOT_DATA_NETWORK); 327baae313f896d8048f23e4acc76e554c8aa4667bdTammo Spalink assertEquals(bearerData.callbackNumber.ton, CdmaSmsAddress.TON_UNKNOWN); 328baae313f896d8048f23e4acc76e554c8aa4667bdTammo Spalink assertEquals(bearerData.callbackNumber.numberPlan, CdmaSmsAddress.NUMBERING_PLAN_UNKNOWN); 329baae313f896d8048f23e4acc76e554c8aa4667bdTammo Spalink assertEquals(bearerData.callbackNumber.numberOfDigits, 7); 330baae313f896d8048f23e4acc76e554c8aa4667bdTammo Spalink assertEquals(bearerData.callbackNumber.address, "3598271"); 331baae313f896d8048f23e4acc76e554c8aa4667bdTammo Spalink assertEquals(bearerData.displayMode, BearerData.DISPLAY_MODE_USER); 332baae313f896d8048f23e4acc76e554c8aa4667bdTammo Spalink assertEquals(bearerData.depositIndex, 1382); 333baae313f896d8048f23e4acc76e554c8aa4667bdTammo Spalink assertEquals(bearerData.userResponseCode, 5); 334baae313f896d8048f23e4acc76e554c8aa4667bdTammo Spalink assertEquals(bearerData.msgCenterTimeStamp.year, 2008); 335baae313f896d8048f23e4acc76e554c8aa4667bdTammo Spalink assertEquals(bearerData.msgCenterTimeStamp.month, 11); 336baae313f896d8048f23e4acc76e554c8aa4667bdTammo Spalink assertEquals(bearerData.msgCenterTimeStamp.monthDay, 1); 337baae313f896d8048f23e4acc76e554c8aa4667bdTammo Spalink assertEquals(bearerData.msgCenterTimeStamp.hour, 11); 338baae313f896d8048f23e4acc76e554c8aa4667bdTammo Spalink assertEquals(bearerData.msgCenterTimeStamp.minute, 1); 339baae313f896d8048f23e4acc76e554c8aa4667bdTammo Spalink assertEquals(bearerData.msgCenterTimeStamp.second, 59); 340baae313f896d8048f23e4acc76e554c8aa4667bdTammo Spalink assertEquals(bearerData.validityPeriodAbsolute, null); 341baae313f896d8048f23e4acc76e554c8aa4667bdTammo Spalink assertEquals(bearerData.validityPeriodRelative, 61); 342baae313f896d8048f23e4acc76e554c8aa4667bdTammo Spalink assertEquals(bearerData.deferredDeliveryTimeAbsolute.year, 1997); 343baae313f896d8048f23e4acc76e554c8aa4667bdTammo Spalink assertEquals(bearerData.deferredDeliveryTimeAbsolute.month, 5); 344baae313f896d8048f23e4acc76e554c8aa4667bdTammo Spalink assertEquals(bearerData.deferredDeliveryTimeAbsolute.monthDay, 18); 345baae313f896d8048f23e4acc76e554c8aa4667bdTammo Spalink assertEquals(bearerData.deferredDeliveryTimeAbsolute.hour, 0); 346baae313f896d8048f23e4acc76e554c8aa4667bdTammo Spalink assertEquals(bearerData.deferredDeliveryTimeAbsolute.minute, 0); 347baae313f896d8048f23e4acc76e554c8aa4667bdTammo Spalink assertEquals(bearerData.deferredDeliveryTimeAbsolute.second, 0); 348326c66d888f9b3ce82af93fe63e4828a4a4e3fbeTammo Spalink assertEquals(bearerData.deferredDeliveryTimeRelative, 146); 349baae313f896d8048f23e4acc76e554c8aa4667bdTammo Spalink assertEquals(bearerData.hasUserDataHeader, false); 350baae313f896d8048f23e4acc76e554c8aa4667bdTammo Spalink assertEquals(bearerData.userData.msgEncoding, UserData.ENCODING_7BIT_ASCII); 351baae313f896d8048f23e4acc76e554c8aa4667bdTammo Spalink assertEquals(bearerData.userData.numFields, 2); 352baae313f896d8048f23e4acc76e554c8aa4667bdTammo Spalink assertEquals(bearerData.userData.payloadStr, "hi"); 353baae313f896d8048f23e4acc76e554c8aa4667bdTammo Spalink } 354baae313f896d8048f23e4acc76e554c8aa4667bdTammo Spalink 355baae313f896d8048f23e4acc76e554c8aa4667bdTammo Spalink @SmallTest 35664c499113a758cf80cddfd4d0183f944a1a6645aTammo Spalink public void testUserDataHeaderConcatRefFeedback() throws Exception { 35764c499113a758cf80cddfd4d0183f944a1a6645aTammo Spalink BearerData bearerData = new BearerData(); 35864c499113a758cf80cddfd4d0183f944a1a6645aTammo Spalink bearerData.messageType = BearerData.MESSAGE_TYPE_DELIVER; 35964c499113a758cf80cddfd4d0183f944a1a6645aTammo Spalink bearerData.messageId = 55; 36064c499113a758cf80cddfd4d0183f944a1a6645aTammo Spalink SmsHeader.ConcatRef concatRef = new SmsHeader.ConcatRef(); 36164c499113a758cf80cddfd4d0183f944a1a6645aTammo Spalink concatRef.refNumber = 0xEE; 36264c499113a758cf80cddfd4d0183f944a1a6645aTammo Spalink concatRef.msgCount = 2; 36364c499113a758cf80cddfd4d0183f944a1a6645aTammo Spalink concatRef.seqNumber = 2; 36464c499113a758cf80cddfd4d0183f944a1a6645aTammo Spalink concatRef.isEightBits = true; 36564c499113a758cf80cddfd4d0183f944a1a6645aTammo Spalink SmsHeader smsHeader = new SmsHeader(); 36664c499113a758cf80cddfd4d0183f944a1a6645aTammo Spalink smsHeader.concatRef = concatRef; 36764c499113a758cf80cddfd4d0183f944a1a6645aTammo Spalink byte[] encodedHeader = SmsHeader.toByteArray(smsHeader); 36864c499113a758cf80cddfd4d0183f944a1a6645aTammo Spalink SmsHeader decodedHeader = SmsHeader.fromByteArray(encodedHeader); 36964c499113a758cf80cddfd4d0183f944a1a6645aTammo Spalink assertEquals(decodedHeader.concatRef.refNumber, concatRef.refNumber); 37064c499113a758cf80cddfd4d0183f944a1a6645aTammo Spalink assertEquals(decodedHeader.concatRef.msgCount, concatRef.msgCount); 37164c499113a758cf80cddfd4d0183f944a1a6645aTammo Spalink assertEquals(decodedHeader.concatRef.seqNumber, concatRef.seqNumber); 37264c499113a758cf80cddfd4d0183f944a1a6645aTammo Spalink assertEquals(decodedHeader.concatRef.isEightBits, concatRef.isEightBits); 37364c499113a758cf80cddfd4d0183f944a1a6645aTammo Spalink assertEquals(decodedHeader.portAddrs, null); 37464c499113a758cf80cddfd4d0183f944a1a6645aTammo Spalink UserData userData = new UserData(); 37564c499113a758cf80cddfd4d0183f944a1a6645aTammo Spalink userData.payloadStr = "User Data Header (UDH) feedback test"; 37664c499113a758cf80cddfd4d0183f944a1a6645aTammo Spalink userData.userDataHeader = smsHeader; 37764c499113a758cf80cddfd4d0183f944a1a6645aTammo Spalink bearerData.userData = userData; 37864c499113a758cf80cddfd4d0183f944a1a6645aTammo Spalink byte[] encodedSms = BearerData.encode(bearerData); 37964c499113a758cf80cddfd4d0183f944a1a6645aTammo Spalink BearerData revBearerData = BearerData.decode(encodedSms); 38064c499113a758cf80cddfd4d0183f944a1a6645aTammo Spalink decodedHeader = revBearerData.userData.userDataHeader; 38164c499113a758cf80cddfd4d0183f944a1a6645aTammo Spalink assertEquals(decodedHeader.concatRef.refNumber, concatRef.refNumber); 38264c499113a758cf80cddfd4d0183f944a1a6645aTammo Spalink assertEquals(decodedHeader.concatRef.msgCount, concatRef.msgCount); 38364c499113a758cf80cddfd4d0183f944a1a6645aTammo Spalink assertEquals(decodedHeader.concatRef.seqNumber, concatRef.seqNumber); 38464c499113a758cf80cddfd4d0183f944a1a6645aTammo Spalink assertEquals(decodedHeader.concatRef.isEightBits, concatRef.isEightBits); 38564c499113a758cf80cddfd4d0183f944a1a6645aTammo Spalink assertEquals(decodedHeader.portAddrs, null); 38664c499113a758cf80cddfd4d0183f944a1a6645aTammo Spalink } 38764c499113a758cf80cddfd4d0183f944a1a6645aTammo Spalink 38864c499113a758cf80cddfd4d0183f944a1a6645aTammo Spalink @SmallTest 389550885d158f5371cb207228eb1b7fb06aac32ea3Tammo Spalink public void testUserDataHeaderIllegalConcatRef() throws Exception { 390550885d158f5371cb207228eb1b7fb06aac32ea3Tammo Spalink BearerData bearerData = new BearerData(); 391550885d158f5371cb207228eb1b7fb06aac32ea3Tammo Spalink bearerData.messageType = BearerData.MESSAGE_TYPE_DELIVER; 392550885d158f5371cb207228eb1b7fb06aac32ea3Tammo Spalink bearerData.messageId = 55; 393550885d158f5371cb207228eb1b7fb06aac32ea3Tammo Spalink SmsHeader.ConcatRef concatRef = new SmsHeader.ConcatRef(); 394550885d158f5371cb207228eb1b7fb06aac32ea3Tammo Spalink concatRef.refNumber = 0x10; 395550885d158f5371cb207228eb1b7fb06aac32ea3Tammo Spalink concatRef.msgCount = 0; 396550885d158f5371cb207228eb1b7fb06aac32ea3Tammo Spalink concatRef.seqNumber = 2; 397550885d158f5371cb207228eb1b7fb06aac32ea3Tammo Spalink concatRef.isEightBits = true; 398550885d158f5371cb207228eb1b7fb06aac32ea3Tammo Spalink SmsHeader smsHeader = new SmsHeader(); 399550885d158f5371cb207228eb1b7fb06aac32ea3Tammo Spalink smsHeader.concatRef = concatRef; 400550885d158f5371cb207228eb1b7fb06aac32ea3Tammo Spalink byte[] encodedHeader = SmsHeader.toByteArray(smsHeader); 401550885d158f5371cb207228eb1b7fb06aac32ea3Tammo Spalink SmsHeader decodedHeader = SmsHeader.fromByteArray(encodedHeader); 402550885d158f5371cb207228eb1b7fb06aac32ea3Tammo Spalink assertEquals(decodedHeader.concatRef, null); 403550885d158f5371cb207228eb1b7fb06aac32ea3Tammo Spalink concatRef.isEightBits = false; 404550885d158f5371cb207228eb1b7fb06aac32ea3Tammo Spalink encodedHeader = SmsHeader.toByteArray(smsHeader); 405550885d158f5371cb207228eb1b7fb06aac32ea3Tammo Spalink decodedHeader = SmsHeader.fromByteArray(encodedHeader); 406550885d158f5371cb207228eb1b7fb06aac32ea3Tammo Spalink assertEquals(decodedHeader.concatRef, null); 407550885d158f5371cb207228eb1b7fb06aac32ea3Tammo Spalink concatRef.msgCount = 1; 408550885d158f5371cb207228eb1b7fb06aac32ea3Tammo Spalink concatRef.seqNumber = 2; 409550885d158f5371cb207228eb1b7fb06aac32ea3Tammo Spalink encodedHeader = SmsHeader.toByteArray(smsHeader); 410550885d158f5371cb207228eb1b7fb06aac32ea3Tammo Spalink decodedHeader = SmsHeader.fromByteArray(encodedHeader); 411550885d158f5371cb207228eb1b7fb06aac32ea3Tammo Spalink assertEquals(decodedHeader.concatRef, null); 412550885d158f5371cb207228eb1b7fb06aac32ea3Tammo Spalink concatRef.msgCount = 1; 413550885d158f5371cb207228eb1b7fb06aac32ea3Tammo Spalink concatRef.seqNumber = 0; 414550885d158f5371cb207228eb1b7fb06aac32ea3Tammo Spalink encodedHeader = SmsHeader.toByteArray(smsHeader); 415550885d158f5371cb207228eb1b7fb06aac32ea3Tammo Spalink decodedHeader = SmsHeader.fromByteArray(encodedHeader); 416550885d158f5371cb207228eb1b7fb06aac32ea3Tammo Spalink assertEquals(decodedHeader.concatRef, null); 417550885d158f5371cb207228eb1b7fb06aac32ea3Tammo Spalink concatRef.msgCount = 2; 418550885d158f5371cb207228eb1b7fb06aac32ea3Tammo Spalink concatRef.seqNumber = 1; 419550885d158f5371cb207228eb1b7fb06aac32ea3Tammo Spalink encodedHeader = SmsHeader.toByteArray(smsHeader); 420550885d158f5371cb207228eb1b7fb06aac32ea3Tammo Spalink decodedHeader = SmsHeader.fromByteArray(encodedHeader); 421550885d158f5371cb207228eb1b7fb06aac32ea3Tammo Spalink assertEquals(decodedHeader.concatRef.msgCount, 2); 422550885d158f5371cb207228eb1b7fb06aac32ea3Tammo Spalink assertEquals(decodedHeader.concatRef.seqNumber, 1); 423550885d158f5371cb207228eb1b7fb06aac32ea3Tammo Spalink } 424550885d158f5371cb207228eb1b7fb06aac32ea3Tammo Spalink 425550885d158f5371cb207228eb1b7fb06aac32ea3Tammo Spalink @SmallTest 42664c499113a758cf80cddfd4d0183f944a1a6645aTammo Spalink public void testUserDataHeaderMixedFeedback() throws Exception { 42764c499113a758cf80cddfd4d0183f944a1a6645aTammo Spalink BearerData bearerData = new BearerData(); 42864c499113a758cf80cddfd4d0183f944a1a6645aTammo Spalink bearerData.messageType = BearerData.MESSAGE_TYPE_DELIVER; 42964c499113a758cf80cddfd4d0183f944a1a6645aTammo Spalink bearerData.messageId = 42; 43064c499113a758cf80cddfd4d0183f944a1a6645aTammo Spalink SmsHeader.ConcatRef concatRef = new SmsHeader.ConcatRef(); 43164c499113a758cf80cddfd4d0183f944a1a6645aTammo Spalink concatRef.refNumber = 0x34; 43264c499113a758cf80cddfd4d0183f944a1a6645aTammo Spalink concatRef.msgCount = 5; 43364c499113a758cf80cddfd4d0183f944a1a6645aTammo Spalink concatRef.seqNumber = 2; 43464c499113a758cf80cddfd4d0183f944a1a6645aTammo Spalink concatRef.isEightBits = false; 43564c499113a758cf80cddfd4d0183f944a1a6645aTammo Spalink SmsHeader.PortAddrs portAddrs = new SmsHeader.PortAddrs(); 43664c499113a758cf80cddfd4d0183f944a1a6645aTammo Spalink portAddrs.destPort = 88; 43764c499113a758cf80cddfd4d0183f944a1a6645aTammo Spalink portAddrs.origPort = 66; 43864c499113a758cf80cddfd4d0183f944a1a6645aTammo Spalink portAddrs.areEightBits = false; 43964c499113a758cf80cddfd4d0183f944a1a6645aTammo Spalink SmsHeader smsHeader = new SmsHeader(); 44064c499113a758cf80cddfd4d0183f944a1a6645aTammo Spalink smsHeader.concatRef = concatRef; 44164c499113a758cf80cddfd4d0183f944a1a6645aTammo Spalink smsHeader.portAddrs = portAddrs; 44264c499113a758cf80cddfd4d0183f944a1a6645aTammo Spalink byte[] encodedHeader = SmsHeader.toByteArray(smsHeader); 44364c499113a758cf80cddfd4d0183f944a1a6645aTammo Spalink SmsHeader decodedHeader = SmsHeader.fromByteArray(encodedHeader); 44464c499113a758cf80cddfd4d0183f944a1a6645aTammo Spalink assertEquals(decodedHeader.concatRef.refNumber, concatRef.refNumber); 44564c499113a758cf80cddfd4d0183f944a1a6645aTammo Spalink assertEquals(decodedHeader.concatRef.msgCount, concatRef.msgCount); 44664c499113a758cf80cddfd4d0183f944a1a6645aTammo Spalink assertEquals(decodedHeader.concatRef.seqNumber, concatRef.seqNumber); 44764c499113a758cf80cddfd4d0183f944a1a6645aTammo Spalink assertEquals(decodedHeader.concatRef.isEightBits, concatRef.isEightBits); 44864c499113a758cf80cddfd4d0183f944a1a6645aTammo Spalink assertEquals(decodedHeader.portAddrs.destPort, portAddrs.destPort); 44964c499113a758cf80cddfd4d0183f944a1a6645aTammo Spalink assertEquals(decodedHeader.portAddrs.origPort, portAddrs.origPort); 45064c499113a758cf80cddfd4d0183f944a1a6645aTammo Spalink assertEquals(decodedHeader.portAddrs.areEightBits, portAddrs.areEightBits); 45164c499113a758cf80cddfd4d0183f944a1a6645aTammo Spalink UserData userData = new UserData(); 45264c499113a758cf80cddfd4d0183f944a1a6645aTammo Spalink userData.payloadStr = "User Data Header (UDH) feedback test"; 45364c499113a758cf80cddfd4d0183f944a1a6645aTammo Spalink userData.userDataHeader = smsHeader; 45464c499113a758cf80cddfd4d0183f944a1a6645aTammo Spalink bearerData.userData = userData; 45564c499113a758cf80cddfd4d0183f944a1a6645aTammo Spalink byte[] encodedSms = BearerData.encode(bearerData); 45664c499113a758cf80cddfd4d0183f944a1a6645aTammo Spalink BearerData revBearerData = BearerData.decode(encodedSms); 45764c499113a758cf80cddfd4d0183f944a1a6645aTammo Spalink decodedHeader = revBearerData.userData.userDataHeader; 45864c499113a758cf80cddfd4d0183f944a1a6645aTammo Spalink assertEquals(decodedHeader.concatRef.refNumber, concatRef.refNumber); 45964c499113a758cf80cddfd4d0183f944a1a6645aTammo Spalink assertEquals(decodedHeader.concatRef.msgCount, concatRef.msgCount); 46064c499113a758cf80cddfd4d0183f944a1a6645aTammo Spalink assertEquals(decodedHeader.concatRef.seqNumber, concatRef.seqNumber); 46164c499113a758cf80cddfd4d0183f944a1a6645aTammo Spalink assertEquals(decodedHeader.concatRef.isEightBits, concatRef.isEightBits); 46264c499113a758cf80cddfd4d0183f944a1a6645aTammo Spalink assertEquals(decodedHeader.portAddrs.destPort, portAddrs.destPort); 46364c499113a758cf80cddfd4d0183f944a1a6645aTammo Spalink assertEquals(decodedHeader.portAddrs.origPort, portAddrs.origPort); 46464c499113a758cf80cddfd4d0183f944a1a6645aTammo Spalink assertEquals(decodedHeader.portAddrs.areEightBits, portAddrs.areEightBits); 46564c499113a758cf80cddfd4d0183f944a1a6645aTammo Spalink } 46664c499113a758cf80cddfd4d0183f944a1a6645aTammo Spalink 46764c499113a758cf80cddfd4d0183f944a1a6645aTammo Spalink @SmallTest 46883917db040bd7498ebca3b74f879dc1c9e223d8eTammo Spalink public void testReplyOption() throws Exception { 46983917db040bd7498ebca3b74f879dc1c9e223d8eTammo Spalink String pdu1 = "0003104090011648b6a794e0705476bf77bceae934fe5f6d94d87450080a0180"; 47083917db040bd7498ebca3b74f879dc1c9e223d8eTammo Spalink BearerData bd1 = BearerData.decode(HexDump.hexStringToByteArray(pdu1)); 47183917db040bd7498ebca3b74f879dc1c9e223d8eTammo Spalink assertEquals("Test Acknowledgement 1", bd1.userData.payloadStr); 47283917db040bd7498ebca3b74f879dc1c9e223d8eTammo Spalink assertEquals(true, bd1.userAckReq); 47383917db040bd7498ebca3b74f879dc1c9e223d8eTammo Spalink assertEquals(false, bd1.deliveryAckReq); 47483917db040bd7498ebca3b74f879dc1c9e223d8eTammo Spalink assertEquals(false, bd1.readAckReq); 47583917db040bd7498ebca3b74f879dc1c9e223d8eTammo Spalink assertEquals(false, bd1.reportReq); 47683917db040bd7498ebca3b74f879dc1c9e223d8eTammo Spalink String pdu2 = "0003104090011648b6a794e0705476bf77bceae934fe5f6d94d87490080a0140"; 47783917db040bd7498ebca3b74f879dc1c9e223d8eTammo Spalink BearerData bd2 = BearerData.decode(HexDump.hexStringToByteArray(pdu2)); 47883917db040bd7498ebca3b74f879dc1c9e223d8eTammo Spalink assertEquals("Test Acknowledgement 2", bd2.userData.payloadStr); 47983917db040bd7498ebca3b74f879dc1c9e223d8eTammo Spalink assertEquals(false, bd2.userAckReq); 48083917db040bd7498ebca3b74f879dc1c9e223d8eTammo Spalink assertEquals(true, bd2.deliveryAckReq); 48183917db040bd7498ebca3b74f879dc1c9e223d8eTammo Spalink assertEquals(false, bd2.readAckReq); 48283917db040bd7498ebca3b74f879dc1c9e223d8eTammo Spalink assertEquals(false, bd2.reportReq); 48383917db040bd7498ebca3b74f879dc1c9e223d8eTammo Spalink String pdu3 = "0003104090011648b6a794e0705476bf77bceae934fe5f6d94d874d0080a0120"; 48483917db040bd7498ebca3b74f879dc1c9e223d8eTammo Spalink BearerData bd3 = BearerData.decode(HexDump.hexStringToByteArray(pdu3)); 48583917db040bd7498ebca3b74f879dc1c9e223d8eTammo Spalink assertEquals("Test Acknowledgement 3", bd3.userData.payloadStr); 48683917db040bd7498ebca3b74f879dc1c9e223d8eTammo Spalink assertEquals(false, bd3.userAckReq); 48783917db040bd7498ebca3b74f879dc1c9e223d8eTammo Spalink assertEquals(false, bd3.deliveryAckReq); 48883917db040bd7498ebca3b74f879dc1c9e223d8eTammo Spalink assertEquals(true, bd3.readAckReq); 48983917db040bd7498ebca3b74f879dc1c9e223d8eTammo Spalink assertEquals(false, bd3.reportReq); 49083917db040bd7498ebca3b74f879dc1c9e223d8eTammo Spalink String pdu4 = "0003104090011648b6a794e0705476bf77bceae934fe5f6d94d87510080a0110"; 49183917db040bd7498ebca3b74f879dc1c9e223d8eTammo Spalink BearerData bd4 = BearerData.decode(HexDump.hexStringToByteArray(pdu4)); 49283917db040bd7498ebca3b74f879dc1c9e223d8eTammo Spalink assertEquals("Test Acknowledgement 4", bd4.userData.payloadStr); 49383917db040bd7498ebca3b74f879dc1c9e223d8eTammo Spalink assertEquals(false, bd4.userAckReq); 49483917db040bd7498ebca3b74f879dc1c9e223d8eTammo Spalink assertEquals(false, bd4.deliveryAckReq); 49583917db040bd7498ebca3b74f879dc1c9e223d8eTammo Spalink assertEquals(false, bd4.readAckReq); 49683917db040bd7498ebca3b74f879dc1c9e223d8eTammo Spalink assertEquals(true, bd4.reportReq); 49783917db040bd7498ebca3b74f879dc1c9e223d8eTammo Spalink } 49883917db040bd7498ebca3b74f879dc1c9e223d8eTammo Spalink 49983917db040bd7498ebca3b74f879dc1c9e223d8eTammo Spalink @SmallTest 50083917db040bd7498ebca3b74f879dc1c9e223d8eTammo Spalink public void testReplyOptionFeedback() throws Exception { 50183917db040bd7498ebca3b74f879dc1c9e223d8eTammo Spalink BearerData bearerData = new BearerData(); 50283917db040bd7498ebca3b74f879dc1c9e223d8eTammo Spalink bearerData.messageType = BearerData.MESSAGE_TYPE_DELIVER; 50383917db040bd7498ebca3b74f879dc1c9e223d8eTammo Spalink bearerData.messageId = 0; 50483917db040bd7498ebca3b74f879dc1c9e223d8eTammo Spalink bearerData.hasUserDataHeader = false; 5058478b59f177ec97a9996b71f7fac1509ba9ef493Tammo Spalink UserData userData = new UserData(); 5068478b59f177ec97a9996b71f7fac1509ba9ef493Tammo Spalink userData.payloadStr = "test reply option"; 5078478b59f177ec97a9996b71f7fac1509ba9ef493Tammo Spalink bearerData.userData = userData; 50883917db040bd7498ebca3b74f879dc1c9e223d8eTammo Spalink bearerData.userAckReq = true; 50983917db040bd7498ebca3b74f879dc1c9e223d8eTammo Spalink byte []encodedSms = BearerData.encode(bearerData); 51083917db040bd7498ebca3b74f879dc1c9e223d8eTammo Spalink BearerData revBearerData = BearerData.decode(encodedSms); 51183917db040bd7498ebca3b74f879dc1c9e223d8eTammo Spalink assertEquals(true, revBearerData.userAckReq); 51283917db040bd7498ebca3b74f879dc1c9e223d8eTammo Spalink assertEquals(false, revBearerData.deliveryAckReq); 51383917db040bd7498ebca3b74f879dc1c9e223d8eTammo Spalink assertEquals(false, revBearerData.readAckReq); 51483917db040bd7498ebca3b74f879dc1c9e223d8eTammo Spalink assertEquals(false, revBearerData.reportReq); 51583917db040bd7498ebca3b74f879dc1c9e223d8eTammo Spalink bearerData.userAckReq = false; 51683917db040bd7498ebca3b74f879dc1c9e223d8eTammo Spalink bearerData.deliveryAckReq = true; 51783917db040bd7498ebca3b74f879dc1c9e223d8eTammo Spalink encodedSms = BearerData.encode(bearerData); 51883917db040bd7498ebca3b74f879dc1c9e223d8eTammo Spalink revBearerData = BearerData.decode(encodedSms); 51983917db040bd7498ebca3b74f879dc1c9e223d8eTammo Spalink assertEquals(false, revBearerData.userAckReq); 52083917db040bd7498ebca3b74f879dc1c9e223d8eTammo Spalink assertEquals(true, revBearerData.deliveryAckReq); 52183917db040bd7498ebca3b74f879dc1c9e223d8eTammo Spalink assertEquals(false, revBearerData.readAckReq); 52283917db040bd7498ebca3b74f879dc1c9e223d8eTammo Spalink assertEquals(false, revBearerData.reportReq); 52383917db040bd7498ebca3b74f879dc1c9e223d8eTammo Spalink bearerData.deliveryAckReq = false; 52483917db040bd7498ebca3b74f879dc1c9e223d8eTammo Spalink bearerData.readAckReq = true; 52583917db040bd7498ebca3b74f879dc1c9e223d8eTammo Spalink encodedSms = BearerData.encode(bearerData); 52683917db040bd7498ebca3b74f879dc1c9e223d8eTammo Spalink revBearerData = BearerData.decode(encodedSms); 52783917db040bd7498ebca3b74f879dc1c9e223d8eTammo Spalink assertEquals(false, revBearerData.userAckReq); 52883917db040bd7498ebca3b74f879dc1c9e223d8eTammo Spalink assertEquals(false, revBearerData.deliveryAckReq); 52983917db040bd7498ebca3b74f879dc1c9e223d8eTammo Spalink assertEquals(true, revBearerData.readAckReq); 53083917db040bd7498ebca3b74f879dc1c9e223d8eTammo Spalink assertEquals(false, revBearerData.reportReq); 53183917db040bd7498ebca3b74f879dc1c9e223d8eTammo Spalink bearerData.readAckReq = false; 53283917db040bd7498ebca3b74f879dc1c9e223d8eTammo Spalink bearerData.reportReq = true; 53383917db040bd7498ebca3b74f879dc1c9e223d8eTammo Spalink encodedSms = BearerData.encode(bearerData); 53483917db040bd7498ebca3b74f879dc1c9e223d8eTammo Spalink revBearerData = BearerData.decode(encodedSms); 53583917db040bd7498ebca3b74f879dc1c9e223d8eTammo Spalink assertEquals(false, revBearerData.userAckReq); 53683917db040bd7498ebca3b74f879dc1c9e223d8eTammo Spalink assertEquals(false, revBearerData.deliveryAckReq); 53783917db040bd7498ebca3b74f879dc1c9e223d8eTammo Spalink assertEquals(false, revBearerData.readAckReq); 53883917db040bd7498ebca3b74f879dc1c9e223d8eTammo Spalink assertEquals(true, revBearerData.reportReq); 53983917db040bd7498ebca3b74f879dc1c9e223d8eTammo Spalink } 54083917db040bd7498ebca3b74f879dc1c9e223d8eTammo Spalink 54183917db040bd7498ebca3b74f879dc1c9e223d8eTammo Spalink @SmallTest 54283917db040bd7498ebca3b74f879dc1c9e223d8eTammo Spalink public void testNumberOfMessages() throws Exception { 543f73dc54541f546fb966e94e73a925bbc259f9befTammo Spalink // Note that the message text below does not properly reflect 544f73dc54541f546fb966e94e73a925bbc259f9befTammo Spalink // the message count. The author of these messages was 545f73dc54541f546fb966e94e73a925bbc259f9befTammo Spalink // apparently unaware that the values are bcd encoded, and the 546f73dc54541f546fb966e94e73a925bbc259f9befTammo Spalink // values being tested against (not the ones in the message 547f73dc54541f546fb966e94e73a925bbc259f9befTammo Spalink // text) are actually correct. 54883917db040bd7498ebca3b74f879dc1c9e223d8eTammo Spalink String pdu1 = "000310409001124896a794e07595f69f199540ea759a0dc8e00b0163"; 54983917db040bd7498ebca3b74f879dc1c9e223d8eTammo Spalink BearerData bd1 = BearerData.decode(HexDump.hexStringToByteArray(pdu1)); 55083917db040bd7498ebca3b74f879dc1c9e223d8eTammo Spalink assertEquals("Test Voice mail 99", bd1.userData.payloadStr); 551f73dc54541f546fb966e94e73a925bbc259f9befTammo Spalink assertEquals(63, bd1.numberOfMessages); 55283917db040bd7498ebca3b74f879dc1c9e223d8eTammo Spalink String pdu2 = "00031040900113489ea794e07595f69f199540ea759a0988c0600b0164"; 55383917db040bd7498ebca3b74f879dc1c9e223d8eTammo Spalink BearerData bd2 = BearerData.decode(HexDump.hexStringToByteArray(pdu2)); 55483917db040bd7498ebca3b74f879dc1c9e223d8eTammo Spalink assertEquals("Test Voice mail 100", bd2.userData.payloadStr); 555f73dc54541f546fb966e94e73a925bbc259f9befTammo Spalink assertEquals(64, bd2.numberOfMessages); 55683917db040bd7498ebca3b74f879dc1c9e223d8eTammo Spalink } 55783917db040bd7498ebca3b74f879dc1c9e223d8eTammo Spalink 55883917db040bd7498ebca3b74f879dc1c9e223d8eTammo Spalink @SmallTest 55983917db040bd7498ebca3b74f879dc1c9e223d8eTammo Spalink public void testCallbackNum() throws Exception { 56083917db040bd7498ebca3b74f879dc1c9e223d8eTammo Spalink String pdu1 = "00031040900112488ea794e070d436cb638bc5e035ce2f97900e06910431323334"; 56183917db040bd7498ebca3b74f879dc1c9e223d8eTammo Spalink BearerData bd1 = BearerData.decode(HexDump.hexStringToByteArray(pdu1)); 56283917db040bd7498ebca3b74f879dc1c9e223d8eTammo Spalink assertEquals("Test Callback nbr", bd1.userData.payloadStr); 56383917db040bd7498ebca3b74f879dc1c9e223d8eTammo Spalink assertEquals(CdmaSmsAddress.DIGIT_MODE_8BIT_CHAR, bd1.callbackNumber.digitMode); 56483917db040bd7498ebca3b74f879dc1c9e223d8eTammo Spalink assertEquals(CdmaSmsAddress.TON_INTERNATIONAL_OR_IP, bd1.callbackNumber.ton); 56583917db040bd7498ebca3b74f879dc1c9e223d8eTammo Spalink assertEquals(CdmaSmsAddress.NUMBER_MODE_NOT_DATA_NETWORK, bd1.callbackNumber.numberMode); 56683917db040bd7498ebca3b74f879dc1c9e223d8eTammo Spalink assertEquals(CdmaSmsAddress.NUMBERING_PLAN_ISDN_TELEPHONY, bd1.callbackNumber.numberPlan); 56783917db040bd7498ebca3b74f879dc1c9e223d8eTammo Spalink assertEquals("1234", bd1.callbackNumber.address); 56883917db040bd7498ebca3b74f879dc1c9e223d8eTammo Spalink } 56983917db040bd7498ebca3b74f879dc1c9e223d8eTammo Spalink 57083917db040bd7498ebca3b74f879dc1c9e223d8eTammo Spalink @SmallTest 571d2b124f97c52c566b68aff9fa58306f461686af0Tammo Spalink public void testCallbackNumDtmf() throws Exception { 572d2b124f97c52c566b68aff9fa58306f461686af0Tammo Spalink String pdu1 = "00031002300109104539b4d052ebb3d00e07052d4c90a55080"; 573d2b124f97c52c566b68aff9fa58306f461686af0Tammo Spalink BearerData bd1 = BearerData.decode(HexDump.hexStringToByteArray(pdu1)); 574d2b124f97c52c566b68aff9fa58306f461686af0Tammo Spalink assertEquals("SMS Rulz", bd1.userData.payloadStr); 575d2b124f97c52c566b68aff9fa58306f461686af0Tammo Spalink assertEquals(CdmaSmsAddress.DIGIT_MODE_4BIT_DTMF, bd1.callbackNumber.digitMode); 576d2b124f97c52c566b68aff9fa58306f461686af0Tammo Spalink assertEquals(CdmaSmsAddress.TON_UNKNOWN, bd1.callbackNumber.ton); 577d2b124f97c52c566b68aff9fa58306f461686af0Tammo Spalink assertEquals(CdmaSmsAddress.NUMBER_MODE_NOT_DATA_NETWORK, bd1.callbackNumber.numberMode); 578d2b124f97c52c566b68aff9fa58306f461686af0Tammo Spalink assertEquals(CdmaSmsAddress.NUMBERING_PLAN_UNKNOWN, bd1.callbackNumber.numberPlan); 579d2b124f97c52c566b68aff9fa58306f461686af0Tammo Spalink assertEquals("5099214001", bd1.callbackNumber.address); 580d2b124f97c52c566b68aff9fa58306f461686af0Tammo Spalink } 581d2b124f97c52c566b68aff9fa58306f461686af0Tammo Spalink 582d2b124f97c52c566b68aff9fa58306f461686af0Tammo Spalink @SmallTest 58383917db040bd7498ebca3b74f879dc1c9e223d8eTammo Spalink public void testCallbackNumFeedback() throws Exception { 58483917db040bd7498ebca3b74f879dc1c9e223d8eTammo Spalink BearerData bearerData = new BearerData(); 58583917db040bd7498ebca3b74f879dc1c9e223d8eTammo Spalink bearerData.messageType = BearerData.MESSAGE_TYPE_DELIVER; 58683917db040bd7498ebca3b74f879dc1c9e223d8eTammo Spalink bearerData.messageId = 0; 58783917db040bd7498ebca3b74f879dc1c9e223d8eTammo Spalink bearerData.hasUserDataHeader = false; 5888478b59f177ec97a9996b71f7fac1509ba9ef493Tammo Spalink UserData userData = new UserData(); 5898478b59f177ec97a9996b71f7fac1509ba9ef493Tammo Spalink userData.payloadStr = "test callback number"; 5908478b59f177ec97a9996b71f7fac1509ba9ef493Tammo Spalink bearerData.userData = userData; 59183917db040bd7498ebca3b74f879dc1c9e223d8eTammo Spalink CdmaSmsAddress addr = new CdmaSmsAddress(); 59283917db040bd7498ebca3b74f879dc1c9e223d8eTammo Spalink addr.digitMode = CdmaSmsAddress.DIGIT_MODE_8BIT_CHAR; 59383917db040bd7498ebca3b74f879dc1c9e223d8eTammo Spalink addr.ton = CdmaSmsAddress.TON_NATIONAL_OR_EMAIL; 59483917db040bd7498ebca3b74f879dc1c9e223d8eTammo Spalink addr.numberMode = CdmaSmsAddress.NUMBER_MODE_NOT_DATA_NETWORK; 59583917db040bd7498ebca3b74f879dc1c9e223d8eTammo Spalink addr.numberPlan = CdmaSmsAddress.NUMBERING_PLAN_UNKNOWN; 59683917db040bd7498ebca3b74f879dc1c9e223d8eTammo Spalink addr.address = "8005551212"; 59783917db040bd7498ebca3b74f879dc1c9e223d8eTammo Spalink addr.numberOfDigits = (byte)addr.address.length(); 59883917db040bd7498ebca3b74f879dc1c9e223d8eTammo Spalink bearerData.callbackNumber = addr; 59983917db040bd7498ebca3b74f879dc1c9e223d8eTammo Spalink byte []encodedSms = BearerData.encode(bearerData); 60083917db040bd7498ebca3b74f879dc1c9e223d8eTammo Spalink BearerData revBearerData = BearerData.decode(encodedSms); 60183917db040bd7498ebca3b74f879dc1c9e223d8eTammo Spalink CdmaSmsAddress revAddr = revBearerData.callbackNumber; 60283917db040bd7498ebca3b74f879dc1c9e223d8eTammo Spalink assertEquals(addr.digitMode, revAddr.digitMode); 60383917db040bd7498ebca3b74f879dc1c9e223d8eTammo Spalink assertEquals(addr.ton, revAddr.ton); 60483917db040bd7498ebca3b74f879dc1c9e223d8eTammo Spalink assertEquals(addr.numberMode, revAddr.numberMode); 60583917db040bd7498ebca3b74f879dc1c9e223d8eTammo Spalink assertEquals(addr.numberPlan, revAddr.numberPlan); 60683917db040bd7498ebca3b74f879dc1c9e223d8eTammo Spalink assertEquals(addr.numberOfDigits, revAddr.numberOfDigits); 60783917db040bd7498ebca3b74f879dc1c9e223d8eTammo Spalink assertEquals(addr.address, revAddr.address); 60883917db040bd7498ebca3b74f879dc1c9e223d8eTammo Spalink addr.address = "8*55#1012"; 60983917db040bd7498ebca3b74f879dc1c9e223d8eTammo Spalink addr.numberOfDigits = (byte)addr.address.length(); 61083917db040bd7498ebca3b74f879dc1c9e223d8eTammo Spalink addr.digitMode = CdmaSmsAddress.DIGIT_MODE_4BIT_DTMF; 61183917db040bd7498ebca3b74f879dc1c9e223d8eTammo Spalink encodedSms = BearerData.encode(bearerData); 61283917db040bd7498ebca3b74f879dc1c9e223d8eTammo Spalink revBearerData = BearerData.decode(encodedSms); 61383917db040bd7498ebca3b74f879dc1c9e223d8eTammo Spalink revAddr = revBearerData.callbackNumber; 61483917db040bd7498ebca3b74f879dc1c9e223d8eTammo Spalink assertEquals(addr.digitMode, revAddr.digitMode); 61583917db040bd7498ebca3b74f879dc1c9e223d8eTammo Spalink assertEquals(addr.numberOfDigits, revAddr.numberOfDigits); 61683917db040bd7498ebca3b74f879dc1c9e223d8eTammo Spalink assertEquals(addr.address, revAddr.address); 61783917db040bd7498ebca3b74f879dc1c9e223d8eTammo Spalink } 61883917db040bd7498ebca3b74f879dc1c9e223d8eTammo Spalink 61983917db040bd7498ebca3b74f879dc1c9e223d8eTammo Spalink @SmallTest 6208c49d32cb9980959c402eaa243fd5129cd9942fcTammo Spalink public void testPrivacyIndicator() throws Exception { 6218c49d32cb9980959c402eaa243fd5129cd9942fcTammo Spalink String pdu1 = "0003104090010c485f4194dfea34becf61b840090140"; 6228c49d32cb9980959c402eaa243fd5129cd9942fcTammo Spalink BearerData bd1 = BearerData.decode(HexDump.hexStringToByteArray(pdu1)); 6238c49d32cb9980959c402eaa243fd5129cd9942fcTammo Spalink assertEquals(bd1.privacy, BearerData.PRIVACY_RESTRICTED); 6248c49d32cb9980959c402eaa243fd5129cd9942fcTammo Spalink String pdu2 = "0003104090010c485f4194dfea34becf61b840090180"; 6258c49d32cb9980959c402eaa243fd5129cd9942fcTammo Spalink BearerData bd2 = BearerData.decode(HexDump.hexStringToByteArray(pdu2)); 6268c49d32cb9980959c402eaa243fd5129cd9942fcTammo Spalink assertEquals(bd2.privacy, BearerData.PRIVACY_CONFIDENTIAL); 6278c49d32cb9980959c402eaa243fd5129cd9942fcTammo Spalink String pdu3 = "0003104090010c485f4194dfea34becf61b8400901c0"; 6288c49d32cb9980959c402eaa243fd5129cd9942fcTammo Spalink BearerData bd3 = BearerData.decode(HexDump.hexStringToByteArray(pdu3)); 6298c49d32cb9980959c402eaa243fd5129cd9942fcTammo Spalink assertEquals(bd3.privacy, BearerData.PRIVACY_SECRET); 6308c49d32cb9980959c402eaa243fd5129cd9942fcTammo Spalink } 6318c49d32cb9980959c402eaa243fd5129cd9942fcTammo Spalink 6328c49d32cb9980959c402eaa243fd5129cd9942fcTammo Spalink @SmallTest 6338c49d32cb9980959c402eaa243fd5129cd9942fcTammo Spalink public void testPrivacyIndicatorFeedback() throws Exception { 6348c49d32cb9980959c402eaa243fd5129cd9942fcTammo Spalink BearerData bearerData = new BearerData(); 6358c49d32cb9980959c402eaa243fd5129cd9942fcTammo Spalink bearerData.messageType = BearerData.MESSAGE_TYPE_DELIVER; 6368c49d32cb9980959c402eaa243fd5129cd9942fcTammo Spalink bearerData.messageId = 0; 6378c49d32cb9980959c402eaa243fd5129cd9942fcTammo Spalink bearerData.hasUserDataHeader = false; 6388478b59f177ec97a9996b71f7fac1509ba9ef493Tammo Spalink UserData userData = new UserData(); 6398478b59f177ec97a9996b71f7fac1509ba9ef493Tammo Spalink userData.payloadStr = "test privacy indicator"; 6408478b59f177ec97a9996b71f7fac1509ba9ef493Tammo Spalink bearerData.userData = userData; 6418c49d32cb9980959c402eaa243fd5129cd9942fcTammo Spalink bearerData.privacy = BearerData.PRIVACY_SECRET; 6428c49d32cb9980959c402eaa243fd5129cd9942fcTammo Spalink bearerData.privacyIndicatorSet = true; 6438c49d32cb9980959c402eaa243fd5129cd9942fcTammo Spalink byte []encodedSms = BearerData.encode(bearerData); 6448c49d32cb9980959c402eaa243fd5129cd9942fcTammo Spalink BearerData revBearerData = BearerData.decode(encodedSms); 6458478b59f177ec97a9996b71f7fac1509ba9ef493Tammo Spalink assertEquals(revBearerData.userData.payloadStr, userData.payloadStr); 6468c49d32cb9980959c402eaa243fd5129cd9942fcTammo Spalink assertEquals(revBearerData.privacyIndicatorSet, true); 6478c49d32cb9980959c402eaa243fd5129cd9942fcTammo Spalink assertEquals(revBearerData.privacy, BearerData.PRIVACY_SECRET); 6488c49d32cb9980959c402eaa243fd5129cd9942fcTammo Spalink bearerData.privacy = BearerData.PRIVACY_RESTRICTED; 6498c49d32cb9980959c402eaa243fd5129cd9942fcTammo Spalink encodedSms = BearerData.encode(bearerData); 6508c49d32cb9980959c402eaa243fd5129cd9942fcTammo Spalink revBearerData = BearerData.decode(encodedSms); 6518c49d32cb9980959c402eaa243fd5129cd9942fcTammo Spalink assertEquals(revBearerData.privacy, BearerData.PRIVACY_RESTRICTED); 6528c49d32cb9980959c402eaa243fd5129cd9942fcTammo Spalink } 65383917db040bd7498ebca3b74f879dc1c9e223d8eTammo Spalink 6548c49d32cb9980959c402eaa243fd5129cd9942fcTammo Spalink @SmallTest 6558c49d32cb9980959c402eaa243fd5129cd9942fcTammo Spalink public void testMsgDeliveryAlert() throws Exception { 6568c49d32cb9980959c402eaa243fd5129cd9942fcTammo Spalink String pdu1 = "0003104090010d4866a794e07055965b91d040300c0100"; 6578c49d32cb9980959c402eaa243fd5129cd9942fcTammo Spalink BearerData bd1 = BearerData.decode(HexDump.hexStringToByteArray(pdu1)); 6588c49d32cb9980959c402eaa243fd5129cd9942fcTammo Spalink assertEquals(bd1.alert, 0); 6598c49d32cb9980959c402eaa243fd5129cd9942fcTammo Spalink assertEquals(bd1.userData.payloadStr, "Test Alert 0"); 6608c49d32cb9980959c402eaa243fd5129cd9942fcTammo Spalink String pdu2 = "0003104090010d4866a794e07055965b91d140300c0140"; 6618c49d32cb9980959c402eaa243fd5129cd9942fcTammo Spalink BearerData bd2 = BearerData.decode(HexDump.hexStringToByteArray(pdu2)); 6628c49d32cb9980959c402eaa243fd5129cd9942fcTammo Spalink assertEquals(bd2.alert, 1); 6638c49d32cb9980959c402eaa243fd5129cd9942fcTammo Spalink assertEquals(bd2.userData.payloadStr, "Test Alert 1"); 6648c49d32cb9980959c402eaa243fd5129cd9942fcTammo Spalink String pdu3 = "0003104090010d4866a794e07055965b91d240300c0180"; 6658c49d32cb9980959c402eaa243fd5129cd9942fcTammo Spalink BearerData bd3 = BearerData.decode(HexDump.hexStringToByteArray(pdu3)); 6668c49d32cb9980959c402eaa243fd5129cd9942fcTammo Spalink assertEquals(bd3.alert, 2); 6678c49d32cb9980959c402eaa243fd5129cd9942fcTammo Spalink assertEquals(bd3.userData.payloadStr, "Test Alert 2"); 6688c49d32cb9980959c402eaa243fd5129cd9942fcTammo Spalink String pdu4 = "0003104090010d4866a794e07055965b91d340300c01c0"; 6698c49d32cb9980959c402eaa243fd5129cd9942fcTammo Spalink BearerData bd4 = BearerData.decode(HexDump.hexStringToByteArray(pdu4)); 6708c49d32cb9980959c402eaa243fd5129cd9942fcTammo Spalink assertEquals(bd4.alert, 3); 6718c49d32cb9980959c402eaa243fd5129cd9942fcTammo Spalink assertEquals(bd4.userData.payloadStr, "Test Alert 3"); 672f62a2bf29a6cf87be03b290b8b660db245022881Tammo Spalink String pdu5 = "00031000000126114F4CBCFA20DB979F3C39F2A0C9976" + 673f62a2bf29a6cf87be03b290b8b660db245022881Tammo Spalink "69ED979794187665E5D1028EFA7A6840E1062D3D39A900C028000"; 674f62a2bf29a6cf87be03b290b8b660db245022881Tammo Spalink BearerData bd5 = BearerData.decode(HexDump.hexStringToByteArray(pdu5)); 675f62a2bf29a6cf87be03b290b8b660db245022881Tammo Spalink assertEquals(bd5.alert, BearerData.ALERT_MEDIUM_PRIO); 676f62a2bf29a6cf87be03b290b8b660db245022881Tammo Spalink assertEquals(bd5.userData.payloadStr, "test message delivery alert (with 8 bits)"); 677f62a2bf29a6cf87be03b290b8b660db245022881Tammo Spalink String pdu6 = "00031000000126114F4CBCFA20DB979F3C39F2A0C9976" + 678f62a2bf29a6cf87be03b290b8b660db245022881Tammo Spalink "69ED979794187665E5D1028EFA7A6840C1062D3D39A900C00"; 679f62a2bf29a6cf87be03b290b8b660db245022881Tammo Spalink BearerData bd6 = BearerData.decode(HexDump.hexStringToByteArray(pdu6)); 680f62a2bf29a6cf87be03b290b8b660db245022881Tammo Spalink assertEquals(bd6.userData.payloadStr, "test message delivery alert (with 0 bits)"); 681f62a2bf29a6cf87be03b290b8b660db245022881Tammo Spalink assertEquals(bd6.alertIndicatorSet, false); 6828c49d32cb9980959c402eaa243fd5129cd9942fcTammo Spalink } 6838c49d32cb9980959c402eaa243fd5129cd9942fcTammo Spalink 6848c49d32cb9980959c402eaa243fd5129cd9942fcTammo Spalink @SmallTest 685d2b124f97c52c566b68aff9fa58306f461686af0Tammo Spalink public void testMiscParams() throws Exception { 686d2b124f97c52c566b68aff9fa58306f461686af0Tammo Spalink String pdu1 = "00031002400109104539b4d052ebb3d00c0180"; 687d2b124f97c52c566b68aff9fa58306f461686af0Tammo Spalink BearerData bd1 = BearerData.decode(HexDump.hexStringToByteArray(pdu1)); 688d2b124f97c52c566b68aff9fa58306f461686af0Tammo Spalink assertEquals(bd1.alert, BearerData.ALERT_MEDIUM_PRIO); 689d2b124f97c52c566b68aff9fa58306f461686af0Tammo Spalink assertEquals(bd1.userData.payloadStr, "SMS Rulz"); 690d2b124f97c52c566b68aff9fa58306f461686af0Tammo Spalink String pdu2 = "00031002500109104539b4d052ebb3d00801800901c0"; 691d2b124f97c52c566b68aff9fa58306f461686af0Tammo Spalink BearerData bd2 = BearerData.decode(HexDump.hexStringToByteArray(pdu2)); 692d2b124f97c52c566b68aff9fa58306f461686af0Tammo Spalink assertEquals(bd2.priority, BearerData.PRIORITY_URGENT); 693d2b124f97c52c566b68aff9fa58306f461686af0Tammo Spalink assertEquals(bd2.privacy, BearerData.PRIVACY_SECRET); 694d2b124f97c52c566b68aff9fa58306f461686af0Tammo Spalink assertEquals(bd2.userData.payloadStr, "SMS Rulz"); 695d2b124f97c52c566b68aff9fa58306f461686af0Tammo Spalink String pdu3 = "00031002600109104539b4d052ebb3d00901400c01c0"; 696d2b124f97c52c566b68aff9fa58306f461686af0Tammo Spalink BearerData bd3 = BearerData.decode(HexDump.hexStringToByteArray(pdu3)); 697d2b124f97c52c566b68aff9fa58306f461686af0Tammo Spalink assertEquals(bd3.privacy, BearerData.PRIVACY_RESTRICTED); 698d2b124f97c52c566b68aff9fa58306f461686af0Tammo Spalink assertEquals(bd3.alert, BearerData.ALERT_HIGH_PRIO); 699d2b124f97c52c566b68aff9fa58306f461686af0Tammo Spalink assertEquals(bd3.userData.payloadStr, "SMS Rulz"); 700d2b124f97c52c566b68aff9fa58306f461686af0Tammo Spalink String pdu4 = "00031002700109104539b4d052ebb3d00f0105"; 701d2b124f97c52c566b68aff9fa58306f461686af0Tammo Spalink BearerData bd4 = BearerData.decode(HexDump.hexStringToByteArray(pdu4)); 702d2b124f97c52c566b68aff9fa58306f461686af0Tammo Spalink assertEquals(bd4.displayMode, BearerData.DISPLAY_MODE_IMMEDIATE); 703d2b124f97c52c566b68aff9fa58306f461686af0Tammo Spalink assertEquals(bd4.userData.payloadStr, "SMS Rulz"); 704d2b124f97c52c566b68aff9fa58306f461686af0Tammo Spalink } 705d2b124f97c52c566b68aff9fa58306f461686af0Tammo Spalink @SmallTest 7068c49d32cb9980959c402eaa243fd5129cd9942fcTammo Spalink public void testMsgDeliveryAlertFeedback() throws Exception { 7078c49d32cb9980959c402eaa243fd5129cd9942fcTammo Spalink BearerData bearerData = new BearerData(); 7088c49d32cb9980959c402eaa243fd5129cd9942fcTammo Spalink bearerData.messageType = BearerData.MESSAGE_TYPE_DELIVER; 7098c49d32cb9980959c402eaa243fd5129cd9942fcTammo Spalink bearerData.messageId = 0; 7108c49d32cb9980959c402eaa243fd5129cd9942fcTammo Spalink bearerData.hasUserDataHeader = false; 7118478b59f177ec97a9996b71f7fac1509ba9ef493Tammo Spalink UserData userData = new UserData(); 7128478b59f177ec97a9996b71f7fac1509ba9ef493Tammo Spalink userData.payloadStr = "test message delivery alert"; 7138478b59f177ec97a9996b71f7fac1509ba9ef493Tammo Spalink bearerData.userData = userData; 7148c49d32cb9980959c402eaa243fd5129cd9942fcTammo Spalink bearerData.alert = BearerData.ALERT_MEDIUM_PRIO; 7158c49d32cb9980959c402eaa243fd5129cd9942fcTammo Spalink bearerData.alertIndicatorSet = true; 7168c49d32cb9980959c402eaa243fd5129cd9942fcTammo Spalink byte []encodedSms = BearerData.encode(bearerData); 7178c49d32cb9980959c402eaa243fd5129cd9942fcTammo Spalink BearerData revBearerData = BearerData.decode(encodedSms); 7188478b59f177ec97a9996b71f7fac1509ba9ef493Tammo Spalink assertEquals(revBearerData.userData.payloadStr, userData.payloadStr); 7198c49d32cb9980959c402eaa243fd5129cd9942fcTammo Spalink assertEquals(revBearerData.alertIndicatorSet, true); 7208c49d32cb9980959c402eaa243fd5129cd9942fcTammo Spalink assertEquals(revBearerData.alert, bearerData.alert); 7218c49d32cb9980959c402eaa243fd5129cd9942fcTammo Spalink bearerData.alert = BearerData.ALERT_HIGH_PRIO; 7228c49d32cb9980959c402eaa243fd5129cd9942fcTammo Spalink encodedSms = BearerData.encode(bearerData); 7238c49d32cb9980959c402eaa243fd5129cd9942fcTammo Spalink revBearerData = BearerData.decode(encodedSms); 7248478b59f177ec97a9996b71f7fac1509ba9ef493Tammo Spalink assertEquals(revBearerData.userData.payloadStr, userData.payloadStr); 7258c49d32cb9980959c402eaa243fd5129cd9942fcTammo Spalink assertEquals(revBearerData.alertIndicatorSet, true); 7268c49d32cb9980959c402eaa243fd5129cd9942fcTammo Spalink assertEquals(revBearerData.alert, bearerData.alert); 7278c49d32cb9980959c402eaa243fd5129cd9942fcTammo Spalink } 72883917db040bd7498ebca3b74f879dc1c9e223d8eTammo Spalink 7298c49d32cb9980959c402eaa243fd5129cd9942fcTammo Spalink @SmallTest 7308c49d32cb9980959c402eaa243fd5129cd9942fcTammo Spalink public void testLanguageIndicator() throws Exception { 7318c49d32cb9980959c402eaa243fd5129cd9942fcTammo Spalink String pdu1 = "0003104090011748bea794e0731436ef3bd7c2e0352eef27a1c263fe58080d0101"; 7328c49d32cb9980959c402eaa243fd5129cd9942fcTammo Spalink BearerData bd1 = BearerData.decode(HexDump.hexStringToByteArray(pdu1)); 7338c49d32cb9980959c402eaa243fd5129cd9942fcTammo Spalink assertEquals(bd1.userData.payloadStr, "Test Language indicator"); 7348c49d32cb9980959c402eaa243fd5129cd9942fcTammo Spalink assertEquals(bd1.language, BearerData.LANGUAGE_ENGLISH); 7358c49d32cb9980959c402eaa243fd5129cd9942fcTammo Spalink String pdu2 = "0003104090011748bea794e0731436ef3bd7c2e0352eef27a1c263fe58080d0106"; 7368c49d32cb9980959c402eaa243fd5129cd9942fcTammo Spalink BearerData bd2 = BearerData.decode(HexDump.hexStringToByteArray(pdu2)); 7378c49d32cb9980959c402eaa243fd5129cd9942fcTammo Spalink assertEquals(bd2.userData.payloadStr, "Test Language indicator"); 7388c49d32cb9980959c402eaa243fd5129cd9942fcTammo Spalink assertEquals(bd2.language, BearerData.LANGUAGE_CHINESE); 7398c49d32cb9980959c402eaa243fd5129cd9942fcTammo Spalink } 7408c49d32cb9980959c402eaa243fd5129cd9942fcTammo Spalink 7418c49d32cb9980959c402eaa243fd5129cd9942fcTammo Spalink @SmallTest 7428c49d32cb9980959c402eaa243fd5129cd9942fcTammo Spalink public void testLanguageIndicatorFeedback() throws Exception { 7438c49d32cb9980959c402eaa243fd5129cd9942fcTammo Spalink BearerData bearerData = new BearerData(); 7448c49d32cb9980959c402eaa243fd5129cd9942fcTammo Spalink bearerData.messageType = BearerData.MESSAGE_TYPE_DELIVER; 7458c49d32cb9980959c402eaa243fd5129cd9942fcTammo Spalink bearerData.messageId = 0; 7468c49d32cb9980959c402eaa243fd5129cd9942fcTammo Spalink bearerData.hasUserDataHeader = false; 7478478b59f177ec97a9996b71f7fac1509ba9ef493Tammo Spalink UserData userData = new UserData(); 7488478b59f177ec97a9996b71f7fac1509ba9ef493Tammo Spalink userData.payloadStr = "test language indicator"; 7498478b59f177ec97a9996b71f7fac1509ba9ef493Tammo Spalink bearerData.userData = userData; 7508c49d32cb9980959c402eaa243fd5129cd9942fcTammo Spalink bearerData.language = BearerData.LANGUAGE_ENGLISH; 7518c49d32cb9980959c402eaa243fd5129cd9942fcTammo Spalink bearerData.languageIndicatorSet = true; 7528c49d32cb9980959c402eaa243fd5129cd9942fcTammo Spalink byte []encodedSms = BearerData.encode(bearerData); 7538c49d32cb9980959c402eaa243fd5129cd9942fcTammo Spalink BearerData revBearerData = BearerData.decode(encodedSms); 7548478b59f177ec97a9996b71f7fac1509ba9ef493Tammo Spalink assertEquals(revBearerData.userData.payloadStr, userData.payloadStr); 7558c49d32cb9980959c402eaa243fd5129cd9942fcTammo Spalink assertEquals(revBearerData.languageIndicatorSet, true); 7568c49d32cb9980959c402eaa243fd5129cd9942fcTammo Spalink assertEquals(revBearerData.language, bearerData.language); 7578c49d32cb9980959c402eaa243fd5129cd9942fcTammo Spalink bearerData.language = BearerData.LANGUAGE_KOREAN; 7588c49d32cb9980959c402eaa243fd5129cd9942fcTammo Spalink encodedSms = BearerData.encode(bearerData); 7598c49d32cb9980959c402eaa243fd5129cd9942fcTammo Spalink revBearerData = BearerData.decode(encodedSms); 7608478b59f177ec97a9996b71f7fac1509ba9ef493Tammo Spalink assertEquals(revBearerData.userData.payloadStr, userData.payloadStr); 7618c49d32cb9980959c402eaa243fd5129cd9942fcTammo Spalink assertEquals(revBearerData.languageIndicatorSet, true); 7628c49d32cb9980959c402eaa243fd5129cd9942fcTammo Spalink assertEquals(revBearerData.language, bearerData.language); 7638c49d32cb9980959c402eaa243fd5129cd9942fcTammo Spalink } 7648c49d32cb9980959c402eaa243fd5129cd9942fcTammo Spalink 7658c49d32cb9980959c402eaa243fd5129cd9942fcTammo Spalink @SmallTest 7668c49d32cb9980959c402eaa243fd5129cd9942fcTammo Spalink public void testDisplayMode() throws Exception { 7678c49d32cb9980959c402eaa243fd5129cd9942fcTammo Spalink String pdu1 = "0003104090010c485f4194dfea34becf61b8400f0100"; 7688c49d32cb9980959c402eaa243fd5129cd9942fcTammo Spalink BearerData bd1 = BearerData.decode(HexDump.hexStringToByteArray(pdu1)); 7698c49d32cb9980959c402eaa243fd5129cd9942fcTammo Spalink assertEquals(bd1.displayMode, BearerData.DISPLAY_MODE_IMMEDIATE); 7708c49d32cb9980959c402eaa243fd5129cd9942fcTammo Spalink String pdu2 = "0003104090010c485f4194dfea34becf61b8400f0140"; 7718c49d32cb9980959c402eaa243fd5129cd9942fcTammo Spalink BearerData bd2 = BearerData.decode(HexDump.hexStringToByteArray(pdu2)); 7728c49d32cb9980959c402eaa243fd5129cd9942fcTammo Spalink assertEquals(bd2.displayMode, BearerData.DISPLAY_MODE_DEFAULT); 7738c49d32cb9980959c402eaa243fd5129cd9942fcTammo Spalink String pdu3 = "0003104090010c485f4194dfea34becf61b8400f0180"; 7748c49d32cb9980959c402eaa243fd5129cd9942fcTammo Spalink BearerData bd3 = BearerData.decode(HexDump.hexStringToByteArray(pdu3)); 7758c49d32cb9980959c402eaa243fd5129cd9942fcTammo Spalink assertEquals(bd3.displayMode, BearerData.DISPLAY_MODE_USER); 7768c49d32cb9980959c402eaa243fd5129cd9942fcTammo Spalink } 7778c49d32cb9980959c402eaa243fd5129cd9942fcTammo Spalink 7788c49d32cb9980959c402eaa243fd5129cd9942fcTammo Spalink @SmallTest 7798c49d32cb9980959c402eaa243fd5129cd9942fcTammo Spalink public void testDisplayModeFeedback() throws Exception { 7808c49d32cb9980959c402eaa243fd5129cd9942fcTammo Spalink BearerData bearerData = new BearerData(); 7818c49d32cb9980959c402eaa243fd5129cd9942fcTammo Spalink bearerData.messageType = BearerData.MESSAGE_TYPE_DELIVER; 7828c49d32cb9980959c402eaa243fd5129cd9942fcTammo Spalink bearerData.messageId = 0; 7838c49d32cb9980959c402eaa243fd5129cd9942fcTammo Spalink bearerData.hasUserDataHeader = false; 7848478b59f177ec97a9996b71f7fac1509ba9ef493Tammo Spalink UserData userData = new UserData(); 7858478b59f177ec97a9996b71f7fac1509ba9ef493Tammo Spalink userData.payloadStr = "test display mode"; 7868478b59f177ec97a9996b71f7fac1509ba9ef493Tammo Spalink bearerData.userData = userData; 7878c49d32cb9980959c402eaa243fd5129cd9942fcTammo Spalink bearerData.displayMode = BearerData.DISPLAY_MODE_IMMEDIATE; 7888c49d32cb9980959c402eaa243fd5129cd9942fcTammo Spalink bearerData.displayModeSet = true; 7898c49d32cb9980959c402eaa243fd5129cd9942fcTammo Spalink byte []encodedSms = BearerData.encode(bearerData); 7908c49d32cb9980959c402eaa243fd5129cd9942fcTammo Spalink BearerData revBearerData = BearerData.decode(encodedSms); 7918478b59f177ec97a9996b71f7fac1509ba9ef493Tammo Spalink assertEquals(revBearerData.userData.payloadStr, userData.payloadStr); 7928c49d32cb9980959c402eaa243fd5129cd9942fcTammo Spalink assertEquals(revBearerData.displayModeSet, true); 7938c49d32cb9980959c402eaa243fd5129cd9942fcTammo Spalink assertEquals(revBearerData.displayMode, bearerData.displayMode); 7948c49d32cb9980959c402eaa243fd5129cd9942fcTammo Spalink bearerData.displayMode = BearerData.DISPLAY_MODE_USER; 7958c49d32cb9980959c402eaa243fd5129cd9942fcTammo Spalink encodedSms = BearerData.encode(bearerData); 7968c49d32cb9980959c402eaa243fd5129cd9942fcTammo Spalink revBearerData = BearerData.decode(encodedSms); 7978478b59f177ec97a9996b71f7fac1509ba9ef493Tammo Spalink assertEquals(revBearerData.userData.payloadStr, userData.payloadStr); 7988c49d32cb9980959c402eaa243fd5129cd9942fcTammo Spalink assertEquals(revBearerData.displayModeSet, true); 7998c49d32cb9980959c402eaa243fd5129cd9942fcTammo Spalink assertEquals(revBearerData.displayMode, bearerData.displayMode); 8008c49d32cb9980959c402eaa243fd5129cd9942fcTammo Spalink } 8018203dc1bc8d99e2fe430a1a3026983e2e440e6d5Tammo Spalink 8028203dc1bc8d99e2fe430a1a3026983e2e440e6d5Tammo Spalink @SmallTest 8038203dc1bc8d99e2fe430a1a3026983e2e440e6d5Tammo Spalink public void testIs91() throws Exception { 8048203dc1bc8d99e2fe430a1a3026983e2e440e6d5Tammo Spalink String pdu1 = "000320001001070c2039acc13880"; 8058203dc1bc8d99e2fe430a1a3026983e2e440e6d5Tammo Spalink BearerData bd1 = BearerData.decode(HexDump.hexStringToByteArray(pdu1)); 8068203dc1bc8d99e2fe430a1a3026983e2e440e6d5Tammo Spalink assertEquals(bd1.callbackNumber.address, "3598271"); 8078203dc1bc8d99e2fe430a1a3026983e2e440e6d5Tammo Spalink String pdu4 = "000320001001080c283c314724b34e"; 8088203dc1bc8d99e2fe430a1a3026983e2e440e6d5Tammo Spalink BearerData bd4 = BearerData.decode(HexDump.hexStringToByteArray(pdu4)); 8098203dc1bc8d99e2fe430a1a3026983e2e440e6d5Tammo Spalink assertEquals(bd4.userData.payloadStr, "ABCDEFG"); 8108203dc1bc8d99e2fe430a1a3026983e2e440e6d5Tammo Spalink } 8118203dc1bc8d99e2fe430a1a3026983e2e440e6d5Tammo Spalink 812e00dd1e5a37bed0de964b353d47a4bd7cdff532fTammo Spalink @SmallTest 813e00dd1e5a37bed0de964b353d47a4bd7cdff532fTammo Spalink public void testUserDataHeaderWithEightCharMsg() throws Exception { 814e00dd1e5a37bed0de964b353d47a4bd7cdff532fTammo Spalink BearerData bearerData = new BearerData(); 815e00dd1e5a37bed0de964b353d47a4bd7cdff532fTammo Spalink bearerData.messageType = BearerData.MESSAGE_TYPE_DELIVER; 816e00dd1e5a37bed0de964b353d47a4bd7cdff532fTammo Spalink bearerData.messageId = 55; 817e00dd1e5a37bed0de964b353d47a4bd7cdff532fTammo Spalink SmsHeader.ConcatRef concatRef = new SmsHeader.ConcatRef(); 818e00dd1e5a37bed0de964b353d47a4bd7cdff532fTammo Spalink concatRef.refNumber = 0xEE; 819e00dd1e5a37bed0de964b353d47a4bd7cdff532fTammo Spalink concatRef.msgCount = 2; 820e00dd1e5a37bed0de964b353d47a4bd7cdff532fTammo Spalink concatRef.seqNumber = 2; 821e00dd1e5a37bed0de964b353d47a4bd7cdff532fTammo Spalink concatRef.isEightBits = true; 822e00dd1e5a37bed0de964b353d47a4bd7cdff532fTammo Spalink SmsHeader smsHeader = new SmsHeader(); 823e00dd1e5a37bed0de964b353d47a4bd7cdff532fTammo Spalink smsHeader.concatRef = concatRef; 824e00dd1e5a37bed0de964b353d47a4bd7cdff532fTammo Spalink UserData userData = new UserData(); 825e00dd1e5a37bed0de964b353d47a4bd7cdff532fTammo Spalink userData.payloadStr = "01234567"; 826e00dd1e5a37bed0de964b353d47a4bd7cdff532fTammo Spalink userData.userDataHeader = smsHeader; 827e00dd1e5a37bed0de964b353d47a4bd7cdff532fTammo Spalink bearerData.userData = userData; 828e00dd1e5a37bed0de964b353d47a4bd7cdff532fTammo Spalink byte[] encodedSms = BearerData.encode(bearerData); 829e00dd1e5a37bed0de964b353d47a4bd7cdff532fTammo Spalink BearerData revBearerData = BearerData.decode(encodedSms); 830e00dd1e5a37bed0de964b353d47a4bd7cdff532fTammo Spalink assertEquals(userData.payloadStr, revBearerData.userData.payloadStr); 831e00dd1e5a37bed0de964b353d47a4bd7cdff532fTammo Spalink } 83295434bfaee62161ce02012c6424f0c0c8fffccb5Tammo Spalink 83395434bfaee62161ce02012c6424f0c0c8fffccb5Tammo Spalink @SmallTest 83495434bfaee62161ce02012c6424f0c0c8fffccb5Tammo Spalink public void testFragmentText() throws Exception { 835af8e23fe9ebc160ad370d3cb4d960d154316930eTammo Spalink boolean isCdmaPhone = (TelephonyManager.getDefault().getPhoneType() == 836af8e23fe9ebc160ad370d3cb4d960d154316930eTammo Spalink TelephonyManager.PHONE_TYPE_CDMA); 83795434bfaee62161ce02012c6424f0c0c8fffccb5Tammo Spalink // Valid 160 character ASCII text. 83895434bfaee62161ce02012c6424f0c0c8fffccb5Tammo Spalink String text1 = "123456789012345678901234567890123456789012345678901234567890" + 83995434bfaee62161ce02012c6424f0c0c8fffccb5Tammo Spalink "1234567890123456789012345678901234567890123456789012345678901234567890" + 84095434bfaee62161ce02012c6424f0c0c8fffccb5Tammo Spalink "12345678901234567890123456789["; 84195434bfaee62161ce02012c6424f0c0c8fffccb5Tammo Spalink TextEncodingDetails ted = SmsMessage.calculateLength(text1, false); 84295434bfaee62161ce02012c6424f0c0c8fffccb5Tammo Spalink assertEquals(ted.msgCount, 1); 84395434bfaee62161ce02012c6424f0c0c8fffccb5Tammo Spalink assertEquals(ted.codeUnitCount, 160); 84495434bfaee62161ce02012c6424f0c0c8fffccb5Tammo Spalink assertEquals(ted.codeUnitSize, 1); 845af8e23fe9ebc160ad370d3cb4d960d154316930eTammo Spalink if (isCdmaPhone) { 846af8e23fe9ebc160ad370d3cb4d960d154316930eTammo Spalink ArrayList<String> fragments = android.telephony.SmsMessage.fragmentText(text1); 847af8e23fe9ebc160ad370d3cb4d960d154316930eTammo Spalink assertEquals(fragments.size(), 1); 848af8e23fe9ebc160ad370d3cb4d960d154316930eTammo Spalink } 8491e1c24bed274471e40b5bc2af00a56c56b9e8635jsh 8501e1c24bed274471e40b5bc2af00a56c56b9e8635jsh /* 8511e1c24bed274471e40b5bc2af00a56c56b9e8635jsh This is not a valid test: we will never encode a single-segment 8521e1c24bed274471e40b5bc2af00a56c56b9e8635jsh EMS message. Leaving this here, since we may try to support 8531e1c24bed274471e40b5bc2af00a56c56b9e8635jsh this in the future. 8541e1c24bed274471e40b5bc2af00a56c56b9e8635jsh 85595434bfaee62161ce02012c6424f0c0c8fffccb5Tammo Spalink // Valid 160 character GSM text -- the last character is 85695434bfaee62161ce02012c6424f0c0c8fffccb5Tammo Spalink // non-ASCII, and so this will currently generate a singleton 85795434bfaee62161ce02012c6424f0c0c8fffccb5Tammo Spalink // EMS message, which is not necessarily supported by Verizon. 85895434bfaee62161ce02012c6424f0c0c8fffccb5Tammo Spalink String text2 = "123456789012345678901234567890123456789012345678901234567890" + 85995434bfaee62161ce02012c6424f0c0c8fffccb5Tammo Spalink "1234567890123456789012345678901234567890123456789012345678901234567890" + 86095434bfaee62161ce02012c6424f0c0c8fffccb5Tammo Spalink "12345678901234567890123456789\u00a3"; // Trailing pound-currency sign. 86195434bfaee62161ce02012c6424f0c0c8fffccb5Tammo Spalink ted = SmsMessage.calculateLength(text2, false); 86295434bfaee62161ce02012c6424f0c0c8fffccb5Tammo Spalink assertEquals(ted.msgCount, 1); 86395434bfaee62161ce02012c6424f0c0c8fffccb5Tammo Spalink assertEquals(ted.codeUnitCount, 160); 86495434bfaee62161ce02012c6424f0c0c8fffccb5Tammo Spalink assertEquals(ted.codeUnitSize, 1); 865af8e23fe9ebc160ad370d3cb4d960d154316930eTammo Spalink if (isCdmaPhone) { 866af8e23fe9ebc160ad370d3cb4d960d154316930eTammo Spalink ArrayList<String> fragments = android.telephony.SmsMessage.fragmentText(text2); 867af8e23fe9ebc160ad370d3cb4d960d154316930eTammo Spalink assertEquals(fragments.size(), 1); 868af8e23fe9ebc160ad370d3cb4d960d154316930eTammo Spalink } 8691e1c24bed274471e40b5bc2af00a56c56b9e8635jsh */ 8701e1c24bed274471e40b5bc2af00a56c56b9e8635jsh 8711e1c24bed274471e40b5bc2af00a56c56b9e8635jsh // *IF* we supported single-segment EMS, this text would result in a 8721e1c24bed274471e40b5bc2af00a56c56b9e8635jsh // single fragment with 7-bit encoding. But we don't, so this text 8731e1c24bed274471e40b5bc2af00a56c56b9e8635jsh // results in three fragments of 16-bit encoding. 8741e1c24bed274471e40b5bc2af00a56c56b9e8635jsh String text2 = "123456789012345678901234567890123456789012345678901234567890" + 8751e1c24bed274471e40b5bc2af00a56c56b9e8635jsh "1234567890123456789012345678901234567890123456789012345678901234567890" + 8761e1c24bed274471e40b5bc2af00a56c56b9e8635jsh "12345678901234567890123456789\u00a3"; // Trailing pound-currency sign. 8771e1c24bed274471e40b5bc2af00a56c56b9e8635jsh ted = SmsMessage.calculateLength(text2, false); 8781e1c24bed274471e40b5bc2af00a56c56b9e8635jsh assertEquals(3, ted.msgCount); 8791e1c24bed274471e40b5bc2af00a56c56b9e8635jsh assertEquals(160, ted.codeUnitCount); 8801e1c24bed274471e40b5bc2af00a56c56b9e8635jsh assertEquals(3, ted.codeUnitSize); 8811e1c24bed274471e40b5bc2af00a56c56b9e8635jsh if (isCdmaPhone) { 8821e1c24bed274471e40b5bc2af00a56c56b9e8635jsh ArrayList<String> fragments = android.telephony.SmsMessage.fragmentText(text2); 8831e1c24bed274471e40b5bc2af00a56c56b9e8635jsh assertEquals(3, fragments.size()); 8841e1c24bed274471e40b5bc2af00a56c56b9e8635jsh } 8851e1c24bed274471e40b5bc2af00a56c56b9e8635jsh 88695434bfaee62161ce02012c6424f0c0c8fffccb5Tammo Spalink } 88783917db040bd7498ebca3b74f879dc1c9e223d8eTammo Spalink} 888