diff options
Diffstat (limited to 'core/java/android/net')
-rw-r--r-- | core/java/android/net/ConnectivityManager.java | 11 | ||||
-rw-r--r-- | core/java/android/net/EthernetDataTracker.java | 55 | ||||
-rw-r--r-- | core/java/android/net/INetworkPolicyListener.aidl | 1 | ||||
-rw-r--r-- | core/java/android/net/INetworkPolicyManager.aidl | 2 | ||||
-rw-r--r-- | core/java/android/net/NetworkInfo.java | 12 | ||||
-rw-r--r-- | core/java/android/net/NetworkPolicy.java | 50 | ||||
-rw-r--r-- | core/java/android/net/TrafficStats.java | 7 | ||||
-rw-r--r-- | core/java/android/net/http/HttpResponseCache.java | 20 |
8 files changed, 124 insertions, 34 deletions
diff --git a/core/java/android/net/ConnectivityManager.java b/core/java/android/net/ConnectivityManager.java index a569317..2eef8f4 100644 --- a/core/java/android/net/ConnectivityManager.java +++ b/core/java/android/net/ConnectivityManager.java @@ -142,8 +142,19 @@ public class ConnectivityManager { * If an application uses the network in the background, it should listen * for this broadcast and stop using the background data if the value is * {@code false}. + * <p> + * + * @deprecated As of {@link VERSION_CODES#ICE_CREAM_SANDWICH}, availability + * of background data depends on several combined factors, and + * this broadcast is no longer sent. Instead, when background + * data is unavailable, {@link #getActiveNetworkInfo()} will now + * appear disconnected. During first boot after a platform + * upgrade, this broadcast will be sent once if + * {@link #getBackgroundDataSetting()} was {@code false} before + * the upgrade. */ @SdkConstant(SdkConstantType.BROADCAST_INTENT_ACTION) + @Deprecated public static final String ACTION_BACKGROUND_DATA_SETTING_CHANGED = "android.net.conn.BACKGROUND_DATA_SETTING_CHANGED"; diff --git a/core/java/android/net/EthernetDataTracker.java b/core/java/android/net/EthernetDataTracker.java index 21ecc22..fb09ba5 100644 --- a/core/java/android/net/EthernetDataTracker.java +++ b/core/java/android/net/EthernetDataTracker.java @@ -49,6 +49,7 @@ public class EthernetDataTracker implements NetworkStateTracker { private LinkCapabilities mLinkCapabilities; private NetworkInfo mNetworkInfo; private InterfaceObserver mInterfaceObserver; + private String mHwAddr; /* For sending events to connectivity service handler */ private Handler mCsHandler; @@ -74,15 +75,13 @@ public class EthernetDataTracker implements NetworkStateTracker { if (mIface.equals(iface) && mLinkUp != up) { Log.d(TAG, "Interface " + iface + " link " + (up ? "up" : "down")); mLinkUp = up; + mTracker.mNetworkInfo.setIsAvailable(up); // use DHCP if (up) { mTracker.reconnect(); } else { - NetworkUtils.stopDhcp(mIface); - mTracker.mNetworkInfo.setIsAvailable(false); - mTracker.mNetworkInfo.setDetailedState(DetailedState.DISCONNECTED, - null, null); + mTracker.disconnect(); } } } @@ -104,10 +103,6 @@ public class EthernetDataTracker implements NetworkStateTracker { mNetworkInfo = new NetworkInfo(ConnectivityManager.TYPE_ETHERNET, 0, NETWORKTYPE, ""); mLinkProperties = new LinkProperties(); mLinkCapabilities = new LinkCapabilities(); - mLinkUp = false; - - mNetworkInfo.setIsAvailable(false); - setTeardownRequested(false); } private void interfaceAdded(String iface) { @@ -116,7 +111,7 @@ public class EthernetDataTracker implements NetworkStateTracker { Log.d(TAG, "Adding " + iface); - synchronized(mIface) { + synchronized(this) { if(!mIface.isEmpty()) return; mIface = iface; @@ -125,21 +120,15 @@ public class EthernetDataTracker implements NetworkStateTracker { mNetworkInfo.setIsAvailable(true); Message msg = mCsHandler.obtainMessage(EVENT_CONFIGURATION_CHANGED, mNetworkInfo); msg.sendToTarget(); - - runDhcp(); } - private void interfaceRemoved(String iface) { - if (!iface.equals(mIface)) - return; - - Log.d(TAG, "Removing " + iface); + public void disconnect() { NetworkUtils.stopDhcp(mIface); mLinkProperties.clear(); mNetworkInfo.setIsAvailable(false); - mNetworkInfo.setDetailedState(DetailedState.DISCONNECTED, null, null); + mNetworkInfo.setDetailedState(DetailedState.DISCONNECTED, null, mHwAddr); Message msg = mCsHandler.obtainMessage(EVENT_CONFIGURATION_CHANGED, mNetworkInfo); msg.sendToTarget(); @@ -147,6 +136,21 @@ public class EthernetDataTracker implements NetworkStateTracker { msg = mCsHandler.obtainMessage(EVENT_STATE_CHANGED, mNetworkInfo); msg.sendToTarget(); + IBinder b = ServiceManager.getService(Context.NETWORKMANAGEMENT_SERVICE); + INetworkManagementService service = INetworkManagementService.Stub.asInterface(b); + try { + service.clearInterfaceAddresses(mIface); + } catch (Exception e) { + Log.e(TAG, "Failed to clear addresses or disable ipv6" + e); + } + } + + private void interfaceRemoved(String iface) { + if (!iface.equals(mIface)) + return; + + Log.d(TAG, "Removing " + iface); + disconnect(); mIface = ""; } @@ -161,7 +165,7 @@ public class EthernetDataTracker implements NetworkStateTracker { mLinkProperties = dhcpInfoInternal.makeLinkProperties(); mLinkProperties.setInterfaceName(mIface); - mNetworkInfo.setDetailedState(DetailedState.CONNECTED, null, null); + mNetworkInfo.setDetailedState(DetailedState.CONNECTED, null, mHwAddr); Message msg = mCsHandler.obtainMessage(EVENT_STATE_CHANGED, mNetworkInfo); msg.sendToTarget(); } @@ -208,8 +212,15 @@ public class EthernetDataTracker implements NetworkStateTracker { for (String iface : ifaces) { if (iface.matches(sIfaceMatch)) { mIface = iface; + service.setInterfaceUp(iface); InterfaceConfiguration config = service.getInterfaceConfig(iface); mLinkUp = config.isActive(); + if (config != null && mHwAddr == null) { + mHwAddr = config.getHardwareAddress(); + if (mHwAddr != null) { + mNetworkInfo.setExtraInfo(mHwAddr); + } + } reconnect(); break; } @@ -239,9 +250,11 @@ public class EthernetDataTracker implements NetworkStateTracker { * Re-enable connectivity to a network after a {@link #teardown()}. */ public boolean reconnect() { - mTeardownRequested.set(false); - runDhcp(); - return true; + if (mLinkUp) { + mTeardownRequested.set(false); + runDhcp(); + } + return mLinkUp; } /** diff --git a/core/java/android/net/INetworkPolicyListener.aidl b/core/java/android/net/INetworkPolicyListener.aidl index a45ec54..31dc965 100644 --- a/core/java/android/net/INetworkPolicyListener.aidl +++ b/core/java/android/net/INetworkPolicyListener.aidl @@ -21,5 +21,6 @@ oneway interface INetworkPolicyListener { void onUidRulesChanged(int uid, int uidRules); void onMeteredIfacesChanged(in String[] meteredIfaces); + void onRestrictBackgroundChanged(boolean restrictBackground); } diff --git a/core/java/android/net/INetworkPolicyManager.aidl b/core/java/android/net/INetworkPolicyManager.aidl index 633c38e..442535a 100644 --- a/core/java/android/net/INetworkPolicyManager.aidl +++ b/core/java/android/net/INetworkPolicyManager.aidl @@ -43,7 +43,7 @@ interface INetworkPolicyManager { NetworkPolicy[] getNetworkPolicies(); /** Snooze limit on policy matching given template. */ - void snoozePolicy(in NetworkTemplate template); + void snoozeLimit(in NetworkTemplate template); /** Control if background data is restricted system-wide. */ void setRestrictBackground(boolean restrictBackground); diff --git a/core/java/android/net/NetworkInfo.java b/core/java/android/net/NetworkInfo.java index 7286f0d..2f43cb8 100644 --- a/core/java/android/net/NetworkInfo.java +++ b/core/java/android/net/NetworkInfo.java @@ -351,6 +351,18 @@ public class NetworkInfo implements Parcelable { } /** + * Set the extraInfo field. + * @param extraInfo an optional {@code String} providing addditional network state + * information passed up from the lower networking layers. + * @hide + */ + public void setExtraInfo(String extraInfo) { + synchronized (this) { + this.mExtraInfo = extraInfo; + } + } + + /** * Report the reason an attempt to establish connectivity failed, * if one is available. * @return the reason for failure, or null if not available diff --git a/core/java/android/net/NetworkPolicy.java b/core/java/android/net/NetworkPolicy.java index d9ea700..04cf1a3 100644 --- a/core/java/android/net/NetworkPolicy.java +++ b/core/java/android/net/NetworkPolicy.java @@ -38,18 +38,25 @@ public class NetworkPolicy implements Parcelable, Comparable<NetworkPolicy> { public int cycleDay; public long warningBytes; public long limitBytes; - public long lastSnooze; + public long lastWarningSnooze; + public long lastLimitSnooze; public boolean metered; private static final long DEFAULT_MTU = 1500; - public NetworkPolicy(NetworkTemplate template, int cycleDay, long warningBytes, long limitBytes, - long lastSnooze, boolean metered) { + public NetworkPolicy(NetworkTemplate template, int cycleDay, long warningBytes, + long limitBytes, boolean metered) { + this(template, cycleDay, warningBytes, limitBytes, SNOOZE_NEVER, SNOOZE_NEVER, metered); + } + + public NetworkPolicy(NetworkTemplate template, int cycleDay, long warningBytes, + long limitBytes, long lastWarningSnooze, long lastLimitSnooze, boolean metered) { this.template = checkNotNull(template, "missing NetworkTemplate"); this.cycleDay = cycleDay; this.warningBytes = warningBytes; this.limitBytes = limitBytes; - this.lastSnooze = lastSnooze; + this.lastWarningSnooze = lastWarningSnooze; + this.lastLimitSnooze = lastLimitSnooze; this.metered = metered; } @@ -58,7 +65,8 @@ public class NetworkPolicy implements Parcelable, Comparable<NetworkPolicy> { cycleDay = in.readInt(); warningBytes = in.readLong(); limitBytes = in.readLong(); - lastSnooze = in.readLong(); + lastWarningSnooze = in.readLong(); + lastLimitSnooze = in.readLong(); metered = in.readInt() != 0; } @@ -68,7 +76,8 @@ public class NetworkPolicy implements Parcelable, Comparable<NetworkPolicy> { dest.writeInt(cycleDay); dest.writeLong(warningBytes); dest.writeLong(limitBytes); - dest.writeLong(lastSnooze); + dest.writeLong(lastWarningSnooze); + dest.writeLong(lastLimitSnooze); dest.writeInt(metered ? 1 : 0); } @@ -78,6 +87,13 @@ public class NetworkPolicy implements Parcelable, Comparable<NetworkPolicy> { } /** + * Test if given measurement is over {@link #warningBytes}. + */ + public boolean isOverWarning(long totalBytes) { + return warningBytes != WARNING_DISABLED && totalBytes >= warningBytes; + } + + /** * Test if given measurement is near enough to {@link #limitBytes} to be * considered over-limit. */ @@ -88,6 +104,14 @@ public class NetworkPolicy implements Parcelable, Comparable<NetworkPolicy> { return limitBytes != LIMIT_DISABLED && totalBytes >= limitBytes; } + /** + * Clear any existing snooze values, setting to {@link #SNOOZE_NEVER}. + */ + public void clearSnooze() { + lastWarningSnooze = SNOOZE_NEVER; + lastLimitSnooze = SNOOZE_NEVER; + } + /** {@inheritDoc} */ public int compareTo(NetworkPolicy another) { if (another == null || another.limitBytes == LIMIT_DISABLED) { @@ -103,7 +127,8 @@ public class NetworkPolicy implements Parcelable, Comparable<NetworkPolicy> { @Override public int hashCode() { - return Objects.hashCode(template, cycleDay, warningBytes, limitBytes, lastSnooze, metered); + return Objects.hashCode(template, cycleDay, warningBytes, limitBytes, lastWarningSnooze, + lastLimitSnooze, metered); } @Override @@ -111,8 +136,10 @@ public class NetworkPolicy implements Parcelable, Comparable<NetworkPolicy> { if (obj instanceof NetworkPolicy) { final NetworkPolicy other = (NetworkPolicy) obj; return cycleDay == other.cycleDay && warningBytes == other.warningBytes - && limitBytes == other.limitBytes && lastSnooze == other.lastSnooze - && metered == other.metered && Objects.equal(template, other.template); + && limitBytes == other.limitBytes + && lastWarningSnooze == other.lastWarningSnooze + && lastLimitSnooze == other.lastLimitSnooze && metered == other.metered + && Objects.equal(template, other.template); } return false; } @@ -120,8 +147,9 @@ public class NetworkPolicy implements Parcelable, Comparable<NetworkPolicy> { @Override public String toString() { return "NetworkPolicy[" + template + "]: cycleDay=" + cycleDay + ", warningBytes=" - + warningBytes + ", limitBytes=" + limitBytes + ", lastSnooze=" + lastSnooze - + ", metered=" + metered; + + warningBytes + ", limitBytes=" + limitBytes + ", lastWarningSnooze=" + + lastWarningSnooze + ", lastLimitSnooze=" + lastLimitSnooze + ", metered=" + + metered; } public static final Creator<NetworkPolicy> CREATOR = new Creator<NetworkPolicy>() { diff --git a/core/java/android/net/TrafficStats.java b/core/java/android/net/TrafficStats.java index dfdea38..973fac1 100644 --- a/core/java/android/net/TrafficStats.java +++ b/core/java/android/net/TrafficStats.java @@ -44,6 +44,13 @@ public class TrafficStats { */ public final static int UNSUPPORTED = -1; + /** @hide */ + public static final long KB_IN_BYTES = 1024; + /** @hide */ + public static final long MB_IN_BYTES = KB_IN_BYTES * 1024; + /** @hide */ + public static final long GB_IN_BYTES = MB_IN_BYTES * 1024; + /** * Special UID value used when collecting {@link NetworkStatsHistory} for * removed applications. diff --git a/core/java/android/net/http/HttpResponseCache.java b/core/java/android/net/http/HttpResponseCache.java index 21736aa..73f3d7c 100644 --- a/core/java/android/net/http/HttpResponseCache.java +++ b/core/java/android/net/http/HttpResponseCache.java @@ -22,8 +22,10 @@ import java.io.File; import java.io.IOException; import java.net.CacheRequest; import java.net.CacheResponse; +import java.net.ExtendedResponseCache; import java.net.HttpURLConnection; import java.net.ResponseCache; +import java.net.ResponseSource; import java.net.URI; import java.net.URLConnection; import java.util.List; @@ -149,7 +151,8 @@ import org.apache.http.impl.client.DefaultHttpClient; * } catch (Exception httpResponseCacheNotAvailable) { * }}</pre> */ -public final class HttpResponseCache extends ResponseCache implements Closeable { +public final class HttpResponseCache extends ResponseCache + implements Closeable, ExtendedResponseCache { private final libcore.net.http.HttpResponseCache delegate; @@ -260,6 +263,21 @@ public final class HttpResponseCache extends ResponseCache implements Closeable return delegate.getRequestCount(); } + /** @hide */ + @Override public void trackResponse(ResponseSource source) { + delegate.trackResponse(source); + } + + /** @hide */ + @Override public void trackConditionalCacheHit() { + delegate.trackConditionalCacheHit(); + } + + /** @hide */ + @Override public void update(CacheResponse conditionalCacheHit, HttpURLConnection connection) { + delegate.update(conditionalCacheHit, connection); + } + /** * Uninstalls the cache and releases any active resources. Stored contents * will remain on the filesystem. |