10825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville/*
20825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * Copyright (C) 2011 The Android Open Source Project
30825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville *
40825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * Licensed under the Apache License, Version 2.0 (the "License");
50825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * you may not use this file except in compliance with the License.
60825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * You may obtain a copy of the License at
70825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville *
80825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville *      http://www.apache.org/licenses/LICENSE-2.0
90825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville *
100825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * Unless required by applicable law or agreed to in writing, software
110825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * distributed under the License is distributed on an "AS IS" BASIS,
120825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
130825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * See the License for the specific language governing permissions and
140825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * limitations under the License.
150825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville */
160825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
170825495a331bb44df395a0cdb79fab85e68db5d5Wink Savillepackage com.android.internal.telephony;
180825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
190825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleimport com.android.internal.telephony.DataConnection.UpdateLinkPropertyResult;
200825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleimport com.android.internal.util.AsyncChannel;
210825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleimport com.android.internal.util.Protocol;
220825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
230825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleimport android.app.PendingIntent;
240825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleimport android.net.LinkCapabilities;
250825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleimport android.net.LinkProperties;
260825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleimport android.net.ProxyProperties;
270825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleimport android.os.Message;
280825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
290825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleimport java.util.ArrayList;
300825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleimport java.util.Collection;
310825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
320825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville/**
330825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * AsyncChannel to a DataConnection
340825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville */
350825495a331bb44df395a0cdb79fab85e68db5d5Wink Savillepublic class DataConnectionAc extends AsyncChannel {
360825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    private static final boolean DBG = false;
370825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    private String mLogTag;
380825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
390825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public DataConnection dataConnection;
400825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
410825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public static final int BASE = Protocol.BASE_DATA_CONNECTION_AC;
420825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
430825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public static final int REQ_IS_INACTIVE = BASE + 0;
440825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public static final int RSP_IS_INACTIVE = BASE + 1;
450825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
460825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public static final int REQ_GET_CID = BASE + 2;
470825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public static final int RSP_GET_CID = BASE + 3;
480825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
490825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public static final int REQ_GET_APNSETTING = BASE + 4;
500825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public static final int RSP_GET_APNSETTING = BASE + 5;
510825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
520825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public static final int REQ_GET_LINK_PROPERTIES = BASE + 6;
530825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public static final int RSP_GET_LINK_PROPERTIES = BASE + 7;
540825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
550825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public static final int REQ_SET_LINK_PROPERTIES_HTTP_PROXY = BASE + 8;
560825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public static final int RSP_SET_LINK_PROPERTIES_HTTP_PROXY = BASE + 9;
570825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
580825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public static final int REQ_GET_LINK_CAPABILITIES = BASE + 10;
590825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public static final int RSP_GET_LINK_CAPABILITIES = BASE + 11;
600825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
610825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public static final int REQ_UPDATE_LINK_PROPERTIES_DATA_CALL_STATE = BASE + 12;
620825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public static final int RSP_UPDATE_LINK_PROPERTIES_DATA_CALL_STATE = BASE + 13;
630825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
640825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public static final int REQ_RESET = BASE + 14;
650825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public static final int RSP_RESET = BASE + 15;
660825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
670825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public static final int REQ_GET_REFCOUNT = BASE + 16;
680825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public static final int RSP_GET_REFCOUNT = BASE + 17;
690825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
700825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public static final int REQ_ADD_APNCONTEXT = BASE + 18;
710825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public static final int RSP_ADD_APNCONTEXT = BASE + 19;
720825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
730825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public static final int REQ_REMOVE_APNCONTEXT = BASE + 20;
740825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public static final int RSP_REMOVE_APNCONTEXT = BASE + 21;
750825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
760825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public static final int REQ_GET_APNCONTEXT_LIST = BASE + 22;
770825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public static final int RSP_GET_APNCONTEXT_LIST = BASE + 23;
780825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
790825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public static final int REQ_SET_RECONNECT_INTENT = BASE + 24;
800825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public static final int RSP_SET_RECONNECT_INTENT = BASE + 25;
810825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
820825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public static final int REQ_GET_RECONNECT_INTENT = BASE + 26;
830825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public static final int RSP_GET_RECONNECT_INTENT = BASE + 27;
840825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
850825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    private static final int CMD_TO_STRING_COUNT = RSP_GET_RECONNECT_INTENT - BASE + 1;
860825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    private static String[] sCmdToString = new String[CMD_TO_STRING_COUNT];
870825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    static {
880825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        sCmdToString[REQ_IS_INACTIVE - BASE] = "REQ_IS_INACTIVE";
890825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        sCmdToString[RSP_IS_INACTIVE - BASE] = "RSP_IS_INACTIVE";
900825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        sCmdToString[REQ_GET_CID - BASE] = "REQ_GET_CID";
910825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        sCmdToString[RSP_GET_CID - BASE] = "RSP_GET_CID";
920825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        sCmdToString[REQ_GET_APNSETTING - BASE] = "REQ_GET_APNSETTING";
930825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        sCmdToString[RSP_GET_APNSETTING - BASE] = "RSP_GET_APNSETTING";
940825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        sCmdToString[REQ_GET_LINK_PROPERTIES - BASE] = "REQ_GET_LINK_PROPERTIES";
950825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        sCmdToString[RSP_GET_LINK_PROPERTIES - BASE] = "RSP_GET_LINK_PROPERTIES";
960825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        sCmdToString[REQ_SET_LINK_PROPERTIES_HTTP_PROXY - BASE] =
970825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                "REQ_SET_LINK_PROPERTIES_HTTP_PROXY";
980825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        sCmdToString[RSP_SET_LINK_PROPERTIES_HTTP_PROXY - BASE] =
990825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                "RSP_SET_LINK_PROPERTIES_HTTP_PROXY";
1000825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        sCmdToString[REQ_GET_LINK_CAPABILITIES - BASE] = "REQ_GET_LINK_CAPABILITIES";
1010825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        sCmdToString[RSP_GET_LINK_CAPABILITIES - BASE] = "RSP_GET_LINK_CAPABILITIES";
1020825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        sCmdToString[REQ_UPDATE_LINK_PROPERTIES_DATA_CALL_STATE - BASE] =
1030825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                "REQ_UPDATE_LINK_PROPERTIES_DATA_CALL_STATE";
1040825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        sCmdToString[RSP_UPDATE_LINK_PROPERTIES_DATA_CALL_STATE - BASE] =
1050825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                "RSP_UPDATE_LINK_PROPERTIES_DATA_CALL_STATE";
1060825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        sCmdToString[REQ_RESET - BASE] = "REQ_RESET";
1070825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        sCmdToString[RSP_RESET - BASE] = "RSP_RESET";
1080825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        sCmdToString[REQ_GET_REFCOUNT - BASE] = "REQ_GET_REFCOUNT";
1090825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        sCmdToString[RSP_GET_REFCOUNT - BASE] = "RSP_GET_REFCOUNT";
1100825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        sCmdToString[REQ_ADD_APNCONTEXT - BASE] = "REQ_ADD_APNCONTEXT";
1110825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        sCmdToString[RSP_ADD_APNCONTEXT - BASE] = "RSP_ADD_APNCONTEXT";
1120825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        sCmdToString[REQ_REMOVE_APNCONTEXT - BASE] = "REQ_REMOVE_APNCONTEXT";
1130825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        sCmdToString[RSP_REMOVE_APNCONTEXT - BASE] = "RSP_REMOVE_APNCONTEXT";
1140825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        sCmdToString[REQ_GET_APNCONTEXT_LIST - BASE] = "REQ_GET_APNCONTEXT_LIST";
1150825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        sCmdToString[RSP_GET_APNCONTEXT_LIST - BASE] = "RSP_GET_APNCONTEXT_LIST";
1160825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        sCmdToString[REQ_SET_RECONNECT_INTENT - BASE] = "REQ_SET_RECONNECT_INTENT";
1170825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        sCmdToString[RSP_SET_RECONNECT_INTENT - BASE] = "RSP_SET_RECONNECT_INTENT";
1180825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        sCmdToString[REQ_GET_RECONNECT_INTENT - BASE] = "REQ_GET_RECONNECT_INTENT";
1190825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        sCmdToString[RSP_GET_RECONNECT_INTENT - BASE] = "RSP_GET_RECONNECT_INTENT";
1200825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
1210825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    protected static String cmdToString(int cmd) {
1220825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        cmd -= BASE;
1230825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if ((cmd >= 0) && (cmd < sCmdToString.length)) {
1240825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            return sCmdToString[cmd];
1250825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        } else {
1260825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            return AsyncChannel.cmdToString(cmd + BASE);
1270825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        }
1280825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
1290825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
1300825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    /**
1310825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * enum used to notify action taken or necessary to be
1320825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * taken after the link property is changed.
1330825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     */
1340825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public enum LinkPropertyChangeAction {
1350825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        NONE, CHANGED, RESET;
1360825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
1370825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        public static LinkPropertyChangeAction fromInt(int value) {
1380825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            if (value == NONE.ordinal()) {
1390825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                return NONE;
1400825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            } else if (value == CHANGED.ordinal()) {
1410825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                return CHANGED;
1420825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            } else if (value == RESET.ordinal()) {
1430825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                return RESET;
1440825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            } else {
1450825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                throw new RuntimeException("LinkPropertyChangeAction.fromInt: bad value=" + value);
1460825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            }
1470825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        }
1480825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
1490825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
1500825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public DataConnectionAc(DataConnection dc, String logTag) {
1510825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        dataConnection = dc;
1520825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        mLogTag = logTag;
1530825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
1540825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
1550825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    /**
1560825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * Request if the state machine is in the inactive state.
1570825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * Response {@link #rspIsInactive}
1580825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     */
1590825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void reqIsInactive() {
1600825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        sendMessage(REQ_IS_INACTIVE);
1610825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if (DBG) log("reqIsInactive");
1620825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
1630825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
1640825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    /**
1650825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * Evaluate RSP_IS_INACTIVE.
1660825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     *
1670825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * @return true if the state machine is in the inactive state.
1680825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     */
1690825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public boolean rspIsInactive(Message response) {
1700825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        boolean retVal = response.arg1 == 1;
1710825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if (DBG) log("rspIsInactive=" + retVal);
1720825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        return retVal;
1730825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
1740825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
1750825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    /**
1760825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * @return true if the state machine is in the inactive state.
1770825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     */
1780825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public boolean isInactiveSync() {
1790825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        Message response = sendMessageSynchronously(REQ_IS_INACTIVE);
1800825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if ((response != null) && (response.what == RSP_IS_INACTIVE)) {
1810825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            return rspIsInactive(response);
1820825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        } else {
1830825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            log("rspIsInactive error response=" + response);
1840825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            return false;
1850825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        }
1860825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
1870825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
1880825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    /**
1890825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * Request the Connection ID.
1900825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * Response {@link #rspCid}
1910825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     */
1920825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void reqCid() {
1930825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        sendMessage(REQ_GET_CID);
1940825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if (DBG) log("reqCid");
1950825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
1960825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
1970825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    /**
1980825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * Evaluate a RSP_GET_CID message and return the cid.
1990825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     *
2000825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * @param response Message
2010825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * @return connection id or -1 if an error
2020825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     */
2030825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public int rspCid(Message response) {
2040825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        int retVal = response.arg1;
2050825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if (DBG) log("rspCid=" + retVal);
2060825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        return retVal;
2070825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
2080825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
2090825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    /**
2100825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * @return connection id or -1 if an error
2110825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     */
2120825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public int getCidSync() {
2130825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        Message response = sendMessageSynchronously(REQ_GET_CID);
2140825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if ((response != null) && (response.what == RSP_GET_CID)) {
2150825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            return rspCid(response);
2160825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        } else {
2170825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            log("rspCid error response=" + response);
2180825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            return -1;
2190825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        }
2200825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
2210825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
2220825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    /**
2230825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * Request the Reference Count.
2240825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * Response {@link #rspRefCount}
2250825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     */
2260825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void reqRefCount() {
2270825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        sendMessage(REQ_GET_REFCOUNT);
2280825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if (DBG) log("reqRefCount");
2290825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
2300825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
2310825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    /**
2320825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * Evaluate a RSP_GET_REFCOUNT message and return the refCount.
2330825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     *
2340825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * @param response Message
2350825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * @return ref count or -1 if an error
2360825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     */
2370825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public int rspRefCount(Message response) {
2380825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        int retVal = response.arg1;
2390825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if (DBG) log("rspRefCount=" + retVal);
2400825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        return retVal;
2410825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
2420825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
2430825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    /**
2440825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * @return connection id or -1 if an error
2450825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     */
2460825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public int getRefCountSync() {
2470825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        Message response = sendMessageSynchronously(REQ_GET_REFCOUNT);
2480825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if ((response != null) && (response.what == RSP_GET_REFCOUNT)) {
2490825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            return rspRefCount(response);
2500825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        } else {
2510825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            log("rspRefCount error response=" + response);
2520825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            return -1;
2530825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        }
2540825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
2550825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
2560825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    /**
2570825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * Request the connections ApnSetting.
2580825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * Response {@link #rspApnSetting}
2590825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     */
2600825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void reqApnSetting() {
2610825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        sendMessage(REQ_GET_APNSETTING);
2620825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if (DBG) log("reqApnSetting");
2630825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
2640825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
2650825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    /**
2660825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * Evaluate a RSP_APN_SETTING message and return the ApnSetting.
2670825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     *
2680825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * @param response Message
2690825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * @return ApnSetting, maybe null
2700825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     */
2710825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public ApnSetting rspApnSetting(Message response) {
2720825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        ApnSetting retVal = (ApnSetting) response.obj;
2730825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if (DBG) log("rspApnSetting=" + retVal);
2740825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        return retVal;
2750825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
2760825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
2770825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    /**
2780825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * Get the connections ApnSetting.
2790825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     *
2800825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * @return ApnSetting or null if an error
2810825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     */
2820825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public ApnSetting getApnSettingSync() {
2830825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        Message response = sendMessageSynchronously(REQ_GET_APNSETTING);
2840825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if ((response != null) && (response.what == RSP_GET_APNSETTING)) {
2850825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            return rspApnSetting(response);
2860825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        } else {
2870825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            log("getApnSetting error response=" + response);
2880825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            return null;
2890825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        }
2900825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
2910825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
2920825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    /**
2930825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * Request the connections LinkProperties.
2940825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * Response {@link #rspLinkProperties}
2950825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     */
2960825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void reqLinkProperties() {
2970825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        sendMessage(REQ_GET_LINK_PROPERTIES);
2980825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if (DBG) log("reqLinkProperties");
2990825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
3000825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
3010825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    /**
3020825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * Evaluate RSP_GET_LINK_PROPERTIES
3030825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     *
3040825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * @param response
3050825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * @return LinkProperties, maybe null.
3060825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     */
3070825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public LinkProperties rspLinkProperties(Message response) {
3080825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        LinkProperties retVal = (LinkProperties) response.obj;
3090825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if (DBG) log("rspLinkProperties=" + retVal);
3100825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        return retVal;
3110825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
3120825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
3130825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    /**
3140825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * Get the connections LinkProperties.
3150825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     *
3160825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * @return LinkProperties or null if an error
3170825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     */
3180825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public LinkProperties getLinkPropertiesSync() {
3190825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        Message response = sendMessageSynchronously(REQ_GET_LINK_PROPERTIES);
3200825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if ((response != null) && (response.what == RSP_GET_LINK_PROPERTIES)) {
3210825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            return rspLinkProperties(response);
3220825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        } else {
3230825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            log("getLinkProperties error response=" + response);
3240825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            return null;
3250825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        }
3260825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
3270825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
3280825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    /**
3290825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * Request setting the connections LinkProperties.HttpProxy.
3300825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * Response RSP_SET_LINK_PROPERTIES when complete.
3310825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     */
3320825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void reqSetLinkPropertiesHttpProxy(ProxyProperties proxy) {
3330825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        sendMessage(REQ_SET_LINK_PROPERTIES_HTTP_PROXY, proxy);
3340825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if (DBG) log("reqSetLinkPropertiesHttpProxy proxy=" + proxy);
3350825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
3360825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
3370825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    /**
3380825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * Set the connections LinkProperties.HttpProxy
3390825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     */
3400825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void setLinkPropertiesHttpProxySync(ProxyProperties proxy) {
3410825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        Message response =
3420825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            sendMessageSynchronously(REQ_SET_LINK_PROPERTIES_HTTP_PROXY, proxy);
3430825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if ((response != null) && (response.what == RSP_SET_LINK_PROPERTIES_HTTP_PROXY)) {
3440825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            if (DBG) log("setLinkPropertiesHttpPoxy ok");
3450825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        } else {
3460825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            log("setLinkPropertiesHttpPoxy error response=" + response);
3470825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        }
3480825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
3490825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
3500825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    /**
3510825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * Request update LinkProperties from DataCallState
3520825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * Response {@link #rspUpdateLinkPropertiesDataCallState}
3530825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     */
3540825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void reqUpdateLinkPropertiesDataCallState(DataCallState newState) {
3550825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        sendMessage(REQ_UPDATE_LINK_PROPERTIES_DATA_CALL_STATE, newState);
3560825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if (DBG) log("reqUpdateLinkPropertiesDataCallState");
3570825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
3580825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
3590825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public UpdateLinkPropertyResult rspUpdateLinkPropertiesDataCallState(Message response) {
3600825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        UpdateLinkPropertyResult retVal = (UpdateLinkPropertyResult)response.obj;
3610825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if (DBG) log("rspUpdateLinkPropertiesState: retVal=" + retVal);
3620825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        return retVal;
3630825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
3640825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
3650825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    /**
3660825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * Update link properties in the data connection
3670825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     *
3680825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * @return the removed and added addresses.
3690825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     */
3700825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public UpdateLinkPropertyResult updateLinkPropertiesDataCallStateSync(DataCallState newState) {
3710825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        Message response =
3720825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            sendMessageSynchronously(REQ_UPDATE_LINK_PROPERTIES_DATA_CALL_STATE, newState);
3730825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if ((response != null) &&
3740825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            (response.what == RSP_UPDATE_LINK_PROPERTIES_DATA_CALL_STATE)) {
3750825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            return rspUpdateLinkPropertiesDataCallState(response);
3760825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        } else {
3770825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            log("getLinkProperties error response=" + response);
3780825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            return new UpdateLinkPropertyResult(new LinkProperties());
3790825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        }
3800825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
3810825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
3820825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    /**
3830825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * Request the connections LinkCapabilities.
3840825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * Response {@link #rspLinkCapabilities}
3850825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     */
3860825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void reqLinkCapabilities() {
3870825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        sendMessage(REQ_GET_LINK_CAPABILITIES);
3880825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if (DBG) log("reqLinkCapabilities");
3890825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
3900825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
3910825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    /**
3920825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * Evaluate RSP_GET_LINK_CAPABILITIES
3930825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     *
3940825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * @param response
3950825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * @return LinkCapabilites, maybe null.
3960825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     */
3970825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public LinkCapabilities rspLinkCapabilities(Message response) {
3980825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        LinkCapabilities retVal = (LinkCapabilities) response.obj;
3990825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if (DBG) log("rspLinkCapabilities=" + retVal);
4000825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        return retVal;
4010825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
4020825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
4030825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    /**
4040825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * Get the connections LinkCapabilities.
4050825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     *
4060825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * @return LinkCapabilities or null if an error
4070825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     */
4080825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public LinkCapabilities getLinkCapabilitiesSync() {
4090825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        Message response = sendMessageSynchronously(REQ_GET_LINK_CAPABILITIES);
4100825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if ((response != null) && (response.what == RSP_GET_LINK_CAPABILITIES)) {
4110825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            return rspLinkCapabilities(response);
4120825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        } else {
4130825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            log("getLinkCapabilities error response=" + response);
4140825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            return null;
4150825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        }
4160825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
4170825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
4180825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    /**
4190825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * Request the connections LinkCapabilities.
4200825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * Response RSP_RESET when complete
4210825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     */
4220825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void reqReset() {
4230825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        sendMessage(REQ_RESET);
4240825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if (DBG) log("reqReset");
4250825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
4260825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
4270825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    /**
4280825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * Reset the connection and wait for it to complete.
4290825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     */
4300825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void resetSync() {
4310825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        Message response = sendMessageSynchronously(REQ_RESET);
4320825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if ((response != null) && (response.what == RSP_RESET)) {
4330825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            if (DBG) log("restSync ok");
4340825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        } else {
4350825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            log("restSync error response=" + response);
4360825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        }
4370825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
4380825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
4390825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    /**
4400825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * Request to add ApnContext association.
4410825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * Response RSP_ADD_APNCONTEXT when complete.
4420825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     */
4430825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void reqAddApnContext(ApnContext apnContext) {
4440825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        Message response = sendMessageSynchronously(REQ_ADD_APNCONTEXT, apnContext);
4450825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if (DBG) log("reqAddApnContext");
4460825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
4470825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
4480825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    /**
4490825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * Add ApnContext association synchronoulsy.
4500825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     *
4510825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * @param ApnContext to associate
4520825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     */
4530825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void addApnContextSync(ApnContext apnContext) {
4540825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        Message response = sendMessageSynchronously(REQ_ADD_APNCONTEXT, apnContext);
4550825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if ((response != null) && (response.what == RSP_ADD_APNCONTEXT)) {
4560825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            if (DBG) log("addApnContext ok");
4570825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        } else {
4580825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            log("addApnContext error response=" + response);
4590825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        }
4600825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
4610825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
4620825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    /**
4630825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * Request to remove ApnContext association.
4640825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * Response RSP_REMOVE_APNCONTEXT when complete.
4650825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     */
4660825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void reqRemomveApnContext(ApnContext apnContext) {
4670825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        Message response = sendMessageSynchronously(REQ_REMOVE_APNCONTEXT, apnContext);
4680825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if (DBG) log("reqRemomveApnContext");
4690825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
4700825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
4710825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    /**
4720825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * Remove ApnContext associateion.
4730825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     *
4740825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * @param ApnContext to dissociate
4750825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     */
4760825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void removeApnContextSync(ApnContext apnContext) {
4770825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        Message response = sendMessageSynchronously(REQ_REMOVE_APNCONTEXT, apnContext);
4780825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if ((response != null) && (response.what == RSP_REMOVE_APNCONTEXT)) {
4790825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            if (DBG) log("removeApnContext ok");
4800825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        } else {
4810825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            log("removeApnContext error response=" + response);
4820825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        }
4830825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
4840825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
4850825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    /**
4860825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * Request to retrive ApnContext List associated with DC.
4870825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * Response RSP_GET_APNCONTEXT_LIST when complete.
4880825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     */
4890825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void reqGetApnList(ApnContext apnContext) {
4900825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        Message response = sendMessageSynchronously(REQ_GET_APNCONTEXT_LIST);
4910825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if (DBG) log("reqGetApnList");
4920825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
4930825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
4940825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    /**
4950825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * Retrieve Collection of ApnContext from the response message.
4960825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     *
4970825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * @param Message sent from DC in response to REQ_GET_APNCONTEXT_LIST.
4980825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * @return Collection of ApnContext
4990825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     */
5000825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public Collection<ApnContext> rspApnList(Message response) {
5010825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        Collection<ApnContext> retVal = (Collection<ApnContext>)response.obj;
5020825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if (retVal == null) retVal = new ArrayList<ApnContext>();
5030825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        return retVal;
5040825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
5050825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
5060825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    /**
5070825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * Retrieve collection of ApnContext currently associated with
5080825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * the DataConnectionA synchronously.
5090825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     *
5100825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * @return Collection of ApnContext
5110825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     */
5120825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public Collection<ApnContext> getApnListSync() {
5130825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        Message response = sendMessageSynchronously(REQ_GET_APNCONTEXT_LIST);
5140825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if ((response != null) && (response.what == RSP_GET_APNCONTEXT_LIST)) {
5150825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            if (DBG) log("getApnList ok");
5160825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            return rspApnList(response);
5170825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        } else {
5180825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            log("getApnList error response=" + response);
5190825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            // return dummy list with no entry
5200825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            return new ArrayList<ApnContext>();
5210825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        }
5220825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
5230825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
5240825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    /**
5250825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * Request to set Pending ReconnectIntent to DC.
5260825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * Response RSP_SET_RECONNECT_INTENT when complete.
5270825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     */
5280825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void reqSetReconnectIntent(PendingIntent intent) {
5290825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        Message response = sendMessageSynchronously(REQ_SET_RECONNECT_INTENT, intent);
5300825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if (DBG) log("reqSetReconnectIntent");
5310825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
5320825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
5330825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    /**
5340825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * Set pending reconnect intent to DC synchronously.
5350825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     *
5360825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * @param PendingIntent to set.
5370825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     */
5380825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void setReconnectIntentSync(PendingIntent intent) {
5390825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        Message response = sendMessageSynchronously(REQ_SET_RECONNECT_INTENT, intent);
5400825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if ((response != null) && (response.what == RSP_SET_RECONNECT_INTENT)) {
5410825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            if (DBG) log("setReconnectIntent ok");
5420825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        } else {
5430825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            log("setReconnectIntent error response=" + response);
5440825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        }
5450825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
5460825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
5470825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    /**
5480825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * Request to get Pending ReconnectIntent to DC.
5490825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * Response RSP_GET_RECONNECT_INTENT when complete.
5500825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     */
5510825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void reqGetReconnectIntent() {
5520825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        Message response = sendMessageSynchronously(REQ_GET_RECONNECT_INTENT);
5530825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if (DBG) log("reqGetReconnectIntent");
5540825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
5550825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
5560825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    /**
5570825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * Retrieve reconnect intent from response message from DC.
5580825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     *
5590825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * @param Message which contains the reconnect intent.
5600825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * @return PendingIntent from the response.
5610825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     */
5620825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public PendingIntent rspReconnectIntent(Message response) {
5630825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        PendingIntent retVal = (PendingIntent) response.obj;
5640825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        return retVal;
5650825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
5660825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
5670825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    /**
5680825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * Retrieve reconnect intent currently set in DC synchronously.
5690825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     *
5700825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * @return PendingIntent reconnect intent current ly set in DC
5710825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     */
5720825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public PendingIntent getReconnectIntentSync() {
5730825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        Message response = sendMessageSynchronously(REQ_GET_RECONNECT_INTENT);
5740825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if ((response != null) && (response.what == RSP_GET_RECONNECT_INTENT)) {
5750825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            if (DBG) log("getReconnectIntent ok");
5760825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            return rspReconnectIntent(response);
5770825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        } else {
5780825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            log("getReconnectIntent error response=" + response);
5790825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            return null;
5800825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        }
5810825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
5820825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
5830825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    @Override
5840825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public String toString() {
5850825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        return dataConnection.getName();
5860825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
5870825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
5880825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    private void log(String s) {
5890825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        android.util.Log.d(mLogTag, "DataConnectionAc " + s);
5900825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
5910825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville}
592