DummyDataStateTracker.java revision da3d5e6587c1476d489495ac93e84ebf223024c9
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; 22da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwaltimport android.net.NetworkInfo.DetailedState; 23da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwaltimport android.net.NetworkInfo; 24da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwaltimport android.net.LinkProperties; 25da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwaltimport android.util.Slog; 26da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt 27da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt/** 28da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt * A dummy data state tracker for use when we don't have a real radio 29da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt * connection. useful when bringing up a board or when you have network 30da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt * access through other means. 31da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt * 32da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt * {@hide} 33da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt */ 34da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwaltpublic class DummyDataStateTracker implements NetworkStateTracker { 35da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt 36da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt private static final String TAG = "DummyDataStateTracker"; 37da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt private static final boolean DBG = true; 38da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt private static final boolean VDBG = false; 39da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt 40da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt private NetworkInfo mNetworkInfo; 41da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt private boolean mTeardownRequested = false; 42da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt private Handler mTarget; 43da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt private Context mContext; 44da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt private LinkProperties mLinkProperties; 45da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt private LinkCapabilities mLinkCapabilities; 46da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt private boolean mPrivateDnsRouteSet = false; 47da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt private boolean mDefaultRouteSet = false; 48da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt 49da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt // DEFAULT and HIPRI are the same connection. If we're one of these we need to check if 50da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt // the other is also disconnected before we reset sockets 51da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt private boolean mIsDefaultOrHipri = false; 52da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt 53da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt /** 54da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt * Create a new DummyDataStateTracker 55da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt * @param netType the ConnectivityManager network type 56da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt * @param tag the name of this network 57da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt */ 58da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt public DummyDataStateTracker(int netType, String tag) { 59da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt mNetworkInfo = new NetworkInfo(netType); 60da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt } 61da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt 62da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt /** 63da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt * Begin monitoring data connectivity. 64da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt * 65da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt * @param context is the current Android context 66da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt * @param target is the Handler to which to return the events. 67da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt */ 68da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt public void startMonitoring(Context context, Handler target) { 69da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt mTarget = target; 70da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt mContext = context; 71da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt } 72da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt 73da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt /** 74da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt * Return the IP addresses of the DNS servers available for the mobile data 75da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt * network interface. 76da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt * @return a list of DNS addresses, with no holes. 77da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt */ 78da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt public String[] getDnsPropNames() { 79da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt return new String[0]; 80da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt } 81da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt 82da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt public boolean isPrivateDnsRouteSet() { 83da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt return mPrivateDnsRouteSet; 84da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt } 85da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt 86da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt public void privateDnsRouteSet(boolean enabled) { 87da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt mPrivateDnsRouteSet = enabled; 88da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt } 89da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt 90da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt public NetworkInfo getNetworkInfo() { 91da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt return mNetworkInfo; 92da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt } 93da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt 94da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt public int getDefaultGatewayAddr() { 95da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt return 0; 96da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt } 97da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt 98da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt public boolean isDefaultRouteSet() { 99da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt return mDefaultRouteSet; 100da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt } 101da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt 102da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt public void defaultRouteSet(boolean enabled) { 103da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt mDefaultRouteSet = enabled; 104da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt } 105da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt 106da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt /** 107da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt * This is not implemented. 108da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt */ 109da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt public void releaseWakeLock() { 110da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt } 111da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt 112da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt /** 113da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt * Report whether data connectivity is possible. 114da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt */ 115da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt public boolean isAvailable() { 116da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt return true; 117da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt } 118da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt 119da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt /** 120da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt * Return the system properties name associated with the tcp buffer sizes 121da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt * for this network. 122da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt */ 123da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt public String getTcpBufferSizesPropName() { 124da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt return "net.tcp.buffersize.unknown"; 125da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt } 126da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt 127da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt /** 128da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt * Tear down mobile data connectivity, i.e., disable the ability to create 129da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt * mobile data connections. 130da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt * TODO - make async and return nothing? 131da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt */ 132da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt public boolean teardown() { 133da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt setDetailedState(NetworkInfo.DetailedState.DISCONNECTING, "disabled", null); 134da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt setDetailedState(NetworkInfo.DetailedState.DISCONNECTED, "disabled", null); 135da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt return true; 136da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt } 137da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt 138da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt /** 139da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt * Record the detailed state of a network, and if it is a 140da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt * change from the previous state, send a notification to 141da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt * any listeners. 142da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt * @param state the new @{code DetailedState} 143da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt * @param reason a {@code String} indicating a reason for the state change, 144da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt * if one was supplied. May be {@code null}. 145da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt * @param extraInfo optional {@code String} providing extra information about the state change 146da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt */ 147da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt private void setDetailedState(NetworkInfo.DetailedState state, String reason, 148da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt String extraInfo) { 149da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt if (DBG) log("setDetailed state, old =" 150da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt + mNetworkInfo.getDetailedState() + " and new state=" + state); 151da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt mNetworkInfo.setDetailedState(state, reason, extraInfo); 152da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt Message msg = mTarget.obtainMessage(EVENT_STATE_CHANGED, mNetworkInfo); 153da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt msg.sendToTarget(); 154da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt } 155da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt 156da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt public void setTeardownRequested(boolean isRequested) { 157da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt mTeardownRequested = isRequested; 158da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt } 159da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt 160da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt public boolean isTeardownRequested() { 161da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt return mTeardownRequested; 162da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt } 163da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt 164da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt /** 165da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt * Re-enable mobile data connectivity after a {@link #teardown()}. 166da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt * TODO - make async and always get a notification? 167da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt */ 168da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt public boolean reconnect() { 169da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt setDetailedState(NetworkInfo.DetailedState.CONNECTING, "enabled", null); 170da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt setDetailedState(NetworkInfo.DetailedState.CONNECTED, "enabled", null); 171da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt setTeardownRequested(false); 172da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt return true; 173da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt } 174da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt 175da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt /** 176da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt * Turn on or off the mobile radio. No connectivity will be possible while the 177da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt * radio is off. The operation is a no-op if the radio is already in the desired state. 178da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt * @param turnOn {@code true} if the radio should be turned on, {@code false} if 179da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt */ 180da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt public boolean setRadio(boolean turnOn) { 181da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt return true; 182da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt } 183da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt 184da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt public int startUsingNetworkFeature(String feature, int callingPid, int callingUid) { 185da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt return -1; 186da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt } 187da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt 188da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt public int stopUsingNetworkFeature(String feature, int callingPid, int callingUid) { 189da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt return -1; 190da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt } 191da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt 192da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt @Override 193da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt public String toString() { 194da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt StringBuffer sb = new StringBuffer("Dummy data state: none, dummy!"); 195da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt return sb.toString(); 196da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt } 197da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt 198da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt /** 199da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt * @see android.net.NetworkStateTracker#getLinkProperties() 200da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt */ 201da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt public LinkProperties getLinkProperties() { 202da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt return new LinkProperties(mLinkProperties); 203da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt } 204da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt 205da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt /** 206da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt * @see android.net.NetworkStateTracker#getLinkCapabilities() 207da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt */ 208da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt public LinkCapabilities getLinkCapabilities() { 209da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt return new LinkCapabilities(mLinkCapabilities); 210da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt } 211da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt 212da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt static private void log(String s) { 213da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt Slog.d(TAG, s); 214da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt } 215da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt 216da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt static private void loge(String s) { 217da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt Slog.e(TAG, s); 218da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt } 219da3d5e6587c1476d489495ac93e84ebf223024c9Robert Greenwalt} 220