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