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     * -------------------------------------------------------------
89     * Control Interface
90     * -------------------------------------------------------------
91     */
92    /**
93     * Begin monitoring data connectivity.
94     *
95     * This is the first method called when this interface is used.
96     *
97     * @param context is the current Android context
98     * @param target is the Hander to which to return the events.
99     */
100    public void startMonitoring(Context context, Handler target);
101
102    /**
103     * Fetch NetworkInfo for the network
104     */
105    public NetworkInfo getNetworkInfo();
106
107    /**
108     * Return the LinkProperties for the connection.
109     *
110     * @return a copy of the LinkProperties, is never null.
111     */
112    public LinkProperties getLinkProperties();
113
114    /**
115     * A capability is an Integer/String pair, the capabilities
116     * are defined in the class LinkSocket#Key.
117     *
118     * @return a copy of this connections capabilities, may be empty but never null.
119     */
120    public LinkCapabilities getLinkCapabilities();
121
122    /**
123     * Return the system properties name associated with the tcp buffer sizes
124     * for this network.
125     */
126    public String getTcpBufferSizesPropName();
127
128    /**
129     * Disable connectivity to a network
130     * @return {@code true} if a teardown occurred, {@code false} if the
131     * teardown did not occur.
132     */
133    public boolean teardown();
134
135    /**
136     * Reenable connectivity to a network after a {@link #teardown()}.
137     * @return {@code true} if we're connected or expect to be connected
138     */
139    public boolean reconnect();
140
141    /**
142     * Ready to switch on to the network after captive portal check
143     */
144    public void captivePortalCheckComplete();
145
146    /**
147     * Turn the wireless radio off for a network.
148     * @param turnOn {@code true} to turn the radio on, {@code false}
149     */
150    public boolean setRadio(boolean turnOn);
151
152    /**
153     * Returns an indication of whether this network is available for
154     * connections. A value of {@code false} means that some quasi-permanent
155     * condition prevents connectivity to this network.
156     *
157     * NOTE that this is broken on multi-connection devices.  Should be fixed in J release
158     * TODO - fix on multi-pdp devices
159     */
160    public boolean isAvailable();
161
162    /**
163     * User control of data connection through this network, typically persisted
164     * internally.
165     */
166    public void setUserDataEnable(boolean enabled);
167
168    /**
169     * Policy control of data connection through this network, typically not
170     * persisted internally. Usually used when {@link NetworkPolicy#limitBytes}
171     * is passed.
172     */
173    public void setPolicyDataEnable(boolean enabled);
174
175    /**
176     * -------------------------------------------------------------
177     * Storage API used by ConnectivityService for saving
178     * Network specific information.
179     * -------------------------------------------------------------
180     */
181
182    /**
183     * Check if private DNS route is set for the network
184     */
185    public boolean isPrivateDnsRouteSet();
186
187    /**
188     * Set a flag indicating private DNS route is set
189     */
190    public void privateDnsRouteSet(boolean enabled);
191
192    /**
193     * Check if default route is set
194     */
195    public boolean isDefaultRouteSet();
196
197    /**
198     * Set a flag indicating default route is set for the network
199     */
200    public void defaultRouteSet(boolean enabled);
201
202    /**
203     * Check if tear down was requested
204     */
205    public boolean isTeardownRequested();
206
207    /**
208     * Indicate tear down requested from connectivity
209     */
210    public void setTeardownRequested(boolean isRequested);
211
212    /**
213     * An external dependency has been met/unmet
214     */
215    public void setDependencyMet(boolean met);
216
217    /**
218     * Informs the state tracker that another interface is stacked on top of it.
219     **/
220    public void addStackedLink(LinkProperties link);
221
222    /**
223     * Informs the state tracker that a stacked interface has been removed.
224     **/
225    public void removeStackedLink(LinkProperties link);
226
227    /*
228     * Called once to setup async channel between this and
229     * the underlying network specific code.
230     */
231    public void supplyMessenger(Messenger messenger);
232}
233