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
17package android.net;
18
19import android.content.Context;
20import android.os.Handler;
21import android.os.Messenger;
22
23import 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 */
36public 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     * @return a copy of this connections capabilities, may be empty but never null.
115     */
116    public NetworkCapabilities getNetworkCapabilities();
117
118    /**
119     * Get interesting information about this network link
120     * @return a copy of link information, null if not available
121     */
122    public LinkQualityInfo getLinkQualityInfo();
123
124    /**
125     * Return the system properties name associated with the tcp buffer sizes
126     * for this network.
127     */
128    public String getTcpBufferSizesPropName();
129
130    /**
131     * Disable connectivity to a network
132     * @return {@code true} if a teardown occurred, {@code false} if the
133     * teardown did not occur.
134     */
135    public boolean teardown();
136
137    /**
138     * Reenable connectivity to a network after a {@link #teardown()}.
139     * @return {@code true} if we're connected or expect to be connected
140     */
141    public boolean reconnect();
142
143    /**
144     * Captive portal check has completed
145     */
146    public void captivePortalCheckCompleted(boolean isCaptive);
147
148    /**
149     * Turn the wireless radio off for a network.
150     * @param turnOn {@code true} to turn the radio on, {@code false}
151     */
152    public boolean setRadio(boolean turnOn);
153
154    /**
155     * Returns an indication of whether this network is available for
156     * connections. A value of {@code false} means that some quasi-permanent
157     * condition prevents connectivity to this network.
158     *
159     * NOTE that this is broken on multi-connection devices.  Should be fixed in J release
160     * TODO - fix on multi-pdp devices
161     */
162    public boolean isAvailable();
163
164    /**
165     * User control of data connection through this network, typically persisted
166     * internally.
167     */
168    public void setUserDataEnable(boolean enabled);
169
170    /**
171     * Policy control of data connection through this network, typically not
172     * persisted internally. Usually used when {@link NetworkPolicy#limitBytes}
173     * is passed.
174     */
175    public void setPolicyDataEnable(boolean enabled);
176
177    /**
178     * -------------------------------------------------------------
179     * Storage API used by ConnectivityService for saving
180     * Network specific information.
181     * -------------------------------------------------------------
182     */
183
184    /**
185     * Check if private DNS route is set for the network
186     */
187    public boolean isPrivateDnsRouteSet();
188
189    /**
190     * Set a flag indicating private DNS route is set
191     */
192    public void privateDnsRouteSet(boolean enabled);
193
194    /**
195     * Check if default route is set
196     */
197    public boolean isDefaultRouteSet();
198
199    /**
200     * Set a flag indicating default route is set for the network
201     */
202    public void defaultRouteSet(boolean enabled);
203
204    /**
205     * Check if tear down was requested
206     */
207    public boolean isTeardownRequested();
208
209    /**
210     * Indicate tear down requested from connectivity
211     */
212    public void setTeardownRequested(boolean isRequested);
213
214    /**
215     * An external dependency has been met/unmet
216     */
217    public void setDependencyMet(boolean met);
218
219    /*
220     * Called once to setup async channel between this and
221     * the underlying network specific code.
222     */
223    public void supplyMessenger(Messenger messenger);
224
225    /*
226     * Network interface name that we'll lookup for sampling data
227     */
228    public String getNetworkInterfaceName();
229
230    /*
231     * Save the starting sample
232     */
233    public void startSampling(SamplingDataTracker.SamplingSnapshot s);
234
235    /*
236     * Save the ending sample
237     */
238    public void stopSampling(SamplingDataTracker.SamplingSnapshot s);
239
240    /*
241     * Record the current netId
242     */
243    public void setNetId(int netId);
244
245    /*
246     * ?
247     */
248    public Network getNetwork();
249
250}
251