1 /* 2 * Copyright (C) 2008 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17 package android.net; 18 19 import android.content.Context; 20 import android.os.Handler; 21 import android.os.Messenger; 22 23 import static com.android.internal.util.Protocol.BASE_NETWORK_STATE_TRACKER; 24 25 /** 26 * Interface provides the {@link com.android.server.ConnectivityService} 27 * with three services. Events to the ConnectivityService when 28 * changes occur, an API for controlling the network and storage 29 * for network specific information. 30 * 31 * The Connectivity will call startMonitoring before any other 32 * method is called. 33 * 34 * {@hide} 35 */ 36 public interface NetworkStateTracker { 37 38 /** 39 * ------------------------------------------------------------- 40 * Event Interface back to ConnectivityService. 41 * 42 * The events that are to be sent back to the Handler passed 43 * to startMonitoring when the particular event occurs. 44 * ------------------------------------------------------------- 45 */ 46 47 /** 48 * The network state has changed and the NetworkInfo object 49 * contains the new state. 50 * 51 * msg.what = EVENT_STATE_CHANGED 52 * msg.obj = NetworkInfo object 53 */ 54 public static final int EVENT_STATE_CHANGED = BASE_NETWORK_STATE_TRACKER; 55 56 /** 57 * msg.what = EVENT_CONFIGURATION_CHANGED 58 * msg.obj = NetworkInfo object 59 */ 60 public static final int EVENT_CONFIGURATION_CHANGED = BASE_NETWORK_STATE_TRACKER + 1; 61 62 /** 63 * msg.what = EVENT_RESTORE_DEFAULT_NETWORK 64 * msg.obj = FeatureUser object 65 */ 66 public static final int EVENT_RESTORE_DEFAULT_NETWORK = BASE_NETWORK_STATE_TRACKER + 2; 67 68 /** 69 * msg.what = EVENT_NETWORK_SUBTYPE_CHANGED 70 * msg.obj = NetworkInfo object 71 */ 72 public static final int EVENT_NETWORK_SUBTYPE_CHANGED = BASE_NETWORK_STATE_TRACKER + 3; 73 74 /** 75 * msg.what = EVENT_NETWORK_CONNECTED 76 * msg.obj = LinkProperties object 77 */ 78 public static final int EVENT_NETWORK_CONNECTED = BASE_NETWORK_STATE_TRACKER + 4; 79 80 /** 81 * msg.what = EVENT_NETWORK_CONNECTION_DISCONNECTED 82 * msg.obj = LinkProperties object, same iface name 83 */ 84 public static final int EVENT_NETWORK_DISCONNECTED = BASE_NETWORK_STATE_TRACKER + 5; 85 86 /** 87 * ------------------------------------------------------------- 88 * Control Interface 89 * ------------------------------------------------------------- 90 */ 91 /** 92 * Begin monitoring data connectivity. 93 * 94 * This is the first method called when this interface is used. 95 * 96 * @param context is the current Android context 97 * @param target is the Hander to which to return the events. 98 */ 99 public void startMonitoring(Context context, Handler target); 100 101 /** 102 * Fetch NetworkInfo for the network 103 */ 104 public NetworkInfo getNetworkInfo(); 105 106 /** 107 * Return the LinkProperties for the connection. 108 * 109 * @return a copy of the LinkProperties, is never null. 110 */ 111 public LinkProperties getLinkProperties(); 112 113 /** 114 * A capability is an Integer/String pair, the capabilities 115 * are defined in the class LinkSocket#Key. 116 * 117 * @return a copy of this connections capabilities, may be empty but never null. 118 */ 119 public LinkCapabilities getLinkCapabilities(); 120 121 /** 122 * Get interesting information about this network link 123 * @return a copy of link information, null if not available 124 */ 125 public LinkQualityInfo getLinkQualityInfo(); 126 127 /** 128 * Return the system properties name associated with the tcp buffer sizes 129 * for this network. 130 */ 131 public String getTcpBufferSizesPropName(); 132 133 /** 134 * Disable connectivity to a network 135 * @return {@code true} if a teardown occurred, {@code false} if the 136 * teardown did not occur. 137 */ 138 public boolean teardown(); 139 140 /** 141 * Reenable connectivity to a network after a {@link #teardown()}. 142 * @return {@code true} if we're connected or expect to be connected 143 */ 144 public boolean reconnect(); 145 146 /** 147 * Ready to switch on to the network after captive portal check 148 */ 149 public void captivePortalCheckComplete(); 150 151 /** 152 * Captive portal check has completed 153 */ 154 public void captivePortalCheckCompleted(boolean isCaptive); 155 156 /** 157 * Turn the wireless radio off for a network. 158 * @param turnOn {@code true} to turn the radio on, {@code false} 159 */ 160 public boolean setRadio(boolean turnOn); 161 162 /** 163 * Returns an indication of whether this network is available for 164 * connections. A value of {@code false} means that some quasi-permanent 165 * condition prevents connectivity to this network. 166 * 167 * NOTE that this is broken on multi-connection devices. Should be fixed in J release 168 * TODO - fix on multi-pdp devices 169 */ 170 public boolean isAvailable(); 171 172 /** 173 * User control of data connection through this network, typically persisted 174 * internally. 175 */ 176 public void setUserDataEnable(boolean enabled); 177 178 /** 179 * Policy control of data connection through this network, typically not 180 * persisted internally. Usually used when {@link NetworkPolicy#limitBytes} 181 * is passed. 182 */ 183 public void setPolicyDataEnable(boolean enabled); 184 185 /** 186 * ------------------------------------------------------------- 187 * Storage API used by ConnectivityService for saving 188 * Network specific information. 189 * ------------------------------------------------------------- 190 */ 191 192 /** 193 * Check if private DNS route is set for the network 194 */ 195 public boolean isPrivateDnsRouteSet(); 196 197 /** 198 * Set a flag indicating private DNS route is set 199 */ 200 public void privateDnsRouteSet(boolean enabled); 201 202 /** 203 * Check if default route is set 204 */ 205 public boolean isDefaultRouteSet(); 206 207 /** 208 * Set a flag indicating default route is set for the network 209 */ 210 public void defaultRouteSet(boolean enabled); 211 212 /** 213 * Check if tear down was requested 214 */ 215 public boolean isTeardownRequested(); 216 217 /** 218 * Indicate tear down requested from connectivity 219 */ 220 public void setTeardownRequested(boolean isRequested); 221 222 /** 223 * An external dependency has been met/unmet 224 */ 225 public void setDependencyMet(boolean met); 226 227 /** 228 * Informs the state tracker that another interface is stacked on top of it. 229 **/ 230 public void addStackedLink(LinkProperties link); 231 232 /** 233 * Informs the state tracker that a stacked interface has been removed. 234 **/ 235 public void removeStackedLink(LinkProperties link); 236 237 /* 238 * Called once to setup async channel between this and 239 * the underlying network specific code. 240 */ 241 public void supplyMessenger(Messenger messenger); 242 243 /* 244 * Network interface name that we'll lookup for sampling data 245 */ 246 public String getNetworkInterfaceName(); 247 248 /* 249 * Save the starting sample 250 */ 251 public void startSampling(SamplingDataTracker.SamplingSnapshot s); 252 253 /* 254 * Save the ending sample 255 */ 256 public void stopSampling(SamplingDataTracker.SamplingSnapshot s); 257 258 } 259