17640caaf912a7eefacc3e2108c5afd70f7b072a4noda/*
27640caaf912a7eefacc3e2108c5afd70f7b072a4noda * Copyright (C) 2010 The Android Open Source Project
37640caaf912a7eefacc3e2108c5afd70f7b072a4noda *
47640caaf912a7eefacc3e2108c5afd70f7b072a4noda * Licensed under the Apache License, Version 2.0 (the "License");
57640caaf912a7eefacc3e2108c5afd70f7b072a4noda * you may not use this file except in compliance with the License.
67640caaf912a7eefacc3e2108c5afd70f7b072a4noda * You may obtain a copy of the License at
77640caaf912a7eefacc3e2108c5afd70f7b072a4noda *
87640caaf912a7eefacc3e2108c5afd70f7b072a4noda *      http://www.apache.org/licenses/LICENSE-2.0
97640caaf912a7eefacc3e2108c5afd70f7b072a4noda *
107640caaf912a7eefacc3e2108c5afd70f7b072a4noda * Unless required by applicable law or agreed to in writing, software
117640caaf912a7eefacc3e2108c5afd70f7b072a4noda * distributed under the License is distributed on an "AS IS" BASIS,
127640caaf912a7eefacc3e2108c5afd70f7b072a4noda * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
137640caaf912a7eefacc3e2108c5afd70f7b072a4noda * See the License for the specific language governing permissions and
147640caaf912a7eefacc3e2108c5afd70f7b072a4noda * limitations under the License.
157640caaf912a7eefacc3e2108c5afd70f7b072a4noda */
167640caaf912a7eefacc3e2108c5afd70f7b072a4noda
177640caaf912a7eefacc3e2108c5afd70f7b072a4nodapackage com.android.smspush.unitTests;
187640caaf912a7eefacc3e2108c5afd70f7b072a4noda
197640caaf912a7eefacc3e2108c5afd70f7b072a4nodaimport android.app.Activity;
207640caaf912a7eefacc3e2108c5afd70f7b072a4nodaimport android.content.ComponentName;
217640caaf912a7eefacc3e2108c5afd70f7b072a4nodaimport android.content.Context;
227640caaf912a7eefacc3e2108c5afd70f7b072a4nodaimport android.content.Intent;
237640caaf912a7eefacc3e2108c5afd70f7b072a4nodaimport android.content.ServiceConnection;
247640caaf912a7eefacc3e2108c5afd70f7b072a4nodaimport android.os.IBinder;
257640caaf912a7eefacc3e2108c5afd70f7b072a4nodaimport android.os.RemoteException;
267640caaf912a7eefacc3e2108c5afd70f7b072a4nodaimport android.provider.Telephony.Sms.Intents;
277640caaf912a7eefacc3e2108c5afd70f7b072a4nodaimport android.test.ServiceTestCase;
287640caaf912a7eefacc3e2108c5afd70f7b072a4nodaimport android.util.Log;
297640caaf912a7eefacc3e2108c5afd70f7b072a4noda
307640caaf912a7eefacc3e2108c5afd70f7b072a4nodaimport com.android.internal.telephony.IWapPushManager;
317640caaf912a7eefacc3e2108c5afd70f7b072a4nodaimport com.android.internal.telephony.WapPushManagerParams;
327640caaf912a7eefacc3e2108c5afd70f7b072a4nodaimport com.android.internal.telephony.WspTypeDecoder;
335d35fcfc32a2c137282e768a6acd7eac27ac0d91Alex Yakavenkaimport com.android.internal.telephony.uicc.IccUtils;
347640caaf912a7eefacc3e2108c5afd70f7b072a4nodaimport com.android.internal.util.HexDump;
357640caaf912a7eefacc3e2108c5afd70f7b072a4nodaimport com.android.smspush.WapPushManager;
367640caaf912a7eefacc3e2108c5afd70f7b072a4noda
377640caaf912a7eefacc3e2108c5afd70f7b072a4nodaimport java.util.Random;
387640caaf912a7eefacc3e2108c5afd70f7b072a4noda
397640caaf912a7eefacc3e2108c5afd70f7b072a4noda/**
407640caaf912a7eefacc3e2108c5afd70f7b072a4noda * This is a simple framework for a test of a Service.  See {@link android.test.ServiceTestCase
417640caaf912a7eefacc3e2108c5afd70f7b072a4noda * ServiceTestCase} for more information on how to write and extend service tests.
427640caaf912a7eefacc3e2108c5afd70f7b072a4noda *
437640caaf912a7eefacc3e2108c5afd70f7b072a4noda * To run this test, you can type:
447640caaf912a7eefacc3e2108c5afd70f7b072a4noda * adb shell am instrument -w \
457640caaf912a7eefacc3e2108c5afd70f7b072a4noda * -e class com.android.smspush.unitTests.WapPushTest \
467640caaf912a7eefacc3e2108c5afd70f7b072a4noda * com.android.smspush.unitTests/android.test.InstrumentationTestRunner
477640caaf912a7eefacc3e2108c5afd70f7b072a4noda */
487640caaf912a7eefacc3e2108c5afd70f7b072a4nodapublic class WapPushTest extends ServiceTestCase<WapPushManager> {
497640caaf912a7eefacc3e2108c5afd70f7b072a4noda    private static final String LOG_TAG = "WAP PUSH";
507640caaf912a7eefacc3e2108c5afd70f7b072a4noda    private static final boolean LOCAL_LOGV = false;
517640caaf912a7eefacc3e2108c5afd70f7b072a4noda    private static final int TIME_WAIT = 100;
527640caaf912a7eefacc3e2108c5afd70f7b072a4noda
537640caaf912a7eefacc3e2108c5afd70f7b072a4noda    protected int mAppIdValue = 0x8002;
547640caaf912a7eefacc3e2108c5afd70f7b072a4noda    protected String mAppIdName = "x-wap-application:*";
557640caaf912a7eefacc3e2108c5afd70f7b072a4noda    protected int mContentTypeValue = 0x030a;
567640caaf912a7eefacc3e2108c5afd70f7b072a4noda    protected String mContentTypeName = "application/vnd.wap.sic";
577640caaf912a7eefacc3e2108c5afd70f7b072a4noda
587640caaf912a7eefacc3e2108c5afd70f7b072a4noda    protected String mPackageName;
597640caaf912a7eefacc3e2108c5afd70f7b072a4noda    protected String mClassName;
607640caaf912a7eefacc3e2108c5afd70f7b072a4noda
617640caaf912a7eefacc3e2108c5afd70f7b072a4noda    protected byte[] mGsmHeader = {
627640caaf912a7eefacc3e2108c5afd70f7b072a4noda            (byte) 0x00, // sc address
637640caaf912a7eefacc3e2108c5afd70f7b072a4noda            (byte) 0x40, // TP-MTI
647640caaf912a7eefacc3e2108c5afd70f7b072a4noda            (byte) 0x04, // sender address length?
657640caaf912a7eefacc3e2108c5afd70f7b072a4noda            (byte) 0x81, (byte) 0x55, (byte) 0x45, // sender address?
667640caaf912a7eefacc3e2108c5afd70f7b072a4noda            (byte) 0x00, // data schema
677640caaf912a7eefacc3e2108c5afd70f7b072a4noda            (byte) 0x00, // proto ID
687640caaf912a7eefacc3e2108c5afd70f7b072a4noda            (byte) 0x01, (byte) 0x60, (byte) 0x12, (byte) 0x31,
697640caaf912a7eefacc3e2108c5afd70f7b072a4noda            (byte) 0x74, (byte) 0x34, (byte) 0x63 // time stamp
707640caaf912a7eefacc3e2108c5afd70f7b072a4noda    };
717640caaf912a7eefacc3e2108c5afd70f7b072a4noda
727640caaf912a7eefacc3e2108c5afd70f7b072a4noda    protected byte[] mUserDataHeader = {
737640caaf912a7eefacc3e2108c5afd70f7b072a4noda            (byte) 0x07, // UDH len
747640caaf912a7eefacc3e2108c5afd70f7b072a4noda            (byte) 0x06, // header len
757640caaf912a7eefacc3e2108c5afd70f7b072a4noda            (byte) 0x05, // port addressing type?
767640caaf912a7eefacc3e2108c5afd70f7b072a4noda            (byte) 0x00, // dummy
777640caaf912a7eefacc3e2108c5afd70f7b072a4noda            (byte) 0x0B, (byte) 0x84, // dest port
787640caaf912a7eefacc3e2108c5afd70f7b072a4noda            (byte) 0x23, (byte) 0xF0 // src port
797640caaf912a7eefacc3e2108c5afd70f7b072a4noda    };
807640caaf912a7eefacc3e2108c5afd70f7b072a4noda
817640caaf912a7eefacc3e2108c5afd70f7b072a4noda    protected byte[] mWspHeader;
827640caaf912a7eefacc3e2108c5afd70f7b072a4noda
837640caaf912a7eefacc3e2108c5afd70f7b072a4noda    protected byte[] mMessageBody = {
847640caaf912a7eefacc3e2108c5afd70f7b072a4noda            (byte) 0x00,
857640caaf912a7eefacc3e2108c5afd70f7b072a4noda            (byte) 0x01,
867640caaf912a7eefacc3e2108c5afd70f7b072a4noda            (byte) 0x02,
877640caaf912a7eefacc3e2108c5afd70f7b072a4noda            (byte) 0x03,
887640caaf912a7eefacc3e2108c5afd70f7b072a4noda            (byte) 0x04,
897640caaf912a7eefacc3e2108c5afd70f7b072a4noda            (byte) 0x05,
907640caaf912a7eefacc3e2108c5afd70f7b072a4noda            (byte) 0x06,
917640caaf912a7eefacc3e2108c5afd70f7b072a4noda            (byte) 0x07,
927640caaf912a7eefacc3e2108c5afd70f7b072a4noda            (byte) 0x08,
937640caaf912a7eefacc3e2108c5afd70f7b072a4noda            (byte) 0x09,
947640caaf912a7eefacc3e2108c5afd70f7b072a4noda            (byte) 0x0a,
957640caaf912a7eefacc3e2108c5afd70f7b072a4noda            (byte) 0x0b,
967640caaf912a7eefacc3e2108c5afd70f7b072a4noda            (byte) 0x0c,
977640caaf912a7eefacc3e2108c5afd70f7b072a4noda            (byte) 0x0d,
987640caaf912a7eefacc3e2108c5afd70f7b072a4noda            (byte) 0x0e,
997640caaf912a7eefacc3e2108c5afd70f7b072a4noda            (byte) 0x0f
1007640caaf912a7eefacc3e2108c5afd70f7b072a4noda    };
1017640caaf912a7eefacc3e2108c5afd70f7b072a4noda
1027640caaf912a7eefacc3e2108c5afd70f7b072a4noda    protected int mWspHeaderStart;
1037640caaf912a7eefacc3e2108c5afd70f7b072a4noda    protected int mWspHeaderLen;
1047640caaf912a7eefacc3e2108c5afd70f7b072a4noda    protected int mWspContentTypeStart;
1057640caaf912a7eefacc3e2108c5afd70f7b072a4noda
1067640caaf912a7eefacc3e2108c5afd70f7b072a4noda    /**
1077640caaf912a7eefacc3e2108c5afd70f7b072a4noda     * OMA application ID in binary form
1087640caaf912a7eefacc3e2108c5afd70f7b072a4noda     * http://www.openmobilealliance.org/tech/omna/omna-push-app-id.aspx
1097640caaf912a7eefacc3e2108c5afd70f7b072a4noda     */
1107640caaf912a7eefacc3e2108c5afd70f7b072a4noda    final int[] OMA_APPLICATION_ID_VALUES = new int[] {
1117640caaf912a7eefacc3e2108c5afd70f7b072a4noda            0x00,
1127640caaf912a7eefacc3e2108c5afd70f7b072a4noda            0x01,
1137640caaf912a7eefacc3e2108c5afd70f7b072a4noda            0x02,
1147640caaf912a7eefacc3e2108c5afd70f7b072a4noda            0x03,
1157640caaf912a7eefacc3e2108c5afd70f7b072a4noda            0x04,
1167640caaf912a7eefacc3e2108c5afd70f7b072a4noda            0x05,
1177640caaf912a7eefacc3e2108c5afd70f7b072a4noda            0x06,
1187640caaf912a7eefacc3e2108c5afd70f7b072a4noda            0x07,
1197640caaf912a7eefacc3e2108c5afd70f7b072a4noda            0x08,
1207640caaf912a7eefacc3e2108c5afd70f7b072a4noda            0x09,
1217640caaf912a7eefacc3e2108c5afd70f7b072a4noda            0x0A,
1227640caaf912a7eefacc3e2108c5afd70f7b072a4noda            0x8000,
1237640caaf912a7eefacc3e2108c5afd70f7b072a4noda            0x8001,
1247640caaf912a7eefacc3e2108c5afd70f7b072a4noda            0x8002,
1257640caaf912a7eefacc3e2108c5afd70f7b072a4noda            0x8003,
1267640caaf912a7eefacc3e2108c5afd70f7b072a4noda            0x8004,
1277640caaf912a7eefacc3e2108c5afd70f7b072a4noda            0x8005,
1287640caaf912a7eefacc3e2108c5afd70f7b072a4noda            0x8006,
1297640caaf912a7eefacc3e2108c5afd70f7b072a4noda            0x8007,
1307640caaf912a7eefacc3e2108c5afd70f7b072a4noda            0x8008,
1317640caaf912a7eefacc3e2108c5afd70f7b072a4noda            0x8009,
1327640caaf912a7eefacc3e2108c5afd70f7b072a4noda            0x800B,
1337640caaf912a7eefacc3e2108c5afd70f7b072a4noda            0x8010
1347640caaf912a7eefacc3e2108c5afd70f7b072a4noda    };
1357640caaf912a7eefacc3e2108c5afd70f7b072a4noda
1367640caaf912a7eefacc3e2108c5afd70f7b072a4noda    /**
1377640caaf912a7eefacc3e2108c5afd70f7b072a4noda     * OMA application ID in string form
1387640caaf912a7eefacc3e2108c5afd70f7b072a4noda     * http://www.openmobilealliance.org/tech/omna/omna-push-app-id.aspx
1397640caaf912a7eefacc3e2108c5afd70f7b072a4noda     */
1407640caaf912a7eefacc3e2108c5afd70f7b072a4noda    final String[] OMA_APPLICATION_ID_NAMES = new String[] {
1417640caaf912a7eefacc3e2108c5afd70f7b072a4noda            "x-wap-application:*",
1427640caaf912a7eefacc3e2108c5afd70f7b072a4noda            "x-wap-application:push.sia",
1437640caaf912a7eefacc3e2108c5afd70f7b072a4noda            "x-wap-application:wml.ua",
1447640caaf912a7eefacc3e2108c5afd70f7b072a4noda            "x-wap-application:wta.ua",
1457640caaf912a7eefacc3e2108c5afd70f7b072a4noda            "x-wap-application:mms.ua",
1467640caaf912a7eefacc3e2108c5afd70f7b072a4noda            "x-wap-application:push.syncml",
1477640caaf912a7eefacc3e2108c5afd70f7b072a4noda            "x-wap-application:loc.ua",
1487640caaf912a7eefacc3e2108c5afd70f7b072a4noda            "x-wap-application:syncml.dm",
1497640caaf912a7eefacc3e2108c5afd70f7b072a4noda            "x-wap-application:drm.ua",
1507640caaf912a7eefacc3e2108c5afd70f7b072a4noda            "x-wap-application:emn.ua",
1517640caaf912a7eefacc3e2108c5afd70f7b072a4noda            "x-wap-application:wv.ua",
1527640caaf912a7eefacc3e2108c5afd70f7b072a4noda            "x-wap-microsoft:localcontent.ua",
1537640caaf912a7eefacc3e2108c5afd70f7b072a4noda            "x-wap-microsoft:IMclient.ua",
1547640caaf912a7eefacc3e2108c5afd70f7b072a4noda            "x-wap-docomo:imode.mail.ua",
1557640caaf912a7eefacc3e2108c5afd70f7b072a4noda            "x-wap-docomo:imode.mr.ua",
1567640caaf912a7eefacc3e2108c5afd70f7b072a4noda            "x-wap-docomo:imode.mf.ua",
1577640caaf912a7eefacc3e2108c5afd70f7b072a4noda            "x-motorola:location.ua",
1587640caaf912a7eefacc3e2108c5afd70f7b072a4noda            "x-motorola:now.ua",
1597640caaf912a7eefacc3e2108c5afd70f7b072a4noda            "x-motorola:otaprov.ua",
1607640caaf912a7eefacc3e2108c5afd70f7b072a4noda            "x-motorola:browser.ua",
1617640caaf912a7eefacc3e2108c5afd70f7b072a4noda            "x-motorola:splash.ua",
1627640caaf912a7eefacc3e2108c5afd70f7b072a4noda            "x-wap-nai:mvsw.command",
1637640caaf912a7eefacc3e2108c5afd70f7b072a4noda            "x-wap-openwave:iota.ua"
1647640caaf912a7eefacc3e2108c5afd70f7b072a4noda    };
1657640caaf912a7eefacc3e2108c5afd70f7b072a4noda
1667640caaf912a7eefacc3e2108c5afd70f7b072a4noda    /**
1677640caaf912a7eefacc3e2108c5afd70f7b072a4noda     * OMA content type in binary form
1687640caaf912a7eefacc3e2108c5afd70f7b072a4noda     * http://www.openmobilealliance.org/tech/omna/omna-wsp-content-type.aspx
1697640caaf912a7eefacc3e2108c5afd70f7b072a4noda     */
1707640caaf912a7eefacc3e2108c5afd70f7b072a4noda    final int[] OMA_CONTENT_TYPE_VALUES = new int[] {
1717640caaf912a7eefacc3e2108c5afd70f7b072a4noda            0x00,
1727640caaf912a7eefacc3e2108c5afd70f7b072a4noda            0x01,
1737640caaf912a7eefacc3e2108c5afd70f7b072a4noda            0x02,
1747640caaf912a7eefacc3e2108c5afd70f7b072a4noda            0x03,
1757640caaf912a7eefacc3e2108c5afd70f7b072a4noda            0x04,
1767640caaf912a7eefacc3e2108c5afd70f7b072a4noda            0x05,
1777640caaf912a7eefacc3e2108c5afd70f7b072a4noda            0x06,
1787640caaf912a7eefacc3e2108c5afd70f7b072a4noda            0x07,
1797640caaf912a7eefacc3e2108c5afd70f7b072a4noda            0x08,
1807640caaf912a7eefacc3e2108c5afd70f7b072a4noda            0x09,
1817640caaf912a7eefacc3e2108c5afd70f7b072a4noda            0x0A,
1827640caaf912a7eefacc3e2108c5afd70f7b072a4noda            0x0B,
1837640caaf912a7eefacc3e2108c5afd70f7b072a4noda            0x0C,
1847640caaf912a7eefacc3e2108c5afd70f7b072a4noda            0x0D,
1857640caaf912a7eefacc3e2108c5afd70f7b072a4noda            0x0E,
1867640caaf912a7eefacc3e2108c5afd70f7b072a4noda            0x0F,
1877640caaf912a7eefacc3e2108c5afd70f7b072a4noda            0x10,
1887640caaf912a7eefacc3e2108c5afd70f7b072a4noda            0x11,
1897640caaf912a7eefacc3e2108c5afd70f7b072a4noda            0x12,
1907640caaf912a7eefacc3e2108c5afd70f7b072a4noda            0x13,
1917640caaf912a7eefacc3e2108c5afd70f7b072a4noda            0x14,
1927640caaf912a7eefacc3e2108c5afd70f7b072a4noda            0x15,
1937640caaf912a7eefacc3e2108c5afd70f7b072a4noda            0x16,
1947640caaf912a7eefacc3e2108c5afd70f7b072a4noda            0x17,
1957640caaf912a7eefacc3e2108c5afd70f7b072a4noda            0x18,
1967640caaf912a7eefacc3e2108c5afd70f7b072a4noda            0x19,
1977640caaf912a7eefacc3e2108c5afd70f7b072a4noda            0x1A,
1987640caaf912a7eefacc3e2108c5afd70f7b072a4noda            0x1B,
1997640caaf912a7eefacc3e2108c5afd70f7b072a4noda            0x1C,
2007640caaf912a7eefacc3e2108c5afd70f7b072a4noda            0x1D,
2017640caaf912a7eefacc3e2108c5afd70f7b072a4noda            0x1E,
2027640caaf912a7eefacc3e2108c5afd70f7b072a4noda            0x1F,
2037640caaf912a7eefacc3e2108c5afd70f7b072a4noda            0x20,
2047640caaf912a7eefacc3e2108c5afd70f7b072a4noda            0x21,
2057640caaf912a7eefacc3e2108c5afd70f7b072a4noda            0x22,
2067640caaf912a7eefacc3e2108c5afd70f7b072a4noda            0x23,
2077640caaf912a7eefacc3e2108c5afd70f7b072a4noda            0x24,
2087640caaf912a7eefacc3e2108c5afd70f7b072a4noda            0x25,
2097640caaf912a7eefacc3e2108c5afd70f7b072a4noda            0x26,
2107640caaf912a7eefacc3e2108c5afd70f7b072a4noda            0x27,
2117640caaf912a7eefacc3e2108c5afd70f7b072a4noda            0x28,
2127640caaf912a7eefacc3e2108c5afd70f7b072a4noda            0x29,
2137640caaf912a7eefacc3e2108c5afd70f7b072a4noda            0x2A,
2147640caaf912a7eefacc3e2108c5afd70f7b072a4noda            0x2B,
2157640caaf912a7eefacc3e2108c5afd70f7b072a4noda            0x2C,
2167640caaf912a7eefacc3e2108c5afd70f7b072a4noda            0x2D,
2177640caaf912a7eefacc3e2108c5afd70f7b072a4noda            0x2E,
2187640caaf912a7eefacc3e2108c5afd70f7b072a4noda            0x2F,
2197640caaf912a7eefacc3e2108c5afd70f7b072a4noda            0x30,
2207640caaf912a7eefacc3e2108c5afd70f7b072a4noda            0x31,
2217640caaf912a7eefacc3e2108c5afd70f7b072a4noda            0x32,
2227640caaf912a7eefacc3e2108c5afd70f7b072a4noda            0x33,
2237640caaf912a7eefacc3e2108c5afd70f7b072a4noda            0x34,
2247640caaf912a7eefacc3e2108c5afd70f7b072a4noda            0x35,
2257640caaf912a7eefacc3e2108c5afd70f7b072a4noda            0x36,
2267640caaf912a7eefacc3e2108c5afd70f7b072a4noda            0x37,
2277640caaf912a7eefacc3e2108c5afd70f7b072a4noda            0x38,
2287640caaf912a7eefacc3e2108c5afd70f7b072a4noda            0x39,
2297640caaf912a7eefacc3e2108c5afd70f7b072a4noda            0x3A,
2307640caaf912a7eefacc3e2108c5afd70f7b072a4noda            0x3B,
2317640caaf912a7eefacc3e2108c5afd70f7b072a4noda            0x3C,
2327640caaf912a7eefacc3e2108c5afd70f7b072a4noda            0x3D,
2337640caaf912a7eefacc3e2108c5afd70f7b072a4noda            0x3E,
2347640caaf912a7eefacc3e2108c5afd70f7b072a4noda            0x3F,
2357640caaf912a7eefacc3e2108c5afd70f7b072a4noda            0x40,
2367640caaf912a7eefacc3e2108c5afd70f7b072a4noda            0x41,
2377640caaf912a7eefacc3e2108c5afd70f7b072a4noda            0x42,
2387640caaf912a7eefacc3e2108c5afd70f7b072a4noda            0x43,
2397640caaf912a7eefacc3e2108c5afd70f7b072a4noda            0x44,
2407640caaf912a7eefacc3e2108c5afd70f7b072a4noda            0x45,
2417640caaf912a7eefacc3e2108c5afd70f7b072a4noda            0x46,
2427640caaf912a7eefacc3e2108c5afd70f7b072a4noda            0x47,
2437640caaf912a7eefacc3e2108c5afd70f7b072a4noda            0x48,
2447640caaf912a7eefacc3e2108c5afd70f7b072a4noda            0x49,
2457640caaf912a7eefacc3e2108c5afd70f7b072a4noda            0x4A,
2467640caaf912a7eefacc3e2108c5afd70f7b072a4noda            0x4B,
2477640caaf912a7eefacc3e2108c5afd70f7b072a4noda            0x4C,
2487640caaf912a7eefacc3e2108c5afd70f7b072a4noda            0x4D,
2497640caaf912a7eefacc3e2108c5afd70f7b072a4noda            0x4E,
2507640caaf912a7eefacc3e2108c5afd70f7b072a4noda            0x4F,
2517640caaf912a7eefacc3e2108c5afd70f7b072a4noda            0x50,
2527640caaf912a7eefacc3e2108c5afd70f7b072a4noda            0x51,
2537640caaf912a7eefacc3e2108c5afd70f7b072a4noda            0x52,
2547640caaf912a7eefacc3e2108c5afd70f7b072a4noda            0x53,
2557640caaf912a7eefacc3e2108c5afd70f7b072a4noda            0x54,
2567640caaf912a7eefacc3e2108c5afd70f7b072a4noda//            0x55,
2577640caaf912a7eefacc3e2108c5afd70f7b072a4noda//            0x56,
2587640caaf912a7eefacc3e2108c5afd70f7b072a4noda//            0x57,
2597640caaf912a7eefacc3e2108c5afd70f7b072a4noda//            0x58,
2607640caaf912a7eefacc3e2108c5afd70f7b072a4noda            0x0201,
2617640caaf912a7eefacc3e2108c5afd70f7b072a4noda            0x0202,
2627640caaf912a7eefacc3e2108c5afd70f7b072a4noda            0x0203,
2637640caaf912a7eefacc3e2108c5afd70f7b072a4noda            0x0204,
2647640caaf912a7eefacc3e2108c5afd70f7b072a4noda            0x0205,
2657640caaf912a7eefacc3e2108c5afd70f7b072a4noda            0x0206,
2667640caaf912a7eefacc3e2108c5afd70f7b072a4noda            0x0207,
2677640caaf912a7eefacc3e2108c5afd70f7b072a4noda            0x0208,
2687640caaf912a7eefacc3e2108c5afd70f7b072a4noda            0x0209,
2697640caaf912a7eefacc3e2108c5afd70f7b072a4noda            0x020A,
2707640caaf912a7eefacc3e2108c5afd70f7b072a4noda            0x020B,
2717640caaf912a7eefacc3e2108c5afd70f7b072a4noda            0x020C,
2727640caaf912a7eefacc3e2108c5afd70f7b072a4noda            0x0300,
2737640caaf912a7eefacc3e2108c5afd70f7b072a4noda            0x0301,
2747640caaf912a7eefacc3e2108c5afd70f7b072a4noda            0x0302,
2757640caaf912a7eefacc3e2108c5afd70f7b072a4noda            0x0303,
2767640caaf912a7eefacc3e2108c5afd70f7b072a4noda            0x0304,
2777640caaf912a7eefacc3e2108c5afd70f7b072a4noda            0x0305,
2787640caaf912a7eefacc3e2108c5afd70f7b072a4noda            0x0306,
2797640caaf912a7eefacc3e2108c5afd70f7b072a4noda            0x0307,
2807640caaf912a7eefacc3e2108c5afd70f7b072a4noda            0x0308,
2817640caaf912a7eefacc3e2108c5afd70f7b072a4noda            0x0309,
2827640caaf912a7eefacc3e2108c5afd70f7b072a4noda            0x030A,
2837640caaf912a7eefacc3e2108c5afd70f7b072a4noda            0x030B,
2847640caaf912a7eefacc3e2108c5afd70f7b072a4noda            0x030C,
2857640caaf912a7eefacc3e2108c5afd70f7b072a4noda            0x030D,
2867640caaf912a7eefacc3e2108c5afd70f7b072a4noda            0x030E,
2877640caaf912a7eefacc3e2108c5afd70f7b072a4noda            0x030F,
2887640caaf912a7eefacc3e2108c5afd70f7b072a4noda            0x0310,
2897640caaf912a7eefacc3e2108c5afd70f7b072a4noda            0x0311,
2907640caaf912a7eefacc3e2108c5afd70f7b072a4noda            0x0312,
2917640caaf912a7eefacc3e2108c5afd70f7b072a4noda            0x0313,
2927640caaf912a7eefacc3e2108c5afd70f7b072a4noda            0x0314,
2937640caaf912a7eefacc3e2108c5afd70f7b072a4noda            0x0315,
2947640caaf912a7eefacc3e2108c5afd70f7b072a4noda            0x0316,
2957640caaf912a7eefacc3e2108c5afd70f7b072a4noda            0x0317,
2967640caaf912a7eefacc3e2108c5afd70f7b072a4noda            0x0318,
2977640caaf912a7eefacc3e2108c5afd70f7b072a4noda            0x0319,
2987640caaf912a7eefacc3e2108c5afd70f7b072a4noda            0x031A,
2997640caaf912a7eefacc3e2108c5afd70f7b072a4noda            0x031B
3007640caaf912a7eefacc3e2108c5afd70f7b072a4noda            /*0x031C,
3017640caaf912a7eefacc3e2108c5afd70f7b072a4noda              0x031D*/
3027640caaf912a7eefacc3e2108c5afd70f7b072a4noda    };
3037640caaf912a7eefacc3e2108c5afd70f7b072a4noda
3047640caaf912a7eefacc3e2108c5afd70f7b072a4noda    /**
3057640caaf912a7eefacc3e2108c5afd70f7b072a4noda     * OMA content type in string form
3067640caaf912a7eefacc3e2108c5afd70f7b072a4noda     * http://www.openmobilealliance.org/tech/omna/omna-wsp-content-type.aspx
3077640caaf912a7eefacc3e2108c5afd70f7b072a4noda     */
3087640caaf912a7eefacc3e2108c5afd70f7b072a4noda    final String[] OMA_CONTENT_TYPE_NAMES = new String[] {
3097640caaf912a7eefacc3e2108c5afd70f7b072a4noda            "*/*",
3107640caaf912a7eefacc3e2108c5afd70f7b072a4noda            "text/*",
3117640caaf912a7eefacc3e2108c5afd70f7b072a4noda            "text/html",
3127640caaf912a7eefacc3e2108c5afd70f7b072a4noda            "text/plain",
3137640caaf912a7eefacc3e2108c5afd70f7b072a4noda            "text/x-hdml",
3147640caaf912a7eefacc3e2108c5afd70f7b072a4noda            "text/x-ttml",
3157640caaf912a7eefacc3e2108c5afd70f7b072a4noda            "text/x-vCalendar",
3167640caaf912a7eefacc3e2108c5afd70f7b072a4noda            "text/x-vCard",
3177640caaf912a7eefacc3e2108c5afd70f7b072a4noda            "text/vnd.wap.wml",
3187640caaf912a7eefacc3e2108c5afd70f7b072a4noda            "text/vnd.wap.wmlscript",
3197640caaf912a7eefacc3e2108c5afd70f7b072a4noda            "text/vnd.wap.wta-event",
3207640caaf912a7eefacc3e2108c5afd70f7b072a4noda            "multipart/*",
3217640caaf912a7eefacc3e2108c5afd70f7b072a4noda            "multipart/mixed",
3227640caaf912a7eefacc3e2108c5afd70f7b072a4noda            "multipart/form-data",
3237640caaf912a7eefacc3e2108c5afd70f7b072a4noda            "multipart/byterantes",
3247640caaf912a7eefacc3e2108c5afd70f7b072a4noda            "multipart/alternative",
3257640caaf912a7eefacc3e2108c5afd70f7b072a4noda            "application/*",
3267640caaf912a7eefacc3e2108c5afd70f7b072a4noda            "application/java-vm",
3277640caaf912a7eefacc3e2108c5afd70f7b072a4noda            "application/x-www-form-urlencoded",
3287640caaf912a7eefacc3e2108c5afd70f7b072a4noda            "application/x-hdmlc",
3297640caaf912a7eefacc3e2108c5afd70f7b072a4noda            "application/vnd.wap.wmlc",
3307640caaf912a7eefacc3e2108c5afd70f7b072a4noda            "application/vnd.wap.wmlscriptc",
3317640caaf912a7eefacc3e2108c5afd70f7b072a4noda            "application/vnd.wap.wta-eventc",
3327640caaf912a7eefacc3e2108c5afd70f7b072a4noda            "application/vnd.wap.uaprof",
3337640caaf912a7eefacc3e2108c5afd70f7b072a4noda            "application/vnd.wap.wtls-ca-certificate",
3347640caaf912a7eefacc3e2108c5afd70f7b072a4noda            "application/vnd.wap.wtls-user-certificate",
3357640caaf912a7eefacc3e2108c5afd70f7b072a4noda            "application/x-x509-ca-cert",
3367640caaf912a7eefacc3e2108c5afd70f7b072a4noda            "application/x-x509-user-cert",
3377640caaf912a7eefacc3e2108c5afd70f7b072a4noda            "image/*",
3387640caaf912a7eefacc3e2108c5afd70f7b072a4noda            "image/gif",
3397640caaf912a7eefacc3e2108c5afd70f7b072a4noda            "image/jpeg",
3407640caaf912a7eefacc3e2108c5afd70f7b072a4noda            "image/tiff",
3417640caaf912a7eefacc3e2108c5afd70f7b072a4noda            "image/png",
3427640caaf912a7eefacc3e2108c5afd70f7b072a4noda            "image/vnd.wap.wbmp",
3437640caaf912a7eefacc3e2108c5afd70f7b072a4noda            "application/vnd.wap.multipart.*",
3447640caaf912a7eefacc3e2108c5afd70f7b072a4noda            "application/vnd.wap.multipart.mixed",
3457640caaf912a7eefacc3e2108c5afd70f7b072a4noda            "application/vnd.wap.multipart.form-data",
3467640caaf912a7eefacc3e2108c5afd70f7b072a4noda            "application/vnd.wap.multipart.byteranges",
3477640caaf912a7eefacc3e2108c5afd70f7b072a4noda            "application/vnd.wap.multipart.alternative",
3487640caaf912a7eefacc3e2108c5afd70f7b072a4noda            "application/xml",
3497640caaf912a7eefacc3e2108c5afd70f7b072a4noda            "text/xml",
3507640caaf912a7eefacc3e2108c5afd70f7b072a4noda            "application/vnd.wap.wbxml",
3517640caaf912a7eefacc3e2108c5afd70f7b072a4noda            "application/x-x968-cross-cert",
3527640caaf912a7eefacc3e2108c5afd70f7b072a4noda            "application/x-x968-ca-cert",
3537640caaf912a7eefacc3e2108c5afd70f7b072a4noda            "application/x-x968-user-cert",
3547640caaf912a7eefacc3e2108c5afd70f7b072a4noda            "text/vnd.wap.si",
3557640caaf912a7eefacc3e2108c5afd70f7b072a4noda            "application/vnd.wap.sic",
3567640caaf912a7eefacc3e2108c5afd70f7b072a4noda            "text/vnd.wap.sl",
3577640caaf912a7eefacc3e2108c5afd70f7b072a4noda            "application/vnd.wap.slc",
3587640caaf912a7eefacc3e2108c5afd70f7b072a4noda            "text/vnd.wap.co",
3597640caaf912a7eefacc3e2108c5afd70f7b072a4noda            "application/vnd.wap.coc",
3607640caaf912a7eefacc3e2108c5afd70f7b072a4noda            "application/vnd.wap.multipart.related",
3617640caaf912a7eefacc3e2108c5afd70f7b072a4noda            "application/vnd.wap.sia",
3627640caaf912a7eefacc3e2108c5afd70f7b072a4noda            "text/vnd.wap.connectivity-xml",
3637640caaf912a7eefacc3e2108c5afd70f7b072a4noda            "application/vnd.wap.connectivity-wbxml",
3647640caaf912a7eefacc3e2108c5afd70f7b072a4noda            "application/pkcs7-mime",
3657640caaf912a7eefacc3e2108c5afd70f7b072a4noda            "application/vnd.wap.hashed-certificate",
3667640caaf912a7eefacc3e2108c5afd70f7b072a4noda            "application/vnd.wap.signed-certificate",
3677640caaf912a7eefacc3e2108c5afd70f7b072a4noda            "application/vnd.wap.cert-response",
3687640caaf912a7eefacc3e2108c5afd70f7b072a4noda            "application/xhtml+xml",
3697640caaf912a7eefacc3e2108c5afd70f7b072a4noda            "application/wml+xml",
3707640caaf912a7eefacc3e2108c5afd70f7b072a4noda            "text/css",
3717640caaf912a7eefacc3e2108c5afd70f7b072a4noda            "application/vnd.wap.mms-message",
3727640caaf912a7eefacc3e2108c5afd70f7b072a4noda            "application/vnd.wap.rollover-certificate",
3737640caaf912a7eefacc3e2108c5afd70f7b072a4noda            "application/vnd.wap.locc+wbxml",
3747640caaf912a7eefacc3e2108c5afd70f7b072a4noda            "application/vnd.wap.loc+xml",
3757640caaf912a7eefacc3e2108c5afd70f7b072a4noda            "application/vnd.syncml.dm+wbxml",
3767640caaf912a7eefacc3e2108c5afd70f7b072a4noda            "application/vnd.syncml.dm+xml",
3777640caaf912a7eefacc3e2108c5afd70f7b072a4noda            "application/vnd.syncml.notification",
3787640caaf912a7eefacc3e2108c5afd70f7b072a4noda            "application/vnd.wap.xhtml+xml",
3797640caaf912a7eefacc3e2108c5afd70f7b072a4noda            "application/vnd.wv.csp.cir",
3807640caaf912a7eefacc3e2108c5afd70f7b072a4noda            "application/vnd.oma.dd+xml",
3817640caaf912a7eefacc3e2108c5afd70f7b072a4noda            "application/vnd.oma.drm.message",
3827640caaf912a7eefacc3e2108c5afd70f7b072a4noda            "application/vnd.oma.drm.content",
3837640caaf912a7eefacc3e2108c5afd70f7b072a4noda            "application/vnd.oma.drm.rights+xml",
3847640caaf912a7eefacc3e2108c5afd70f7b072a4noda            "application/vnd.oma.drm.rights+wbxml",
3857640caaf912a7eefacc3e2108c5afd70f7b072a4noda            "application/vnd.wv.csp+xml",
3867640caaf912a7eefacc3e2108c5afd70f7b072a4noda            "application/vnd.wv.csp+wbxml",
3877640caaf912a7eefacc3e2108c5afd70f7b072a4noda            "application/vnd.syncml.ds.notification",
3887640caaf912a7eefacc3e2108c5afd70f7b072a4noda            "audio/*",
3897640caaf912a7eefacc3e2108c5afd70f7b072a4noda            "video/*",
3907640caaf912a7eefacc3e2108c5afd70f7b072a4noda            "application/vnd.oma.dd2+xml",
3917640caaf912a7eefacc3e2108c5afd70f7b072a4noda            "application/mikey",
3927640caaf912a7eefacc3e2108c5afd70f7b072a4noda            "application/vnd.oma.dcd",
3937640caaf912a7eefacc3e2108c5afd70f7b072a4noda            "application/vnd.oma.dcdc",
3947640caaf912a7eefacc3e2108c5afd70f7b072a4noda//            "text/x-vMessage",
3957640caaf912a7eefacc3e2108c5afd70f7b072a4noda//            "application/vnd.omads-email+wbxml",
3967640caaf912a7eefacc3e2108c5afd70f7b072a4noda//            "text/x-vBookmark",
3977640caaf912a7eefacc3e2108c5afd70f7b072a4noda//            "application/vnd.syncml.dm.notification",
3987640caaf912a7eefacc3e2108c5afd70f7b072a4noda            "application/vnd.uplanet.cacheop-wbxml",
3997640caaf912a7eefacc3e2108c5afd70f7b072a4noda            "application/vnd.uplanet.signal",
4007640caaf912a7eefacc3e2108c5afd70f7b072a4noda            "application/vnd.uplanet.alert-wbxml",
4017640caaf912a7eefacc3e2108c5afd70f7b072a4noda            "application/vnd.uplanet.list-wbxml",
4027640caaf912a7eefacc3e2108c5afd70f7b072a4noda            "application/vnd.uplanet.listcmd-wbxml",
4037640caaf912a7eefacc3e2108c5afd70f7b072a4noda            "application/vnd.uplanet.channel-wbxml",
4047640caaf912a7eefacc3e2108c5afd70f7b072a4noda            "application/vnd.uplanet.provisioning-status-uri",
4057640caaf912a7eefacc3e2108c5afd70f7b072a4noda            "x-wap.multipart/vnd.uplanet.header-set",
4067640caaf912a7eefacc3e2108c5afd70f7b072a4noda            "application/vnd.uplanet.bearer-choice-wbxml",
4077640caaf912a7eefacc3e2108c5afd70f7b072a4noda            "application/vnd.phonecom.mmc-wbxml",
4087640caaf912a7eefacc3e2108c5afd70f7b072a4noda            "application/vnd.nokia.syncset+wbxml",
4097640caaf912a7eefacc3e2108c5afd70f7b072a4noda            "image/x-up-wpng",
4107640caaf912a7eefacc3e2108c5afd70f7b072a4noda            "application/iota.mmc-wbxml",
4117640caaf912a7eefacc3e2108c5afd70f7b072a4noda            "application/iota.mmc-xml",
4127640caaf912a7eefacc3e2108c5afd70f7b072a4noda            "application/vnd.syncml+xml",
4137640caaf912a7eefacc3e2108c5afd70f7b072a4noda            "application/vnd.syncml+wbxml",
4147640caaf912a7eefacc3e2108c5afd70f7b072a4noda            "text/vnd.wap.emn+xml",
4157640caaf912a7eefacc3e2108c5afd70f7b072a4noda            "text/calendar",
4167640caaf912a7eefacc3e2108c5afd70f7b072a4noda            "application/vnd.omads-email+xml",
4177640caaf912a7eefacc3e2108c5afd70f7b072a4noda            "application/vnd.omads-file+xml",
4187640caaf912a7eefacc3e2108c5afd70f7b072a4noda            "application/vnd.omads-folder+xml",
4197640caaf912a7eefacc3e2108c5afd70f7b072a4noda            "text/directory;profile=vCard",
4207640caaf912a7eefacc3e2108c5afd70f7b072a4noda            "application/vnd.wap.emn+wbxml",
4217640caaf912a7eefacc3e2108c5afd70f7b072a4noda            "application/vnd.nokia.ipdc-purchase-response",
4227640caaf912a7eefacc3e2108c5afd70f7b072a4noda            "application/vnd.motorola.screen3+xml",
4237640caaf912a7eefacc3e2108c5afd70f7b072a4noda            "application/vnd.motorola.screen3+gzip",
4247640caaf912a7eefacc3e2108c5afd70f7b072a4noda            "application/vnd.cmcc.setting+wbxml",
4257640caaf912a7eefacc3e2108c5afd70f7b072a4noda            "application/vnd.cmcc.bombing+wbxml",
4267640caaf912a7eefacc3e2108c5afd70f7b072a4noda            "application/vnd.docomo.pf",
4277640caaf912a7eefacc3e2108c5afd70f7b072a4noda            "application/vnd.docomo.ub",
4287640caaf912a7eefacc3e2108c5afd70f7b072a4noda            "application/vnd.omaloc-supl-init",
4297640caaf912a7eefacc3e2108c5afd70f7b072a4noda            "application/vnd.oma.group-usage-list+xml",
4307640caaf912a7eefacc3e2108c5afd70f7b072a4noda            "application/oma-directory+xml",
4317640caaf912a7eefacc3e2108c5afd70f7b072a4noda            "application/vnd.docomo.pf2",
4327640caaf912a7eefacc3e2108c5afd70f7b072a4noda            "application/vnd.oma.drm.roap-trigger+wbxml",
4337640caaf912a7eefacc3e2108c5afd70f7b072a4noda            "application/vnd.sbm.mid2",
4347640caaf912a7eefacc3e2108c5afd70f7b072a4noda            "application/vnd.wmf.bootstrap",
4357640caaf912a7eefacc3e2108c5afd70f7b072a4noda            "application/vnc.cmcc.dcd+xml",
4367640caaf912a7eefacc3e2108c5afd70f7b072a4noda            "application/vnd.sbm.cid",
4377640caaf912a7eefacc3e2108c5afd70f7b072a4noda            "application/vnd.oma.bcast.provisioningtrigger",
4387640caaf912a7eefacc3e2108c5afd70f7b072a4noda            /*"application/vnd.docomo.dm",
4397640caaf912a7eefacc3e2108c5afd70f7b072a4noda              "application/vnd.oma.scidm.messages+xml"*/
4407640caaf912a7eefacc3e2108c5afd70f7b072a4noda    };
4417640caaf912a7eefacc3e2108c5afd70f7b072a4noda
4427640caaf912a7eefacc3e2108c5afd70f7b072a4noda    private IDataVerify mIVerify = null;
4437640caaf912a7eefacc3e2108c5afd70f7b072a4noda
4447640caaf912a7eefacc3e2108c5afd70f7b072a4noda    ServiceConnection mConn = new ServiceConnection() {
4457640caaf912a7eefacc3e2108c5afd70f7b072a4noda            public void onServiceConnected(ComponentName name, IBinder service) {
4467640caaf912a7eefacc3e2108c5afd70f7b072a4noda                Log.v(LOG_TAG, "data verify interface connected.");
4477640caaf912a7eefacc3e2108c5afd70f7b072a4noda                mIVerify = IDataVerify.Stub.asInterface(service);
4487640caaf912a7eefacc3e2108c5afd70f7b072a4noda            }
4497640caaf912a7eefacc3e2108c5afd70f7b072a4noda            public void onServiceDisconnected(ComponentName name) {
4507640caaf912a7eefacc3e2108c5afd70f7b072a4noda            }
4517640caaf912a7eefacc3e2108c5afd70f7b072a4noda        };
4527640caaf912a7eefacc3e2108c5afd70f7b072a4noda
4537640caaf912a7eefacc3e2108c5afd70f7b072a4noda    /**
4547640caaf912a7eefacc3e2108c5afd70f7b072a4noda     * Main WapPushManager test module constructor
4557640caaf912a7eefacc3e2108c5afd70f7b072a4noda     */
4567640caaf912a7eefacc3e2108c5afd70f7b072a4noda    public WapPushTest() {
4577640caaf912a7eefacc3e2108c5afd70f7b072a4noda        super(WapPushManager.class);
4587640caaf912a7eefacc3e2108c5afd70f7b072a4noda        mClassName = this.getClass().getName();
4597640caaf912a7eefacc3e2108c5afd70f7b072a4noda        mPackageName = this.getClass().getPackage().getName();
4607640caaf912a7eefacc3e2108c5afd70f7b072a4noda    }
4617640caaf912a7eefacc3e2108c5afd70f7b072a4noda
4627640caaf912a7eefacc3e2108c5afd70f7b072a4noda    /**
4637640caaf912a7eefacc3e2108c5afd70f7b072a4noda     * Initialize the verifier
4647640caaf912a7eefacc3e2108c5afd70f7b072a4noda     */
4657640caaf912a7eefacc3e2108c5afd70f7b072a4noda    @Override
4667640caaf912a7eefacc3e2108c5afd70f7b072a4noda    public void setUp() {
4677640caaf912a7eefacc3e2108c5afd70f7b072a4noda        try {
4687640caaf912a7eefacc3e2108c5afd70f7b072a4noda            super.setUp();
4697640caaf912a7eefacc3e2108c5afd70f7b072a4noda            // get verifier
4707640caaf912a7eefacc3e2108c5afd70f7b072a4noda            getContext().bindService(new Intent(IDataVerify.class.getName()),
4717640caaf912a7eefacc3e2108c5afd70f7b072a4noda                    mConn, Context.BIND_AUTO_CREATE);
4727640caaf912a7eefacc3e2108c5afd70f7b072a4noda        } catch (Exception e) {
4737640caaf912a7eefacc3e2108c5afd70f7b072a4noda            Log.w(LOG_TAG, "super exception");
4747640caaf912a7eefacc3e2108c5afd70f7b072a4noda        }
4757640caaf912a7eefacc3e2108c5afd70f7b072a4noda        // Log.d(LOG_TAG, "test setup");
4767640caaf912a7eefacc3e2108c5afd70f7b072a4noda    }
4777640caaf912a7eefacc3e2108c5afd70f7b072a4noda
4787640caaf912a7eefacc3e2108c5afd70f7b072a4noda    private IWapPushManager mWapPush = null;
4797640caaf912a7eefacc3e2108c5afd70f7b072a4noda    IWapPushManager getInterface() {
4807640caaf912a7eefacc3e2108c5afd70f7b072a4noda        if (mWapPush != null) return mWapPush;
4817640caaf912a7eefacc3e2108c5afd70f7b072a4noda        Intent startIntent = new Intent();
4827640caaf912a7eefacc3e2108c5afd70f7b072a4noda        startIntent.setClass(getContext(), WapPushManager.class);
4837640caaf912a7eefacc3e2108c5afd70f7b072a4noda        IBinder service = bindService(startIntent);
4847640caaf912a7eefacc3e2108c5afd70f7b072a4noda
4857640caaf912a7eefacc3e2108c5afd70f7b072a4noda        mWapPush = IWapPushManager.Stub.asInterface(service);
4867640caaf912a7eefacc3e2108c5afd70f7b072a4noda        return mWapPush;
4877640caaf912a7eefacc3e2108c5afd70f7b072a4noda    }
4887640caaf912a7eefacc3e2108c5afd70f7b072a4noda
4897640caaf912a7eefacc3e2108c5afd70f7b072a4noda    /*
4907640caaf912a7eefacc3e2108c5afd70f7b072a4noda     * All methods need to start with 'test'.
4917640caaf912a7eefacc3e2108c5afd70f7b072a4noda     * Use various assert methods to pass/fail the test case.
4927640caaf912a7eefacc3e2108c5afd70f7b072a4noda     */
4937640caaf912a7eefacc3e2108c5afd70f7b072a4noda    protected void utAddPackage(boolean need_sig, boolean more_proc) {
4947640caaf912a7eefacc3e2108c5afd70f7b072a4noda        IWapPushManager iwapman = getInterface();
4957640caaf912a7eefacc3e2108c5afd70f7b072a4noda
4967640caaf912a7eefacc3e2108c5afd70f7b072a4noda        // insert new data
4977640caaf912a7eefacc3e2108c5afd70f7b072a4noda        try {
4987640caaf912a7eefacc3e2108c5afd70f7b072a4noda            assertTrue(iwapman.addPackage(
4997640caaf912a7eefacc3e2108c5afd70f7b072a4noda                    Integer.toString(mAppIdValue),
5007640caaf912a7eefacc3e2108c5afd70f7b072a4noda                    Integer.toString(mContentTypeValue),
5017640caaf912a7eefacc3e2108c5afd70f7b072a4noda                    mPackageName, mClassName,
5027640caaf912a7eefacc3e2108c5afd70f7b072a4noda                    WapPushManagerParams.APP_TYPE_SERVICE, need_sig, more_proc));
5037640caaf912a7eefacc3e2108c5afd70f7b072a4noda        } catch (RemoteException e) {
5047640caaf912a7eefacc3e2108c5afd70f7b072a4noda            assertTrue(false);
5057640caaf912a7eefacc3e2108c5afd70f7b072a4noda        }
5067640caaf912a7eefacc3e2108c5afd70f7b072a4noda
5077640caaf912a7eefacc3e2108c5afd70f7b072a4noda        // verify the data
5087640caaf912a7eefacc3e2108c5afd70f7b072a4noda        WapPushManager wpman = getService();
5097640caaf912a7eefacc3e2108c5afd70f7b072a4noda        assertTrue(wpman.verifyData(Integer.toString(mAppIdValue),
5107640caaf912a7eefacc3e2108c5afd70f7b072a4noda                Integer.toString(mContentTypeValue),
5117640caaf912a7eefacc3e2108c5afd70f7b072a4noda                mPackageName, mClassName,
5127640caaf912a7eefacc3e2108c5afd70f7b072a4noda                WapPushManagerParams.APP_TYPE_SERVICE, need_sig, more_proc));
5137640caaf912a7eefacc3e2108c5afd70f7b072a4noda    }
5147640caaf912a7eefacc3e2108c5afd70f7b072a4noda
5157640caaf912a7eefacc3e2108c5afd70f7b072a4noda    /**
5167640caaf912a7eefacc3e2108c5afd70f7b072a4noda     * Add package test
5177640caaf912a7eefacc3e2108c5afd70f7b072a4noda     */
5187640caaf912a7eefacc3e2108c5afd70f7b072a4noda    public void testAddPackage1() {
5197640caaf912a7eefacc3e2108c5afd70f7b072a4noda        int originalAppIdValue = mAppIdValue;
5207640caaf912a7eefacc3e2108c5afd70f7b072a4noda        int originalContentTypeValue  = mContentTypeValue;
5217640caaf912a7eefacc3e2108c5afd70f7b072a4noda
5227640caaf912a7eefacc3e2108c5afd70f7b072a4noda        utAddPackage(true, true);
5237640caaf912a7eefacc3e2108c5afd70f7b072a4noda        mAppIdValue += 10;
5247640caaf912a7eefacc3e2108c5afd70f7b072a4noda        utAddPackage(true, false);
5257640caaf912a7eefacc3e2108c5afd70f7b072a4noda        mContentTypeValue += 20;
5267640caaf912a7eefacc3e2108c5afd70f7b072a4noda        utAddPackage(false, true);
5277640caaf912a7eefacc3e2108c5afd70f7b072a4noda        mContentTypeValue += 20;
5287640caaf912a7eefacc3e2108c5afd70f7b072a4noda        utAddPackage(false, false);
5297640caaf912a7eefacc3e2108c5afd70f7b072a4noda
5307640caaf912a7eefacc3e2108c5afd70f7b072a4noda        mAppIdValue = originalAppIdValue;
5317640caaf912a7eefacc3e2108c5afd70f7b072a4noda        mContentTypeValue = originalContentTypeValue;
5327640caaf912a7eefacc3e2108c5afd70f7b072a4noda
5337640caaf912a7eefacc3e2108c5afd70f7b072a4noda        // clean up data
5347640caaf912a7eefacc3e2108c5afd70f7b072a4noda        try {
5357640caaf912a7eefacc3e2108c5afd70f7b072a4noda            IWapPushManager iwapman = getInterface();
5367640caaf912a7eefacc3e2108c5afd70f7b072a4noda            iwapman.deletePackage(Integer.toString(mAppIdValue),
5377640caaf912a7eefacc3e2108c5afd70f7b072a4noda                    Integer.toString(mContentTypeValue), mPackageName, mClassName);
5387640caaf912a7eefacc3e2108c5afd70f7b072a4noda            mAppIdValue += 10;
5397640caaf912a7eefacc3e2108c5afd70f7b072a4noda            iwapman.deletePackage(Integer.toString(mAppIdValue),
5407640caaf912a7eefacc3e2108c5afd70f7b072a4noda                    Integer.toString(mContentTypeValue), mPackageName, mClassName);
5417640caaf912a7eefacc3e2108c5afd70f7b072a4noda            mContentTypeValue += 20;
5427640caaf912a7eefacc3e2108c5afd70f7b072a4noda            iwapman.deletePackage(Integer.toString(mAppIdValue),
5437640caaf912a7eefacc3e2108c5afd70f7b072a4noda                    Integer.toString(mContentTypeValue), mPackageName, mClassName);
5447640caaf912a7eefacc3e2108c5afd70f7b072a4noda            mContentTypeValue += 20;
5457640caaf912a7eefacc3e2108c5afd70f7b072a4noda            iwapman.deletePackage(Integer.toString(mAppIdValue),
5467640caaf912a7eefacc3e2108c5afd70f7b072a4noda                    Integer.toString(mContentTypeValue), mPackageName, mClassName);
5477640caaf912a7eefacc3e2108c5afd70f7b072a4noda        } catch (RemoteException e) {
5487640caaf912a7eefacc3e2108c5afd70f7b072a4noda            assertTrue(false);
5497640caaf912a7eefacc3e2108c5afd70f7b072a4noda        }
5507640caaf912a7eefacc3e2108c5afd70f7b072a4noda        mAppIdValue = originalAppIdValue;
5517640caaf912a7eefacc3e2108c5afd70f7b072a4noda        mContentTypeValue = originalContentTypeValue;
5527640caaf912a7eefacc3e2108c5afd70f7b072a4noda    }
5537640caaf912a7eefacc3e2108c5afd70f7b072a4noda
5547640caaf912a7eefacc3e2108c5afd70f7b072a4noda    /**
555790ac852b365ab77a895da9b48f925caf8fde729Tom Taylor     * Add sqlite injection test
556790ac852b365ab77a895da9b48f925caf8fde729Tom Taylor     */
557790ac852b365ab77a895da9b48f925caf8fde729Tom Taylor    public void testAddPackage0() {
558790ac852b365ab77a895da9b48f925caf8fde729Tom Taylor        String inject = "' union select 0,'com.android.settings','com.android.settings.Settings',0,0,0--";
559790ac852b365ab77a895da9b48f925caf8fde729Tom Taylor
560790ac852b365ab77a895da9b48f925caf8fde729Tom Taylor        // insert new data
561790ac852b365ab77a895da9b48f925caf8fde729Tom Taylor        IWapPushManager iwapman = getInterface();
562790ac852b365ab77a895da9b48f925caf8fde729Tom Taylor        try {
563790ac852b365ab77a895da9b48f925caf8fde729Tom Taylor            assertFalse(iwapman.addPackage(
564790ac852b365ab77a895da9b48f925caf8fde729Tom Taylor                    inject,
565790ac852b365ab77a895da9b48f925caf8fde729Tom Taylor                    Integer.toString(mContentTypeValue),
566790ac852b365ab77a895da9b48f925caf8fde729Tom Taylor                    mPackageName, mClassName,
567790ac852b365ab77a895da9b48f925caf8fde729Tom Taylor                    WapPushManagerParams.APP_TYPE_SERVICE, true, true));
568790ac852b365ab77a895da9b48f925caf8fde729Tom Taylor        } catch (RemoteException e) {
569790ac852b365ab77a895da9b48f925caf8fde729Tom Taylor            assertTrue(false);
570790ac852b365ab77a895da9b48f925caf8fde729Tom Taylor        }
571790ac852b365ab77a895da9b48f925caf8fde729Tom Taylor    }
572790ac852b365ab77a895da9b48f925caf8fde729Tom Taylor
573790ac852b365ab77a895da9b48f925caf8fde729Tom Taylor    /**
5747640caaf912a7eefacc3e2108c5afd70f7b072a4noda     * Add duprecated package test.
5757640caaf912a7eefacc3e2108c5afd70f7b072a4noda     */
5767640caaf912a7eefacc3e2108c5afd70f7b072a4noda    public void testAddPackage2() {
5777640caaf912a7eefacc3e2108c5afd70f7b072a4noda        try {
5787640caaf912a7eefacc3e2108c5afd70f7b072a4noda            IWapPushManager iwapman = getInterface();
5797640caaf912a7eefacc3e2108c5afd70f7b072a4noda
5807640caaf912a7eefacc3e2108c5afd70f7b072a4noda            // set up data
5817640caaf912a7eefacc3e2108c5afd70f7b072a4noda            iwapman.addPackage(Integer.toString(mAppIdValue),
5827640caaf912a7eefacc3e2108c5afd70f7b072a4noda                    Integer.toString(mContentTypeValue), mPackageName, mClassName, 0,
5837640caaf912a7eefacc3e2108c5afd70f7b072a4noda                    false, false);
5847640caaf912a7eefacc3e2108c5afd70f7b072a4noda            iwapman.addPackage(Integer.toString(mAppIdValue + 10),
5857640caaf912a7eefacc3e2108c5afd70f7b072a4noda                    Integer.toString(mContentTypeValue), mPackageName, mClassName, 0,
5867640caaf912a7eefacc3e2108c5afd70f7b072a4noda                    false, false);
5877640caaf912a7eefacc3e2108c5afd70f7b072a4noda            iwapman.addPackage(Integer.toString(mAppIdValue),
5887640caaf912a7eefacc3e2108c5afd70f7b072a4noda                    Integer.toString(mContentTypeValue + 10), mPackageName, mClassName, 0,
5897640caaf912a7eefacc3e2108c5afd70f7b072a4noda                    false, false);
5907640caaf912a7eefacc3e2108c5afd70f7b072a4noda
5917640caaf912a7eefacc3e2108c5afd70f7b072a4noda            assertFalse(iwapman.addPackage(Integer.toString(mAppIdValue),
5927640caaf912a7eefacc3e2108c5afd70f7b072a4noda                    Integer.toString(mContentTypeValue), mPackageName, mClassName, 0,
5937640caaf912a7eefacc3e2108c5afd70f7b072a4noda                    false, false));
5947640caaf912a7eefacc3e2108c5afd70f7b072a4noda            assertFalse(iwapman.addPackage(Integer.toString(mAppIdValue + 10),
5957640caaf912a7eefacc3e2108c5afd70f7b072a4noda                    Integer.toString(mContentTypeValue), mPackageName, mClassName, 0,
5967640caaf912a7eefacc3e2108c5afd70f7b072a4noda                    false, false));
5977640caaf912a7eefacc3e2108c5afd70f7b072a4noda            assertFalse(iwapman.addPackage(Integer.toString(mAppIdValue),
5987640caaf912a7eefacc3e2108c5afd70f7b072a4noda                    Integer.toString(mContentTypeValue + 10), mPackageName, mClassName, 0,
5997640caaf912a7eefacc3e2108c5afd70f7b072a4noda                    false, false));
6007640caaf912a7eefacc3e2108c5afd70f7b072a4noda
6017640caaf912a7eefacc3e2108c5afd70f7b072a4noda            // clean up data
6027640caaf912a7eefacc3e2108c5afd70f7b072a4noda            iwapman.deletePackage(Integer.toString(mAppIdValue),
6037640caaf912a7eefacc3e2108c5afd70f7b072a4noda                    Integer.toString(mContentTypeValue), mPackageName, mClassName);
6047640caaf912a7eefacc3e2108c5afd70f7b072a4noda            iwapman.deletePackage(Integer.toString(mAppIdValue + 10),
6057640caaf912a7eefacc3e2108c5afd70f7b072a4noda                    Integer.toString(mContentTypeValue), mPackageName, mClassName);
6067640caaf912a7eefacc3e2108c5afd70f7b072a4noda            iwapman.deletePackage(Integer.toString(mAppIdValue),
6077640caaf912a7eefacc3e2108c5afd70f7b072a4noda                    Integer.toString(mContentTypeValue + 10), mPackageName, mClassName);
6087640caaf912a7eefacc3e2108c5afd70f7b072a4noda        } catch (RemoteException e) {
6097640caaf912a7eefacc3e2108c5afd70f7b072a4noda            assertTrue(false);
6107640caaf912a7eefacc3e2108c5afd70f7b072a4noda        }
6117640caaf912a7eefacc3e2108c5afd70f7b072a4noda    }
6127640caaf912a7eefacc3e2108c5afd70f7b072a4noda
6137640caaf912a7eefacc3e2108c5afd70f7b072a4noda    protected void utUpdatePackage(boolean need_sig, boolean more_proc) {
6147640caaf912a7eefacc3e2108c5afd70f7b072a4noda        IWapPushManager iwapman = getInterface();
6157640caaf912a7eefacc3e2108c5afd70f7b072a4noda
6167640caaf912a7eefacc3e2108c5afd70f7b072a4noda        // insert new data
6177640caaf912a7eefacc3e2108c5afd70f7b072a4noda        try {
6187640caaf912a7eefacc3e2108c5afd70f7b072a4noda            assertTrue(iwapman.updatePackage(
6197640caaf912a7eefacc3e2108c5afd70f7b072a4noda                    Integer.toString(mAppIdValue),
6207640caaf912a7eefacc3e2108c5afd70f7b072a4noda                    Integer.toString(mContentTypeValue),
6217640caaf912a7eefacc3e2108c5afd70f7b072a4noda                    mPackageName, mClassName,
6227640caaf912a7eefacc3e2108c5afd70f7b072a4noda                    WapPushManagerParams.APP_TYPE_SERVICE, need_sig, more_proc));
6237640caaf912a7eefacc3e2108c5afd70f7b072a4noda        } catch (RemoteException e) {
6247640caaf912a7eefacc3e2108c5afd70f7b072a4noda            assertTrue(false);
6257640caaf912a7eefacc3e2108c5afd70f7b072a4noda        }
6267640caaf912a7eefacc3e2108c5afd70f7b072a4noda
6277640caaf912a7eefacc3e2108c5afd70f7b072a4noda        // verify the data
6287640caaf912a7eefacc3e2108c5afd70f7b072a4noda        WapPushManager wpman = getService();
6297640caaf912a7eefacc3e2108c5afd70f7b072a4noda        assertTrue(wpman.verifyData(
6307640caaf912a7eefacc3e2108c5afd70f7b072a4noda                Integer.toString(mAppIdValue),
6317640caaf912a7eefacc3e2108c5afd70f7b072a4noda                Integer.toString(mContentTypeValue),
6327640caaf912a7eefacc3e2108c5afd70f7b072a4noda                mPackageName, mClassName,
6337640caaf912a7eefacc3e2108c5afd70f7b072a4noda                WapPushManagerParams.APP_TYPE_SERVICE, need_sig, more_proc));
6347640caaf912a7eefacc3e2108c5afd70f7b072a4noda    }
6357640caaf912a7eefacc3e2108c5afd70f7b072a4noda
6367640caaf912a7eefacc3e2108c5afd70f7b072a4noda    /**
6377640caaf912a7eefacc3e2108c5afd70f7b072a4noda     * Updating package test
6387640caaf912a7eefacc3e2108c5afd70f7b072a4noda     */
6397640caaf912a7eefacc3e2108c5afd70f7b072a4noda    public void testUpdatePackage1() {
6407640caaf912a7eefacc3e2108c5afd70f7b072a4noda        int originalAppIdValue = mAppIdValue;
6417640caaf912a7eefacc3e2108c5afd70f7b072a4noda        int originalContentTypeValue  = mContentTypeValue;
6427640caaf912a7eefacc3e2108c5afd70f7b072a4noda
6437640caaf912a7eefacc3e2108c5afd70f7b072a4noda        // set up data
6447640caaf912a7eefacc3e2108c5afd70f7b072a4noda        try {
6457640caaf912a7eefacc3e2108c5afd70f7b072a4noda            IWapPushManager iwapman = getInterface();
6467640caaf912a7eefacc3e2108c5afd70f7b072a4noda
6477640caaf912a7eefacc3e2108c5afd70f7b072a4noda            iwapman.addPackage(Integer.toString(mAppIdValue),
6487640caaf912a7eefacc3e2108c5afd70f7b072a4noda                    Integer.toString(mContentTypeValue), mPackageName, mClassName,
6497640caaf912a7eefacc3e2108c5afd70f7b072a4noda                    0, false, false);
6507640caaf912a7eefacc3e2108c5afd70f7b072a4noda            mAppIdValue += 10;
6517640caaf912a7eefacc3e2108c5afd70f7b072a4noda            iwapman.addPackage(Integer.toString(mAppIdValue),
6527640caaf912a7eefacc3e2108c5afd70f7b072a4noda                    Integer.toString(mContentTypeValue), mPackageName, mClassName,
6537640caaf912a7eefacc3e2108c5afd70f7b072a4noda                    0, false, false);
6547640caaf912a7eefacc3e2108c5afd70f7b072a4noda            mContentTypeValue += 20;
6557640caaf912a7eefacc3e2108c5afd70f7b072a4noda            iwapman.addPackage(Integer.toString(mAppIdValue),
6567640caaf912a7eefacc3e2108c5afd70f7b072a4noda                    Integer.toString(mContentTypeValue), mPackageName, mClassName,
6577640caaf912a7eefacc3e2108c5afd70f7b072a4noda                    0, false, false);
6587640caaf912a7eefacc3e2108c5afd70f7b072a4noda            mContentTypeValue += 20;
6597640caaf912a7eefacc3e2108c5afd70f7b072a4noda            iwapman.addPackage(Integer.toString(mAppIdValue),
6607640caaf912a7eefacc3e2108c5afd70f7b072a4noda                    Integer.toString(mContentTypeValue), mPackageName, mClassName,
6617640caaf912a7eefacc3e2108c5afd70f7b072a4noda                    0, false, false);
6627640caaf912a7eefacc3e2108c5afd70f7b072a4noda        } catch (RemoteException e) {
6637640caaf912a7eefacc3e2108c5afd70f7b072a4noda            assertTrue(false);
6647640caaf912a7eefacc3e2108c5afd70f7b072a4noda        }
6657640caaf912a7eefacc3e2108c5afd70f7b072a4noda
6667640caaf912a7eefacc3e2108c5afd70f7b072a4noda        mAppIdValue = originalAppIdValue;
6677640caaf912a7eefacc3e2108c5afd70f7b072a4noda        mContentTypeValue = originalContentTypeValue;
6687640caaf912a7eefacc3e2108c5afd70f7b072a4noda        utUpdatePackage(false, false);
6697640caaf912a7eefacc3e2108c5afd70f7b072a4noda        mAppIdValue += 10;
6707640caaf912a7eefacc3e2108c5afd70f7b072a4noda        utUpdatePackage(false, true);
6717640caaf912a7eefacc3e2108c5afd70f7b072a4noda        mContentTypeValue += 20;
6727640caaf912a7eefacc3e2108c5afd70f7b072a4noda        utUpdatePackage(true, false);
6737640caaf912a7eefacc3e2108c5afd70f7b072a4noda        mContentTypeValue += 20;
6747640caaf912a7eefacc3e2108c5afd70f7b072a4noda        utUpdatePackage(true, true);
6757640caaf912a7eefacc3e2108c5afd70f7b072a4noda
6767640caaf912a7eefacc3e2108c5afd70f7b072a4noda        mAppIdValue = originalAppIdValue;
6777640caaf912a7eefacc3e2108c5afd70f7b072a4noda        mContentTypeValue = originalContentTypeValue;
6787640caaf912a7eefacc3e2108c5afd70f7b072a4noda
6797640caaf912a7eefacc3e2108c5afd70f7b072a4noda        // clean up data
6807640caaf912a7eefacc3e2108c5afd70f7b072a4noda        try {
6817640caaf912a7eefacc3e2108c5afd70f7b072a4noda            IWapPushManager iwapman = getInterface();
6827640caaf912a7eefacc3e2108c5afd70f7b072a4noda
6837640caaf912a7eefacc3e2108c5afd70f7b072a4noda            iwapman.deletePackage(Integer.toString(mAppIdValue),
6847640caaf912a7eefacc3e2108c5afd70f7b072a4noda                    Integer.toString(mContentTypeValue), mPackageName, mClassName);
6857640caaf912a7eefacc3e2108c5afd70f7b072a4noda            mAppIdValue += 10;
6867640caaf912a7eefacc3e2108c5afd70f7b072a4noda            iwapman.deletePackage(Integer.toString(mAppIdValue),
6877640caaf912a7eefacc3e2108c5afd70f7b072a4noda                    Integer.toString(mContentTypeValue), mPackageName, mClassName);
6887640caaf912a7eefacc3e2108c5afd70f7b072a4noda            mContentTypeValue += 20;
6897640caaf912a7eefacc3e2108c5afd70f7b072a4noda            iwapman.deletePackage(Integer.toString(mAppIdValue),
6907640caaf912a7eefacc3e2108c5afd70f7b072a4noda                    Integer.toString(mContentTypeValue), mPackageName, mClassName);
6917640caaf912a7eefacc3e2108c5afd70f7b072a4noda            mContentTypeValue += 20;
6927640caaf912a7eefacc3e2108c5afd70f7b072a4noda            iwapman.deletePackage(Integer.toString(mAppIdValue),
6937640caaf912a7eefacc3e2108c5afd70f7b072a4noda                    Integer.toString(mContentTypeValue), mPackageName, mClassName);
6947640caaf912a7eefacc3e2108c5afd70f7b072a4noda        } catch (RemoteException e) {
6957640caaf912a7eefacc3e2108c5afd70f7b072a4noda            assertTrue(false);
6967640caaf912a7eefacc3e2108c5afd70f7b072a4noda        }
6977640caaf912a7eefacc3e2108c5afd70f7b072a4noda        mAppIdValue = originalAppIdValue;
6987640caaf912a7eefacc3e2108c5afd70f7b072a4noda        mContentTypeValue = originalContentTypeValue;
6997640caaf912a7eefacc3e2108c5afd70f7b072a4noda    }
7007640caaf912a7eefacc3e2108c5afd70f7b072a4noda
7017640caaf912a7eefacc3e2108c5afd70f7b072a4noda    /**
7027640caaf912a7eefacc3e2108c5afd70f7b072a4noda     * Updating invalid package test
7037640caaf912a7eefacc3e2108c5afd70f7b072a4noda     */
7047640caaf912a7eefacc3e2108c5afd70f7b072a4noda    public void testUpdatePackage2() {
7057640caaf912a7eefacc3e2108c5afd70f7b072a4noda        int originalAppIdValue = mAppIdValue;
7067640caaf912a7eefacc3e2108c5afd70f7b072a4noda        int originalContentTypeValue  = mContentTypeValue;
7077640caaf912a7eefacc3e2108c5afd70f7b072a4noda
7087640caaf912a7eefacc3e2108c5afd70f7b072a4noda        try {
7097640caaf912a7eefacc3e2108c5afd70f7b072a4noda            // set up data
7107640caaf912a7eefacc3e2108c5afd70f7b072a4noda            IWapPushManager iwapman = getInterface();
7117640caaf912a7eefacc3e2108c5afd70f7b072a4noda
7127640caaf912a7eefacc3e2108c5afd70f7b072a4noda            iwapman.addPackage(Integer.toString(mAppIdValue),
7137640caaf912a7eefacc3e2108c5afd70f7b072a4noda                    Integer.toString(mContentTypeValue), mPackageName, mClassName,
7147640caaf912a7eefacc3e2108c5afd70f7b072a4noda                    0, false, false);
7157640caaf912a7eefacc3e2108c5afd70f7b072a4noda            assertFalse(iwapman.updatePackage(
7167640caaf912a7eefacc3e2108c5afd70f7b072a4noda                    Integer.toString(mAppIdValue + 10),
7177640caaf912a7eefacc3e2108c5afd70f7b072a4noda                    Integer.toString(mContentTypeValue),
7187640caaf912a7eefacc3e2108c5afd70f7b072a4noda                    mPackageName, mClassName, 0, false, false));
7197640caaf912a7eefacc3e2108c5afd70f7b072a4noda            assertFalse(iwapman.updatePackage(
7207640caaf912a7eefacc3e2108c5afd70f7b072a4noda                    Integer.toString(mAppIdValue),
7217640caaf912a7eefacc3e2108c5afd70f7b072a4noda                    Integer.toString(mContentTypeValue + 10),
7227640caaf912a7eefacc3e2108c5afd70f7b072a4noda                    mPackageName, mClassName, 0, false, false));
7237640caaf912a7eefacc3e2108c5afd70f7b072a4noda            assertTrue(iwapman.updatePackage(
7247640caaf912a7eefacc3e2108c5afd70f7b072a4noda                    Integer.toString(mAppIdValue),
7257640caaf912a7eefacc3e2108c5afd70f7b072a4noda                    Integer.toString(mContentTypeValue),
7267640caaf912a7eefacc3e2108c5afd70f7b072a4noda                    mPackageName + "dummy_data", mClassName, 0, false, false));
7277640caaf912a7eefacc3e2108c5afd70f7b072a4noda            assertTrue(iwapman.updatePackage(
7287640caaf912a7eefacc3e2108c5afd70f7b072a4noda                    Integer.toString(mAppIdValue),
7297640caaf912a7eefacc3e2108c5afd70f7b072a4noda                    Integer.toString(mContentTypeValue),
7307640caaf912a7eefacc3e2108c5afd70f7b072a4noda                    mPackageName, mClassName + "dummy_data", 0, false, false));
7317640caaf912a7eefacc3e2108c5afd70f7b072a4noda            // clean up data
7327640caaf912a7eefacc3e2108c5afd70f7b072a4noda            iwapman.deletePackage(Integer.toString(mAppIdValue),
7337640caaf912a7eefacc3e2108c5afd70f7b072a4noda                    Integer.toString(mContentTypeValue), mPackageName, mClassName);
7347640caaf912a7eefacc3e2108c5afd70f7b072a4noda            iwapman.deletePackage(Integer.toString(mAppIdValue),
7357640caaf912a7eefacc3e2108c5afd70f7b072a4noda                    Integer.toString(mContentTypeValue), mPackageName,
7367640caaf912a7eefacc3e2108c5afd70f7b072a4noda                    mClassName + "dummy_data");
7377640caaf912a7eefacc3e2108c5afd70f7b072a4noda        } catch (RemoteException e) {
7387640caaf912a7eefacc3e2108c5afd70f7b072a4noda            assertTrue(false);
7397640caaf912a7eefacc3e2108c5afd70f7b072a4noda        }
7407640caaf912a7eefacc3e2108c5afd70f7b072a4noda    }
7417640caaf912a7eefacc3e2108c5afd70f7b072a4noda
7427640caaf912a7eefacc3e2108c5afd70f7b072a4noda    protected void utDeletePackage() {
7437640caaf912a7eefacc3e2108c5afd70f7b072a4noda        IWapPushManager iwapman = getInterface();
7447640caaf912a7eefacc3e2108c5afd70f7b072a4noda
7457640caaf912a7eefacc3e2108c5afd70f7b072a4noda        try {
7467640caaf912a7eefacc3e2108c5afd70f7b072a4noda            assertTrue(iwapman.deletePackage(
7477640caaf912a7eefacc3e2108c5afd70f7b072a4noda                    Integer.toString(mAppIdValue),
7487640caaf912a7eefacc3e2108c5afd70f7b072a4noda                    Integer.toString(mContentTypeValue),
7497640caaf912a7eefacc3e2108c5afd70f7b072a4noda                    mPackageName, mClassName));
7507640caaf912a7eefacc3e2108c5afd70f7b072a4noda        } catch (RemoteException e) {
7517640caaf912a7eefacc3e2108c5afd70f7b072a4noda            assertTrue(false);
7527640caaf912a7eefacc3e2108c5afd70f7b072a4noda        }
7537640caaf912a7eefacc3e2108c5afd70f7b072a4noda
7547640caaf912a7eefacc3e2108c5afd70f7b072a4noda        // verify the data
7557640caaf912a7eefacc3e2108c5afd70f7b072a4noda        WapPushManager wpman = getService();
7567640caaf912a7eefacc3e2108c5afd70f7b072a4noda        assertTrue(!wpman.isDataExist(
7577640caaf912a7eefacc3e2108c5afd70f7b072a4noda                Integer.toString(mAppIdValue),
7587640caaf912a7eefacc3e2108c5afd70f7b072a4noda                Integer.toString(mContentTypeValue),
7597640caaf912a7eefacc3e2108c5afd70f7b072a4noda                mPackageName, mClassName));
7607640caaf912a7eefacc3e2108c5afd70f7b072a4noda    }
7617640caaf912a7eefacc3e2108c5afd70f7b072a4noda
7627640caaf912a7eefacc3e2108c5afd70f7b072a4noda    /**
7637640caaf912a7eefacc3e2108c5afd70f7b072a4noda     * Deleting package test
7647640caaf912a7eefacc3e2108c5afd70f7b072a4noda     */
7657640caaf912a7eefacc3e2108c5afd70f7b072a4noda    public void testDeletePackage1() {
7667640caaf912a7eefacc3e2108c5afd70f7b072a4noda        int originalAppIdValue = mAppIdValue;
7677640caaf912a7eefacc3e2108c5afd70f7b072a4noda        int originalContentTypeValue  = mContentTypeValue;
7687640caaf912a7eefacc3e2108c5afd70f7b072a4noda
7697640caaf912a7eefacc3e2108c5afd70f7b072a4noda        // set up data
7707640caaf912a7eefacc3e2108c5afd70f7b072a4noda        try {
7717640caaf912a7eefacc3e2108c5afd70f7b072a4noda            IWapPushManager iwapman = getInterface();
7727640caaf912a7eefacc3e2108c5afd70f7b072a4noda
7737640caaf912a7eefacc3e2108c5afd70f7b072a4noda            iwapman.addPackage(Integer.toString(mAppIdValue),
7747640caaf912a7eefacc3e2108c5afd70f7b072a4noda                    Integer.toString(mContentTypeValue), mPackageName, mClassName,
7757640caaf912a7eefacc3e2108c5afd70f7b072a4noda                    0, false, false);
7767640caaf912a7eefacc3e2108c5afd70f7b072a4noda            mAppIdValue += 10;
7777640caaf912a7eefacc3e2108c5afd70f7b072a4noda            iwapman.addPackage(Integer.toString(mAppIdValue),
7787640caaf912a7eefacc3e2108c5afd70f7b072a4noda                    Integer.toString(mContentTypeValue), mPackageName, mClassName,
7797640caaf912a7eefacc3e2108c5afd70f7b072a4noda                    0, false, false);
7807640caaf912a7eefacc3e2108c5afd70f7b072a4noda            mContentTypeValue += 20;
7817640caaf912a7eefacc3e2108c5afd70f7b072a4noda            iwapman.addPackage(Integer.toString(mAppIdValue),
7827640caaf912a7eefacc3e2108c5afd70f7b072a4noda                    Integer.toString(mContentTypeValue), mPackageName, mClassName,
7837640caaf912a7eefacc3e2108c5afd70f7b072a4noda                    0, false, false);
7847640caaf912a7eefacc3e2108c5afd70f7b072a4noda            mContentTypeValue += 20;
7857640caaf912a7eefacc3e2108c5afd70f7b072a4noda            iwapman.addPackage(Integer.toString(mAppIdValue),
7867640caaf912a7eefacc3e2108c5afd70f7b072a4noda                    Integer.toString(mContentTypeValue), mPackageName, mClassName,
7877640caaf912a7eefacc3e2108c5afd70f7b072a4noda                    0, false, false);
7887640caaf912a7eefacc3e2108c5afd70f7b072a4noda        } catch (RemoteException e) {
7897640caaf912a7eefacc3e2108c5afd70f7b072a4noda            assertTrue(false);
7907640caaf912a7eefacc3e2108c5afd70f7b072a4noda        }
7917640caaf912a7eefacc3e2108c5afd70f7b072a4noda
7927640caaf912a7eefacc3e2108c5afd70f7b072a4noda        mAppIdValue = originalAppIdValue;
7937640caaf912a7eefacc3e2108c5afd70f7b072a4noda        mContentTypeValue = originalContentTypeValue;
7947640caaf912a7eefacc3e2108c5afd70f7b072a4noda        utDeletePackage();
7957640caaf912a7eefacc3e2108c5afd70f7b072a4noda        mAppIdValue += 10;
7967640caaf912a7eefacc3e2108c5afd70f7b072a4noda        utDeletePackage();
7977640caaf912a7eefacc3e2108c5afd70f7b072a4noda        mContentTypeValue += 20;
7987640caaf912a7eefacc3e2108c5afd70f7b072a4noda        utDeletePackage();
7997640caaf912a7eefacc3e2108c5afd70f7b072a4noda        mContentTypeValue += 20;
8007640caaf912a7eefacc3e2108c5afd70f7b072a4noda        utDeletePackage();
8017640caaf912a7eefacc3e2108c5afd70f7b072a4noda
8027640caaf912a7eefacc3e2108c5afd70f7b072a4noda        mAppIdValue = originalAppIdValue;
8037640caaf912a7eefacc3e2108c5afd70f7b072a4noda        mContentTypeValue = originalContentTypeValue;
8047640caaf912a7eefacc3e2108c5afd70f7b072a4noda    }
8057640caaf912a7eefacc3e2108c5afd70f7b072a4noda
8067640caaf912a7eefacc3e2108c5afd70f7b072a4noda    /**
8077640caaf912a7eefacc3e2108c5afd70f7b072a4noda     * Deleting invalid package test
8087640caaf912a7eefacc3e2108c5afd70f7b072a4noda     */
8097640caaf912a7eefacc3e2108c5afd70f7b072a4noda    public void testDeletePackage2() {
8107640caaf912a7eefacc3e2108c5afd70f7b072a4noda        int originalAppIdValue = mAppIdValue;
8117640caaf912a7eefacc3e2108c5afd70f7b072a4noda        int originalContentTypeValue  = mContentTypeValue;
8127640caaf912a7eefacc3e2108c5afd70f7b072a4noda
8137640caaf912a7eefacc3e2108c5afd70f7b072a4noda        try {
8147640caaf912a7eefacc3e2108c5afd70f7b072a4noda            // set up data
8157640caaf912a7eefacc3e2108c5afd70f7b072a4noda            IWapPushManager iwapman = getInterface();
8167640caaf912a7eefacc3e2108c5afd70f7b072a4noda
8177640caaf912a7eefacc3e2108c5afd70f7b072a4noda            iwapman.addPackage(Integer.toString(mAppIdValue),
8187640caaf912a7eefacc3e2108c5afd70f7b072a4noda                    Integer.toString(mContentTypeValue), mPackageName, mClassName,
8197640caaf912a7eefacc3e2108c5afd70f7b072a4noda                    0, false, false);
8207640caaf912a7eefacc3e2108c5afd70f7b072a4noda
8217640caaf912a7eefacc3e2108c5afd70f7b072a4noda            assertFalse(iwapman.deletePackage(Integer.toString(mAppIdValue + 10),
8227640caaf912a7eefacc3e2108c5afd70f7b072a4noda                    Integer.toString(mContentTypeValue), mPackageName, mClassName));
8237640caaf912a7eefacc3e2108c5afd70f7b072a4noda            assertFalse(iwapman.deletePackage(Integer.toString(mAppIdValue),
8247640caaf912a7eefacc3e2108c5afd70f7b072a4noda                    Integer.toString(mContentTypeValue + 20), mPackageName, mClassName));
8257640caaf912a7eefacc3e2108c5afd70f7b072a4noda            assertFalse(iwapman.deletePackage(Integer.toString(mAppIdValue + 10),
8267640caaf912a7eefacc3e2108c5afd70f7b072a4noda                    Integer.toString(mContentTypeValue + 20), mPackageName, mClassName));
8277640caaf912a7eefacc3e2108c5afd70f7b072a4noda
8287640caaf912a7eefacc3e2108c5afd70f7b072a4noda            iwapman.deletePackage(Integer.toString(mAppIdValue),
8297640caaf912a7eefacc3e2108c5afd70f7b072a4noda                    Integer.toString(mContentTypeValue), mPackageName, mClassName);
8307640caaf912a7eefacc3e2108c5afd70f7b072a4noda
8317640caaf912a7eefacc3e2108c5afd70f7b072a4noda        } catch (RemoteException e) {
8327640caaf912a7eefacc3e2108c5afd70f7b072a4noda            assertTrue(false);
8337640caaf912a7eefacc3e2108c5afd70f7b072a4noda        }
8347640caaf912a7eefacc3e2108c5afd70f7b072a4noda    }
8357640caaf912a7eefacc3e2108c5afd70f7b072a4noda
8367640caaf912a7eefacc3e2108c5afd70f7b072a4noda
8377640caaf912a7eefacc3e2108c5afd70f7b072a4noda    protected int encodeUint32(int uint32Val, byte[] arr, int start) {
8387640caaf912a7eefacc3e2108c5afd70f7b072a4noda        int bit = 1;
8397640caaf912a7eefacc3e2108c5afd70f7b072a4noda        int topbit = 0;
8407640caaf912a7eefacc3e2108c5afd70f7b072a4noda        int encodeLen;
8417640caaf912a7eefacc3e2108c5afd70f7b072a4noda        int tmpVal;
8427640caaf912a7eefacc3e2108c5afd70f7b072a4noda
8437640caaf912a7eefacc3e2108c5afd70f7b072a4noda        assertTrue(uint32Val >= 0);
8447640caaf912a7eefacc3e2108c5afd70f7b072a4noda        for (int i = 0; i < 31; i++) {
8457640caaf912a7eefacc3e2108c5afd70f7b072a4noda            if ((bit & uint32Val) > 0) topbit = i;
8467640caaf912a7eefacc3e2108c5afd70f7b072a4noda            bit = (bit << 1);
8477640caaf912a7eefacc3e2108c5afd70f7b072a4noda        }
8487640caaf912a7eefacc3e2108c5afd70f7b072a4noda        encodeLen = topbit/7 + 1;
8497640caaf912a7eefacc3e2108c5afd70f7b072a4noda        if (arr == null) return encodeLen;
8507640caaf912a7eefacc3e2108c5afd70f7b072a4noda
8517640caaf912a7eefacc3e2108c5afd70f7b072a4noda        //Log.d(LOG_TAG, "uint32Val = " + Integer.toHexString(uint32Val) + ", topbit = "
8527640caaf912a7eefacc3e2108c5afd70f7b072a4noda        //      + topbit + ", encodeLen = " + encodeLen);
8537640caaf912a7eefacc3e2108c5afd70f7b072a4noda
8547640caaf912a7eefacc3e2108c5afd70f7b072a4noda        tmpVal = uint32Val;
8557640caaf912a7eefacc3e2108c5afd70f7b072a4noda        for (int i = encodeLen - 1; i >= 0; i--) {
8567640caaf912a7eefacc3e2108c5afd70f7b072a4noda            long val = 0;
8577640caaf912a7eefacc3e2108c5afd70f7b072a4noda            if (i < encodeLen - 1) val = 0x80;
8587640caaf912a7eefacc3e2108c5afd70f7b072a4noda            val |= tmpVal & 0x7f;
8597640caaf912a7eefacc3e2108c5afd70f7b072a4noda            arr[start + i] = (byte) (val & 0xFF);
8607640caaf912a7eefacc3e2108c5afd70f7b072a4noda            tmpVal = (tmpVal >> 7);
8617640caaf912a7eefacc3e2108c5afd70f7b072a4noda        }
8627640caaf912a7eefacc3e2108c5afd70f7b072a4noda        return encodeLen;
8637640caaf912a7eefacc3e2108c5afd70f7b072a4noda    }
8647640caaf912a7eefacc3e2108c5afd70f7b072a4noda
8657640caaf912a7eefacc3e2108c5afd70f7b072a4noda    protected int encodeShortInt(int sintVal, byte[] arr, int start) {
8667640caaf912a7eefacc3e2108c5afd70f7b072a4noda        int encodeLen = 0;
8677640caaf912a7eefacc3e2108c5afd70f7b072a4noda
8687640caaf912a7eefacc3e2108c5afd70f7b072a4noda        if (sintVal >= 0x80) return encodeLen;
8697640caaf912a7eefacc3e2108c5afd70f7b072a4noda        encodeLen = 1;
8707640caaf912a7eefacc3e2108c5afd70f7b072a4noda        arr[start] = (byte) (sintVal | 0x80);
8717640caaf912a7eefacc3e2108c5afd70f7b072a4noda        return encodeLen;
8727640caaf912a7eefacc3e2108c5afd70f7b072a4noda    }
8737640caaf912a7eefacc3e2108c5afd70f7b072a4noda
8747640caaf912a7eefacc3e2108c5afd70f7b072a4noda
8757640caaf912a7eefacc3e2108c5afd70f7b072a4noda    /**
8767640caaf912a7eefacc3e2108c5afd70f7b072a4noda     * Generate Random WSP header with integer application ID
8777640caaf912a7eefacc3e2108c5afd70f7b072a4noda     */
8787640caaf912a7eefacc3e2108c5afd70f7b072a4noda    protected void createRandomWspHeader(byte[] arr, Random rd, int headerStart,
8797640caaf912a7eefacc3e2108c5afd70f7b072a4noda            boolean noAppId) {
8807640caaf912a7eefacc3e2108c5afd70f7b072a4noda
8817640caaf912a7eefacc3e2108c5afd70f7b072a4noda        boolean appIdAdded = false;
8827640caaf912a7eefacc3e2108c5afd70f7b072a4noda
8837640caaf912a7eefacc3e2108c5afd70f7b072a4noda        Log.d(LOG_TAG, "headerStart = " + headerStart + ", appId = " + mAppIdValue
8847640caaf912a7eefacc3e2108c5afd70f7b072a4noda                + "(" + Integer.toHexString(mAppIdValue) + ")");
8857640caaf912a7eefacc3e2108c5afd70f7b072a4noda        Log.d(LOG_TAG, "random arr length:" + arr.length);
8867640caaf912a7eefacc3e2108c5afd70f7b072a4noda        String typename[] = new String[] { "short int", "long int", "string", "uint32"};
8877640caaf912a7eefacc3e2108c5afd70f7b072a4noda
8887640caaf912a7eefacc3e2108c5afd70f7b072a4noda        while (!appIdAdded) {
8897640caaf912a7eefacc3e2108c5afd70f7b072a4noda            int type;
8907640caaf912a7eefacc3e2108c5afd70f7b072a4noda            int index = headerStart;
8917640caaf912a7eefacc3e2108c5afd70f7b072a4noda            int len = arr.length;
8927640caaf912a7eefacc3e2108c5afd70f7b072a4noda            int i;
8937640caaf912a7eefacc3e2108c5afd70f7b072a4noda            boolean addAppid = false;
8947640caaf912a7eefacc3e2108c5afd70f7b072a4noda            int tmpVal = 0;
8957640caaf912a7eefacc3e2108c5afd70f7b072a4noda            int tmpVal2 = 0;
8967640caaf912a7eefacc3e2108c5afd70f7b072a4noda
8977640caaf912a7eefacc3e2108c5afd70f7b072a4noda            while (true) {
8987640caaf912a7eefacc3e2108c5afd70f7b072a4noda                int add;
8997640caaf912a7eefacc3e2108c5afd70f7b072a4noda
9007640caaf912a7eefacc3e2108c5afd70f7b072a4noda                /*
9017640caaf912a7eefacc3e2108c5afd70f7b072a4noda                 * field name
9027640caaf912a7eefacc3e2108c5afd70f7b072a4noda                 * 0: short int
9037640caaf912a7eefacc3e2108c5afd70f7b072a4noda                 * 1: long int
9047640caaf912a7eefacc3e2108c5afd70f7b072a4noda                 * 2: text
9057640caaf912a7eefacc3e2108c5afd70f7b072a4noda                 * (no uint for param value)
9067640caaf912a7eefacc3e2108c5afd70f7b072a4noda                 */
9077640caaf912a7eefacc3e2108c5afd70f7b072a4noda                type = rd.nextInt(3);
9087640caaf912a7eefacc3e2108c5afd70f7b072a4noda                switch (type) {
9097640caaf912a7eefacc3e2108c5afd70f7b072a4noda                case 0: // header short integer
9107640caaf912a7eefacc3e2108c5afd70f7b072a4noda                    if (index > 100 && !appIdAdded) addAppid = true;
9117640caaf912a7eefacc3e2108c5afd70f7b072a4noda                    add = 1;
9127640caaf912a7eefacc3e2108c5afd70f7b072a4noda                    break;
9137640caaf912a7eefacc3e2108c5afd70f7b072a4noda                case 1: // header long int
9147640caaf912a7eefacc3e2108c5afd70f7b072a4noda                    add = 1 + rd.nextInt(29);
9157640caaf912a7eefacc3e2108c5afd70f7b072a4noda                    break;
9167640caaf912a7eefacc3e2108c5afd70f7b072a4noda                default: // header string
9177640caaf912a7eefacc3e2108c5afd70f7b072a4noda                    add = 2 + rd.nextInt(10);
9187640caaf912a7eefacc3e2108c5afd70f7b072a4noda                    break;
9197640caaf912a7eefacc3e2108c5afd70f7b072a4noda                }
9207640caaf912a7eefacc3e2108c5afd70f7b072a4noda                if (index + add >= len) break;
9217640caaf912a7eefacc3e2108c5afd70f7b072a4noda
9227640caaf912a7eefacc3e2108c5afd70f7b072a4noda                // fill header name
9237640caaf912a7eefacc3e2108c5afd70f7b072a4noda                switch (type) {
9247640caaf912a7eefacc3e2108c5afd70f7b072a4noda                case 0: // header short integer
9257640caaf912a7eefacc3e2108c5afd70f7b072a4noda                    if (!addAppid) {
9267640caaf912a7eefacc3e2108c5afd70f7b072a4noda                        do {
9277640caaf912a7eefacc3e2108c5afd70f7b072a4noda                            arr[index] = (byte) (0x80 | rd.nextInt(128));
9287640caaf912a7eefacc3e2108c5afd70f7b072a4noda                        } while (arr[index] == (byte) 0xaf);
9297640caaf912a7eefacc3e2108c5afd70f7b072a4noda                    } else {
9307640caaf912a7eefacc3e2108c5afd70f7b072a4noda                        Log.d(LOG_TAG, "appId added.");
9317640caaf912a7eefacc3e2108c5afd70f7b072a4noda                        arr[index] = (byte) 0xaf;
9327640caaf912a7eefacc3e2108c5afd70f7b072a4noda                        // if noAppId case, appId fld must be decieved.
9337640caaf912a7eefacc3e2108c5afd70f7b072a4noda                        if (noAppId) arr[index]++;
9347640caaf912a7eefacc3e2108c5afd70f7b072a4noda                    }
9357640caaf912a7eefacc3e2108c5afd70f7b072a4noda                    break;
9367640caaf912a7eefacc3e2108c5afd70f7b072a4noda                case 1: // header long int
9377640caaf912a7eefacc3e2108c5afd70f7b072a4noda                    arr[index] = (byte) (add - 1);
9387640caaf912a7eefacc3e2108c5afd70f7b072a4noda                    tmpVal2 = 0;
9397640caaf912a7eefacc3e2108c5afd70f7b072a4noda                    for (i = 1; i < add; i++) {
9407640caaf912a7eefacc3e2108c5afd70f7b072a4noda                        tmpVal = rd.nextInt(255);
9417640caaf912a7eefacc3e2108c5afd70f7b072a4noda                        tmpVal2 = (tmpVal2 << 8) | tmpVal;
9427640caaf912a7eefacc3e2108c5afd70f7b072a4noda                        arr[index + i] = (byte) tmpVal;
9437640caaf912a7eefacc3e2108c5afd70f7b072a4noda                    }
9447640caaf912a7eefacc3e2108c5afd70f7b072a4noda                    // don't set application id
9457640caaf912a7eefacc3e2108c5afd70f7b072a4noda                    if (tmpVal2 == 0x2f) arr[index + 1]++;
9467640caaf912a7eefacc3e2108c5afd70f7b072a4noda                    break;
9477640caaf912a7eefacc3e2108c5afd70f7b072a4noda                default: // header string
9487640caaf912a7eefacc3e2108c5afd70f7b072a4noda                    for (i = 0; i < add - 1; i++) {
9497640caaf912a7eefacc3e2108c5afd70f7b072a4noda                        tmpVal = rd.nextInt(127);
9507640caaf912a7eefacc3e2108c5afd70f7b072a4noda                        if (tmpVal < 32) tmpVal= (32 + tmpVal);
9517640caaf912a7eefacc3e2108c5afd70f7b072a4noda                        arr[index + i] = (byte) tmpVal;
9527640caaf912a7eefacc3e2108c5afd70f7b072a4noda                    }
9537640caaf912a7eefacc3e2108c5afd70f7b072a4noda                    arr[index + i] = (byte) 0x0;
9547640caaf912a7eefacc3e2108c5afd70f7b072a4noda                    break;
9557640caaf912a7eefacc3e2108c5afd70f7b072a4noda                }
9567640caaf912a7eefacc3e2108c5afd70f7b072a4noda
9577640caaf912a7eefacc3e2108c5afd70f7b072a4noda                if (LOCAL_LOGV) {
9587640caaf912a7eefacc3e2108c5afd70f7b072a4noda                    Log.d(LOG_TAG, "field name index:" + index);
9597640caaf912a7eefacc3e2108c5afd70f7b072a4noda                    Log.d(LOG_TAG, "type:" + typename[type] + ", add:" + add);
9607640caaf912a7eefacc3e2108c5afd70f7b072a4noda                    if (type != 2) {
9617640caaf912a7eefacc3e2108c5afd70f7b072a4noda                        for (i = index; i< index + add; i++) {
9627640caaf912a7eefacc3e2108c5afd70f7b072a4noda                            System.out.print(Integer.toHexString(0xff & arr[i]));
9637640caaf912a7eefacc3e2108c5afd70f7b072a4noda                            System.out.print(' ');
9647640caaf912a7eefacc3e2108c5afd70f7b072a4noda                        }
9657640caaf912a7eefacc3e2108c5afd70f7b072a4noda                    } else {
9667640caaf912a7eefacc3e2108c5afd70f7b072a4noda                        System.out.print(Integer.toHexString(0xff & arr[index]));
9677640caaf912a7eefacc3e2108c5afd70f7b072a4noda                        System.out.print(' ');
9687640caaf912a7eefacc3e2108c5afd70f7b072a4noda                        String str = new String(arr, index + 1, add - 2);
9697640caaf912a7eefacc3e2108c5afd70f7b072a4noda                        for (i = 0; i < str.length(); i++) {
9707640caaf912a7eefacc3e2108c5afd70f7b072a4noda                            System.out.print(str.charAt(i));
9717640caaf912a7eefacc3e2108c5afd70f7b072a4noda                            System.out.print(' ');
9727640caaf912a7eefacc3e2108c5afd70f7b072a4noda                        }
9737640caaf912a7eefacc3e2108c5afd70f7b072a4noda                    }
9747640caaf912a7eefacc3e2108c5afd70f7b072a4noda                    System.out.print('\n');
9757640caaf912a7eefacc3e2108c5afd70f7b072a4noda                }
9767640caaf912a7eefacc3e2108c5afd70f7b072a4noda                index += add;
9777640caaf912a7eefacc3e2108c5afd70f7b072a4noda
9787640caaf912a7eefacc3e2108c5afd70f7b072a4noda
9797640caaf912a7eefacc3e2108c5afd70f7b072a4noda                /*
9807640caaf912a7eefacc3e2108c5afd70f7b072a4noda                 * field value
9817640caaf912a7eefacc3e2108c5afd70f7b072a4noda                 * 0: short int
9827640caaf912a7eefacc3e2108c5afd70f7b072a4noda                 * 1: long int
9837640caaf912a7eefacc3e2108c5afd70f7b072a4noda                 * 2: text
9847640caaf912a7eefacc3e2108c5afd70f7b072a4noda                 * 3: uint
9857640caaf912a7eefacc3e2108c5afd70f7b072a4noda                 */
9867640caaf912a7eefacc3e2108c5afd70f7b072a4noda                if (addAppid) {
9877640caaf912a7eefacc3e2108c5afd70f7b072a4noda                    type = 1;
9887640caaf912a7eefacc3e2108c5afd70f7b072a4noda                } else {
9897640caaf912a7eefacc3e2108c5afd70f7b072a4noda                    type = rd.nextInt(4);
9907640caaf912a7eefacc3e2108c5afd70f7b072a4noda                }
9917640caaf912a7eefacc3e2108c5afd70f7b072a4noda                switch (type) {
9927640caaf912a7eefacc3e2108c5afd70f7b072a4noda                case 0: // header short integer
9937640caaf912a7eefacc3e2108c5afd70f7b072a4noda                    add = 1;
9947640caaf912a7eefacc3e2108c5afd70f7b072a4noda                    break;
9957640caaf912a7eefacc3e2108c5afd70f7b072a4noda                case 1: // header long int
9967640caaf912a7eefacc3e2108c5afd70f7b072a4noda                    if (addAppid) {
9977640caaf912a7eefacc3e2108c5afd70f7b072a4noda                        int bit = 1;
9987640caaf912a7eefacc3e2108c5afd70f7b072a4noda                        int topBit = 0;
9997640caaf912a7eefacc3e2108c5afd70f7b072a4noda
10007640caaf912a7eefacc3e2108c5afd70f7b072a4noda                        for (i = 0; i < 31; i++) {
10017640caaf912a7eefacc3e2108c5afd70f7b072a4noda                            if ((mAppIdValue & bit) > 0) topBit = i;
10027640caaf912a7eefacc3e2108c5afd70f7b072a4noda                            bit = (bit << 1);
10037640caaf912a7eefacc3e2108c5afd70f7b072a4noda                        }
10047640caaf912a7eefacc3e2108c5afd70f7b072a4noda                        add = 2 + topBit/8;
10057640caaf912a7eefacc3e2108c5afd70f7b072a4noda                    } else {
10067640caaf912a7eefacc3e2108c5afd70f7b072a4noda                        add = 1 + rd.nextInt(29);
10077640caaf912a7eefacc3e2108c5afd70f7b072a4noda                    }
10087640caaf912a7eefacc3e2108c5afd70f7b072a4noda                    break;
10097640caaf912a7eefacc3e2108c5afd70f7b072a4noda                case 2: // header string
10107640caaf912a7eefacc3e2108c5afd70f7b072a4noda                    add = 2 + rd.nextInt(10);
10117640caaf912a7eefacc3e2108c5afd70f7b072a4noda                    break;
10127640caaf912a7eefacc3e2108c5afd70f7b072a4noda                default: // uint32
10137640caaf912a7eefacc3e2108c5afd70f7b072a4noda                    add = 6;
10147640caaf912a7eefacc3e2108c5afd70f7b072a4noda                }
10157640caaf912a7eefacc3e2108c5afd70f7b072a4noda                if (index + add >= len) break;
10167640caaf912a7eefacc3e2108c5afd70f7b072a4noda
10177640caaf912a7eefacc3e2108c5afd70f7b072a4noda                // fill field value
10187640caaf912a7eefacc3e2108c5afd70f7b072a4noda                switch (type) {
10197640caaf912a7eefacc3e2108c5afd70f7b072a4noda                case 0: // header short int
10207640caaf912a7eefacc3e2108c5afd70f7b072a4noda                    arr[index] = (byte) (0x80 | rd.nextInt(128));
10217640caaf912a7eefacc3e2108c5afd70f7b072a4noda                    break;
10227640caaf912a7eefacc3e2108c5afd70f7b072a4noda                case 1: // header long int
10237640caaf912a7eefacc3e2108c5afd70f7b072a4noda                    if (addAppid) {
10247640caaf912a7eefacc3e2108c5afd70f7b072a4noda                        addAppid = false;
10257640caaf912a7eefacc3e2108c5afd70f7b072a4noda                        appIdAdded = true;
10267640caaf912a7eefacc3e2108c5afd70f7b072a4noda
10277640caaf912a7eefacc3e2108c5afd70f7b072a4noda                        arr[index] = (byte) (add - 1);
10287640caaf912a7eefacc3e2108c5afd70f7b072a4noda                        tmpVal = mAppIdValue;
10297640caaf912a7eefacc3e2108c5afd70f7b072a4noda                        for (i = add; i > 1; i--) {
10307640caaf912a7eefacc3e2108c5afd70f7b072a4noda                            arr[index + i - 1] = (byte) (tmpVal & 0xff);
10317640caaf912a7eefacc3e2108c5afd70f7b072a4noda                            tmpVal = (tmpVal >> 8);
10327640caaf912a7eefacc3e2108c5afd70f7b072a4noda                        }
10337640caaf912a7eefacc3e2108c5afd70f7b072a4noda                    } else {
10347640caaf912a7eefacc3e2108c5afd70f7b072a4noda                        arr[index] = (byte) (add - 1);
10357640caaf912a7eefacc3e2108c5afd70f7b072a4noda                        for (i = 1; i < add; i++) {
10367640caaf912a7eefacc3e2108c5afd70f7b072a4noda                            arr[index + i] = (byte) rd.nextInt(255);
10377640caaf912a7eefacc3e2108c5afd70f7b072a4noda                        }
10387640caaf912a7eefacc3e2108c5afd70f7b072a4noda                    }
10397640caaf912a7eefacc3e2108c5afd70f7b072a4noda                    break;
10407640caaf912a7eefacc3e2108c5afd70f7b072a4noda                case 2:// header string
10417640caaf912a7eefacc3e2108c5afd70f7b072a4noda                    for (i = 0; i < add - 1; i++) {
10427640caaf912a7eefacc3e2108c5afd70f7b072a4noda                        tmpVal = rd.nextInt(127);
10437640caaf912a7eefacc3e2108c5afd70f7b072a4noda                        if (tmpVal < 32) tmpVal= (32 + tmpVal);
10447640caaf912a7eefacc3e2108c5afd70f7b072a4noda                        arr[index + i] = (byte) tmpVal;
10457640caaf912a7eefacc3e2108c5afd70f7b072a4noda                    }
10467640caaf912a7eefacc3e2108c5afd70f7b072a4noda                    arr[index + i] = (byte) 0x0;
10477640caaf912a7eefacc3e2108c5afd70f7b072a4noda                    break;
10487640caaf912a7eefacc3e2108c5afd70f7b072a4noda                default: // header uvarint
10497640caaf912a7eefacc3e2108c5afd70f7b072a4noda                    arr[index] = (byte) 31;
10507640caaf912a7eefacc3e2108c5afd70f7b072a4noda                    tmpVal = rd.nextInt(0x0FFFFFFF);
10517640caaf912a7eefacc3e2108c5afd70f7b072a4noda                    add = 1 + encodeUint32(tmpVal, null, index + 1);
10527640caaf912a7eefacc3e2108c5afd70f7b072a4noda                    encodeUint32(tmpVal, arr, index + 1);
10537640caaf912a7eefacc3e2108c5afd70f7b072a4noda                    break;
10547640caaf912a7eefacc3e2108c5afd70f7b072a4noda
10557640caaf912a7eefacc3e2108c5afd70f7b072a4noda                }
10567640caaf912a7eefacc3e2108c5afd70f7b072a4noda
10577640caaf912a7eefacc3e2108c5afd70f7b072a4noda                if (LOCAL_LOGV) {
10587640caaf912a7eefacc3e2108c5afd70f7b072a4noda                    Log.d(LOG_TAG, "field value index:" + index);
10597640caaf912a7eefacc3e2108c5afd70f7b072a4noda                    Log.d(LOG_TAG, "type:" + typename[type] + ", add:" + add);
10607640caaf912a7eefacc3e2108c5afd70f7b072a4noda                    if (type != 2) {
10617640caaf912a7eefacc3e2108c5afd70f7b072a4noda                        for (i = index; i< index + add; i++) {
10627640caaf912a7eefacc3e2108c5afd70f7b072a4noda                            System.out.print(Integer.toHexString(0xff & arr[i]));
10637640caaf912a7eefacc3e2108c5afd70f7b072a4noda                            System.out.print(' ');
10647640caaf912a7eefacc3e2108c5afd70f7b072a4noda                        }
10657640caaf912a7eefacc3e2108c5afd70f7b072a4noda                    } else {
10667640caaf912a7eefacc3e2108c5afd70f7b072a4noda                        System.out.print(Integer.toHexString(0xff & arr[index]));
10677640caaf912a7eefacc3e2108c5afd70f7b072a4noda                        System.out.print(' ');
10687640caaf912a7eefacc3e2108c5afd70f7b072a4noda                        String str = new String(arr, index + 1, add - 2);
10697640caaf912a7eefacc3e2108c5afd70f7b072a4noda                        for (i = 0; i < str.length(); i++) {
10707640caaf912a7eefacc3e2108c5afd70f7b072a4noda                            System.out.print(str.charAt(i));
10717640caaf912a7eefacc3e2108c5afd70f7b072a4noda                            System.out.print(' ');
10727640caaf912a7eefacc3e2108c5afd70f7b072a4noda                        }
10737640caaf912a7eefacc3e2108c5afd70f7b072a4noda                    }
10747640caaf912a7eefacc3e2108c5afd70f7b072a4noda                    System.out.print('\n');
10757640caaf912a7eefacc3e2108c5afd70f7b072a4noda                }
10767640caaf912a7eefacc3e2108c5afd70f7b072a4noda                index += add;
10777640caaf912a7eefacc3e2108c5afd70f7b072a4noda            }
10787640caaf912a7eefacc3e2108c5afd70f7b072a4noda            if (noAppId) break;
10797640caaf912a7eefacc3e2108c5afd70f7b072a4noda        }
10807640caaf912a7eefacc3e2108c5afd70f7b072a4noda
10817640caaf912a7eefacc3e2108c5afd70f7b072a4noda        Log.d(LOG_TAG, HexDump.dumpHexString(arr));
10827640caaf912a7eefacc3e2108c5afd70f7b072a4noda    }
10837640caaf912a7eefacc3e2108c5afd70f7b072a4noda
10847640caaf912a7eefacc3e2108c5afd70f7b072a4noda    /**
10857640caaf912a7eefacc3e2108c5afd70f7b072a4noda     * Generate Random WSP header with string application ID
10867640caaf912a7eefacc3e2108c5afd70f7b072a4noda     */
10877640caaf912a7eefacc3e2108c5afd70f7b072a4noda    protected void createRandomWspHeaderStrAppId(byte[] arr, Random rd, int headerStart,
10887640caaf912a7eefacc3e2108c5afd70f7b072a4noda            boolean randomStr) {
10897640caaf912a7eefacc3e2108c5afd70f7b072a4noda
10907640caaf912a7eefacc3e2108c5afd70f7b072a4noda        boolean appIdAdded = false;
10917640caaf912a7eefacc3e2108c5afd70f7b072a4noda
10927640caaf912a7eefacc3e2108c5afd70f7b072a4noda        Log.d(LOG_TAG, "random arr length:" + arr.length);
10937640caaf912a7eefacc3e2108c5afd70f7b072a4noda        String typename[] = new String[] { "short int", "long int", "string", "uint32"};
10947640caaf912a7eefacc3e2108c5afd70f7b072a4noda
10957640caaf912a7eefacc3e2108c5afd70f7b072a4noda        while (!appIdAdded) {
10967640caaf912a7eefacc3e2108c5afd70f7b072a4noda            int type;
10977640caaf912a7eefacc3e2108c5afd70f7b072a4noda            int index = headerStart;
10987640caaf912a7eefacc3e2108c5afd70f7b072a4noda            int len = arr.length;
10997640caaf912a7eefacc3e2108c5afd70f7b072a4noda            int i;
11007640caaf912a7eefacc3e2108c5afd70f7b072a4noda            boolean addAppid = false;
11017640caaf912a7eefacc3e2108c5afd70f7b072a4noda            int tmpVal = 0;
11027640caaf912a7eefacc3e2108c5afd70f7b072a4noda            int tmpVal2 = 0;
11037640caaf912a7eefacc3e2108c5afd70f7b072a4noda
11047640caaf912a7eefacc3e2108c5afd70f7b072a4noda            while (true) {
11057640caaf912a7eefacc3e2108c5afd70f7b072a4noda                int add;
11067640caaf912a7eefacc3e2108c5afd70f7b072a4noda
11077640caaf912a7eefacc3e2108c5afd70f7b072a4noda                /*
11087640caaf912a7eefacc3e2108c5afd70f7b072a4noda                 * field name
11097640caaf912a7eefacc3e2108c5afd70f7b072a4noda                 * 0: short int
11107640caaf912a7eefacc3e2108c5afd70f7b072a4noda                 * 1: long int
11117640caaf912a7eefacc3e2108c5afd70f7b072a4noda                 * 2: text
11127640caaf912a7eefacc3e2108c5afd70f7b072a4noda                 * (no uint for param value)
11137640caaf912a7eefacc3e2108c5afd70f7b072a4noda                 */
11147640caaf912a7eefacc3e2108c5afd70f7b072a4noda                type = rd.nextInt(3);
11157640caaf912a7eefacc3e2108c5afd70f7b072a4noda                switch (type) {
11167640caaf912a7eefacc3e2108c5afd70f7b072a4noda                case 0: // header short integer
11177640caaf912a7eefacc3e2108c5afd70f7b072a4noda                    if (index > 100 && !appIdAdded) addAppid = true;
11187640caaf912a7eefacc3e2108c5afd70f7b072a4noda                    add = 1;
11197640caaf912a7eefacc3e2108c5afd70f7b072a4noda                    break;
11207640caaf912a7eefacc3e2108c5afd70f7b072a4noda                case 1: // header long int
11217640caaf912a7eefacc3e2108c5afd70f7b072a4noda                    add = 1 + rd.nextInt(29);
11227640caaf912a7eefacc3e2108c5afd70f7b072a4noda                    break;
11237640caaf912a7eefacc3e2108c5afd70f7b072a4noda                default: // header string
11247640caaf912a7eefacc3e2108c5afd70f7b072a4noda                    add = 2 + rd.nextInt(10);
11257640caaf912a7eefacc3e2108c5afd70f7b072a4noda                    break;
11267640caaf912a7eefacc3e2108c5afd70f7b072a4noda                }
11277640caaf912a7eefacc3e2108c5afd70f7b072a4noda                if (index + add >= len) break;
11287640caaf912a7eefacc3e2108c5afd70f7b072a4noda
11297640caaf912a7eefacc3e2108c5afd70f7b072a4noda                // fill header name
11307640caaf912a7eefacc3e2108c5afd70f7b072a4noda                switch (type) {
11317640caaf912a7eefacc3e2108c5afd70f7b072a4noda                case 0: // header short integer
11327640caaf912a7eefacc3e2108c5afd70f7b072a4noda                    if (!addAppid) {
11337640caaf912a7eefacc3e2108c5afd70f7b072a4noda                        do {
11347640caaf912a7eefacc3e2108c5afd70f7b072a4noda                            arr[index] = (byte) (0x80 | rd.nextInt(128));
11357640caaf912a7eefacc3e2108c5afd70f7b072a4noda                        } while (arr[index] == (byte) 0xaf);
11367640caaf912a7eefacc3e2108c5afd70f7b072a4noda                    } else {
11377640caaf912a7eefacc3e2108c5afd70f7b072a4noda                        Log.d(LOG_TAG, "appId added.");
11387640caaf912a7eefacc3e2108c5afd70f7b072a4noda                        arr[index] = (byte) 0xaf;
11397640caaf912a7eefacc3e2108c5afd70f7b072a4noda                    }
11407640caaf912a7eefacc3e2108c5afd70f7b072a4noda                    break;
11417640caaf912a7eefacc3e2108c5afd70f7b072a4noda                case 1: // header long int
11427640caaf912a7eefacc3e2108c5afd70f7b072a4noda                    arr[index] = (byte) (add - 1);
11437640caaf912a7eefacc3e2108c5afd70f7b072a4noda                    tmpVal2 = 0;
11447640caaf912a7eefacc3e2108c5afd70f7b072a4noda                    for (i = 1; i < add; i++) {
11457640caaf912a7eefacc3e2108c5afd70f7b072a4noda                        tmpVal = rd.nextInt(255);
11467640caaf912a7eefacc3e2108c5afd70f7b072a4noda                        tmpVal2 = (tmpVal2 << 8) | tmpVal;
11477640caaf912a7eefacc3e2108c5afd70f7b072a4noda                        arr[index + i] = (byte) tmpVal;
11487640caaf912a7eefacc3e2108c5afd70f7b072a4noda                    }
11497640caaf912a7eefacc3e2108c5afd70f7b072a4noda                    // don't set application id
11507640caaf912a7eefacc3e2108c5afd70f7b072a4noda                    if (tmpVal2 == 0x2f) arr[index + 1]++;
11517640caaf912a7eefacc3e2108c5afd70f7b072a4noda                    break;
11527640caaf912a7eefacc3e2108c5afd70f7b072a4noda                default: // header string
11537640caaf912a7eefacc3e2108c5afd70f7b072a4noda                    for (i = 0; i < add - 1; i++) {
11547640caaf912a7eefacc3e2108c5afd70f7b072a4noda                        tmpVal = rd.nextInt(127);
11557640caaf912a7eefacc3e2108c5afd70f7b072a4noda                        if (tmpVal < 32) tmpVal= (32 + tmpVal);
11567640caaf912a7eefacc3e2108c5afd70f7b072a4noda                        arr[index + i] = (byte) tmpVal;
11577640caaf912a7eefacc3e2108c5afd70f7b072a4noda                    }
11587640caaf912a7eefacc3e2108c5afd70f7b072a4noda                    arr[index + i] = (byte) 0x0;
11597640caaf912a7eefacc3e2108c5afd70f7b072a4noda                    break;
11607640caaf912a7eefacc3e2108c5afd70f7b072a4noda                }
11617640caaf912a7eefacc3e2108c5afd70f7b072a4noda
11627640caaf912a7eefacc3e2108c5afd70f7b072a4noda                if (LOCAL_LOGV) {
11637640caaf912a7eefacc3e2108c5afd70f7b072a4noda                    Log.d(LOG_TAG, "field name index:" + index);
11647640caaf912a7eefacc3e2108c5afd70f7b072a4noda                    Log.d(LOG_TAG, "type:" + typename[type] + ", add:" + add);
11657640caaf912a7eefacc3e2108c5afd70f7b072a4noda                    if (type != 2) {
11667640caaf912a7eefacc3e2108c5afd70f7b072a4noda                        for (i = index; i < index + add; i++) {
11677640caaf912a7eefacc3e2108c5afd70f7b072a4noda                            System.out.print(Integer.toHexString(0xff & arr[i]));
11687640caaf912a7eefacc3e2108c5afd70f7b072a4noda                            System.out.print(' ');
11697640caaf912a7eefacc3e2108c5afd70f7b072a4noda                        }
11707640caaf912a7eefacc3e2108c5afd70f7b072a4noda                    } else {
11717640caaf912a7eefacc3e2108c5afd70f7b072a4noda                        System.out.print(Integer.toHexString(0xff & arr[index]));
11727640caaf912a7eefacc3e2108c5afd70f7b072a4noda                        System.out.print(' ');
11737640caaf912a7eefacc3e2108c5afd70f7b072a4noda                        String str = new String(arr, index + 1, add - 2);
11747640caaf912a7eefacc3e2108c5afd70f7b072a4noda                        for (i = 0; i < str.length(); i++) {
11757640caaf912a7eefacc3e2108c5afd70f7b072a4noda                            System.out.print(str.charAt(i));
11767640caaf912a7eefacc3e2108c5afd70f7b072a4noda                            System.out.print(' ');
11777640caaf912a7eefacc3e2108c5afd70f7b072a4noda                        }
11787640caaf912a7eefacc3e2108c5afd70f7b072a4noda                    }
11797640caaf912a7eefacc3e2108c5afd70f7b072a4noda                    System.out.print('\n');
11807640caaf912a7eefacc3e2108c5afd70f7b072a4noda                }
11817640caaf912a7eefacc3e2108c5afd70f7b072a4noda                index += add;
11827640caaf912a7eefacc3e2108c5afd70f7b072a4noda
11837640caaf912a7eefacc3e2108c5afd70f7b072a4noda
11847640caaf912a7eefacc3e2108c5afd70f7b072a4noda                /*
11857640caaf912a7eefacc3e2108c5afd70f7b072a4noda                 * field value
11867640caaf912a7eefacc3e2108c5afd70f7b072a4noda                 * 0: short int
11877640caaf912a7eefacc3e2108c5afd70f7b072a4noda                 * 1: long int
11887640caaf912a7eefacc3e2108c5afd70f7b072a4noda                 * 2: text
11897640caaf912a7eefacc3e2108c5afd70f7b072a4noda                 * 3: uint
11907640caaf912a7eefacc3e2108c5afd70f7b072a4noda                 */
11917640caaf912a7eefacc3e2108c5afd70f7b072a4noda                if (addAppid) {
11927640caaf912a7eefacc3e2108c5afd70f7b072a4noda                    type = 2;
11937640caaf912a7eefacc3e2108c5afd70f7b072a4noda                } else {
11947640caaf912a7eefacc3e2108c5afd70f7b072a4noda                    type = rd.nextInt(4);
11957640caaf912a7eefacc3e2108c5afd70f7b072a4noda                }
11967640caaf912a7eefacc3e2108c5afd70f7b072a4noda                switch (type) {
11977640caaf912a7eefacc3e2108c5afd70f7b072a4noda                case 0: // header short integer
11987640caaf912a7eefacc3e2108c5afd70f7b072a4noda                    add = 1;
11997640caaf912a7eefacc3e2108c5afd70f7b072a4noda                    break;
12007640caaf912a7eefacc3e2108c5afd70f7b072a4noda                case 1: // header long int
12017640caaf912a7eefacc3e2108c5afd70f7b072a4noda                    add = 1 + rd.nextInt(29);
12027640caaf912a7eefacc3e2108c5afd70f7b072a4noda                    break;
12037640caaf912a7eefacc3e2108c5afd70f7b072a4noda                case 2: // header string
12047640caaf912a7eefacc3e2108c5afd70f7b072a4noda                    if (addAppid) {
12057640caaf912a7eefacc3e2108c5afd70f7b072a4noda                        if (randomStr) {
12067640caaf912a7eefacc3e2108c5afd70f7b072a4noda                            add = 1 + rd.nextInt(10);
12077640caaf912a7eefacc3e2108c5afd70f7b072a4noda                            byte[] randStr= new byte[add];
12087640caaf912a7eefacc3e2108c5afd70f7b072a4noda                            for (i = 0; i < add; i++) {
12097640caaf912a7eefacc3e2108c5afd70f7b072a4noda                                tmpVal = rd.nextInt(127);
12107640caaf912a7eefacc3e2108c5afd70f7b072a4noda                                if (tmpVal < 32) tmpVal= (32 + tmpVal);
12117640caaf912a7eefacc3e2108c5afd70f7b072a4noda                                randStr[i] = (byte) tmpVal;
12127640caaf912a7eefacc3e2108c5afd70f7b072a4noda                            }
12137640caaf912a7eefacc3e2108c5afd70f7b072a4noda                            mAppIdName = new String(randStr);
12147640caaf912a7eefacc3e2108c5afd70f7b072a4noda                        }
12157640caaf912a7eefacc3e2108c5afd70f7b072a4noda                        add = mAppIdName.length() + 1;
12167640caaf912a7eefacc3e2108c5afd70f7b072a4noda                    } else {
12177640caaf912a7eefacc3e2108c5afd70f7b072a4noda                        add = 2 + rd.nextInt(10);
12187640caaf912a7eefacc3e2108c5afd70f7b072a4noda                    }
12197640caaf912a7eefacc3e2108c5afd70f7b072a4noda                    break;
12207640caaf912a7eefacc3e2108c5afd70f7b072a4noda                default: // uint32
12217640caaf912a7eefacc3e2108c5afd70f7b072a4noda                    add = 6;
12227640caaf912a7eefacc3e2108c5afd70f7b072a4noda                }
12237640caaf912a7eefacc3e2108c5afd70f7b072a4noda                if (index + add >= len) break;
12247640caaf912a7eefacc3e2108c5afd70f7b072a4noda
12257640caaf912a7eefacc3e2108c5afd70f7b072a4noda                // fill field value
12267640caaf912a7eefacc3e2108c5afd70f7b072a4noda                switch (type) {
12277640caaf912a7eefacc3e2108c5afd70f7b072a4noda                case 0: // header short int
12287640caaf912a7eefacc3e2108c5afd70f7b072a4noda                    arr[index] = (byte) (0x80 | rd.nextInt(128));
12297640caaf912a7eefacc3e2108c5afd70f7b072a4noda                    break;
12307640caaf912a7eefacc3e2108c5afd70f7b072a4noda                case 1: // header long int
12317640caaf912a7eefacc3e2108c5afd70f7b072a4noda                    arr[index] = (byte) (add - 1);
12327640caaf912a7eefacc3e2108c5afd70f7b072a4noda                    for (i = 1; i < add; i++)
12337640caaf912a7eefacc3e2108c5afd70f7b072a4noda                        arr[index + i] = (byte) rd.nextInt(255);
12347640caaf912a7eefacc3e2108c5afd70f7b072a4noda                    break;
12357640caaf912a7eefacc3e2108c5afd70f7b072a4noda                case 2:// header string
12367640caaf912a7eefacc3e2108c5afd70f7b072a4noda                    if (addAppid) {
12377640caaf912a7eefacc3e2108c5afd70f7b072a4noda                        addAppid = false;
12387640caaf912a7eefacc3e2108c5afd70f7b072a4noda                        appIdAdded = true;
12397640caaf912a7eefacc3e2108c5afd70f7b072a4noda                        for (i = 0; i < add - 1; i++) {
12407640caaf912a7eefacc3e2108c5afd70f7b072a4noda                            arr[index + i] = (byte) (mAppIdName.charAt(i));
12417640caaf912a7eefacc3e2108c5afd70f7b072a4noda                        }
12427640caaf912a7eefacc3e2108c5afd70f7b072a4noda                        Log.d(LOG_TAG, "mAppIdName added [" + mAppIdName + "]");
12437640caaf912a7eefacc3e2108c5afd70f7b072a4noda                    } else {
12447640caaf912a7eefacc3e2108c5afd70f7b072a4noda                        for (i = 0; i < add - 1; i++) {
12457640caaf912a7eefacc3e2108c5afd70f7b072a4noda                            tmpVal = rd.nextInt(127);
12467640caaf912a7eefacc3e2108c5afd70f7b072a4noda                            if (tmpVal < 32) tmpVal= (32 + tmpVal);
12477640caaf912a7eefacc3e2108c5afd70f7b072a4noda                            arr[index + i] = (byte) tmpVal;
12487640caaf912a7eefacc3e2108c5afd70f7b072a4noda                        }
12497640caaf912a7eefacc3e2108c5afd70f7b072a4noda                    }
12507640caaf912a7eefacc3e2108c5afd70f7b072a4noda                    arr[index + i] = (byte) 0x0;
12517640caaf912a7eefacc3e2108c5afd70f7b072a4noda                    break;
12527640caaf912a7eefacc3e2108c5afd70f7b072a4noda                default: // header uvarint
12537640caaf912a7eefacc3e2108c5afd70f7b072a4noda                    arr[index] = (byte) 31;
12547640caaf912a7eefacc3e2108c5afd70f7b072a4noda                    tmpVal = rd.nextInt(0x0FFFFFFF);
12557640caaf912a7eefacc3e2108c5afd70f7b072a4noda                    add = 1 + encodeUint32(tmpVal, null, index + 1);
12567640caaf912a7eefacc3e2108c5afd70f7b072a4noda                    encodeUint32(tmpVal, arr, index + 1);
12577640caaf912a7eefacc3e2108c5afd70f7b072a4noda                    break;
12587640caaf912a7eefacc3e2108c5afd70f7b072a4noda
12597640caaf912a7eefacc3e2108c5afd70f7b072a4noda                }
12607640caaf912a7eefacc3e2108c5afd70f7b072a4noda
12617640caaf912a7eefacc3e2108c5afd70f7b072a4noda                if (LOCAL_LOGV) {
12627640caaf912a7eefacc3e2108c5afd70f7b072a4noda                    Log.d(LOG_TAG, "field value index:" + index);
12637640caaf912a7eefacc3e2108c5afd70f7b072a4noda                    Log.d(LOG_TAG, "type:" + typename[type] + ", add:" + add);
12647640caaf912a7eefacc3e2108c5afd70f7b072a4noda                    if (type != 2) {
12657640caaf912a7eefacc3e2108c5afd70f7b072a4noda                        for (i = index; i < index + add; i++) {
12667640caaf912a7eefacc3e2108c5afd70f7b072a4noda                            System.out.print(Integer.toHexString(0xff & arr[i]));
12677640caaf912a7eefacc3e2108c5afd70f7b072a4noda                            System.out.print(' ');
12687640caaf912a7eefacc3e2108c5afd70f7b072a4noda                        }
12697640caaf912a7eefacc3e2108c5afd70f7b072a4noda                    } else {
12707640caaf912a7eefacc3e2108c5afd70f7b072a4noda                        System.out.print(Integer.toHexString(0xff & arr[index]));
12717640caaf912a7eefacc3e2108c5afd70f7b072a4noda                        System.out.print(' ');
12727640caaf912a7eefacc3e2108c5afd70f7b072a4noda                        String str = new String(arr, index + 1, add - 2);
12737640caaf912a7eefacc3e2108c5afd70f7b072a4noda                        for (i = 0; i < str.length(); i++) {
12747640caaf912a7eefacc3e2108c5afd70f7b072a4noda                            System.out.print(str.charAt(i));
12757640caaf912a7eefacc3e2108c5afd70f7b072a4noda                            System.out.print(' ');
12767640caaf912a7eefacc3e2108c5afd70f7b072a4noda                        }
12777640caaf912a7eefacc3e2108c5afd70f7b072a4noda                    }
12787640caaf912a7eefacc3e2108c5afd70f7b072a4noda                    System.out.print('\n');
12797640caaf912a7eefacc3e2108c5afd70f7b072a4noda                }
12807640caaf912a7eefacc3e2108c5afd70f7b072a4noda                index += add;
12817640caaf912a7eefacc3e2108c5afd70f7b072a4noda            }
12827640caaf912a7eefacc3e2108c5afd70f7b072a4noda        }
12837640caaf912a7eefacc3e2108c5afd70f7b072a4noda
12847640caaf912a7eefacc3e2108c5afd70f7b072a4noda        Log.d(LOG_TAG, "headerStart = " + headerStart + ", mAppIdName = " + mAppIdName);
12857640caaf912a7eefacc3e2108c5afd70f7b072a4noda        Log.d(LOG_TAG, HexDump.dumpHexString(arr));
12867640caaf912a7eefacc3e2108c5afd70f7b072a4noda    }
12877640caaf912a7eefacc3e2108c5afd70f7b072a4noda
12887640caaf912a7eefacc3e2108c5afd70f7b072a4noda    protected byte[] createPDU(int testNum) {
12897640caaf912a7eefacc3e2108c5afd70f7b072a4noda        byte[] array = null;
12907640caaf912a7eefacc3e2108c5afd70f7b072a4noda        // byte[] wsp = null;
12917640caaf912a7eefacc3e2108c5afd70f7b072a4noda
12927640caaf912a7eefacc3e2108c5afd70f7b072a4noda        switch (testNum) {
12937640caaf912a7eefacc3e2108c5afd70f7b072a4noda            // sample pdu
12947640caaf912a7eefacc3e2108c5afd70f7b072a4noda        case 1:
12957640caaf912a7eefacc3e2108c5afd70f7b072a4noda            byte[] array1 = {
12967640caaf912a7eefacc3e2108c5afd70f7b072a4noda                    (byte) 0x00, // TID
12977640caaf912a7eefacc3e2108c5afd70f7b072a4noda                    (byte) 0x06, // Type = wap push
12987640caaf912a7eefacc3e2108c5afd70f7b072a4noda                    (byte) 0x00, // Length to be set later.
12997640caaf912a7eefacc3e2108c5afd70f7b072a4noda
13007640caaf912a7eefacc3e2108c5afd70f7b072a4noda                    // Content-Type
13017640caaf912a7eefacc3e2108c5afd70f7b072a4noda                    (byte) 0x03, (byte) 0x02,
13027640caaf912a7eefacc3e2108c5afd70f7b072a4noda                    (byte) ((mContentTypeValue >> 8) & 0xff),
13037640caaf912a7eefacc3e2108c5afd70f7b072a4noda                    (byte) (mContentTypeValue & 0xff),
13047640caaf912a7eefacc3e2108c5afd70f7b072a4noda
13057640caaf912a7eefacc3e2108c5afd70f7b072a4noda                    // Application-id
13067640caaf912a7eefacc3e2108c5afd70f7b072a4noda                    (byte) 0xaf, (byte) 0x02,
13077640caaf912a7eefacc3e2108c5afd70f7b072a4noda                    (byte) ((mAppIdValue >> 8) & 0xff),
13087640caaf912a7eefacc3e2108c5afd70f7b072a4noda                    (byte) (mAppIdValue& 0xff)
13097640caaf912a7eefacc3e2108c5afd70f7b072a4noda            };
13107640caaf912a7eefacc3e2108c5afd70f7b072a4noda            array1[2] = (byte) (array1.length - 3);
13117640caaf912a7eefacc3e2108c5afd70f7b072a4noda            mWspHeader = array1;
13127640caaf912a7eefacc3e2108c5afd70f7b072a4noda            mWspHeaderStart = mGsmHeader.length + mUserDataHeader.length + 7;
13137640caaf912a7eefacc3e2108c5afd70f7b072a4noda            mWspHeaderLen = array1.length;
13147640caaf912a7eefacc3e2108c5afd70f7b072a4noda            break;
13157640caaf912a7eefacc3e2108c5afd70f7b072a4noda
13167640caaf912a7eefacc3e2108c5afd70f7b072a4noda            // invalid wsp header
13177640caaf912a7eefacc3e2108c5afd70f7b072a4noda        case 2:
13187640caaf912a7eefacc3e2108c5afd70f7b072a4noda            byte[] array2 = {
13197640caaf912a7eefacc3e2108c5afd70f7b072a4noda                    (byte) 0x00, // invalid data
13207640caaf912a7eefacc3e2108c5afd70f7b072a4noda            };
13217640caaf912a7eefacc3e2108c5afd70f7b072a4noda            mWspHeader = array2;
13227640caaf912a7eefacc3e2108c5afd70f7b072a4noda            mWspHeaderStart = mGsmHeader.length + mUserDataHeader.length;
13237640caaf912a7eefacc3e2108c5afd70f7b072a4noda            mWspHeaderLen = array2.length;
13247640caaf912a7eefacc3e2108c5afd70f7b072a4noda            break;
13257640caaf912a7eefacc3e2108c5afd70f7b072a4noda
13267640caaf912a7eefacc3e2108c5afd70f7b072a4noda            // random wsp header
13277640caaf912a7eefacc3e2108c5afd70f7b072a4noda        case 3:
13287640caaf912a7eefacc3e2108c5afd70f7b072a4noda            Random rd = new Random();
13297640caaf912a7eefacc3e2108c5afd70f7b072a4noda            int arrSize = 150 + rd.nextInt(100);
13307640caaf912a7eefacc3e2108c5afd70f7b072a4noda            byte[] array3 = new byte[arrSize];
13317640caaf912a7eefacc3e2108c5afd70f7b072a4noda            int hdrEncodeLen;
13327640caaf912a7eefacc3e2108c5afd70f7b072a4noda
13337640caaf912a7eefacc3e2108c5afd70f7b072a4noda            array3[0] = (byte) 0x0;
13347640caaf912a7eefacc3e2108c5afd70f7b072a4noda            array3[1] = (byte) 0x6;
13357640caaf912a7eefacc3e2108c5afd70f7b072a4noda            hdrEncodeLen = encodeUint32(array3.length, null, 2);
13367640caaf912a7eefacc3e2108c5afd70f7b072a4noda            hdrEncodeLen = encodeUint32(array3.length - hdrEncodeLen - 2, array3, 2);
13377640caaf912a7eefacc3e2108c5afd70f7b072a4noda            array3[hdrEncodeLen + 2] = (byte) 0x3;
13387640caaf912a7eefacc3e2108c5afd70f7b072a4noda            array3[hdrEncodeLen + 3] = (byte) 0x2;
13397640caaf912a7eefacc3e2108c5afd70f7b072a4noda            array3[hdrEncodeLen + 4] = (byte) ((mContentTypeValue >> 8) & 0xff);
13407640caaf912a7eefacc3e2108c5afd70f7b072a4noda            array3[hdrEncodeLen + 5] = (byte) (mContentTypeValue & 0xff);
13417640caaf912a7eefacc3e2108c5afd70f7b072a4noda            createRandomWspHeader(array3, rd, hdrEncodeLen + 6, false);
13427640caaf912a7eefacc3e2108c5afd70f7b072a4noda            mWspHeaderStart = mGsmHeader.length + mUserDataHeader.length + hdrEncodeLen + 6;
13437640caaf912a7eefacc3e2108c5afd70f7b072a4noda            mWspHeaderLen = array3.length;
13447640caaf912a7eefacc3e2108c5afd70f7b072a4noda
13457640caaf912a7eefacc3e2108c5afd70f7b072a4noda            Log.d(LOG_TAG, "mContentTypeValue = " + mContentTypeValue
13467640caaf912a7eefacc3e2108c5afd70f7b072a4noda                    + "(" + Integer.toHexString(mContentTypeValue) + ")");
13477640caaf912a7eefacc3e2108c5afd70f7b072a4noda
13487640caaf912a7eefacc3e2108c5afd70f7b072a4noda            mWspHeader = array3;
13497640caaf912a7eefacc3e2108c5afd70f7b072a4noda            break;
13507640caaf912a7eefacc3e2108c5afd70f7b072a4noda
13517640caaf912a7eefacc3e2108c5afd70f7b072a4noda            // random wsp header w/o appid
13527640caaf912a7eefacc3e2108c5afd70f7b072a4noda        case 4:
13537640caaf912a7eefacc3e2108c5afd70f7b072a4noda            rd = new Random();
13547640caaf912a7eefacc3e2108c5afd70f7b072a4noda            arrSize = 150 + rd.nextInt(100);
13557640caaf912a7eefacc3e2108c5afd70f7b072a4noda            array3 = new byte[arrSize];
13567640caaf912a7eefacc3e2108c5afd70f7b072a4noda
13577640caaf912a7eefacc3e2108c5afd70f7b072a4noda            array3[0] = (byte) 0x0;
13587640caaf912a7eefacc3e2108c5afd70f7b072a4noda            array3[1] = (byte) 0x6;
13597640caaf912a7eefacc3e2108c5afd70f7b072a4noda            hdrEncodeLen = encodeUint32(array3.length, null, 2);
13607640caaf912a7eefacc3e2108c5afd70f7b072a4noda            hdrEncodeLen = encodeUint32(array3.length - hdrEncodeLen - 2, array3, 2);
13617640caaf912a7eefacc3e2108c5afd70f7b072a4noda            array3[hdrEncodeLen + 2] = (byte) 0x3;
13627640caaf912a7eefacc3e2108c5afd70f7b072a4noda            array3[hdrEncodeLen + 3] = (byte) 0x2;
13637640caaf912a7eefacc3e2108c5afd70f7b072a4noda            array3[hdrEncodeLen + 4] = (byte) ((mContentTypeValue >> 8) & 0xff);
13647640caaf912a7eefacc3e2108c5afd70f7b072a4noda            array3[hdrEncodeLen + 5] = (byte) (mContentTypeValue & 0xff);
13657640caaf912a7eefacc3e2108c5afd70f7b072a4noda            createRandomWspHeader(array3, rd, hdrEncodeLen + 6, true);
13667640caaf912a7eefacc3e2108c5afd70f7b072a4noda            mWspHeaderStart = mGsmHeader.length + mUserDataHeader.length + hdrEncodeLen + 6;
13677640caaf912a7eefacc3e2108c5afd70f7b072a4noda            mWspHeaderLen = array3.length;
13687640caaf912a7eefacc3e2108c5afd70f7b072a4noda
13697640caaf912a7eefacc3e2108c5afd70f7b072a4noda            Log.d(LOG_TAG, "mContentTypeValue = " + mContentTypeValue
13707640caaf912a7eefacc3e2108c5afd70f7b072a4noda                    + "(" + Integer.toHexString(mContentTypeValue) + ")");
13717640caaf912a7eefacc3e2108c5afd70f7b072a4noda
13727640caaf912a7eefacc3e2108c5afd70f7b072a4noda            mWspHeader = array3;
13737640caaf912a7eefacc3e2108c5afd70f7b072a4noda            break;
13747640caaf912a7eefacc3e2108c5afd70f7b072a4noda
13757640caaf912a7eefacc3e2108c5afd70f7b072a4noda            // random wsp header w/ random appid string
13767640caaf912a7eefacc3e2108c5afd70f7b072a4noda        case 5:
13777640caaf912a7eefacc3e2108c5afd70f7b072a4noda            rd = new Random();
13787640caaf912a7eefacc3e2108c5afd70f7b072a4noda            arrSize = 150 + rd.nextInt(100);
13797640caaf912a7eefacc3e2108c5afd70f7b072a4noda            array3 = new byte[arrSize];
13807640caaf912a7eefacc3e2108c5afd70f7b072a4noda
13817640caaf912a7eefacc3e2108c5afd70f7b072a4noda            array3[0] = (byte) 0x0;
13827640caaf912a7eefacc3e2108c5afd70f7b072a4noda            array3[1] = (byte) 0x6;
13837640caaf912a7eefacc3e2108c5afd70f7b072a4noda            hdrEncodeLen = encodeUint32(array3.length, null, 2);
13847640caaf912a7eefacc3e2108c5afd70f7b072a4noda            hdrEncodeLen = encodeUint32(array3.length - hdrEncodeLen - 2, array3, 2);
13857640caaf912a7eefacc3e2108c5afd70f7b072a4noda            array3[hdrEncodeLen + 2] = (byte) 0x3;
13867640caaf912a7eefacc3e2108c5afd70f7b072a4noda            array3[hdrEncodeLen + 3] = (byte) 0x2;
13877640caaf912a7eefacc3e2108c5afd70f7b072a4noda            array3[hdrEncodeLen + 4] = (byte) ((mContentTypeValue >> 8) & 0xff);
13887640caaf912a7eefacc3e2108c5afd70f7b072a4noda            array3[hdrEncodeLen + 5] = (byte) (mContentTypeValue & 0xff);
13897640caaf912a7eefacc3e2108c5afd70f7b072a4noda            createRandomWspHeaderStrAppId(array3, rd, hdrEncodeLen + 6, true);
13907640caaf912a7eefacc3e2108c5afd70f7b072a4noda            mWspHeaderStart = mGsmHeader.length + mUserDataHeader.length + hdrEncodeLen + 6;
13917640caaf912a7eefacc3e2108c5afd70f7b072a4noda            mWspHeaderLen = array3.length;
13927640caaf912a7eefacc3e2108c5afd70f7b072a4noda
13937640caaf912a7eefacc3e2108c5afd70f7b072a4noda            Log.d(LOG_TAG, "mContentTypeValue = " + mContentTypeValue
13947640caaf912a7eefacc3e2108c5afd70f7b072a4noda                    + "(" + Integer.toHexString(mContentTypeValue) + ")");
13957640caaf912a7eefacc3e2108c5afd70f7b072a4noda
13967640caaf912a7eefacc3e2108c5afd70f7b072a4noda            mWspHeader = array3;
13977640caaf912a7eefacc3e2108c5afd70f7b072a4noda            break;
13987640caaf912a7eefacc3e2108c5afd70f7b072a4noda
13997640caaf912a7eefacc3e2108c5afd70f7b072a4noda            // random wsp header w/ OMA appid string
14007640caaf912a7eefacc3e2108c5afd70f7b072a4noda        case 6:
14017640caaf912a7eefacc3e2108c5afd70f7b072a4noda            rd = new Random();
14027640caaf912a7eefacc3e2108c5afd70f7b072a4noda            arrSize = 150 + rd.nextInt(100);
14037640caaf912a7eefacc3e2108c5afd70f7b072a4noda            array3 = new byte[arrSize];
14047640caaf912a7eefacc3e2108c5afd70f7b072a4noda
14057640caaf912a7eefacc3e2108c5afd70f7b072a4noda            array3[0] = (byte) 0x0;
14067640caaf912a7eefacc3e2108c5afd70f7b072a4noda            array3[1] = (byte) 0x6;
14077640caaf912a7eefacc3e2108c5afd70f7b072a4noda            hdrEncodeLen = encodeUint32(array3.length, null, 2);
14087640caaf912a7eefacc3e2108c5afd70f7b072a4noda            hdrEncodeLen = encodeUint32(array3.length - hdrEncodeLen - 2, array3, 2);
14097640caaf912a7eefacc3e2108c5afd70f7b072a4noda            array3[hdrEncodeLen + 2] = (byte) 0x3;
14107640caaf912a7eefacc3e2108c5afd70f7b072a4noda            array3[hdrEncodeLen + 3] = (byte) 0x2;
14117640caaf912a7eefacc3e2108c5afd70f7b072a4noda            array3[hdrEncodeLen + 4] = (byte) ((mContentTypeValue >> 8) & 0xff);
14127640caaf912a7eefacc3e2108c5afd70f7b072a4noda            array3[hdrEncodeLen + 5] = (byte) (mContentTypeValue & 0xff);
14137640caaf912a7eefacc3e2108c5afd70f7b072a4noda            createRandomWspHeaderStrAppId(array3, rd, hdrEncodeLen + 6, false);
14147640caaf912a7eefacc3e2108c5afd70f7b072a4noda            mWspHeaderStart = mGsmHeader.length + mUserDataHeader.length + hdrEncodeLen + 6;
14157640caaf912a7eefacc3e2108c5afd70f7b072a4noda            mWspHeaderLen = array3.length;
14167640caaf912a7eefacc3e2108c5afd70f7b072a4noda
14177640caaf912a7eefacc3e2108c5afd70f7b072a4noda            Log.d(LOG_TAG, "mContentTypeValue = " + mContentTypeValue
14187640caaf912a7eefacc3e2108c5afd70f7b072a4noda                    + "(" + Integer.toHexString(mContentTypeValue) + ")");
14197640caaf912a7eefacc3e2108c5afd70f7b072a4noda
14207640caaf912a7eefacc3e2108c5afd70f7b072a4noda            mWspHeader = array3;
14217640caaf912a7eefacc3e2108c5afd70f7b072a4noda            break;
14227640caaf912a7eefacc3e2108c5afd70f7b072a4noda
14237640caaf912a7eefacc3e2108c5afd70f7b072a4noda            // random wsp header w/ OMA content type
14247640caaf912a7eefacc3e2108c5afd70f7b072a4noda        case 7:
14257640caaf912a7eefacc3e2108c5afd70f7b072a4noda            rd = new Random();
14267640caaf912a7eefacc3e2108c5afd70f7b072a4noda            arrSize = 150 + rd.nextInt(100);
14277640caaf912a7eefacc3e2108c5afd70f7b072a4noda            array3 = new byte[arrSize];
14287640caaf912a7eefacc3e2108c5afd70f7b072a4noda
14297640caaf912a7eefacc3e2108c5afd70f7b072a4noda            array3[0] = (byte) 0x0;
14307640caaf912a7eefacc3e2108c5afd70f7b072a4noda            array3[1] = (byte) 0x6;
14317640caaf912a7eefacc3e2108c5afd70f7b072a4noda            hdrEncodeLen = encodeUint32(array3.length, null, 2);
14327640caaf912a7eefacc3e2108c5afd70f7b072a4noda            hdrEncodeLen = encodeUint32(array3.length - hdrEncodeLen - 2, array3, 2);
14337640caaf912a7eefacc3e2108c5afd70f7b072a4noda
14347640caaf912a7eefacc3e2108c5afd70f7b072a4noda            // encode content type
14357640caaf912a7eefacc3e2108c5afd70f7b072a4noda            int contentLen = mContentTypeName.length();
14367640caaf912a7eefacc3e2108c5afd70f7b072a4noda            int next = 2 + hdrEncodeLen;
14377640caaf912a7eefacc3e2108c5afd70f7b072a4noda            mWspContentTypeStart = mGsmHeader.length + mUserDataHeader.length + next;
14387640caaf912a7eefacc3e2108c5afd70f7b072a4noda            // next += encodeUint32(contentLen, array3, next);
14397640caaf912a7eefacc3e2108c5afd70f7b072a4noda            int i;
14407640caaf912a7eefacc3e2108c5afd70f7b072a4noda            Log.d(LOG_TAG, "mContentTypeName = " + mContentTypeName
14417640caaf912a7eefacc3e2108c5afd70f7b072a4noda                    + ", contentLen = " + contentLen);
14427640caaf912a7eefacc3e2108c5afd70f7b072a4noda
14437640caaf912a7eefacc3e2108c5afd70f7b072a4noda            for (i = 0; i < contentLen; i++) {
14447640caaf912a7eefacc3e2108c5afd70f7b072a4noda                array3[next + i] = (byte) mContentTypeName.charAt(i);
14457640caaf912a7eefacc3e2108c5afd70f7b072a4noda            }
14467640caaf912a7eefacc3e2108c5afd70f7b072a4noda            array3[next + i] = (byte) 0x0;
14477640caaf912a7eefacc3e2108c5afd70f7b072a4noda
14487640caaf912a7eefacc3e2108c5afd70f7b072a4noda            createRandomWspHeader(array3, rd, next + contentLen + 1, false);
14497640caaf912a7eefacc3e2108c5afd70f7b072a4noda            mWspHeaderStart = mGsmHeader.length + mUserDataHeader.length
14507640caaf912a7eefacc3e2108c5afd70f7b072a4noda                    + next + contentLen + 1;
14517640caaf912a7eefacc3e2108c5afd70f7b072a4noda            mWspHeaderLen = array3.length;
14527640caaf912a7eefacc3e2108c5afd70f7b072a4noda
14537640caaf912a7eefacc3e2108c5afd70f7b072a4noda            mWspHeader = array3;
14547640caaf912a7eefacc3e2108c5afd70f7b072a4noda            break;
14557640caaf912a7eefacc3e2108c5afd70f7b072a4noda
14567640caaf912a7eefacc3e2108c5afd70f7b072a4noda            // random wsp header w/ OMA content type, OMA app ID
14577640caaf912a7eefacc3e2108c5afd70f7b072a4noda        case 8:
14587640caaf912a7eefacc3e2108c5afd70f7b072a4noda            rd = new Random();
14597640caaf912a7eefacc3e2108c5afd70f7b072a4noda            arrSize = 150 + rd.nextInt(100);
14607640caaf912a7eefacc3e2108c5afd70f7b072a4noda            array3 = new byte[arrSize];
14617640caaf912a7eefacc3e2108c5afd70f7b072a4noda
14627640caaf912a7eefacc3e2108c5afd70f7b072a4noda            array3[0] = (byte) 0x0;
14637640caaf912a7eefacc3e2108c5afd70f7b072a4noda            array3[1] = (byte) 0x6;
14647640caaf912a7eefacc3e2108c5afd70f7b072a4noda            hdrEncodeLen = encodeUint32(array3.length, null, 2);
14657640caaf912a7eefacc3e2108c5afd70f7b072a4noda            hdrEncodeLen = encodeUint32(array3.length - hdrEncodeLen - 2, array3, 2);
14667640caaf912a7eefacc3e2108c5afd70f7b072a4noda
14677640caaf912a7eefacc3e2108c5afd70f7b072a4noda            // encode content type
14687640caaf912a7eefacc3e2108c5afd70f7b072a4noda            contentLen = mContentTypeName.length();
14697640caaf912a7eefacc3e2108c5afd70f7b072a4noda            next = 2 + hdrEncodeLen;
14707640caaf912a7eefacc3e2108c5afd70f7b072a4noda            mWspContentTypeStart = mGsmHeader.length + mUserDataHeader.length + next;
14717640caaf912a7eefacc3e2108c5afd70f7b072a4noda            // next += encodeUint32(contentLen, array3, next);
14727640caaf912a7eefacc3e2108c5afd70f7b072a4noda            Log.d(LOG_TAG, "mContentTypeName = " + mContentTypeName
14737640caaf912a7eefacc3e2108c5afd70f7b072a4noda                    + ", contentLen = " + contentLen);
14747640caaf912a7eefacc3e2108c5afd70f7b072a4noda
14757640caaf912a7eefacc3e2108c5afd70f7b072a4noda            for (i = 0; i < contentLen; i++) {
14767640caaf912a7eefacc3e2108c5afd70f7b072a4noda                array3[next + i] = (byte) mContentTypeName.charAt(i);
14777640caaf912a7eefacc3e2108c5afd70f7b072a4noda            }
14787640caaf912a7eefacc3e2108c5afd70f7b072a4noda            array3[next + i] = (byte) 0x0;
14797640caaf912a7eefacc3e2108c5afd70f7b072a4noda
14807640caaf912a7eefacc3e2108c5afd70f7b072a4noda            createRandomWspHeaderStrAppId(array3, rd, next + contentLen + 1, false);
14817640caaf912a7eefacc3e2108c5afd70f7b072a4noda            mWspHeaderStart = mGsmHeader.length + mUserDataHeader.length
14827640caaf912a7eefacc3e2108c5afd70f7b072a4noda                    + next + contentLen + 1;
14837640caaf912a7eefacc3e2108c5afd70f7b072a4noda            mWspHeaderLen = array3.length;
14847640caaf912a7eefacc3e2108c5afd70f7b072a4noda
14857640caaf912a7eefacc3e2108c5afd70f7b072a4noda            mWspHeader = array3;
14867640caaf912a7eefacc3e2108c5afd70f7b072a4noda            break;
14877640caaf912a7eefacc3e2108c5afd70f7b072a4noda
14887640caaf912a7eefacc3e2108c5afd70f7b072a4noda        default:
14897640caaf912a7eefacc3e2108c5afd70f7b072a4noda            return null;
14907640caaf912a7eefacc3e2108c5afd70f7b072a4noda        }
14917640caaf912a7eefacc3e2108c5afd70f7b072a4noda        array = new byte[mGsmHeader.length + mUserDataHeader.length + mWspHeader.length
14927640caaf912a7eefacc3e2108c5afd70f7b072a4noda                + mMessageBody.length];
14937640caaf912a7eefacc3e2108c5afd70f7b072a4noda        System.arraycopy(mGsmHeader, 0, array, 0, mGsmHeader.length);
14947640caaf912a7eefacc3e2108c5afd70f7b072a4noda        System.arraycopy(mUserDataHeader, 0, array,
14957640caaf912a7eefacc3e2108c5afd70f7b072a4noda                mGsmHeader.length, mUserDataHeader.length);
14967640caaf912a7eefacc3e2108c5afd70f7b072a4noda        System.arraycopy(mWspHeader, 0, array,
14977640caaf912a7eefacc3e2108c5afd70f7b072a4noda                mGsmHeader.length + mUserDataHeader.length, mWspHeader.length);
14987640caaf912a7eefacc3e2108c5afd70f7b072a4noda        System.arraycopy(mMessageBody, 0, array,
1499790ac852b365ab77a895da9b48f925caf8fde729Tom Taylor                mGsmHeader.length + mUserDataHeader.length + mWspHeader.length,
15007640caaf912a7eefacc3e2108c5afd70f7b072a4noda                mMessageBody.length);
15017640caaf912a7eefacc3e2108c5afd70f7b072a4noda        return array;
15027640caaf912a7eefacc3e2108c5afd70f7b072a4noda
15037640caaf912a7eefacc3e2108c5afd70f7b072a4noda    }
15047640caaf912a7eefacc3e2108c5afd70f7b072a4noda
15057640caaf912a7eefacc3e2108c5afd70f7b072a4noda    Intent createIntent(int pduType, int tranId) {
15067640caaf912a7eefacc3e2108c5afd70f7b072a4noda        Intent intent = new Intent();
15077640caaf912a7eefacc3e2108c5afd70f7b072a4noda        intent.putExtra("transactionId", tranId);
15087640caaf912a7eefacc3e2108c5afd70f7b072a4noda        intent.putExtra("pduType", pduType);
15097640caaf912a7eefacc3e2108c5afd70f7b072a4noda        intent.putExtra("header", mGsmHeader);
15107640caaf912a7eefacc3e2108c5afd70f7b072a4noda        intent.putExtra("data", mMessageBody);
15117640caaf912a7eefacc3e2108c5afd70f7b072a4noda        // intent.putExtra("contentTypeParameters", null);
15127640caaf912a7eefacc3e2108c5afd70f7b072a4noda        return intent;
15137640caaf912a7eefacc3e2108c5afd70f7b072a4noda    }
15147640caaf912a7eefacc3e2108c5afd70f7b072a4noda
15157640caaf912a7eefacc3e2108c5afd70f7b072a4noda    /**
15167640caaf912a7eefacc3e2108c5afd70f7b072a4noda     * Message processing test, start activity
15177640caaf912a7eefacc3e2108c5afd70f7b072a4noda     */
15187640caaf912a7eefacc3e2108c5afd70f7b072a4noda    public void testProcessMsg1() {
15197640caaf912a7eefacc3e2108c5afd70f7b072a4noda        byte[] pdu = createPDU(1);
15207640caaf912a7eefacc3e2108c5afd70f7b072a4noda        int headerLen = pdu.length -
15217640caaf912a7eefacc3e2108c5afd70f7b072a4noda                (mGsmHeader.length + mUserDataHeader.length + mMessageBody.length);
15227640caaf912a7eefacc3e2108c5afd70f7b072a4noda        int pduType = 6;
15237640caaf912a7eefacc3e2108c5afd70f7b072a4noda        int tranId = 0;
15247640caaf912a7eefacc3e2108c5afd70f7b072a4noda        String originalPackageName = mPackageName;
15257640caaf912a7eefacc3e2108c5afd70f7b072a4noda        String originalClassName = mClassName;
15267640caaf912a7eefacc3e2108c5afd70f7b072a4noda
15277640caaf912a7eefacc3e2108c5afd70f7b072a4noda        try {
15287640caaf912a7eefacc3e2108c5afd70f7b072a4noda
15297640caaf912a7eefacc3e2108c5afd70f7b072a4noda            mClassName = "com.android.smspush.unitTests.ReceiverActivity";
15307640caaf912a7eefacc3e2108c5afd70f7b072a4noda
15317640caaf912a7eefacc3e2108c5afd70f7b072a4noda            // set up data
15327640caaf912a7eefacc3e2108c5afd70f7b072a4noda            IWapPushManager iwapman = getInterface();
15337640caaf912a7eefacc3e2108c5afd70f7b072a4noda            iwapman.addPackage(Integer.toString(mAppIdValue),
15347640caaf912a7eefacc3e2108c5afd70f7b072a4noda                    Integer.toString(mContentTypeValue), mPackageName, mClassName,
15357640caaf912a7eefacc3e2108c5afd70f7b072a4noda                    WapPushManagerParams.APP_TYPE_ACTIVITY, false, false);
15367640caaf912a7eefacc3e2108c5afd70f7b072a4noda
15377640caaf912a7eefacc3e2108c5afd70f7b072a4noda            assertTrue((iwapman.processMessage(
15387640caaf912a7eefacc3e2108c5afd70f7b072a4noda                    Integer.toString(mAppIdValue),
15397640caaf912a7eefacc3e2108c5afd70f7b072a4noda                    Integer.toString(mContentTypeValue),
15407640caaf912a7eefacc3e2108c5afd70f7b072a4noda                    createIntent(pduType, tranId))
15417640caaf912a7eefacc3e2108c5afd70f7b072a4noda                    & WapPushManagerParams.MESSAGE_HANDLED) ==
15427640caaf912a7eefacc3e2108c5afd70f7b072a4noda                    WapPushManagerParams.MESSAGE_HANDLED);
15437640caaf912a7eefacc3e2108c5afd70f7b072a4noda
15447640caaf912a7eefacc3e2108c5afd70f7b072a4noda            // clean up data
15457640caaf912a7eefacc3e2108c5afd70f7b072a4noda            iwapman.deletePackage(Integer.toString(mAppIdValue),
15467640caaf912a7eefacc3e2108c5afd70f7b072a4noda                    Integer.toString(mContentTypeValue), mPackageName, mClassName);
15477640caaf912a7eefacc3e2108c5afd70f7b072a4noda
15487640caaf912a7eefacc3e2108c5afd70f7b072a4noda        } catch (RemoteException e) {
15497640caaf912a7eefacc3e2108c5afd70f7b072a4noda            assertTrue(false);
15507640caaf912a7eefacc3e2108c5afd70f7b072a4noda        }
15517640caaf912a7eefacc3e2108c5afd70f7b072a4noda
15527640caaf912a7eefacc3e2108c5afd70f7b072a4noda        mPackageName = originalPackageName;
15537640caaf912a7eefacc3e2108c5afd70f7b072a4noda        mClassName = originalClassName;
15547640caaf912a7eefacc3e2108c5afd70f7b072a4noda    }
15557640caaf912a7eefacc3e2108c5afd70f7b072a4noda
15567640caaf912a7eefacc3e2108c5afd70f7b072a4noda    /**
15577640caaf912a7eefacc3e2108c5afd70f7b072a4noda     * Message processing test, start service
15587640caaf912a7eefacc3e2108c5afd70f7b072a4noda     */
15597640caaf912a7eefacc3e2108c5afd70f7b072a4noda    public void testProcessMsg2() {
15607640caaf912a7eefacc3e2108c5afd70f7b072a4noda        byte[] pdu = createPDU(1);
15617640caaf912a7eefacc3e2108c5afd70f7b072a4noda        int headerLen = pdu.length - (mGsmHeader.length +
15627640caaf912a7eefacc3e2108c5afd70f7b072a4noda                mUserDataHeader.length + mMessageBody.length);
15637640caaf912a7eefacc3e2108c5afd70f7b072a4noda        int pduType = 6;
15647640caaf912a7eefacc3e2108c5afd70f7b072a4noda        int tranId = 0;
15657640caaf912a7eefacc3e2108c5afd70f7b072a4noda        String originalPackageName = mPackageName;
15667640caaf912a7eefacc3e2108c5afd70f7b072a4noda        String originalClassName = mClassName;
15677640caaf912a7eefacc3e2108c5afd70f7b072a4noda
15687640caaf912a7eefacc3e2108c5afd70f7b072a4noda        try {
15697640caaf912a7eefacc3e2108c5afd70f7b072a4noda
15707640caaf912a7eefacc3e2108c5afd70f7b072a4noda            mClassName = "com.android.smspush.unitTests.ReceiverService";
15717640caaf912a7eefacc3e2108c5afd70f7b072a4noda
15727640caaf912a7eefacc3e2108c5afd70f7b072a4noda            // set up data
15737640caaf912a7eefacc3e2108c5afd70f7b072a4noda            IWapPushManager iwapman = getInterface();
15747640caaf912a7eefacc3e2108c5afd70f7b072a4noda
15757640caaf912a7eefacc3e2108c5afd70f7b072a4noda            iwapman.addPackage(Integer.toString(mAppIdValue),
15767640caaf912a7eefacc3e2108c5afd70f7b072a4noda                    Integer.toString(mContentTypeValue), mPackageName, mClassName,
15777640caaf912a7eefacc3e2108c5afd70f7b072a4noda                    WapPushManagerParams.APP_TYPE_SERVICE, false, false);
15787640caaf912a7eefacc3e2108c5afd70f7b072a4noda
15797640caaf912a7eefacc3e2108c5afd70f7b072a4noda            assertTrue((iwapman.processMessage(
15807640caaf912a7eefacc3e2108c5afd70f7b072a4noda                    Integer.toString(mAppIdValue),
15817640caaf912a7eefacc3e2108c5afd70f7b072a4noda                    Integer.toString(mContentTypeValue),
15827640caaf912a7eefacc3e2108c5afd70f7b072a4noda                    createIntent(pduType, tranId))
15837640caaf912a7eefacc3e2108c5afd70f7b072a4noda                    & WapPushManagerParams.MESSAGE_HANDLED) ==
15847640caaf912a7eefacc3e2108c5afd70f7b072a4noda                    WapPushManagerParams.MESSAGE_HANDLED);
15857640caaf912a7eefacc3e2108c5afd70f7b072a4noda
15867640caaf912a7eefacc3e2108c5afd70f7b072a4noda            // clean up data
15877640caaf912a7eefacc3e2108c5afd70f7b072a4noda            iwapman.deletePackage(Integer.toString(mAppIdValue),
15887640caaf912a7eefacc3e2108c5afd70f7b072a4noda                    Integer.toString(mContentTypeValue), mPackageName, mClassName);
15897640caaf912a7eefacc3e2108c5afd70f7b072a4noda
15907640caaf912a7eefacc3e2108c5afd70f7b072a4noda        } catch (RemoteException e) {
15917640caaf912a7eefacc3e2108c5afd70f7b072a4noda            assertTrue(false);
15927640caaf912a7eefacc3e2108c5afd70f7b072a4noda        }
15937640caaf912a7eefacc3e2108c5afd70f7b072a4noda
15947640caaf912a7eefacc3e2108c5afd70f7b072a4noda        mPackageName = originalPackageName;
15957640caaf912a7eefacc3e2108c5afd70f7b072a4noda        mClassName = originalClassName;
15967640caaf912a7eefacc3e2108c5afd70f7b072a4noda    }
15977640caaf912a7eefacc3e2108c5afd70f7b072a4noda
15987640caaf912a7eefacc3e2108c5afd70f7b072a4noda    /**
15997640caaf912a7eefacc3e2108c5afd70f7b072a4noda     * Message processing test, no signature
16007640caaf912a7eefacc3e2108c5afd70f7b072a4noda     */
16017640caaf912a7eefacc3e2108c5afd70f7b072a4noda    public void testProcessMsg3() {
16027640caaf912a7eefacc3e2108c5afd70f7b072a4noda        byte[] pdu = createPDU(1);
16037640caaf912a7eefacc3e2108c5afd70f7b072a4noda        int headerLen = pdu.length -
16047640caaf912a7eefacc3e2108c5afd70f7b072a4noda                (mGsmHeader.length + mUserDataHeader.length + mMessageBody.length);
16057640caaf912a7eefacc3e2108c5afd70f7b072a4noda        int pduType = 6;
16067640caaf912a7eefacc3e2108c5afd70f7b072a4noda        int tranId = 0;
16077640caaf912a7eefacc3e2108c5afd70f7b072a4noda        String originalPackageName = mPackageName;
16087640caaf912a7eefacc3e2108c5afd70f7b072a4noda        String originalClassName = mClassName;
16097640caaf912a7eefacc3e2108c5afd70f7b072a4noda
16107640caaf912a7eefacc3e2108c5afd70f7b072a4noda        try {
16117640caaf912a7eefacc3e2108c5afd70f7b072a4noda
16127640caaf912a7eefacc3e2108c5afd70f7b072a4noda            mPackageName = "com.android.development";
16137640caaf912a7eefacc3e2108c5afd70f7b072a4noda            mClassName = "com.android.development.Development";
16147640caaf912a7eefacc3e2108c5afd70f7b072a4noda
16157640caaf912a7eefacc3e2108c5afd70f7b072a4noda            // set up data
16167640caaf912a7eefacc3e2108c5afd70f7b072a4noda            IWapPushManager iwapman = getInterface();
16177640caaf912a7eefacc3e2108c5afd70f7b072a4noda
16187640caaf912a7eefacc3e2108c5afd70f7b072a4noda            iwapman.addPackage(Integer.toString(mAppIdValue),
16197640caaf912a7eefacc3e2108c5afd70f7b072a4noda                    Integer.toString(mContentTypeValue), mPackageName, mClassName,
16207640caaf912a7eefacc3e2108c5afd70f7b072a4noda                    WapPushManagerParams.APP_TYPE_SERVICE, true, false);
16217640caaf912a7eefacc3e2108c5afd70f7b072a4noda
16227640caaf912a7eefacc3e2108c5afd70f7b072a4noda            assertFalse((iwapman.processMessage(
16237640caaf912a7eefacc3e2108c5afd70f7b072a4noda                    Integer.toString(mAppIdValue),
16247640caaf912a7eefacc3e2108c5afd70f7b072a4noda                    Integer.toString(mContentTypeValue),
16257640caaf912a7eefacc3e2108c5afd70f7b072a4noda                    createIntent(pduType, tranId))
16267640caaf912a7eefacc3e2108c5afd70f7b072a4noda                    & WapPushManagerParams.MESSAGE_HANDLED) ==
16277640caaf912a7eefacc3e2108c5afd70f7b072a4noda                    WapPushManagerParams.MESSAGE_HANDLED);
16287640caaf912a7eefacc3e2108c5afd70f7b072a4noda
16297640caaf912a7eefacc3e2108c5afd70f7b072a4noda            // clean up data
16307640caaf912a7eefacc3e2108c5afd70f7b072a4noda            iwapman.deletePackage(Integer.toString(mAppIdValue),
16317640caaf912a7eefacc3e2108c5afd70f7b072a4noda                    Integer.toString(mContentTypeValue), mPackageName, mClassName);
16327640caaf912a7eefacc3e2108c5afd70f7b072a4noda
16337640caaf912a7eefacc3e2108c5afd70f7b072a4noda        } catch (RemoteException e) {
16347640caaf912a7eefacc3e2108c5afd70f7b072a4noda            assertTrue(false);
16357640caaf912a7eefacc3e2108c5afd70f7b072a4noda        }
16367640caaf912a7eefacc3e2108c5afd70f7b072a4noda
16377640caaf912a7eefacc3e2108c5afd70f7b072a4noda        mPackageName = originalPackageName;
16387640caaf912a7eefacc3e2108c5afd70f7b072a4noda        mClassName = originalClassName;
16397640caaf912a7eefacc3e2108c5afd70f7b072a4noda    }
16407640caaf912a7eefacc3e2108c5afd70f7b072a4noda
16417640caaf912a7eefacc3e2108c5afd70f7b072a4noda    IDataVerify getVerifyInterface() {
16427640caaf912a7eefacc3e2108c5afd70f7b072a4noda        while (mIVerify == null) {
16437640caaf912a7eefacc3e2108c5afd70f7b072a4noda            // wait for the activity receive data.
16447640caaf912a7eefacc3e2108c5afd70f7b072a4noda            try {
16457640caaf912a7eefacc3e2108c5afd70f7b072a4noda                Thread.sleep(TIME_WAIT);
16467640caaf912a7eefacc3e2108c5afd70f7b072a4noda            } catch (InterruptedException e) {}
16477640caaf912a7eefacc3e2108c5afd70f7b072a4noda        }
16487640caaf912a7eefacc3e2108c5afd70f7b072a4noda        return mIVerify;
16497640caaf912a7eefacc3e2108c5afd70f7b072a4noda    }
16507640caaf912a7eefacc3e2108c5afd70f7b072a4noda
16517640caaf912a7eefacc3e2108c5afd70f7b072a4noda
16527640caaf912a7eefacc3e2108c5afd70f7b072a4noda    /**
16537640caaf912a7eefacc3e2108c5afd70f7b072a4noda     * Message processing test, received body data verification test
16547640caaf912a7eefacc3e2108c5afd70f7b072a4noda     */
16557640caaf912a7eefacc3e2108c5afd70f7b072a4noda    public void testProcessMsg4() {
16567640caaf912a7eefacc3e2108c5afd70f7b072a4noda        byte[] originalMessageBody = mMessageBody;
16577640caaf912a7eefacc3e2108c5afd70f7b072a4noda        mMessageBody = new byte[] {
16587640caaf912a7eefacc3e2108c5afd70f7b072a4noda                (byte) 0xee,
16597640caaf912a7eefacc3e2108c5afd70f7b072a4noda                (byte) 0xff,
16607640caaf912a7eefacc3e2108c5afd70f7b072a4noda                (byte) 0xee,
16617640caaf912a7eefacc3e2108c5afd70f7b072a4noda                (byte) 0xff,
16627640caaf912a7eefacc3e2108c5afd70f7b072a4noda                (byte) 0xee,
16637640caaf912a7eefacc3e2108c5afd70f7b072a4noda                (byte) 0xff,
16647640caaf912a7eefacc3e2108c5afd70f7b072a4noda                (byte) 0xee,
16657640caaf912a7eefacc3e2108c5afd70f7b072a4noda                (byte) 0xff,
16667640caaf912a7eefacc3e2108c5afd70f7b072a4noda                (byte) 0xee,
16677640caaf912a7eefacc3e2108c5afd70f7b072a4noda                (byte) 0xff,
16687640caaf912a7eefacc3e2108c5afd70f7b072a4noda                (byte) 0xee,
16697640caaf912a7eefacc3e2108c5afd70f7b072a4noda                (byte) 0xff,
16707640caaf912a7eefacc3e2108c5afd70f7b072a4noda        };
16717640caaf912a7eefacc3e2108c5afd70f7b072a4noda
16727640caaf912a7eefacc3e2108c5afd70f7b072a4noda        byte[] pdu = createPDU(1);
16737640caaf912a7eefacc3e2108c5afd70f7b072a4noda        int headerLen = pdu.length -
16747640caaf912a7eefacc3e2108c5afd70f7b072a4noda                (mGsmHeader.length + mUserDataHeader.length + mMessageBody.length);
16757640caaf912a7eefacc3e2108c5afd70f7b072a4noda        int pduType = 6;
16767640caaf912a7eefacc3e2108c5afd70f7b072a4noda        int tranId = 0;
16777640caaf912a7eefacc3e2108c5afd70f7b072a4noda        String originalPackageName = mPackageName;
16787640caaf912a7eefacc3e2108c5afd70f7b072a4noda        String originalClassName = mClassName;
16797640caaf912a7eefacc3e2108c5afd70f7b072a4noda
16807640caaf912a7eefacc3e2108c5afd70f7b072a4noda        try {
16817640caaf912a7eefacc3e2108c5afd70f7b072a4noda            IWapPushManager iwapman = getInterface();
16827640caaf912a7eefacc3e2108c5afd70f7b072a4noda            IDataVerify dataverify = getVerifyInterface();
16837640caaf912a7eefacc3e2108c5afd70f7b072a4noda
16847640caaf912a7eefacc3e2108c5afd70f7b072a4noda            dataverify.resetData();
16857640caaf912a7eefacc3e2108c5afd70f7b072a4noda
16867640caaf912a7eefacc3e2108c5afd70f7b072a4noda            // set up data
16877640caaf912a7eefacc3e2108c5afd70f7b072a4noda            mClassName = "com.android.smspush.unitTests.ReceiverActivity";
16887640caaf912a7eefacc3e2108c5afd70f7b072a4noda            iwapman.addPackage(Integer.toString(mAppIdValue),
16897640caaf912a7eefacc3e2108c5afd70f7b072a4noda                    Integer.toString(mContentTypeValue), mPackageName, mClassName,
16907640caaf912a7eefacc3e2108c5afd70f7b072a4noda                    WapPushManagerParams.APP_TYPE_ACTIVITY, false, false);
16917640caaf912a7eefacc3e2108c5afd70f7b072a4noda
16927640caaf912a7eefacc3e2108c5afd70f7b072a4noda            iwapman.processMessage(
16937640caaf912a7eefacc3e2108c5afd70f7b072a4noda                    Integer.toString(mAppIdValue),
16947640caaf912a7eefacc3e2108c5afd70f7b072a4noda                    Integer.toString(mContentTypeValue),
16957640caaf912a7eefacc3e2108c5afd70f7b072a4noda                    createIntent(pduType, tranId));
16967640caaf912a7eefacc3e2108c5afd70f7b072a4noda
16977640caaf912a7eefacc3e2108c5afd70f7b072a4noda            // clean up data
16987640caaf912a7eefacc3e2108c5afd70f7b072a4noda            iwapman.deletePackage(Integer.toString(mAppIdValue),
16997640caaf912a7eefacc3e2108c5afd70f7b072a4noda                    Integer.toString(mContentTypeValue), mPackageName, mClassName);
17007640caaf912a7eefacc3e2108c5afd70f7b072a4noda
17017640caaf912a7eefacc3e2108c5afd70f7b072a4noda            assertTrue(dataverify.verifyData(mMessageBody));
17027640caaf912a7eefacc3e2108c5afd70f7b072a4noda
17037640caaf912a7eefacc3e2108c5afd70f7b072a4noda            // set up data
17047640caaf912a7eefacc3e2108c5afd70f7b072a4noda            dataverify.resetData();
17057640caaf912a7eefacc3e2108c5afd70f7b072a4noda            mClassName = "com.android.smspush.unitTests.ReceiverService";
17067640caaf912a7eefacc3e2108c5afd70f7b072a4noda            mMessageBody = new byte[] {
17077640caaf912a7eefacc3e2108c5afd70f7b072a4noda                    (byte) 0xaa,
17087640caaf912a7eefacc3e2108c5afd70f7b072a4noda                    (byte) 0xbb,
17097640caaf912a7eefacc3e2108c5afd70f7b072a4noda                    (byte) 0x11,
17107640caaf912a7eefacc3e2108c5afd70f7b072a4noda                    (byte) 0x22,
17117640caaf912a7eefacc3e2108c5afd70f7b072a4noda                    (byte) 0xaa,
17127640caaf912a7eefacc3e2108c5afd70f7b072a4noda                    (byte) 0xbb,
17137640caaf912a7eefacc3e2108c5afd70f7b072a4noda                    (byte) 0x11,
17147640caaf912a7eefacc3e2108c5afd70f7b072a4noda                    (byte) 0x22,
17157640caaf912a7eefacc3e2108c5afd70f7b072a4noda                    (byte) 0xaa,
17167640caaf912a7eefacc3e2108c5afd70f7b072a4noda                    (byte) 0xbb,
17177640caaf912a7eefacc3e2108c5afd70f7b072a4noda                    (byte) 0x11,
17187640caaf912a7eefacc3e2108c5afd70f7b072a4noda                    (byte) 0x22,
17197640caaf912a7eefacc3e2108c5afd70f7b072a4noda                    (byte) 0xaa,
17207640caaf912a7eefacc3e2108c5afd70f7b072a4noda                    (byte) 0xbb,
17217640caaf912a7eefacc3e2108c5afd70f7b072a4noda                    (byte) 0x11,
17227640caaf912a7eefacc3e2108c5afd70f7b072a4noda                    (byte) 0x22,
17237640caaf912a7eefacc3e2108c5afd70f7b072a4noda                    (byte) 0xaa,
17247640caaf912a7eefacc3e2108c5afd70f7b072a4noda                    (byte) 0xbb,
17257640caaf912a7eefacc3e2108c5afd70f7b072a4noda                    (byte) 0x11,
17267640caaf912a7eefacc3e2108c5afd70f7b072a4noda                    (byte) 0x22,
17277640caaf912a7eefacc3e2108c5afd70f7b072a4noda                    (byte) 0xaa,
17287640caaf912a7eefacc3e2108c5afd70f7b072a4noda                    (byte) 0xbb,
17297640caaf912a7eefacc3e2108c5afd70f7b072a4noda                    (byte) 0x11,
17307640caaf912a7eefacc3e2108c5afd70f7b072a4noda                    (byte) 0x22,
17317640caaf912a7eefacc3e2108c5afd70f7b072a4noda            };
17327640caaf912a7eefacc3e2108c5afd70f7b072a4noda            pdu = createPDU(1);
17337640caaf912a7eefacc3e2108c5afd70f7b072a4noda            iwapman.addPackage(Integer.toString(mAppIdValue),
17347640caaf912a7eefacc3e2108c5afd70f7b072a4noda                    Integer.toString(mContentTypeValue), mPackageName, mClassName,
17357640caaf912a7eefacc3e2108c5afd70f7b072a4noda                    WapPushManagerParams.APP_TYPE_SERVICE, false, false);
17367640caaf912a7eefacc3e2108c5afd70f7b072a4noda
17377640caaf912a7eefacc3e2108c5afd70f7b072a4noda            iwapman.processMessage(
17387640caaf912a7eefacc3e2108c5afd70f7b072a4noda                    Integer.toString(mAppIdValue),
17397640caaf912a7eefacc3e2108c5afd70f7b072a4noda                    Integer.toString(mContentTypeValue),
17407640caaf912a7eefacc3e2108c5afd70f7b072a4noda                    createIntent(pduType, tranId));
17417640caaf912a7eefacc3e2108c5afd70f7b072a4noda
17427640caaf912a7eefacc3e2108c5afd70f7b072a4noda            // clean up data
17437640caaf912a7eefacc3e2108c5afd70f7b072a4noda            iwapman.deletePackage(Integer.toString(mAppIdValue),
17447640caaf912a7eefacc3e2108c5afd70f7b072a4noda                    Integer.toString(mContentTypeValue), mPackageName, mClassName);
17457640caaf912a7eefacc3e2108c5afd70f7b072a4noda
17467640caaf912a7eefacc3e2108c5afd70f7b072a4noda            // Log.d(LOG_TAG, HexDump.dumpHexString(mMessageBody));
17477640caaf912a7eefacc3e2108c5afd70f7b072a4noda            assertTrue(dataverify.verifyData(mMessageBody));
17487640caaf912a7eefacc3e2108c5afd70f7b072a4noda        } catch (RemoteException e) {
17497640caaf912a7eefacc3e2108c5afd70f7b072a4noda            assertTrue(false);
17507640caaf912a7eefacc3e2108c5afd70f7b072a4noda        }
17517640caaf912a7eefacc3e2108c5afd70f7b072a4noda
17527640caaf912a7eefacc3e2108c5afd70f7b072a4noda        mPackageName = originalPackageName;
17537640caaf912a7eefacc3e2108c5afd70f7b072a4noda        mClassName = originalClassName;
17547640caaf912a7eefacc3e2108c5afd70f7b072a4noda        mMessageBody = originalMessageBody;
17557640caaf912a7eefacc3e2108c5afd70f7b072a4noda    }
17567640caaf912a7eefacc3e2108c5afd70f7b072a4noda
17577640caaf912a7eefacc3e2108c5afd70f7b072a4noda    /**
17587640caaf912a7eefacc3e2108c5afd70f7b072a4noda     * Message processing test, send invalid sms data
17597640caaf912a7eefacc3e2108c5afd70f7b072a4noda     */
17607640caaf912a7eefacc3e2108c5afd70f7b072a4noda    public void testProcessMsg5() {
17617640caaf912a7eefacc3e2108c5afd70f7b072a4noda        byte[] pdu = createPDU(2);
17627640caaf912a7eefacc3e2108c5afd70f7b072a4noda        int headerLen = pdu.length -
17637640caaf912a7eefacc3e2108c5afd70f7b072a4noda                (mGsmHeader.length + mUserDataHeader.length + mMessageBody.length);
17647640caaf912a7eefacc3e2108c5afd70f7b072a4noda        int pduType = 6;
17657640caaf912a7eefacc3e2108c5afd70f7b072a4noda        int tranId = 0;
17667640caaf912a7eefacc3e2108c5afd70f7b072a4noda        String originalPackageName = mPackageName;
17677640caaf912a7eefacc3e2108c5afd70f7b072a4noda        String originalClassName = mClassName;
17687640caaf912a7eefacc3e2108c5afd70f7b072a4noda
17697640caaf912a7eefacc3e2108c5afd70f7b072a4noda        try {
17707640caaf912a7eefacc3e2108c5afd70f7b072a4noda
17717640caaf912a7eefacc3e2108c5afd70f7b072a4noda            mClassName = "com.android.smspush.unitTests.ReceiverActivity";
17727640caaf912a7eefacc3e2108c5afd70f7b072a4noda
17737640caaf912a7eefacc3e2108c5afd70f7b072a4noda            // set up data
17747640caaf912a7eefacc3e2108c5afd70f7b072a4noda            IWapPushManager iwapman = getInterface();
17757640caaf912a7eefacc3e2108c5afd70f7b072a4noda            iwapman.addPackage(Integer.toString(mAppIdValue),
17767640caaf912a7eefacc3e2108c5afd70f7b072a4noda                    Integer.toString(mContentTypeValue), mPackageName, mClassName,
17777640caaf912a7eefacc3e2108c5afd70f7b072a4noda                    WapPushManagerParams.APP_TYPE_ACTIVITY, false, false);
17787640caaf912a7eefacc3e2108c5afd70f7b072a4noda
17797640caaf912a7eefacc3e2108c5afd70f7b072a4noda            assertTrue((iwapman.processMessage(
17807640caaf912a7eefacc3e2108c5afd70f7b072a4noda                    Integer.toString(mAppIdValue),
17817640caaf912a7eefacc3e2108c5afd70f7b072a4noda                    Integer.toString(mContentTypeValue),
17827640caaf912a7eefacc3e2108c5afd70f7b072a4noda                    createIntent(pduType, tranId))
17837640caaf912a7eefacc3e2108c5afd70f7b072a4noda                    & WapPushManagerParams.MESSAGE_HANDLED) ==
17847640caaf912a7eefacc3e2108c5afd70f7b072a4noda                    WapPushManagerParams.MESSAGE_HANDLED);
17857640caaf912a7eefacc3e2108c5afd70f7b072a4noda
17867640caaf912a7eefacc3e2108c5afd70f7b072a4noda            // clean up data
17877640caaf912a7eefacc3e2108c5afd70f7b072a4noda            iwapman.deletePackage(Integer.toString(mAppIdValue),
17887640caaf912a7eefacc3e2108c5afd70f7b072a4noda                    Integer.toString(mContentTypeValue), mPackageName, mClassName);
17897640caaf912a7eefacc3e2108c5afd70f7b072a4noda
17907640caaf912a7eefacc3e2108c5afd70f7b072a4noda        } catch (RemoteException e) {
17917640caaf912a7eefacc3e2108c5afd70f7b072a4noda            assertTrue(false);
17927640caaf912a7eefacc3e2108c5afd70f7b072a4noda        }
17937640caaf912a7eefacc3e2108c5afd70f7b072a4noda
17947640caaf912a7eefacc3e2108c5afd70f7b072a4noda        mPackageName = originalPackageName;
17957640caaf912a7eefacc3e2108c5afd70f7b072a4noda        mClassName = originalClassName;
17967640caaf912a7eefacc3e2108c5afd70f7b072a4noda    }
17977640caaf912a7eefacc3e2108c5afd70f7b072a4noda
17987640caaf912a7eefacc3e2108c5afd70f7b072a4noda    /**
17997640caaf912a7eefacc3e2108c5afd70f7b072a4noda     * Message processing test, no receiver application
18007640caaf912a7eefacc3e2108c5afd70f7b072a4noda     */
18017640caaf912a7eefacc3e2108c5afd70f7b072a4noda    public void testProcessMsg6() {
18027640caaf912a7eefacc3e2108c5afd70f7b072a4noda        byte[] pdu = createPDU(1);
18037640caaf912a7eefacc3e2108c5afd70f7b072a4noda        int headerLen = pdu.length -
18047640caaf912a7eefacc3e2108c5afd70f7b072a4noda                (mGsmHeader.length + mUserDataHeader.length + mMessageBody.length);
18057640caaf912a7eefacc3e2108c5afd70f7b072a4noda        int pduType = 6;
18067640caaf912a7eefacc3e2108c5afd70f7b072a4noda        int tranId = 0;
18077640caaf912a7eefacc3e2108c5afd70f7b072a4noda        String originalPackageName = mPackageName;
18087640caaf912a7eefacc3e2108c5afd70f7b072a4noda        String originalClassName = mClassName;
18097640caaf912a7eefacc3e2108c5afd70f7b072a4noda
18107640caaf912a7eefacc3e2108c5afd70f7b072a4noda        try {
18117640caaf912a7eefacc3e2108c5afd70f7b072a4noda
18127640caaf912a7eefacc3e2108c5afd70f7b072a4noda            mClassName = "com.android.smspush.unitTests.NoReceiver";
18137640caaf912a7eefacc3e2108c5afd70f7b072a4noda
18147640caaf912a7eefacc3e2108c5afd70f7b072a4noda            // set up data
18157640caaf912a7eefacc3e2108c5afd70f7b072a4noda            IWapPushManager iwapman = getInterface();
18167640caaf912a7eefacc3e2108c5afd70f7b072a4noda            iwapman.addPackage(Integer.toString(mAppIdValue),
18177640caaf912a7eefacc3e2108c5afd70f7b072a4noda                    Integer.toString(mContentTypeValue), mPackageName, mClassName,
18187640caaf912a7eefacc3e2108c5afd70f7b072a4noda                    WapPushManagerParams.APP_TYPE_ACTIVITY, false, false);
18197640caaf912a7eefacc3e2108c5afd70f7b072a4noda
18207640caaf912a7eefacc3e2108c5afd70f7b072a4noda            assertFalse((iwapman.processMessage(
18217640caaf912a7eefacc3e2108c5afd70f7b072a4noda                    Integer.toString(mAppIdValue),
18227640caaf912a7eefacc3e2108c5afd70f7b072a4noda                    Integer.toString(mContentTypeValue),
18237640caaf912a7eefacc3e2108c5afd70f7b072a4noda                    createIntent(pduType, tranId))
18247640caaf912a7eefacc3e2108c5afd70f7b072a4noda                    & WapPushManagerParams.MESSAGE_HANDLED) ==
18257640caaf912a7eefacc3e2108c5afd70f7b072a4noda                    WapPushManagerParams.MESSAGE_HANDLED);
18267640caaf912a7eefacc3e2108c5afd70f7b072a4noda
18277640caaf912a7eefacc3e2108c5afd70f7b072a4noda            // clean up data
18287640caaf912a7eefacc3e2108c5afd70f7b072a4noda            iwapman.deletePackage(Integer.toString(mAppIdValue),
18297640caaf912a7eefacc3e2108c5afd70f7b072a4noda                    Integer.toString(mContentTypeValue), mPackageName, mClassName);
18307640caaf912a7eefacc3e2108c5afd70f7b072a4noda
18317640caaf912a7eefacc3e2108c5afd70f7b072a4noda            // set up data
18327640caaf912a7eefacc3e2108c5afd70f7b072a4noda            iwapman.addPackage(Integer.toString(mAppIdValue),
18337640caaf912a7eefacc3e2108c5afd70f7b072a4noda                    Integer.toString(mContentTypeValue), mPackageName, mClassName,
18347640caaf912a7eefacc3e2108c5afd70f7b072a4noda                    WapPushManagerParams.APP_TYPE_SERVICE, false, false);
18357640caaf912a7eefacc3e2108c5afd70f7b072a4noda
18367640caaf912a7eefacc3e2108c5afd70f7b072a4noda            assertFalse((iwapman.processMessage(
18377640caaf912a7eefacc3e2108c5afd70f7b072a4noda                    Integer.toString(mAppIdValue),
18387640caaf912a7eefacc3e2108c5afd70f7b072a4noda                    Integer.toString(mContentTypeValue),
18397640caaf912a7eefacc3e2108c5afd70f7b072a4noda                    createIntent(pduType, tranId))
18407640caaf912a7eefacc3e2108c5afd70f7b072a4noda                    & WapPushManagerParams.MESSAGE_HANDLED) ==
18417640caaf912a7eefacc3e2108c5afd70f7b072a4noda                    WapPushManagerParams.MESSAGE_HANDLED);
18427640caaf912a7eefacc3e2108c5afd70f7b072a4noda
18437640caaf912a7eefacc3e2108c5afd70f7b072a4noda            // clean up data
18447640caaf912a7eefacc3e2108c5afd70f7b072a4noda            iwapman.deletePackage(Integer.toString(mAppIdValue),
18457640caaf912a7eefacc3e2108c5afd70f7b072a4noda                    Integer.toString(mContentTypeValue), mPackageName, mClassName);
18467640caaf912a7eefacc3e2108c5afd70f7b072a4noda
18477640caaf912a7eefacc3e2108c5afd70f7b072a4noda        } catch (RemoteException e) {
18487640caaf912a7eefacc3e2108c5afd70f7b072a4noda            assertTrue(false);
18497640caaf912a7eefacc3e2108c5afd70f7b072a4noda        }
18507640caaf912a7eefacc3e2108c5afd70f7b072a4noda
18517640caaf912a7eefacc3e2108c5afd70f7b072a4noda        mPackageName = originalPackageName;
18527640caaf912a7eefacc3e2108c5afd70f7b072a4noda        mClassName = originalClassName;
18537640caaf912a7eefacc3e2108c5afd70f7b072a4noda    }
18547640caaf912a7eefacc3e2108c5afd70f7b072a4noda
18557640caaf912a7eefacc3e2108c5afd70f7b072a4noda    /**
18567640caaf912a7eefacc3e2108c5afd70f7b072a4noda     * WspTypeDecoder test, normal pdu
18577640caaf912a7eefacc3e2108c5afd70f7b072a4noda     */
18587640caaf912a7eefacc3e2108c5afd70f7b072a4noda    public void testDecoder1() {
18597640caaf912a7eefacc3e2108c5afd70f7b072a4noda        boolean res;
18607640caaf912a7eefacc3e2108c5afd70f7b072a4noda        int originalAppIdValue = mAppIdValue;
18617640caaf912a7eefacc3e2108c5afd70f7b072a4noda        Random rd = new Random();
18627640caaf912a7eefacc3e2108c5afd70f7b072a4noda
18637640caaf912a7eefacc3e2108c5afd70f7b072a4noda        for (int i = 0; i < 10; i++) {
18647640caaf912a7eefacc3e2108c5afd70f7b072a4noda            mAppIdValue = rd.nextInt(0xFFFF);
18657640caaf912a7eefacc3e2108c5afd70f7b072a4noda            byte[] pdu = createPDU(1);
18667640caaf912a7eefacc3e2108c5afd70f7b072a4noda            WspTypeDecoder pduDecoder = new WspTypeDecoder(pdu);
18677640caaf912a7eefacc3e2108c5afd70f7b072a4noda
18687640caaf912a7eefacc3e2108c5afd70f7b072a4noda            res = pduDecoder.seekXWapApplicationId(mWspHeaderStart,
18697640caaf912a7eefacc3e2108c5afd70f7b072a4noda                    mWspHeaderStart + mWspHeaderLen - 1);
18707640caaf912a7eefacc3e2108c5afd70f7b072a4noda            assertTrue(res);
18717640caaf912a7eefacc3e2108c5afd70f7b072a4noda
18727640caaf912a7eefacc3e2108c5afd70f7b072a4noda            int index = (int) pduDecoder.getValue32();
18737640caaf912a7eefacc3e2108c5afd70f7b072a4noda            res = pduDecoder.decodeXWapApplicationId(index);
18747640caaf912a7eefacc3e2108c5afd70f7b072a4noda            assertTrue(res);
18757640caaf912a7eefacc3e2108c5afd70f7b072a4noda
18767640caaf912a7eefacc3e2108c5afd70f7b072a4noda            Log.d(LOG_TAG, "mAppIdValue: " + mAppIdValue
18777640caaf912a7eefacc3e2108c5afd70f7b072a4noda                    + ", val: " + pduDecoder.getValue32());
18787640caaf912a7eefacc3e2108c5afd70f7b072a4noda            assertTrue(mAppIdValue == (int) pduDecoder.getValue32());
18797640caaf912a7eefacc3e2108c5afd70f7b072a4noda        }
18807640caaf912a7eefacc3e2108c5afd70f7b072a4noda
18817640caaf912a7eefacc3e2108c5afd70f7b072a4noda        mAppIdValue = originalAppIdValue;
18827640caaf912a7eefacc3e2108c5afd70f7b072a4noda    }
18837640caaf912a7eefacc3e2108c5afd70f7b072a4noda
18847640caaf912a7eefacc3e2108c5afd70f7b072a4noda    /**
18857640caaf912a7eefacc3e2108c5afd70f7b072a4noda     * WspTypeDecoder test, no header
18867640caaf912a7eefacc3e2108c5afd70f7b072a4noda     */
18877640caaf912a7eefacc3e2108c5afd70f7b072a4noda    public void testDecoder2() {
18887640caaf912a7eefacc3e2108c5afd70f7b072a4noda        boolean res;
18897640caaf912a7eefacc3e2108c5afd70f7b072a4noda        int originalAppIdValue = mAppIdValue;
18907640caaf912a7eefacc3e2108c5afd70f7b072a4noda        Random rd = new Random();
18917640caaf912a7eefacc3e2108c5afd70f7b072a4noda
18927640caaf912a7eefacc3e2108c5afd70f7b072a4noda        mAppIdValue = rd.nextInt(0xFFFF);
18937640caaf912a7eefacc3e2108c5afd70f7b072a4noda        byte[] pdu = createPDU(2);
18947640caaf912a7eefacc3e2108c5afd70f7b072a4noda        WspTypeDecoder pduDecoder = new WspTypeDecoder(pdu);
18957640caaf912a7eefacc3e2108c5afd70f7b072a4noda
18967640caaf912a7eefacc3e2108c5afd70f7b072a4noda        res = pduDecoder.seekXWapApplicationId(mWspHeaderStart,
18977640caaf912a7eefacc3e2108c5afd70f7b072a4noda                mWspHeaderStart + mWspHeaderLen - 1);
18987640caaf912a7eefacc3e2108c5afd70f7b072a4noda        assertFalse(res);
18997640caaf912a7eefacc3e2108c5afd70f7b072a4noda
19007640caaf912a7eefacc3e2108c5afd70f7b072a4noda        mAppIdValue = originalAppIdValue;
19017640caaf912a7eefacc3e2108c5afd70f7b072a4noda    }
19027640caaf912a7eefacc3e2108c5afd70f7b072a4noda
19037640caaf912a7eefacc3e2108c5afd70f7b072a4noda    /**
19047640caaf912a7eefacc3e2108c5afd70f7b072a4noda     * WspTypeDecoder test, decode appid test
19057640caaf912a7eefacc3e2108c5afd70f7b072a4noda     */
19067640caaf912a7eefacc3e2108c5afd70f7b072a4noda    public void testDecoder3() {
19077640caaf912a7eefacc3e2108c5afd70f7b072a4noda        boolean res;
19087640caaf912a7eefacc3e2108c5afd70f7b072a4noda        int originalAppIdValue = mAppIdValue;
19097640caaf912a7eefacc3e2108c5afd70f7b072a4noda        int originalContentTypeValue  = mContentTypeValue;
19107640caaf912a7eefacc3e2108c5afd70f7b072a4noda        Random rd = new Random();
19117640caaf912a7eefacc3e2108c5afd70f7b072a4noda
19127640caaf912a7eefacc3e2108c5afd70f7b072a4noda        for (int i = 0; i < 100; i++) {
19137640caaf912a7eefacc3e2108c5afd70f7b072a4noda            mAppIdValue = rd.nextInt(0x0FFFFFFF);
19147640caaf912a7eefacc3e2108c5afd70f7b072a4noda            mContentTypeValue = rd.nextInt(0x0FFF);
19157640caaf912a7eefacc3e2108c5afd70f7b072a4noda            byte[] pdu = createPDU(3);
19167640caaf912a7eefacc3e2108c5afd70f7b072a4noda            WspTypeDecoder pduDecoder = new WspTypeDecoder(pdu);
19177640caaf912a7eefacc3e2108c5afd70f7b072a4noda
19187640caaf912a7eefacc3e2108c5afd70f7b072a4noda            res = pduDecoder.seekXWapApplicationId(mWspHeaderStart,
19197640caaf912a7eefacc3e2108c5afd70f7b072a4noda                    mWspHeaderStart + mWspHeaderLen - 1);
19207640caaf912a7eefacc3e2108c5afd70f7b072a4noda            assertTrue(res);
19217640caaf912a7eefacc3e2108c5afd70f7b072a4noda
19227640caaf912a7eefacc3e2108c5afd70f7b072a4noda            int index = (int) pduDecoder.getValue32();
19237640caaf912a7eefacc3e2108c5afd70f7b072a4noda            res = pduDecoder.decodeXWapApplicationId(index);
19247640caaf912a7eefacc3e2108c5afd70f7b072a4noda            assertTrue(res);
19257640caaf912a7eefacc3e2108c5afd70f7b072a4noda
19267640caaf912a7eefacc3e2108c5afd70f7b072a4noda            Log.d(LOG_TAG, "mAppIdValue: " + mAppIdValue
19277640caaf912a7eefacc3e2108c5afd70f7b072a4noda                    + ", val: " + pduDecoder.getValue32());
19287640caaf912a7eefacc3e2108c5afd70f7b072a4noda            assertTrue(mAppIdValue == (int) pduDecoder.getValue32());
19297640caaf912a7eefacc3e2108c5afd70f7b072a4noda        }
19307640caaf912a7eefacc3e2108c5afd70f7b072a4noda
19317640caaf912a7eefacc3e2108c5afd70f7b072a4noda        mAppIdValue = originalAppIdValue;
19327640caaf912a7eefacc3e2108c5afd70f7b072a4noda        mContentTypeValue = originalContentTypeValue;
19337640caaf912a7eefacc3e2108c5afd70f7b072a4noda    }
19347640caaf912a7eefacc3e2108c5afd70f7b072a4noda
19357640caaf912a7eefacc3e2108c5afd70f7b072a4noda    /*
19367640caaf912a7eefacc3e2108c5afd70f7b072a4noda      public void testEnc() {
19377640caaf912a7eefacc3e2108c5afd70f7b072a4noda      byte[] arr = new byte[20];
19387640caaf912a7eefacc3e2108c5afd70f7b072a4noda      int index = 0;
19397640caaf912a7eefacc3e2108c5afd70f7b072a4noda      index += encodeUint32(0x87a5, arr, index);
19407640caaf912a7eefacc3e2108c5afd70f7b072a4noda      index += encodeUint32(0x1, arr, index);
19417640caaf912a7eefacc3e2108c5afd70f7b072a4noda      index += encodeUint32(0x9b, arr, index);
19427640caaf912a7eefacc3e2108c5afd70f7b072a4noda      index += encodeUint32(0x10, arr, index);
19437640caaf912a7eefacc3e2108c5afd70f7b072a4noda      index += encodeUint32(0xe0887, arr, index);
19447640caaf912a7eefacc3e2108c5afd70f7b072a4noda      index += encodeUint32(0x791a23d0, arr, index);
19457640caaf912a7eefacc3e2108c5afd70f7b072a4noda
19467640caaf912a7eefacc3e2108c5afd70f7b072a4noda      Log.d(LOG_TAG, HexDump.dumpHexString(arr));
19477640caaf912a7eefacc3e2108c5afd70f7b072a4noda      }
19487640caaf912a7eefacc3e2108c5afd70f7b072a4noda    */
19497640caaf912a7eefacc3e2108c5afd70f7b072a4noda
19507640caaf912a7eefacc3e2108c5afd70f7b072a4noda    /**
19517640caaf912a7eefacc3e2108c5afd70f7b072a4noda     * WspTypeDecoder test, no appid test
19527640caaf912a7eefacc3e2108c5afd70f7b072a4noda     */
19537640caaf912a7eefacc3e2108c5afd70f7b072a4noda    public void testDecoder4() {
19547640caaf912a7eefacc3e2108c5afd70f7b072a4noda        boolean res;
19557640caaf912a7eefacc3e2108c5afd70f7b072a4noda        int originalAppIdValue = mAppIdValue;
19567640caaf912a7eefacc3e2108c5afd70f7b072a4noda        int originalContentTypeValue  = mContentTypeValue;
19577640caaf912a7eefacc3e2108c5afd70f7b072a4noda        Random rd = new Random();
19587640caaf912a7eefacc3e2108c5afd70f7b072a4noda
19597640caaf912a7eefacc3e2108c5afd70f7b072a4noda        for (int i = 0; i < 100; i++) {
19607640caaf912a7eefacc3e2108c5afd70f7b072a4noda            mAppIdValue = rd.nextInt(0x0FFFFFFF);
19617640caaf912a7eefacc3e2108c5afd70f7b072a4noda            mContentTypeValue = rd.nextInt(0x0FFF);
19627640caaf912a7eefacc3e2108c5afd70f7b072a4noda            byte[] pdu = createPDU(4);
19637640caaf912a7eefacc3e2108c5afd70f7b072a4noda            WspTypeDecoder pduDecoder = new WspTypeDecoder(pdu);
19647640caaf912a7eefacc3e2108c5afd70f7b072a4noda
19657640caaf912a7eefacc3e2108c5afd70f7b072a4noda            res = pduDecoder.seekXWapApplicationId(mWspHeaderStart,
19667640caaf912a7eefacc3e2108c5afd70f7b072a4noda                    mWspHeaderStart + mWspHeaderLen - 1);
19677640caaf912a7eefacc3e2108c5afd70f7b072a4noda            assertFalse(res);
19687640caaf912a7eefacc3e2108c5afd70f7b072a4noda
19697640caaf912a7eefacc3e2108c5afd70f7b072a4noda        }
19707640caaf912a7eefacc3e2108c5afd70f7b072a4noda
19717640caaf912a7eefacc3e2108c5afd70f7b072a4noda        mAppIdValue = originalAppIdValue;
19727640caaf912a7eefacc3e2108c5afd70f7b072a4noda        mContentTypeValue = originalContentTypeValue;
19737640caaf912a7eefacc3e2108c5afd70f7b072a4noda    }
19747640caaf912a7eefacc3e2108c5afd70f7b072a4noda
19757640caaf912a7eefacc3e2108c5afd70f7b072a4noda    /**
19767640caaf912a7eefacc3e2108c5afd70f7b072a4noda     * WspTypeDecoder test, decode string appid test
19777640caaf912a7eefacc3e2108c5afd70f7b072a4noda     */
19787640caaf912a7eefacc3e2108c5afd70f7b072a4noda    public void testDecoder5() {
19797640caaf912a7eefacc3e2108c5afd70f7b072a4noda        boolean res;
19807640caaf912a7eefacc3e2108c5afd70f7b072a4noda        String originalAppIdName = mAppIdName;
19817640caaf912a7eefacc3e2108c5afd70f7b072a4noda        int originalContentTypeValue  = mContentTypeValue;
19827640caaf912a7eefacc3e2108c5afd70f7b072a4noda        Random rd = new Random();
19837640caaf912a7eefacc3e2108c5afd70f7b072a4noda
19847640caaf912a7eefacc3e2108c5afd70f7b072a4noda        for (int i = 0; i < 10; i++) {
19857640caaf912a7eefacc3e2108c5afd70f7b072a4noda            mAppIdValue = rd.nextInt(0x0FFFFFFF);
19867640caaf912a7eefacc3e2108c5afd70f7b072a4noda            mContentTypeValue = rd.nextInt(0x0FFF);
19877640caaf912a7eefacc3e2108c5afd70f7b072a4noda            byte[] pdu = createPDU(5);
19887640caaf912a7eefacc3e2108c5afd70f7b072a4noda            WspTypeDecoder pduDecoder = new WspTypeDecoder(pdu);
19897640caaf912a7eefacc3e2108c5afd70f7b072a4noda
19907640caaf912a7eefacc3e2108c5afd70f7b072a4noda            res = pduDecoder.seekXWapApplicationId(mWspHeaderStart,
19917640caaf912a7eefacc3e2108c5afd70f7b072a4noda                    mWspHeaderStart + mWspHeaderLen - 1);
19927640caaf912a7eefacc3e2108c5afd70f7b072a4noda            assertTrue(res);
19937640caaf912a7eefacc3e2108c5afd70f7b072a4noda
19947640caaf912a7eefacc3e2108c5afd70f7b072a4noda            int index = (int) pduDecoder.getValue32();
19957640caaf912a7eefacc3e2108c5afd70f7b072a4noda            res = pduDecoder.decodeXWapApplicationId(index);
19967640caaf912a7eefacc3e2108c5afd70f7b072a4noda            assertTrue(res);
19977640caaf912a7eefacc3e2108c5afd70f7b072a4noda
19987640caaf912a7eefacc3e2108c5afd70f7b072a4noda            Log.d(LOG_TAG, "mAppIdValue: [" + mAppIdName + "], val: ["
19997640caaf912a7eefacc3e2108c5afd70f7b072a4noda                    + pduDecoder.getValueString() + "]");
20007640caaf912a7eefacc3e2108c5afd70f7b072a4noda            assertTrue(mAppIdName.equals(pduDecoder.getValueString()));
20017640caaf912a7eefacc3e2108c5afd70f7b072a4noda        }
20027640caaf912a7eefacc3e2108c5afd70f7b072a4noda
20037640caaf912a7eefacc3e2108c5afd70f7b072a4noda        mAppIdName = originalAppIdName;
20047640caaf912a7eefacc3e2108c5afd70f7b072a4noda        mContentTypeValue = originalContentTypeValue;
20057640caaf912a7eefacc3e2108c5afd70f7b072a4noda    }
20067640caaf912a7eefacc3e2108c5afd70f7b072a4noda
20077640caaf912a7eefacc3e2108c5afd70f7b072a4noda    /**
20087640caaf912a7eefacc3e2108c5afd70f7b072a4noda     * WspTypeDecoder test, decode string appid test
20097640caaf912a7eefacc3e2108c5afd70f7b072a4noda     */
20107640caaf912a7eefacc3e2108c5afd70f7b072a4noda    public void testDecoder6() {
20117640caaf912a7eefacc3e2108c5afd70f7b072a4noda        boolean res;
20127640caaf912a7eefacc3e2108c5afd70f7b072a4noda        String originalAppIdName = mAppIdName;
20137640caaf912a7eefacc3e2108c5afd70f7b072a4noda        int originalContentTypeValue  = mContentTypeValue;
20147640caaf912a7eefacc3e2108c5afd70f7b072a4noda        Random rd = new Random();
20157640caaf912a7eefacc3e2108c5afd70f7b072a4noda
20167640caaf912a7eefacc3e2108c5afd70f7b072a4noda        for (int i = 0; i < OMA_APPLICATION_ID_NAMES.length; i++) {
20177640caaf912a7eefacc3e2108c5afd70f7b072a4noda            mAppIdName = OMA_APPLICATION_ID_NAMES[i];
20187640caaf912a7eefacc3e2108c5afd70f7b072a4noda            mContentTypeValue = rd.nextInt(0x0FFF);
20197640caaf912a7eefacc3e2108c5afd70f7b072a4noda            byte[] pdu = createPDU(6);
20207640caaf912a7eefacc3e2108c5afd70f7b072a4noda            WspTypeDecoder pduDecoder = new WspTypeDecoder(pdu);
20217640caaf912a7eefacc3e2108c5afd70f7b072a4noda
20227640caaf912a7eefacc3e2108c5afd70f7b072a4noda            res = pduDecoder.seekXWapApplicationId(mWspHeaderStart,
20237640caaf912a7eefacc3e2108c5afd70f7b072a4noda                    mWspHeaderStart + mWspHeaderLen - 1);
20247640caaf912a7eefacc3e2108c5afd70f7b072a4noda            assertTrue(res);
20257640caaf912a7eefacc3e2108c5afd70f7b072a4noda
20267640caaf912a7eefacc3e2108c5afd70f7b072a4noda            int index = (int) pduDecoder.getValue32();
20277640caaf912a7eefacc3e2108c5afd70f7b072a4noda            res = pduDecoder.decodeXWapApplicationId(index);
20287640caaf912a7eefacc3e2108c5afd70f7b072a4noda            assertTrue(res);
20297640caaf912a7eefacc3e2108c5afd70f7b072a4noda
20307640caaf912a7eefacc3e2108c5afd70f7b072a4noda            Log.d(LOG_TAG, "mAppIdValue: [" + mAppIdName + "], val: ["
20317640caaf912a7eefacc3e2108c5afd70f7b072a4noda                    + pduDecoder.getValueString() + "]");
20327640caaf912a7eefacc3e2108c5afd70f7b072a4noda            assertTrue(mAppIdName.equals(pduDecoder.getValueString()));
20337640caaf912a7eefacc3e2108c5afd70f7b072a4noda        }
20347640caaf912a7eefacc3e2108c5afd70f7b072a4noda
20357640caaf912a7eefacc3e2108c5afd70f7b072a4noda        mAppIdName = originalAppIdName;
20367640caaf912a7eefacc3e2108c5afd70f7b072a4noda        mContentTypeValue = originalContentTypeValue;
20377640caaf912a7eefacc3e2108c5afd70f7b072a4noda    }
20387640caaf912a7eefacc3e2108c5afd70f7b072a4noda
20397640caaf912a7eefacc3e2108c5afd70f7b072a4noda    /**
20407640caaf912a7eefacc3e2108c5afd70f7b072a4noda     * WspTypeDecoder test, decode OMA content type
20417640caaf912a7eefacc3e2108c5afd70f7b072a4noda     */
20427640caaf912a7eefacc3e2108c5afd70f7b072a4noda    public void testDecoder7() {
20437640caaf912a7eefacc3e2108c5afd70f7b072a4noda        boolean res;
20447640caaf912a7eefacc3e2108c5afd70f7b072a4noda        String originalAppIdName = mAppIdName;
20457640caaf912a7eefacc3e2108c5afd70f7b072a4noda        int originalContentTypeValue  = mContentTypeValue;
20467640caaf912a7eefacc3e2108c5afd70f7b072a4noda        Random rd = new Random();
20477640caaf912a7eefacc3e2108c5afd70f7b072a4noda
20487640caaf912a7eefacc3e2108c5afd70f7b072a4noda        for (int i = 0; i < OMA_CONTENT_TYPE_NAMES.length; i++) {
20497640caaf912a7eefacc3e2108c5afd70f7b072a4noda            mContentTypeName = OMA_CONTENT_TYPE_NAMES[i];
20507640caaf912a7eefacc3e2108c5afd70f7b072a4noda            byte[] pdu = createPDU(7);
20517640caaf912a7eefacc3e2108c5afd70f7b072a4noda            WspTypeDecoder pduDecoder = new WspTypeDecoder(pdu);
20527640caaf912a7eefacc3e2108c5afd70f7b072a4noda
20537640caaf912a7eefacc3e2108c5afd70f7b072a4noda            res = pduDecoder.decodeContentType(mWspContentTypeStart);
20547640caaf912a7eefacc3e2108c5afd70f7b072a4noda            assertTrue(res);
20557640caaf912a7eefacc3e2108c5afd70f7b072a4noda
20567640caaf912a7eefacc3e2108c5afd70f7b072a4noda            Log.d(LOG_TAG, "mContentTypeName: [" + mContentTypeName + "], val: ["
20577640caaf912a7eefacc3e2108c5afd70f7b072a4noda                    + pduDecoder.getValueString() + "]");
20587640caaf912a7eefacc3e2108c5afd70f7b072a4noda            assertTrue(mContentTypeName.equals(pduDecoder.getValueString()));
20597640caaf912a7eefacc3e2108c5afd70f7b072a4noda        }
20607640caaf912a7eefacc3e2108c5afd70f7b072a4noda
20617640caaf912a7eefacc3e2108c5afd70f7b072a4noda        mAppIdName = originalAppIdName;
20627640caaf912a7eefacc3e2108c5afd70f7b072a4noda        mContentTypeValue = originalContentTypeValue;
20637640caaf912a7eefacc3e2108c5afd70f7b072a4noda    }
20647640caaf912a7eefacc3e2108c5afd70f7b072a4noda
20657640caaf912a7eefacc3e2108c5afd70f7b072a4noda
20667640caaf912a7eefacc3e2108c5afd70f7b072a4noda    /**
20677640caaf912a7eefacc3e2108c5afd70f7b072a4noda     * Copied from WapPushOverSms.
20687640caaf912a7eefacc3e2108c5afd70f7b072a4noda     * The code flow is not changed from the original.
20697640caaf912a7eefacc3e2108c5afd70f7b072a4noda     */
20707640caaf912a7eefacc3e2108c5afd70f7b072a4noda    public int dispatchWapPdu(byte[] pdu, IWapPushManager wapPushMan) {
20717640caaf912a7eefacc3e2108c5afd70f7b072a4noda
207243a17654cf4bfe7f1ec22bd8b7b32daccdf27c09Joe Onorato        if (false) Log.d(LOG_TAG, "Rx: " + IccUtils.bytesToHexString(pdu));
20737640caaf912a7eefacc3e2108c5afd70f7b072a4noda
20747640caaf912a7eefacc3e2108c5afd70f7b072a4noda        int index = 0;
20757640caaf912a7eefacc3e2108c5afd70f7b072a4noda        int transactionId = pdu[index++] & 0xFF;
20767640caaf912a7eefacc3e2108c5afd70f7b072a4noda        int pduType = pdu[index++] & 0xFF;
20777640caaf912a7eefacc3e2108c5afd70f7b072a4noda        int headerLength = 0;
20787640caaf912a7eefacc3e2108c5afd70f7b072a4noda
20797640caaf912a7eefacc3e2108c5afd70f7b072a4noda        if ((pduType != WspTypeDecoder.PDU_TYPE_PUSH) &&
20807640caaf912a7eefacc3e2108c5afd70f7b072a4noda                (pduType != WspTypeDecoder.PDU_TYPE_CONFIRMED_PUSH)) {
208143a17654cf4bfe7f1ec22bd8b7b32daccdf27c09Joe Onorato            if (false) Log.w(LOG_TAG, "Received non-PUSH WAP PDU. Type = " + pduType);
20827640caaf912a7eefacc3e2108c5afd70f7b072a4noda            return Intents.RESULT_SMS_HANDLED;
20837640caaf912a7eefacc3e2108c5afd70f7b072a4noda        }
20847640caaf912a7eefacc3e2108c5afd70f7b072a4noda
20857640caaf912a7eefacc3e2108c5afd70f7b072a4noda        WspTypeDecoder pduDecoder = new WspTypeDecoder(pdu);
20867640caaf912a7eefacc3e2108c5afd70f7b072a4noda
20877640caaf912a7eefacc3e2108c5afd70f7b072a4noda        /**
20887640caaf912a7eefacc3e2108c5afd70f7b072a4noda         * Parse HeaderLen(unsigned integer).
20897640caaf912a7eefacc3e2108c5afd70f7b072a4noda         * From wap-230-wsp-20010705-a section 8.1.2
20907640caaf912a7eefacc3e2108c5afd70f7b072a4noda         * The maximum size of a uintvar is 32 bits.
20917640caaf912a7eefacc3e2108c5afd70f7b072a4noda         * So it will be encoded in no more than 5 octets.
20927640caaf912a7eefacc3e2108c5afd70f7b072a4noda         */
20937640caaf912a7eefacc3e2108c5afd70f7b072a4noda        if (pduDecoder.decodeUintvarInteger(index) == false) {
209443a17654cf4bfe7f1ec22bd8b7b32daccdf27c09Joe Onorato            if (false) Log.w(LOG_TAG, "Received PDU. Header Length error.");
20957640caaf912a7eefacc3e2108c5afd70f7b072a4noda            return Intents.RESULT_SMS_GENERIC_ERROR;
20967640caaf912a7eefacc3e2108c5afd70f7b072a4noda        }
20977640caaf912a7eefacc3e2108c5afd70f7b072a4noda        headerLength = (int) pduDecoder.getValue32();
20987640caaf912a7eefacc3e2108c5afd70f7b072a4noda        index += pduDecoder.getDecodedDataLength();
20997640caaf912a7eefacc3e2108c5afd70f7b072a4noda
21007640caaf912a7eefacc3e2108c5afd70f7b072a4noda        int headerStartIndex = index;
21017640caaf912a7eefacc3e2108c5afd70f7b072a4noda
21027640caaf912a7eefacc3e2108c5afd70f7b072a4noda        /**
21037640caaf912a7eefacc3e2108c5afd70f7b072a4noda         * Parse Content-Type.
21047640caaf912a7eefacc3e2108c5afd70f7b072a4noda         * From wap-230-wsp-20010705-a section 8.4.2.24
21057640caaf912a7eefacc3e2108c5afd70f7b072a4noda         *
21067640caaf912a7eefacc3e2108c5afd70f7b072a4noda         * Content-type-value = Constrained-media | Content-general-form
21077640caaf912a7eefacc3e2108c5afd70f7b072a4noda         * Content-general-form = Value-length Media-type
21087640caaf912a7eefacc3e2108c5afd70f7b072a4noda         * Media-type = (Well-known-media | Extension-Media) *(Parameter)
21097640caaf912a7eefacc3e2108c5afd70f7b072a4noda         * Value-length = Short-length | (Length-quote Length)
21107640caaf912a7eefacc3e2108c5afd70f7b072a4noda         * Short-length = <Any octet 0-30>   (octet <= WAP_PDU_SHORT_LENGTH_MAX)
21117640caaf912a7eefacc3e2108c5afd70f7b072a4noda         * Length-quote = <Octet 31>         (WAP_PDU_LENGTH_QUOTE)
21127640caaf912a7eefacc3e2108c5afd70f7b072a4noda         * Length = Uintvar-integer
21137640caaf912a7eefacc3e2108c5afd70f7b072a4noda         */
21147640caaf912a7eefacc3e2108c5afd70f7b072a4noda        if (pduDecoder.decodeContentType(index) == false) {
211543a17654cf4bfe7f1ec22bd8b7b32daccdf27c09Joe Onorato            if (false) Log.w(LOG_TAG, "Received PDU. Header Content-Type error.");
21167640caaf912a7eefacc3e2108c5afd70f7b072a4noda            return Intents.RESULT_SMS_GENERIC_ERROR;
21177640caaf912a7eefacc3e2108c5afd70f7b072a4noda        }
21187640caaf912a7eefacc3e2108c5afd70f7b072a4noda
21197640caaf912a7eefacc3e2108c5afd70f7b072a4noda        String mimeType = pduDecoder.getValueString();
21207640caaf912a7eefacc3e2108c5afd70f7b072a4noda        long binaryContentType = pduDecoder.getValue32();
21217640caaf912a7eefacc3e2108c5afd70f7b072a4noda        index += pduDecoder.getDecodedDataLength();
21227640caaf912a7eefacc3e2108c5afd70f7b072a4noda
21237640caaf912a7eefacc3e2108c5afd70f7b072a4noda        byte[] header = new byte[headerLength];
21247640caaf912a7eefacc3e2108c5afd70f7b072a4noda        System.arraycopy(pdu, headerStartIndex, header, 0, header.length);
21257640caaf912a7eefacc3e2108c5afd70f7b072a4noda
21267640caaf912a7eefacc3e2108c5afd70f7b072a4noda        byte[] intentData;
21277640caaf912a7eefacc3e2108c5afd70f7b072a4noda
21287640caaf912a7eefacc3e2108c5afd70f7b072a4noda        if (mimeType != null && mimeType.equals(WspTypeDecoder.CONTENT_TYPE_B_PUSH_CO)) {
21297640caaf912a7eefacc3e2108c5afd70f7b072a4noda            intentData = pdu;
21307640caaf912a7eefacc3e2108c5afd70f7b072a4noda        } else {
21317640caaf912a7eefacc3e2108c5afd70f7b072a4noda            int dataIndex = headerStartIndex + headerLength;
21327640caaf912a7eefacc3e2108c5afd70f7b072a4noda            intentData = new byte[pdu.length - dataIndex];
21337640caaf912a7eefacc3e2108c5afd70f7b072a4noda            System.arraycopy(pdu, dataIndex, intentData, 0, intentData.length);
21347640caaf912a7eefacc3e2108c5afd70f7b072a4noda        }
21357640caaf912a7eefacc3e2108c5afd70f7b072a4noda
21367640caaf912a7eefacc3e2108c5afd70f7b072a4noda        /**
21377640caaf912a7eefacc3e2108c5afd70f7b072a4noda         * Seek for application ID field in WSP header.
21387640caaf912a7eefacc3e2108c5afd70f7b072a4noda         * If application ID is found, WapPushManager substitute the message
21397640caaf912a7eefacc3e2108c5afd70f7b072a4noda         * processing. Since WapPushManager is optional module, if WapPushManager
21407640caaf912a7eefacc3e2108c5afd70f7b072a4noda         * is not found, legacy message processing will be continued.
21417640caaf912a7eefacc3e2108c5afd70f7b072a4noda         */
21427640caaf912a7eefacc3e2108c5afd70f7b072a4noda        if (pduDecoder.seekXWapApplicationId(index, index + headerLength - 1)) {
21437640caaf912a7eefacc3e2108c5afd70f7b072a4noda            index = (int) pduDecoder.getValue32();
21447640caaf912a7eefacc3e2108c5afd70f7b072a4noda            pduDecoder.decodeXWapApplicationId(index);
21457640caaf912a7eefacc3e2108c5afd70f7b072a4noda            String wapAppId = pduDecoder.getValueString();
21467640caaf912a7eefacc3e2108c5afd70f7b072a4noda            if (wapAppId == null) {
21477640caaf912a7eefacc3e2108c5afd70f7b072a4noda                wapAppId = Integer.toString((int) pduDecoder.getValue32());
21487640caaf912a7eefacc3e2108c5afd70f7b072a4noda            }
21497640caaf912a7eefacc3e2108c5afd70f7b072a4noda
21507640caaf912a7eefacc3e2108c5afd70f7b072a4noda            String contentType = ((mimeType == null) ?
21517640caaf912a7eefacc3e2108c5afd70f7b072a4noda                    Long.toString(binaryContentType) : mimeType);
215243a17654cf4bfe7f1ec22bd8b7b32daccdf27c09Joe Onorato            if (false) Log.v(LOG_TAG, "appid found: " + wapAppId + ":" + contentType);
21537640caaf912a7eefacc3e2108c5afd70f7b072a4noda
21547640caaf912a7eefacc3e2108c5afd70f7b072a4noda            try {
21557640caaf912a7eefacc3e2108c5afd70f7b072a4noda                boolean processFurther = true;
21567640caaf912a7eefacc3e2108c5afd70f7b072a4noda                // IWapPushManager wapPushMan = mWapConn.getWapPushManager();
21577640caaf912a7eefacc3e2108c5afd70f7b072a4noda                if (wapPushMan == null) {
215843a17654cf4bfe7f1ec22bd8b7b32daccdf27c09Joe Onorato                    if (false) Log.w(LOG_TAG, "wap push manager not found!");
21597640caaf912a7eefacc3e2108c5afd70f7b072a4noda                } else {
21607640caaf912a7eefacc3e2108c5afd70f7b072a4noda                    Intent intent = new Intent();
21617640caaf912a7eefacc3e2108c5afd70f7b072a4noda                    intent.putExtra("transactionId", transactionId);
21627640caaf912a7eefacc3e2108c5afd70f7b072a4noda                    intent.putExtra("pduType", pduType);
21637640caaf912a7eefacc3e2108c5afd70f7b072a4noda                    intent.putExtra("header", header);
21647640caaf912a7eefacc3e2108c5afd70f7b072a4noda                    intent.putExtra("data", intentData);
21657640caaf912a7eefacc3e2108c5afd70f7b072a4noda                    intent.putExtra("contentTypeParameters",
21667640caaf912a7eefacc3e2108c5afd70f7b072a4noda                            pduDecoder.getContentParameters());
21677640caaf912a7eefacc3e2108c5afd70f7b072a4noda
21687640caaf912a7eefacc3e2108c5afd70f7b072a4noda                    int procRet = wapPushMan.processMessage(wapAppId, contentType, intent);
216943a17654cf4bfe7f1ec22bd8b7b32daccdf27c09Joe Onorato                    if (false) Log.v(LOG_TAG, "procRet:" + procRet);
21707640caaf912a7eefacc3e2108c5afd70f7b072a4noda                    if ((procRet & WapPushManagerParams.MESSAGE_HANDLED) > 0
21717640caaf912a7eefacc3e2108c5afd70f7b072a4noda                            && (procRet & WapPushManagerParams.FURTHER_PROCESSING) == 0) {
21727640caaf912a7eefacc3e2108c5afd70f7b072a4noda                        processFurther = false;
21737640caaf912a7eefacc3e2108c5afd70f7b072a4noda                    }
21747640caaf912a7eefacc3e2108c5afd70f7b072a4noda                }
21757640caaf912a7eefacc3e2108c5afd70f7b072a4noda                if (!processFurther) {
21767640caaf912a7eefacc3e2108c5afd70f7b072a4noda                    return Intents.RESULT_SMS_HANDLED;
21777640caaf912a7eefacc3e2108c5afd70f7b072a4noda                }
21787640caaf912a7eefacc3e2108c5afd70f7b072a4noda            } catch (RemoteException e) {
217943a17654cf4bfe7f1ec22bd8b7b32daccdf27c09Joe Onorato                if (false) Log.w(LOG_TAG, "remote func failed...");
21807640caaf912a7eefacc3e2108c5afd70f7b072a4noda            }
21817640caaf912a7eefacc3e2108c5afd70f7b072a4noda        }
218243a17654cf4bfe7f1ec22bd8b7b32daccdf27c09Joe Onorato        if (false) Log.v(LOG_TAG, "fall back to existing handler");
21837640caaf912a7eefacc3e2108c5afd70f7b072a4noda
21847640caaf912a7eefacc3e2108c5afd70f7b072a4noda        return Activity.RESULT_OK;
21857640caaf912a7eefacc3e2108c5afd70f7b072a4noda    }
21867640caaf912a7eefacc3e2108c5afd70f7b072a4noda
21877640caaf912a7eefacc3e2108c5afd70f7b072a4noda    protected byte[] retrieveWspBody() {
21887640caaf912a7eefacc3e2108c5afd70f7b072a4noda        byte[] array = new byte[mWspHeader.length + mMessageBody.length];
21897640caaf912a7eefacc3e2108c5afd70f7b072a4noda
21907640caaf912a7eefacc3e2108c5afd70f7b072a4noda        System.arraycopy(mWspHeader, 0, array, 0, mWspHeader.length);
21917640caaf912a7eefacc3e2108c5afd70f7b072a4noda        System.arraycopy(mMessageBody, 0, array, mWspHeader.length, mMessageBody.length);
21927640caaf912a7eefacc3e2108c5afd70f7b072a4noda        return array;
21937640caaf912a7eefacc3e2108c5afd70f7b072a4noda    }
21947640caaf912a7eefacc3e2108c5afd70f7b072a4noda
21957640caaf912a7eefacc3e2108c5afd70f7b072a4noda    protected String getContentTypeName(int ctypeVal) {
21967640caaf912a7eefacc3e2108c5afd70f7b072a4noda        int i;
21977640caaf912a7eefacc3e2108c5afd70f7b072a4noda
21987640caaf912a7eefacc3e2108c5afd70f7b072a4noda        for (i = 0; i < OMA_CONTENT_TYPE_VALUES.length; i++) {
21997640caaf912a7eefacc3e2108c5afd70f7b072a4noda            if (ctypeVal == OMA_CONTENT_TYPE_VALUES[i]) {
22007640caaf912a7eefacc3e2108c5afd70f7b072a4noda                return OMA_CONTENT_TYPE_NAMES[i];
22017640caaf912a7eefacc3e2108c5afd70f7b072a4noda            }
22027640caaf912a7eefacc3e2108c5afd70f7b072a4noda        }
22037640caaf912a7eefacc3e2108c5afd70f7b072a4noda        return null;
22047640caaf912a7eefacc3e2108c5afd70f7b072a4noda    }
22057640caaf912a7eefacc3e2108c5afd70f7b072a4noda
22067640caaf912a7eefacc3e2108c5afd70f7b072a4noda    protected boolean isContentTypeMapped(int ctypeVal) {
22077640caaf912a7eefacc3e2108c5afd70f7b072a4noda        int i;
22087640caaf912a7eefacc3e2108c5afd70f7b072a4noda
22097640caaf912a7eefacc3e2108c5afd70f7b072a4noda        for (i = 0; i < OMA_CONTENT_TYPE_VALUES.length; i++) {
22107640caaf912a7eefacc3e2108c5afd70f7b072a4noda            if (ctypeVal == OMA_CONTENT_TYPE_VALUES[i]) return true;
22117640caaf912a7eefacc3e2108c5afd70f7b072a4noda        }
22127640caaf912a7eefacc3e2108c5afd70f7b072a4noda        return false;
22137640caaf912a7eefacc3e2108c5afd70f7b072a4noda    }
22147640caaf912a7eefacc3e2108c5afd70f7b072a4noda
22157640caaf912a7eefacc3e2108c5afd70f7b072a4noda    /**
22167640caaf912a7eefacc3e2108c5afd70f7b072a4noda     * Integration test 1, simple case
22177640caaf912a7eefacc3e2108c5afd70f7b072a4noda     */
22187640caaf912a7eefacc3e2108c5afd70f7b072a4noda    public void testIntegration1() {
22197640caaf912a7eefacc3e2108c5afd70f7b072a4noda        boolean res;
22207640caaf912a7eefacc3e2108c5afd70f7b072a4noda        int originalAppIdValue = mAppIdValue;
22217640caaf912a7eefacc3e2108c5afd70f7b072a4noda        int originalContentTypeValue  = mContentTypeValue;
22227640caaf912a7eefacc3e2108c5afd70f7b072a4noda        String originalAppIdName = mAppIdName;
22237640caaf912a7eefacc3e2108c5afd70f7b072a4noda        String originalContentTypeName = mContentTypeName;
22247640caaf912a7eefacc3e2108c5afd70f7b072a4noda        String originalClassName = mClassName;
22257640caaf912a7eefacc3e2108c5afd70f7b072a4noda        byte[] originalMessageBody = mMessageBody;
22267640caaf912a7eefacc3e2108c5afd70f7b072a4noda        Random rd = new Random();
22277640caaf912a7eefacc3e2108c5afd70f7b072a4noda
22287640caaf912a7eefacc3e2108c5afd70f7b072a4noda        mMessageBody = new byte[100 + rd.nextInt(100)];
22297640caaf912a7eefacc3e2108c5afd70f7b072a4noda        rd.nextBytes(mMessageBody);
22307640caaf912a7eefacc3e2108c5afd70f7b072a4noda
22317640caaf912a7eefacc3e2108c5afd70f7b072a4noda        byte[] pdu = createPDU(1);
22327640caaf912a7eefacc3e2108c5afd70f7b072a4noda        byte[] wappushPdu = retrieveWspBody();
22337640caaf912a7eefacc3e2108c5afd70f7b072a4noda
22347640caaf912a7eefacc3e2108c5afd70f7b072a4noda
22357640caaf912a7eefacc3e2108c5afd70f7b072a4noda        mClassName = "com.android.smspush.unitTests.ReceiverActivity";
22367640caaf912a7eefacc3e2108c5afd70f7b072a4noda        // Phone dummy = new DummyPhone(getContext());
22377640caaf912a7eefacc3e2108c5afd70f7b072a4noda        // Phone gsm = PhoneFactory.getGsmPhone();
22387640caaf912a7eefacc3e2108c5afd70f7b072a4noda        // GSMPhone gsm = new GSMPhone(getContext(), new SimulatedCommands(), null, true);
22397640caaf912a7eefacc3e2108c5afd70f7b072a4noda        // WapPushOverSms dispatcher = new WapPushOverSms(dummy, null);
22407640caaf912a7eefacc3e2108c5afd70f7b072a4noda
22417640caaf912a7eefacc3e2108c5afd70f7b072a4noda        try {
22427640caaf912a7eefacc3e2108c5afd70f7b072a4noda            // set up data
22437640caaf912a7eefacc3e2108c5afd70f7b072a4noda            IWapPushManager iwapman = getInterface();
22447640caaf912a7eefacc3e2108c5afd70f7b072a4noda            IDataVerify dataverify = getVerifyInterface();
22457640caaf912a7eefacc3e2108c5afd70f7b072a4noda
22467640caaf912a7eefacc3e2108c5afd70f7b072a4noda            dataverify.resetData();
22477640caaf912a7eefacc3e2108c5afd70f7b072a4noda
22487640caaf912a7eefacc3e2108c5afd70f7b072a4noda            if (isContentTypeMapped(mContentTypeValue)) {
22497640caaf912a7eefacc3e2108c5afd70f7b072a4noda                // content type is mapped
22507640caaf912a7eefacc3e2108c5afd70f7b072a4noda                mContentTypeName = getContentTypeName(mContentTypeValue);
22517640caaf912a7eefacc3e2108c5afd70f7b072a4noda                Log.d(LOG_TAG, "mContentTypeValue mapping "
22527640caaf912a7eefacc3e2108c5afd70f7b072a4noda                        + mContentTypeName + ":" + mContentTypeValue);
22537640caaf912a7eefacc3e2108c5afd70f7b072a4noda            } else {
22547640caaf912a7eefacc3e2108c5afd70f7b072a4noda                mContentTypeName = Integer.toString(mContentTypeValue);
22557640caaf912a7eefacc3e2108c5afd70f7b072a4noda            }
22567640caaf912a7eefacc3e2108c5afd70f7b072a4noda            iwapman.addPackage(Integer.toString(mAppIdValue),
22577640caaf912a7eefacc3e2108c5afd70f7b072a4noda                    mContentTypeName, mPackageName, mClassName,
22587640caaf912a7eefacc3e2108c5afd70f7b072a4noda                    WapPushManagerParams.APP_TYPE_ACTIVITY, false, false);
22597640caaf912a7eefacc3e2108c5afd70f7b072a4noda
22607640caaf912a7eefacc3e2108c5afd70f7b072a4noda            dispatchWapPdu(wappushPdu, iwapman);
22617640caaf912a7eefacc3e2108c5afd70f7b072a4noda
22627640caaf912a7eefacc3e2108c5afd70f7b072a4noda            // clean up data
22637640caaf912a7eefacc3e2108c5afd70f7b072a4noda            iwapman.deletePackage(Integer.toString(mAppIdValue),
22647640caaf912a7eefacc3e2108c5afd70f7b072a4noda                    mContentTypeName, mPackageName, mClassName);
22657640caaf912a7eefacc3e2108c5afd70f7b072a4noda
22667640caaf912a7eefacc3e2108c5afd70f7b072a4noda            assertTrue(dataverify.verifyData(mMessageBody));
22677640caaf912a7eefacc3e2108c5afd70f7b072a4noda        } catch (RemoteException e) {
22687640caaf912a7eefacc3e2108c5afd70f7b072a4noda        }
22697640caaf912a7eefacc3e2108c5afd70f7b072a4noda
22707640caaf912a7eefacc3e2108c5afd70f7b072a4noda
22717640caaf912a7eefacc3e2108c5afd70f7b072a4noda        mClassName = originalClassName;
22727640caaf912a7eefacc3e2108c5afd70f7b072a4noda        mAppIdName = originalAppIdName;
22737640caaf912a7eefacc3e2108c5afd70f7b072a4noda        mContentTypeName = originalContentTypeName;
22747640caaf912a7eefacc3e2108c5afd70f7b072a4noda        mAppIdValue = originalAppIdValue;
22757640caaf912a7eefacc3e2108c5afd70f7b072a4noda        mContentTypeValue = originalContentTypeValue;
22767640caaf912a7eefacc3e2108c5afd70f7b072a4noda        mMessageBody = originalMessageBody;
22777640caaf912a7eefacc3e2108c5afd70f7b072a4noda    }
22787640caaf912a7eefacc3e2108c5afd70f7b072a4noda
22797640caaf912a7eefacc3e2108c5afd70f7b072a4noda    /**
22807640caaf912a7eefacc3e2108c5afd70f7b072a4noda     * Integration test 2, random mAppIdValue(int), all OMA content type
22817640caaf912a7eefacc3e2108c5afd70f7b072a4noda     */
22827640caaf912a7eefacc3e2108c5afd70f7b072a4noda    public void testIntegration2() {
22837640caaf912a7eefacc3e2108c5afd70f7b072a4noda        boolean res;
22847640caaf912a7eefacc3e2108c5afd70f7b072a4noda        int originalAppIdValue = mAppIdValue;
22857640caaf912a7eefacc3e2108c5afd70f7b072a4noda        int originalContentTypeValue  = mContentTypeValue;
22867640caaf912a7eefacc3e2108c5afd70f7b072a4noda        String originalAppIdName = mAppIdName;
22877640caaf912a7eefacc3e2108c5afd70f7b072a4noda        String originalContentTypeName = mContentTypeName;
22887640caaf912a7eefacc3e2108c5afd70f7b072a4noda        String originalClassName = mClassName;
22897640caaf912a7eefacc3e2108c5afd70f7b072a4noda        byte[] originalMessageBody = mMessageBody;
22907640caaf912a7eefacc3e2108c5afd70f7b072a4noda        Random rd = new Random();
22917640caaf912a7eefacc3e2108c5afd70f7b072a4noda
22927640caaf912a7eefacc3e2108c5afd70f7b072a4noda        IWapPushManager iwapman = getInterface();
22937640caaf912a7eefacc3e2108c5afd70f7b072a4noda        IDataVerify dataverify = getVerifyInterface();
22947640caaf912a7eefacc3e2108c5afd70f7b072a4noda        mClassName = "com.android.smspush.unitTests.ReceiverActivity";
22957640caaf912a7eefacc3e2108c5afd70f7b072a4noda
22967640caaf912a7eefacc3e2108c5afd70f7b072a4noda        for (int i = 0; i < OMA_CONTENT_TYPE_NAMES.length; i++) {
22977640caaf912a7eefacc3e2108c5afd70f7b072a4noda            mContentTypeName = OMA_CONTENT_TYPE_NAMES[i];
22987640caaf912a7eefacc3e2108c5afd70f7b072a4noda            mAppIdValue = rd.nextInt(0x0FFFFFFF);
22997640caaf912a7eefacc3e2108c5afd70f7b072a4noda
23007640caaf912a7eefacc3e2108c5afd70f7b072a4noda            mMessageBody = new byte[100 + rd.nextInt(100)];
23017640caaf912a7eefacc3e2108c5afd70f7b072a4noda            rd.nextBytes(mMessageBody);
23027640caaf912a7eefacc3e2108c5afd70f7b072a4noda
23037640caaf912a7eefacc3e2108c5afd70f7b072a4noda            byte[] pdu = createPDU(7);
23047640caaf912a7eefacc3e2108c5afd70f7b072a4noda            byte[] wappushPdu = retrieveWspBody();
23057640caaf912a7eefacc3e2108c5afd70f7b072a4noda
23067640caaf912a7eefacc3e2108c5afd70f7b072a4noda            try {
23077640caaf912a7eefacc3e2108c5afd70f7b072a4noda                dataverify.resetData();
23087640caaf912a7eefacc3e2108c5afd70f7b072a4noda                // set up data
23097640caaf912a7eefacc3e2108c5afd70f7b072a4noda                iwapman.addPackage(Integer.toString(mAppIdValue),
23107640caaf912a7eefacc3e2108c5afd70f7b072a4noda                        mContentTypeName, mPackageName, mClassName,
23117640caaf912a7eefacc3e2108c5afd70f7b072a4noda                        WapPushManagerParams.APP_TYPE_ACTIVITY, false, false);
23127640caaf912a7eefacc3e2108c5afd70f7b072a4noda
23137640caaf912a7eefacc3e2108c5afd70f7b072a4noda                dispatchWapPdu(wappushPdu, iwapman);
23147640caaf912a7eefacc3e2108c5afd70f7b072a4noda
23157640caaf912a7eefacc3e2108c5afd70f7b072a4noda                // clean up data
23167640caaf912a7eefacc3e2108c5afd70f7b072a4noda                iwapman.deletePackage(Integer.toString(mAppIdValue),
23177640caaf912a7eefacc3e2108c5afd70f7b072a4noda                        mContentTypeName, mPackageName, mClassName);
23187640caaf912a7eefacc3e2108c5afd70f7b072a4noda
23197640caaf912a7eefacc3e2108c5afd70f7b072a4noda                if (mContentTypeName.equals(WspTypeDecoder.CONTENT_TYPE_B_PUSH_CO)) {
23207640caaf912a7eefacc3e2108c5afd70f7b072a4noda                    assertTrue(dataverify.verifyData(wappushPdu));
23217640caaf912a7eefacc3e2108c5afd70f7b072a4noda                } else {
23227640caaf912a7eefacc3e2108c5afd70f7b072a4noda                    assertTrue(dataverify.verifyData(mMessageBody));
23237640caaf912a7eefacc3e2108c5afd70f7b072a4noda                }
23247640caaf912a7eefacc3e2108c5afd70f7b072a4noda            } catch (RemoteException e) {
23257640caaf912a7eefacc3e2108c5afd70f7b072a4noda            }
23267640caaf912a7eefacc3e2108c5afd70f7b072a4noda        }
23277640caaf912a7eefacc3e2108c5afd70f7b072a4noda
23287640caaf912a7eefacc3e2108c5afd70f7b072a4noda
23297640caaf912a7eefacc3e2108c5afd70f7b072a4noda        mClassName = originalClassName;
23307640caaf912a7eefacc3e2108c5afd70f7b072a4noda        mAppIdName = originalAppIdName;
23317640caaf912a7eefacc3e2108c5afd70f7b072a4noda        mContentTypeName = originalContentTypeName;
23327640caaf912a7eefacc3e2108c5afd70f7b072a4noda        mAppIdValue = originalAppIdValue;
23337640caaf912a7eefacc3e2108c5afd70f7b072a4noda        mContentTypeValue = originalContentTypeValue;
23347640caaf912a7eefacc3e2108c5afd70f7b072a4noda        mMessageBody = originalMessageBody;
23357640caaf912a7eefacc3e2108c5afd70f7b072a4noda    }
23367640caaf912a7eefacc3e2108c5afd70f7b072a4noda
23377640caaf912a7eefacc3e2108c5afd70f7b072a4noda    /**
23387640caaf912a7eefacc3e2108c5afd70f7b072a4noda     * Integration test 3, iterate OmaApplication ID, random binary content type
23397640caaf912a7eefacc3e2108c5afd70f7b072a4noda     */
23407640caaf912a7eefacc3e2108c5afd70f7b072a4noda    public void testIntegration3() {
23417640caaf912a7eefacc3e2108c5afd70f7b072a4noda        boolean res;
23427640caaf912a7eefacc3e2108c5afd70f7b072a4noda        int originalAppIdValue = mAppIdValue;
23437640caaf912a7eefacc3e2108c5afd70f7b072a4noda        int originalContentTypeValue  = mContentTypeValue;
23447640caaf912a7eefacc3e2108c5afd70f7b072a4noda        String originalAppIdName = mAppIdName;
23457640caaf912a7eefacc3e2108c5afd70f7b072a4noda        String originalContentTypeName = mContentTypeName;
23467640caaf912a7eefacc3e2108c5afd70f7b072a4noda        String originalClassName = mClassName;
23477640caaf912a7eefacc3e2108c5afd70f7b072a4noda        byte[] originalMessageBody = mMessageBody;
23487640caaf912a7eefacc3e2108c5afd70f7b072a4noda        Random rd = new Random();
23497640caaf912a7eefacc3e2108c5afd70f7b072a4noda
23507640caaf912a7eefacc3e2108c5afd70f7b072a4noda        IWapPushManager iwapman = getInterface();
23517640caaf912a7eefacc3e2108c5afd70f7b072a4noda        IDataVerify dataverify = getVerifyInterface();
23527640caaf912a7eefacc3e2108c5afd70f7b072a4noda        mClassName = "com.android.smspush.unitTests.ReceiverService";
23537640caaf912a7eefacc3e2108c5afd70f7b072a4noda
23547640caaf912a7eefacc3e2108c5afd70f7b072a4noda        for (int i = 0; i < OMA_APPLICATION_ID_NAMES.length; i++) {
23557640caaf912a7eefacc3e2108c5afd70f7b072a4noda            mAppIdName = OMA_APPLICATION_ID_NAMES[i];
23567640caaf912a7eefacc3e2108c5afd70f7b072a4noda            mContentTypeValue = rd.nextInt(0x0FFF);
23577640caaf912a7eefacc3e2108c5afd70f7b072a4noda
23587640caaf912a7eefacc3e2108c5afd70f7b072a4noda            mMessageBody = new byte[100 + rd.nextInt(100)];
23597640caaf912a7eefacc3e2108c5afd70f7b072a4noda            rd.nextBytes(mMessageBody);
23607640caaf912a7eefacc3e2108c5afd70f7b072a4noda
23617640caaf912a7eefacc3e2108c5afd70f7b072a4noda            byte[] pdu = createPDU(6);
23627640caaf912a7eefacc3e2108c5afd70f7b072a4noda            byte[] wappushPdu = retrieveWspBody();
23637640caaf912a7eefacc3e2108c5afd70f7b072a4noda
23647640caaf912a7eefacc3e2108c5afd70f7b072a4noda            try {
23657640caaf912a7eefacc3e2108c5afd70f7b072a4noda                dataverify.resetData();
23667640caaf912a7eefacc3e2108c5afd70f7b072a4noda                // set up data
23677640caaf912a7eefacc3e2108c5afd70f7b072a4noda                if (isContentTypeMapped(mContentTypeValue)) {
23687640caaf912a7eefacc3e2108c5afd70f7b072a4noda                    // content type is mapped to integer value
23697640caaf912a7eefacc3e2108c5afd70f7b072a4noda                    mContentTypeName = getContentTypeName(mContentTypeValue);
23707640caaf912a7eefacc3e2108c5afd70f7b072a4noda                    Log.d(LOG_TAG, "mContentTypeValue mapping "
23717640caaf912a7eefacc3e2108c5afd70f7b072a4noda                            + mContentTypeValue + ":" + mContentTypeName);
23727640caaf912a7eefacc3e2108c5afd70f7b072a4noda                } else {
23737640caaf912a7eefacc3e2108c5afd70f7b072a4noda                    mContentTypeName = Integer.toString(mContentTypeValue);
23747640caaf912a7eefacc3e2108c5afd70f7b072a4noda                }
23757640caaf912a7eefacc3e2108c5afd70f7b072a4noda
23767640caaf912a7eefacc3e2108c5afd70f7b072a4noda                iwapman.addPackage(mAppIdName,
23777640caaf912a7eefacc3e2108c5afd70f7b072a4noda                        mContentTypeName, mPackageName, mClassName,
23787640caaf912a7eefacc3e2108c5afd70f7b072a4noda                        WapPushManagerParams.APP_TYPE_SERVICE, false, false);
23797640caaf912a7eefacc3e2108c5afd70f7b072a4noda
23807640caaf912a7eefacc3e2108c5afd70f7b072a4noda                dispatchWapPdu(wappushPdu, iwapman);
23817640caaf912a7eefacc3e2108c5afd70f7b072a4noda
23827640caaf912a7eefacc3e2108c5afd70f7b072a4noda                // clean up data
23837640caaf912a7eefacc3e2108c5afd70f7b072a4noda                iwapman.deletePackage(mAppIdName,
23847640caaf912a7eefacc3e2108c5afd70f7b072a4noda                        mContentTypeName, mPackageName, mClassName);
23857640caaf912a7eefacc3e2108c5afd70f7b072a4noda
23867640caaf912a7eefacc3e2108c5afd70f7b072a4noda                if (mContentTypeName.equals(WspTypeDecoder.CONTENT_TYPE_B_PUSH_CO)) {
23877640caaf912a7eefacc3e2108c5afd70f7b072a4noda                    assertTrue(dataverify.verifyData(wappushPdu));
23887640caaf912a7eefacc3e2108c5afd70f7b072a4noda                } else {
23897640caaf912a7eefacc3e2108c5afd70f7b072a4noda                    assertTrue(dataverify.verifyData(mMessageBody));
23907640caaf912a7eefacc3e2108c5afd70f7b072a4noda                }
23917640caaf912a7eefacc3e2108c5afd70f7b072a4noda            } catch (RemoteException e) {
23927640caaf912a7eefacc3e2108c5afd70f7b072a4noda            }
23937640caaf912a7eefacc3e2108c5afd70f7b072a4noda        }
23947640caaf912a7eefacc3e2108c5afd70f7b072a4noda
23957640caaf912a7eefacc3e2108c5afd70f7b072a4noda        mClassName = originalClassName;
23967640caaf912a7eefacc3e2108c5afd70f7b072a4noda        mAppIdName = originalAppIdName;
23977640caaf912a7eefacc3e2108c5afd70f7b072a4noda        mContentTypeName = originalContentTypeName;
23987640caaf912a7eefacc3e2108c5afd70f7b072a4noda        mAppIdValue = originalAppIdValue;
23997640caaf912a7eefacc3e2108c5afd70f7b072a4noda        mContentTypeValue = originalContentTypeValue;
24007640caaf912a7eefacc3e2108c5afd70f7b072a4noda        mMessageBody = originalMessageBody;
24017640caaf912a7eefacc3e2108c5afd70f7b072a4noda    }
24027640caaf912a7eefacc3e2108c5afd70f7b072a4noda
24037640caaf912a7eefacc3e2108c5afd70f7b072a4noda    /**
24047640caaf912a7eefacc3e2108c5afd70f7b072a4noda     * Integration test 4, iterate OmaApplication ID, Oma content type
24057640caaf912a7eefacc3e2108c5afd70f7b072a4noda     */
24067640caaf912a7eefacc3e2108c5afd70f7b072a4noda    public void testIntegration4() {
24077640caaf912a7eefacc3e2108c5afd70f7b072a4noda        boolean res;
24087640caaf912a7eefacc3e2108c5afd70f7b072a4noda        int originalAppIdValue = mAppIdValue;
24097640caaf912a7eefacc3e2108c5afd70f7b072a4noda        int originalContentTypeValue  = mContentTypeValue;
24107640caaf912a7eefacc3e2108c5afd70f7b072a4noda        String originalAppIdName = mAppIdName;
24117640caaf912a7eefacc3e2108c5afd70f7b072a4noda        String originalContentTypeName = mContentTypeName;
24127640caaf912a7eefacc3e2108c5afd70f7b072a4noda        String originalClassName = mClassName;
24137640caaf912a7eefacc3e2108c5afd70f7b072a4noda        byte[] originalMessageBody = mMessageBody;
24147640caaf912a7eefacc3e2108c5afd70f7b072a4noda        Random rd = new Random();
24157640caaf912a7eefacc3e2108c5afd70f7b072a4noda
24167640caaf912a7eefacc3e2108c5afd70f7b072a4noda        IWapPushManager iwapman = getInterface();
24177640caaf912a7eefacc3e2108c5afd70f7b072a4noda        IDataVerify dataverify = getVerifyInterface();
24187640caaf912a7eefacc3e2108c5afd70f7b072a4noda        mClassName = "com.android.smspush.unitTests.ReceiverService";
24197640caaf912a7eefacc3e2108c5afd70f7b072a4noda
24207640caaf912a7eefacc3e2108c5afd70f7b072a4noda        for (int i = 0; i < OMA_APPLICATION_ID_NAMES.length
24217640caaf912a7eefacc3e2108c5afd70f7b072a4noda                + OMA_CONTENT_TYPE_NAMES.length; i++) {
24227640caaf912a7eefacc3e2108c5afd70f7b072a4noda            mAppIdName = OMA_APPLICATION_ID_NAMES[rd.nextInt(OMA_APPLICATION_ID_NAMES.length)];
24237640caaf912a7eefacc3e2108c5afd70f7b072a4noda            int contIndex = rd.nextInt(OMA_CONTENT_TYPE_NAMES.length);
24247640caaf912a7eefacc3e2108c5afd70f7b072a4noda            mContentTypeName = OMA_CONTENT_TYPE_NAMES[contIndex];
24257640caaf912a7eefacc3e2108c5afd70f7b072a4noda
24267640caaf912a7eefacc3e2108c5afd70f7b072a4noda            mMessageBody = new byte[100 + rd.nextInt(100)];
24277640caaf912a7eefacc3e2108c5afd70f7b072a4noda            rd.nextBytes(mMessageBody);
24287640caaf912a7eefacc3e2108c5afd70f7b072a4noda
24297640caaf912a7eefacc3e2108c5afd70f7b072a4noda            byte[] pdu = createPDU(8);
24307640caaf912a7eefacc3e2108c5afd70f7b072a4noda            byte[] wappushPdu = retrieveWspBody();
24317640caaf912a7eefacc3e2108c5afd70f7b072a4noda
24327640caaf912a7eefacc3e2108c5afd70f7b072a4noda            try {
24337640caaf912a7eefacc3e2108c5afd70f7b072a4noda                dataverify.resetData();
24347640caaf912a7eefacc3e2108c5afd70f7b072a4noda                // set up data
24357640caaf912a7eefacc3e2108c5afd70f7b072a4noda                iwapman.addPackage(mAppIdName,
24367640caaf912a7eefacc3e2108c5afd70f7b072a4noda                        mContentTypeName, mPackageName, mClassName,
24377640caaf912a7eefacc3e2108c5afd70f7b072a4noda                        WapPushManagerParams.APP_TYPE_SERVICE, false, false);
24387640caaf912a7eefacc3e2108c5afd70f7b072a4noda
24397640caaf912a7eefacc3e2108c5afd70f7b072a4noda                dispatchWapPdu(wappushPdu, iwapman);
24407640caaf912a7eefacc3e2108c5afd70f7b072a4noda
24417640caaf912a7eefacc3e2108c5afd70f7b072a4noda                // clean up data
24427640caaf912a7eefacc3e2108c5afd70f7b072a4noda                iwapman.deletePackage(mAppIdName,
24437640caaf912a7eefacc3e2108c5afd70f7b072a4noda                        mContentTypeName, mPackageName, mClassName);
24447640caaf912a7eefacc3e2108c5afd70f7b072a4noda
24457640caaf912a7eefacc3e2108c5afd70f7b072a4noda                if (mContentTypeName.equals(WspTypeDecoder.CONTENT_TYPE_B_PUSH_CO)) {
24467640caaf912a7eefacc3e2108c5afd70f7b072a4noda                    assertTrue(dataverify.verifyData(wappushPdu));
24477640caaf912a7eefacc3e2108c5afd70f7b072a4noda                } else {
24487640caaf912a7eefacc3e2108c5afd70f7b072a4noda                    assertTrue(dataverify.verifyData(mMessageBody));
24497640caaf912a7eefacc3e2108c5afd70f7b072a4noda                }
24507640caaf912a7eefacc3e2108c5afd70f7b072a4noda            } catch (RemoteException e) {
24517640caaf912a7eefacc3e2108c5afd70f7b072a4noda            }
24527640caaf912a7eefacc3e2108c5afd70f7b072a4noda        }
24537640caaf912a7eefacc3e2108c5afd70f7b072a4noda
24547640caaf912a7eefacc3e2108c5afd70f7b072a4noda        mClassName = originalClassName;
24557640caaf912a7eefacc3e2108c5afd70f7b072a4noda        mAppIdName = originalAppIdName;
24567640caaf912a7eefacc3e2108c5afd70f7b072a4noda        mContentTypeName = originalContentTypeName;
24577640caaf912a7eefacc3e2108c5afd70f7b072a4noda        mAppIdValue = originalAppIdValue;
24587640caaf912a7eefacc3e2108c5afd70f7b072a4noda        mContentTypeValue = originalContentTypeValue;
24597640caaf912a7eefacc3e2108c5afd70f7b072a4noda        mMessageBody = originalMessageBody;
24607640caaf912a7eefacc3e2108c5afd70f7b072a4noda    }
24617640caaf912a7eefacc3e2108c5afd70f7b072a4noda
24627640caaf912a7eefacc3e2108c5afd70f7b072a4noda    /**
24637640caaf912a7eefacc3e2108c5afd70f7b072a4noda     * Integration test 5, iterate binary OmaApplication ID, Oma binary content type
24647640caaf912a7eefacc3e2108c5afd70f7b072a4noda     */
24657640caaf912a7eefacc3e2108c5afd70f7b072a4noda    public void testIntegration5() {
24667640caaf912a7eefacc3e2108c5afd70f7b072a4noda        boolean res;
24677640caaf912a7eefacc3e2108c5afd70f7b072a4noda        int originalAppIdValue = mAppIdValue;
24687640caaf912a7eefacc3e2108c5afd70f7b072a4noda        int originalContentTypeValue  = mContentTypeValue;
24697640caaf912a7eefacc3e2108c5afd70f7b072a4noda        String originalAppIdName = mAppIdName;
24707640caaf912a7eefacc3e2108c5afd70f7b072a4noda        String originalContentTypeName = mContentTypeName;
24717640caaf912a7eefacc3e2108c5afd70f7b072a4noda        String originalClassName = mClassName;
24727640caaf912a7eefacc3e2108c5afd70f7b072a4noda        byte[] originalMessageBody = mMessageBody;
24737640caaf912a7eefacc3e2108c5afd70f7b072a4noda        Random rd = new Random();
24747640caaf912a7eefacc3e2108c5afd70f7b072a4noda
24757640caaf912a7eefacc3e2108c5afd70f7b072a4noda        IWapPushManager iwapman = getInterface();
24767640caaf912a7eefacc3e2108c5afd70f7b072a4noda        IDataVerify dataverify = getVerifyInterface();
24777640caaf912a7eefacc3e2108c5afd70f7b072a4noda        mClassName = "com.android.smspush.unitTests.ReceiverService";
24787640caaf912a7eefacc3e2108c5afd70f7b072a4noda
24797640caaf912a7eefacc3e2108c5afd70f7b072a4noda        for (int i = 0; i < OMA_APPLICATION_ID_VALUES.length +
24807640caaf912a7eefacc3e2108c5afd70f7b072a4noda                    OMA_CONTENT_TYPE_VALUES.length; i++) {
24817640caaf912a7eefacc3e2108c5afd70f7b072a4noda            mAppIdValue = OMA_APPLICATION_ID_VALUES[rd.nextInt(
24827640caaf912a7eefacc3e2108c5afd70f7b072a4noda                    OMA_APPLICATION_ID_VALUES.length)];
24837640caaf912a7eefacc3e2108c5afd70f7b072a4noda            mContentTypeValue =
24847640caaf912a7eefacc3e2108c5afd70f7b072a4noda                    OMA_CONTENT_TYPE_VALUES[rd.nextInt(OMA_CONTENT_TYPE_VALUES.length)];
24857640caaf912a7eefacc3e2108c5afd70f7b072a4noda
24867640caaf912a7eefacc3e2108c5afd70f7b072a4noda            mMessageBody = new byte[100 + rd.nextInt(100)];
24877640caaf912a7eefacc3e2108c5afd70f7b072a4noda            rd.nextBytes(mMessageBody);
24887640caaf912a7eefacc3e2108c5afd70f7b072a4noda
24897640caaf912a7eefacc3e2108c5afd70f7b072a4noda            byte[] pdu = createPDU(3);
24907640caaf912a7eefacc3e2108c5afd70f7b072a4noda            byte[] wappushPdu = retrieveWspBody();
24917640caaf912a7eefacc3e2108c5afd70f7b072a4noda
24927640caaf912a7eefacc3e2108c5afd70f7b072a4noda            try {
24937640caaf912a7eefacc3e2108c5afd70f7b072a4noda                dataverify.resetData();
24947640caaf912a7eefacc3e2108c5afd70f7b072a4noda                // set up data
24957640caaf912a7eefacc3e2108c5afd70f7b072a4noda                if (isContentTypeMapped(mContentTypeValue)) {
24967640caaf912a7eefacc3e2108c5afd70f7b072a4noda                    // content type is mapped to integer value
24977640caaf912a7eefacc3e2108c5afd70f7b072a4noda                    mContentTypeName = getContentTypeName(mContentTypeValue);
24987640caaf912a7eefacc3e2108c5afd70f7b072a4noda                    Log.d(LOG_TAG, "mContentTypeValue mapping "
24997640caaf912a7eefacc3e2108c5afd70f7b072a4noda                            + mContentTypeValue + ":" + mContentTypeName);
25007640caaf912a7eefacc3e2108c5afd70f7b072a4noda                } else {
25017640caaf912a7eefacc3e2108c5afd70f7b072a4noda                    mContentTypeName = Integer.toString(mContentTypeValue);
25027640caaf912a7eefacc3e2108c5afd70f7b072a4noda                }
25037640caaf912a7eefacc3e2108c5afd70f7b072a4noda
25047640caaf912a7eefacc3e2108c5afd70f7b072a4noda                iwapman.addPackage(Integer.toString(mAppIdValue),
25057640caaf912a7eefacc3e2108c5afd70f7b072a4noda                        mContentTypeName, mPackageName, mClassName,
25067640caaf912a7eefacc3e2108c5afd70f7b072a4noda                        WapPushManagerParams.APP_TYPE_SERVICE, false, false);
25077640caaf912a7eefacc3e2108c5afd70f7b072a4noda
25087640caaf912a7eefacc3e2108c5afd70f7b072a4noda                dispatchWapPdu(wappushPdu, iwapman);
25097640caaf912a7eefacc3e2108c5afd70f7b072a4noda
25107640caaf912a7eefacc3e2108c5afd70f7b072a4noda                // clean up data
25117640caaf912a7eefacc3e2108c5afd70f7b072a4noda                iwapman.deletePackage(Integer.toString(mAppIdValue),
25127640caaf912a7eefacc3e2108c5afd70f7b072a4noda                        mContentTypeName, mPackageName, mClassName);
25137640caaf912a7eefacc3e2108c5afd70f7b072a4noda
25147640caaf912a7eefacc3e2108c5afd70f7b072a4noda                if (mContentTypeName.equals(WspTypeDecoder.CONTENT_TYPE_B_PUSH_CO)) {
25157640caaf912a7eefacc3e2108c5afd70f7b072a4noda                    assertTrue(dataverify.verifyData(wappushPdu));
25167640caaf912a7eefacc3e2108c5afd70f7b072a4noda                } else {
25177640caaf912a7eefacc3e2108c5afd70f7b072a4noda                    assertTrue(dataverify.verifyData(mMessageBody));
25187640caaf912a7eefacc3e2108c5afd70f7b072a4noda                }
25197640caaf912a7eefacc3e2108c5afd70f7b072a4noda            } catch (RemoteException e) {
25207640caaf912a7eefacc3e2108c5afd70f7b072a4noda            }
25217640caaf912a7eefacc3e2108c5afd70f7b072a4noda        }
25227640caaf912a7eefacc3e2108c5afd70f7b072a4noda
25237640caaf912a7eefacc3e2108c5afd70f7b072a4noda        mClassName = originalClassName;
25247640caaf912a7eefacc3e2108c5afd70f7b072a4noda        mAppIdName = originalAppIdName;
25257640caaf912a7eefacc3e2108c5afd70f7b072a4noda        mContentTypeName = originalContentTypeName;
25267640caaf912a7eefacc3e2108c5afd70f7b072a4noda        mAppIdValue = originalAppIdValue;
25277640caaf912a7eefacc3e2108c5afd70f7b072a4noda        mContentTypeValue = originalContentTypeValue;
25287640caaf912a7eefacc3e2108c5afd70f7b072a4noda        mMessageBody = originalMessageBody;
25297640caaf912a7eefacc3e2108c5afd70f7b072a4noda    }
25307640caaf912a7eefacc3e2108c5afd70f7b072a4noda
25317640caaf912a7eefacc3e2108c5afd70f7b072a4noda}
2532