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