1899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey/* 2899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey * Copyright (C) 2012 The Android Open Source Project 3899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey * 4899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey * Licensed under the Apache License, Version 2.0 (the "License"); 5899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey * you may not use this file except in compliance with the License. 6899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey * You may obtain a copy of the License at 7899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey * 8899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey * http://www.apache.org/licenses/LICENSE-2.0 9899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey * 10899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey * Unless required by applicable law or agreed to in writing, software 11899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey * distributed under the License is distributed on an "AS IS" BASIS, 12899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey * See the License for the specific language governing permissions and 14899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey * limitations under the License. 15899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey */ 16899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey 17899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkeypackage android.net; 18899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey 19899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkeyimport android.content.Context; 20899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkeyimport android.os.Handler; 21665e1aed5e99af1e66af56c0d73e32fd86f57273Robert Greenwaltimport android.os.Messenger; 22899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey 23899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkeyimport com.android.internal.util.Preconditions; 24899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey 25899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkeyimport java.util.concurrent.atomic.AtomicBoolean; 26899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey 27899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey/** 28899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey * Interface to control and observe state of a specific network, hiding 29899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey * network-specific details from {@link ConnectivityManager}. Surfaces events 30899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey * through the registered {@link Handler} to enable {@link ConnectivityManager} 31899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey * to respond to state changes over time. 32899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey * 33899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey * @hide 34899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey */ 35899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkeypublic abstract class BaseNetworkStateTracker implements NetworkStateTracker { 36899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey // TODO: better document threading expectations 37899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey // TODO: migrate to make NetworkStateTracker abstract class 38899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey 39899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey public static final String PROP_TCP_BUFFER_UNKNOWN = "net.tcp.buffersize.unknown"; 40899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey public static final String PROP_TCP_BUFFER_WIFI = "net.tcp.buffersize.wifi"; 41899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey 42899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey protected Context mContext; 43899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey private Handler mTarget; 44899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey 45899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey protected NetworkInfo mNetworkInfo; 46899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey protected LinkProperties mLinkProperties; 47899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey protected LinkCapabilities mLinkCapabilities; 48899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey 49899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey private AtomicBoolean mTeardownRequested = new AtomicBoolean(false); 50899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey private AtomicBoolean mPrivateDnsRouteSet = new AtomicBoolean(false); 51899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey private AtomicBoolean mDefaultRouteSet = new AtomicBoolean(false); 52899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey 53899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey public BaseNetworkStateTracker(int networkType) { 54899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey mNetworkInfo = new NetworkInfo( 55899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey networkType, -1, ConnectivityManager.getNetworkTypeName(networkType), null); 56899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey mLinkProperties = new LinkProperties(); 57899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey mLinkCapabilities = new LinkCapabilities(); 58899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey } 59899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey 60899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey @Deprecated 61899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey protected Handler getTargetHandler() { 62899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey return mTarget; 63899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey } 64899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey 65899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey protected final void dispatchStateChanged() { 66899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey // TODO: include snapshot of other fields when sending 67899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey mTarget.obtainMessage(EVENT_STATE_CHANGED, getNetworkInfo()).sendToTarget(); 68899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey } 69899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey 70899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey protected final void dispatchConfigurationChanged() { 71899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey // TODO: include snapshot of other fields when sending 72899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey mTarget.obtainMessage(EVENT_CONFIGURATION_CHANGED, getNetworkInfo()).sendToTarget(); 73899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey } 74899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey 75899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey @Override 76899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey public final void startMonitoring(Context context, Handler target) { 77899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey mContext = Preconditions.checkNotNull(context); 78899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey mTarget = Preconditions.checkNotNull(target); 79899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey startMonitoringInternal(); 80899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey } 81899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey 82899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey protected abstract void startMonitoringInternal(); 83899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey 84899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey @Override 85899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey public final NetworkInfo getNetworkInfo() { 86899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey return new NetworkInfo(mNetworkInfo); 87899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey } 88899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey 89899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey @Override 90899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey public final LinkProperties getLinkProperties() { 91899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey return new LinkProperties(mLinkProperties); 92899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey } 93899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey 94899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey @Override 95899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey public final LinkCapabilities getLinkCapabilities() { 96899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey return new LinkCapabilities(mLinkCapabilities); 97899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey } 98899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey 99899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey @Override 100c5fd6e59db10bb0069cf64394dce3955234757c1Irfan Sheriff public void captivePortalCheckComplete() { 101c5fd6e59db10bb0069cf64394dce3955234757c1Irfan Sheriff // not implemented 102c5fd6e59db10bb0069cf64394dce3955234757c1Irfan Sheriff } 103c5fd6e59db10bb0069cf64394dce3955234757c1Irfan Sheriff 104c5fd6e59db10bb0069cf64394dce3955234757c1Irfan Sheriff @Override 105899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey public boolean setRadio(boolean turnOn) { 106899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey // Base tracker doesn't handle radios 107899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey return true; 108899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey } 109899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey 110899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey @Override 111899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey public boolean isAvailable() { 112899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey return mNetworkInfo.isAvailable(); 113899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey } 114899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey 115899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey @Override 116899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey public void setUserDataEnable(boolean enabled) { 117899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey // Base tracker doesn't handle enabled flags 118899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey } 119899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey 120899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey @Override 121899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey public void setPolicyDataEnable(boolean enabled) { 122899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey // Base tracker doesn't handle enabled flags 123899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey } 124899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey 125899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey @Override 126899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey public boolean isPrivateDnsRouteSet() { 127899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey return mPrivateDnsRouteSet.get(); 128899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey } 129899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey 130899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey @Override 131899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey public void privateDnsRouteSet(boolean enabled) { 132899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey mPrivateDnsRouteSet.set(enabled); 133899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey } 134899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey 135899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey @Override 136899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey public boolean isDefaultRouteSet() { 137899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey return mDefaultRouteSet.get(); 138899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey } 139899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey 140899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey @Override 141899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey public void defaultRouteSet(boolean enabled) { 142899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey mDefaultRouteSet.set(enabled); 143899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey } 144899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey 145899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey @Override 146899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey public boolean isTeardownRequested() { 147899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey return mTeardownRequested.get(); 148899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey } 149899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey 150899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey @Override 151899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey public void setTeardownRequested(boolean isRequested) { 152899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey mTeardownRequested.set(isRequested); 153899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey } 154899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey 155899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey @Override 156899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey public void setDependencyMet(boolean met) { 157899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey // Base tracker doesn't handle dependencies 158899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey } 15969edd64d9bf839428ce0a7723cd0f1deda98dc0dLorenzo Colitti 16069edd64d9bf839428ce0a7723cd0f1deda98dc0dLorenzo Colitti @Override 16169edd64d9bf839428ce0a7723cd0f1deda98dc0dLorenzo Colitti public void addStackedLink(LinkProperties link) { 16269edd64d9bf839428ce0a7723cd0f1deda98dc0dLorenzo Colitti mLinkProperties.addStackedLink(link); 16369edd64d9bf839428ce0a7723cd0f1deda98dc0dLorenzo Colitti } 16469edd64d9bf839428ce0a7723cd0f1deda98dc0dLorenzo Colitti 16569edd64d9bf839428ce0a7723cd0f1deda98dc0dLorenzo Colitti @Override 16669edd64d9bf839428ce0a7723cd0f1deda98dc0dLorenzo Colitti public void removeStackedLink(LinkProperties link) { 16769edd64d9bf839428ce0a7723cd0f1deda98dc0dLorenzo Colitti mLinkProperties.removeStackedLink(link); 16869edd64d9bf839428ce0a7723cd0f1deda98dc0dLorenzo Colitti } 169665e1aed5e99af1e66af56c0d73e32fd86f57273Robert Greenwalt 170665e1aed5e99af1e66af56c0d73e32fd86f57273Robert Greenwalt @Override 171665e1aed5e99af1e66af56c0d73e32fd86f57273Robert Greenwalt public void supplyMessenger(Messenger messenger) { 172665e1aed5e99af1e66af56c0d73e32fd86f57273Robert Greenwalt // not supported on this network 173665e1aed5e99af1e66af56c0d73e32fd86f57273Robert Greenwalt } 174899223b97c9b0ae56a8211a46600914c0ecfd854Jeff Sharkey} 175