1da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt/*
2da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt * Copyright (C) 2010 The Android Open Source Project
3da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt *
4da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt * Licensed under the Apache License, Version 2.0 (the "License");
5da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt * you may not use this file except in compliance with the License.
6da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt * You may obtain a copy of the License at
7da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt *
8da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt *      http://www.apache.org/licenses/LICENSE-2.0
9da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt *
10da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt * Unless required by applicable law or agreed to in writing, software
11da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt * distributed under the License is distributed on an "AS IS" BASIS,
12da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt * See the License for the specific language governing permissions and
14da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt * limitations under the License.
15da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt */
16da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt
17da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwaltpackage android.net;
18da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt
19da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwaltimport android.content.Context;
20da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwaltimport android.os.Handler;
21da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwaltimport android.os.Message;
22665e1aed5e99af1e66af56c0d73e32fd86f57273Robert Greenwaltimport android.os.Messenger;
23da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwaltimport android.util.Slog;
24da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt
25da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt/**
26da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt * A dummy data state tracker for use when we don't have a real radio
27da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt * connection.  useful when bringing up a board or when you have network
28da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt * access through other means.
29da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt *
30da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt * {@hide}
31da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt */
321f12cb52a494a3eaefc62d03a8d2fdf47a5535e9Vinit Deshapndepublic class DummyDataStateTracker extends BaseNetworkStateTracker {
33da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt
34da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt    private static final String TAG = "DummyDataStateTracker";
35da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt    private static final boolean DBG = true;
36da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt    private static final boolean VDBG = false;
37da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt
38da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt    private boolean mTeardownRequested = false;
39da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt    private Handler mTarget;
40da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt    private boolean mPrivateDnsRouteSet = false;
41da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt    private boolean mDefaultRouteSet = false;
42da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt
43da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt    // DEFAULT and HIPRI are the same connection.  If we're one of these we need to check if
44da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt    // the other is also disconnected before we reset sockets
45da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt    private boolean mIsDefaultOrHipri = false;
46da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt
47da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt    /**
48da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt     * Create a new DummyDataStateTracker
49da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt     * @param netType the ConnectivityManager network type
50da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt     * @param tag the name of this network
51da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt     */
52da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt    public DummyDataStateTracker(int netType, String tag) {
53da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt        mNetworkInfo = new NetworkInfo(netType);
54da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt    }
55da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt
56da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt    /**
57da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt     * Begin monitoring data connectivity.
58da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt     *
59da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt     * @param context is the current Android context
60da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt     * @param target is the Handler to which to return the events.
61da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt     */
62da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt    public void startMonitoring(Context context, Handler target) {
63da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt        mTarget = target;
64da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt        mContext = context;
65da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt    }
66da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt
67da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt    public boolean isPrivateDnsRouteSet() {
68da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt        return mPrivateDnsRouteSet;
69da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt    }
70da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt
71da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt    public void privateDnsRouteSet(boolean enabled) {
72da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt        mPrivateDnsRouteSet = enabled;
73da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt    }
74da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt
75da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt    public NetworkInfo getNetworkInfo() {
76da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt        return mNetworkInfo;
77da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt    }
78da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt
79da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt    public boolean isDefaultRouteSet() {
80da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt        return mDefaultRouteSet;
81da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt    }
82da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt
83da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt    public void defaultRouteSet(boolean enabled) {
84da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt        mDefaultRouteSet = enabled;
85da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt    }
86da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt
87da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt    /**
88da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt     * This is not implemented.
89da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt     */
90da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt    public void releaseWakeLock() {
91da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt    }
92da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt
93da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt    /**
94da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt     * Report whether data connectivity is possible.
95da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt     */
96da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt    public boolean isAvailable() {
97da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt        return true;
98da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt    }
99da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt
100da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt    /**
101da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt     * Return the system properties name associated with the tcp buffer sizes
102da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt     * for this network.
103da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt     */
104da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt    public String getTcpBufferSizesPropName() {
105da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt        return "net.tcp.buffersize.unknown";
106da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt    }
107da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt
108da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt    /**
109da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt     * Tear down mobile data connectivity, i.e., disable the ability to create
110da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt     * mobile data connections.
111da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt     * TODO - make async and return nothing?
112da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt     */
113da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt    public boolean teardown() {
114da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt        setDetailedState(NetworkInfo.DetailedState.DISCONNECTING, "disabled", null);
115da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt        setDetailedState(NetworkInfo.DetailedState.DISCONNECTED, "disabled", null);
116da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt        return true;
117da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt    }
118da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt
119d747cbc898ef44e59c3fbf74a8327b6a12aad397Wink Saville    @Override
120da6da0907b28d4704aabbdb1bbeb4300954670d1Irfan Sheriff    public void captivePortalCheckComplete() {
121da6da0907b28d4704aabbdb1bbeb4300954670d1Irfan Sheriff        // not implemented
122da6da0907b28d4704aabbdb1bbeb4300954670d1Irfan Sheriff    }
123da6da0907b28d4704aabbdb1bbeb4300954670d1Irfan Sheriff
124d747cbc898ef44e59c3fbf74a8327b6a12aad397Wink Saville    @Override
125d747cbc898ef44e59c3fbf74a8327b6a12aad397Wink Saville    public void captivePortalCheckCompleted(boolean isCaptivePortal) {
126d747cbc898ef44e59c3fbf74a8327b6a12aad397Wink Saville        // not implemented
127d747cbc898ef44e59c3fbf74a8327b6a12aad397Wink Saville    }
128d747cbc898ef44e59c3fbf74a8327b6a12aad397Wink Saville
129da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt    /**
130da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt     * Record the detailed state of a network, and if it is a
131da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt     * change from the previous state, send a notification to
132da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt     * any listeners.
133a45746efadd11bb7dfab026fb3c81a25fae74ca4Jeff Smith     * @param state the new {@code DetailedState}
134da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt     * @param reason a {@code String} indicating a reason for the state change,
135da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt     * if one was supplied. May be {@code null}.
136da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt     * @param extraInfo optional {@code String} providing extra information about the state change
137da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt     */
138da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt    private void setDetailedState(NetworkInfo.DetailedState state, String reason,
139da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt            String extraInfo) {
140da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt        if (DBG) log("setDetailed state, old ="
141da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt                + mNetworkInfo.getDetailedState() + " and new state=" + state);
142da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt        mNetworkInfo.setDetailedState(state, reason, extraInfo);
143da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt        Message msg = mTarget.obtainMessage(EVENT_STATE_CHANGED, mNetworkInfo);
144da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt        msg.sendToTarget();
145da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt    }
146da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt
147da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt    public void setTeardownRequested(boolean isRequested) {
148da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt        mTeardownRequested = isRequested;
149da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt    }
150da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt
151da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt    public boolean isTeardownRequested() {
152da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt        return mTeardownRequested;
153da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt    }
154da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt
155da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt    /**
156da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt     * Re-enable mobile data connectivity after a {@link #teardown()}.
157da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt     * TODO - make async and always get a notification?
158da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt     */
159da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt    public boolean reconnect() {
160da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt        setDetailedState(NetworkInfo.DetailedState.CONNECTING, "enabled", null);
161da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt        setDetailedState(NetworkInfo.DetailedState.CONNECTED, "enabled", null);
162da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt        setTeardownRequested(false);
163da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt        return true;
164da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt    }
165da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt
166da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt    /**
167da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt     * Turn on or off the mobile radio. No connectivity will be possible while the
168da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt     * radio is off. The operation is a no-op if the radio is already in the desired state.
169da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt     * @param turnOn {@code true} if the radio should be turned on, {@code false} if
170da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt     */
171da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt    public boolean setRadio(boolean turnOn) {
172da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt        return true;
173da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt    }
174da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt
1758e28b7d78232f6cf08739ca0d129cc7f9e650801Jeff Sharkey    @Override
1768e28b7d78232f6cf08739ca0d129cc7f9e650801Jeff Sharkey    public void setUserDataEnable(boolean enabled) {
1778e28b7d78232f6cf08739ca0d129cc7f9e650801Jeff Sharkey        // ignored
1788e28b7d78232f6cf08739ca0d129cc7f9e650801Jeff Sharkey    }
1798e28b7d78232f6cf08739ca0d129cc7f9e650801Jeff Sharkey
1808e28b7d78232f6cf08739ca0d129cc7f9e650801Jeff Sharkey    @Override
1818e28b7d78232f6cf08739ca0d129cc7f9e650801Jeff Sharkey    public void setPolicyDataEnable(boolean enabled) {
1828e28b7d78232f6cf08739ca0d129cc7f9e650801Jeff Sharkey        // ignored
183e798268f16ec6d0542616ea45ca0bb18ae2645eeWink Saville    }
184e798268f16ec6d0542616ea45ca0bb18ae2645eeWink Saville
185da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt    @Override
186da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt    public String toString() {
187da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt        StringBuffer sb = new StringBuffer("Dummy data state: none, dummy!");
188da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt        return sb.toString();
189da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt    }
190da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt
191da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt    /**
192da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt     * @see android.net.NetworkStateTracker#getLinkProperties()
193da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt     */
194da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt    public LinkProperties getLinkProperties() {
195da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt        return new LinkProperties(mLinkProperties);
196da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt    }
197da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt
198da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt    /**
199da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt     * @see android.net.NetworkStateTracker#getLinkCapabilities()
200da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt     */
201da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt    public LinkCapabilities getLinkCapabilities() {
202da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt        return new LinkCapabilities(mLinkCapabilities);
203da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt    }
204da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt
205d55a6b498d66d8fc415908ecf63e50f46cce67e8Robert Greenwalt    public void setDependencyMet(boolean met) {
206d55a6b498d66d8fc415908ecf63e50f46cce67e8Robert Greenwalt        // not supported on this network
207d55a6b498d66d8fc415908ecf63e50f46cce67e8Robert Greenwalt    }
208d55a6b498d66d8fc415908ecf63e50f46cce67e8Robert Greenwalt
20969edd64d9bf839428ce0a7723cd0f1deda98dc0dLorenzo Colitti    @Override
21069edd64d9bf839428ce0a7723cd0f1deda98dc0dLorenzo Colitti    public void addStackedLink(LinkProperties link) {
21169edd64d9bf839428ce0a7723cd0f1deda98dc0dLorenzo Colitti        mLinkProperties.addStackedLink(link);
21269edd64d9bf839428ce0a7723cd0f1deda98dc0dLorenzo Colitti    }
21369edd64d9bf839428ce0a7723cd0f1deda98dc0dLorenzo Colitti
21469edd64d9bf839428ce0a7723cd0f1deda98dc0dLorenzo Colitti    @Override
21569edd64d9bf839428ce0a7723cd0f1deda98dc0dLorenzo Colitti    public void removeStackedLink(LinkProperties link) {
21669edd64d9bf839428ce0a7723cd0f1deda98dc0dLorenzo Colitti        mLinkProperties.removeStackedLink(link);
21769edd64d9bf839428ce0a7723cd0f1deda98dc0dLorenzo Colitti    }
21869edd64d9bf839428ce0a7723cd0f1deda98dc0dLorenzo Colitti
219665e1aed5e99af1e66af56c0d73e32fd86f57273Robert Greenwalt    @Override
220665e1aed5e99af1e66af56c0d73e32fd86f57273Robert Greenwalt    public void supplyMessenger(Messenger messenger) {
221665e1aed5e99af1e66af56c0d73e32fd86f57273Robert Greenwalt        // not supported on this network
222665e1aed5e99af1e66af56c0d73e32fd86f57273Robert Greenwalt    }
223665e1aed5e99af1e66af56c0d73e32fd86f57273Robert Greenwalt
224da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt    static private void log(String s) {
225da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt        Slog.d(TAG, s);
226da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt    }
227da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt
228da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt    static private void loge(String s) {
229da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt        Slog.e(TAG, s);
230da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt    }
231da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt}
232