/* * Copyright (C) 2008 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package android.net; import android.content.Context; import android.os.Handler; import android.os.Messenger; import static com.android.internal.util.Protocol.BASE_NETWORK_STATE_TRACKER; /** * Interface provides the {@link com.android.server.ConnectivityService} * with three services. Events to the ConnectivityService when * changes occur, an API for controlling the network and storage * for network specific information. * * The Connectivity will call startMonitoring before any other * method is called. * * {@hide} */ public interface NetworkStateTracker { /** * ------------------------------------------------------------- * Event Interface back to ConnectivityService. * * The events that are to be sent back to the Handler passed * to startMonitoring when the particular event occurs. * ------------------------------------------------------------- */ /** * The network state has changed and the NetworkInfo object * contains the new state. * * msg.what = EVENT_STATE_CHANGED * msg.obj = NetworkInfo object */ public static final int EVENT_STATE_CHANGED = BASE_NETWORK_STATE_TRACKER; /** * msg.what = EVENT_CONFIGURATION_CHANGED * msg.obj = NetworkInfo object */ public static final int EVENT_CONFIGURATION_CHANGED = BASE_NETWORK_STATE_TRACKER + 1; /** * msg.what = EVENT_RESTORE_DEFAULT_NETWORK * msg.obj = FeatureUser object */ public static final int EVENT_RESTORE_DEFAULT_NETWORK = BASE_NETWORK_STATE_TRACKER + 2; /** * msg.what = EVENT_NETWORK_SUBTYPE_CHANGED * msg.obj = NetworkInfo object */ public static final int EVENT_NETWORK_SUBTYPE_CHANGED = BASE_NETWORK_STATE_TRACKER + 3; /** * msg.what = EVENT_NETWORK_CONNECTED * msg.obj = LinkProperties object */ public static final int EVENT_NETWORK_CONNECTED = BASE_NETWORK_STATE_TRACKER + 4; /** * msg.what = EVENT_NETWORK_CONNECTION_DISCONNECTED * msg.obj = LinkProperties object, same iface name */ public static final int EVENT_NETWORK_DISCONNECTED = BASE_NETWORK_STATE_TRACKER + 5; /** * ------------------------------------------------------------- * Control Interface * ------------------------------------------------------------- */ /** * Begin monitoring data connectivity. * * This is the first method called when this interface is used. * * @param context is the current Android context * @param target is the Hander to which to return the events. */ public void startMonitoring(Context context, Handler target); /** * Fetch NetworkInfo for the network */ public NetworkInfo getNetworkInfo(); /** * Return the LinkProperties for the connection. * * @return a copy of the LinkProperties, is never null. */ public LinkProperties getLinkProperties(); /** * @return a copy of this connections capabilities, may be empty but never null. */ public NetworkCapabilities getNetworkCapabilities(); /** * Get interesting information about this network link * @return a copy of link information, null if not available */ public LinkQualityInfo getLinkQualityInfo(); /** * Return the system properties name associated with the tcp buffer sizes * for this network. */ public String getTcpBufferSizesPropName(); /** * Disable connectivity to a network * @return {@code true} if a teardown occurred, {@code false} if the * teardown did not occur. */ public boolean teardown(); /** * Reenable connectivity to a network after a {@link #teardown()}. * @return {@code true} if we're connected or expect to be connected */ public boolean reconnect(); /** * Captive portal check has completed */ public void captivePortalCheckCompleted(boolean isCaptive); /** * Turn the wireless radio off for a network. * @param turnOn {@code true} to turn the radio on, {@code false} */ public boolean setRadio(boolean turnOn); /** * Returns an indication of whether this network is available for * connections. A value of {@code false} means that some quasi-permanent * condition prevents connectivity to this network. * * NOTE that this is broken on multi-connection devices. Should be fixed in J release * TODO - fix on multi-pdp devices */ public boolean isAvailable(); /** * User control of data connection through this network, typically persisted * internally. */ public void setUserDataEnable(boolean enabled); /** * Policy control of data connection through this network, typically not * persisted internally. Usually used when {@link NetworkPolicy#limitBytes} * is passed. */ public void setPolicyDataEnable(boolean enabled); /** * ------------------------------------------------------------- * Storage API used by ConnectivityService for saving * Network specific information. * ------------------------------------------------------------- */ /** * Check if private DNS route is set for the network */ public boolean isPrivateDnsRouteSet(); /** * Set a flag indicating private DNS route is set */ public void privateDnsRouteSet(boolean enabled); /** * Check if default route is set */ public boolean isDefaultRouteSet(); /** * Set a flag indicating default route is set for the network */ public void defaultRouteSet(boolean enabled); /** * Check if tear down was requested */ public boolean isTeardownRequested(); /** * Indicate tear down requested from connectivity */ public void setTeardownRequested(boolean isRequested); /** * An external dependency has been met/unmet */ public void setDependencyMet(boolean met); /** * Informs the state tracker that another interface is stacked on top of it. **/ public void addStackedLink(LinkProperties link); /** * Informs the state tracker that a stacked interface has been removed. **/ public void removeStackedLink(LinkProperties link); /* * Called once to setup async channel between this and * the underlying network specific code. */ public void supplyMessenger(Messenger messenger); /* * Network interface name that we'll lookup for sampling data */ public String getNetworkInterfaceName(); /* * Save the starting sample */ public void startSampling(SamplingDataTracker.SamplingSnapshot s); /* * Save the ending sample */ public void stopSampling(SamplingDataTracker.SamplingSnapshot s); /* * Record the current netId */ public void setNetId(int netId); /* * ? */ public Network getNetwork(); }