Rename NetworkProperties to LinkProperties

Also add copy constructors and use them when giving out data.

Change-Id: Id320eb8fb91d0bd250305ce7bb4f628570215615
diff --git a/core/java/android/net/NetworkProperties.java b/core/java/android/net/LinkProperties.java
similarity index 75%
rename from core/java/android/net/NetworkProperties.java
rename to core/java/android/net/LinkProperties.java
index 03c0a2e..9cb38e3 100644
--- a/core/java/android/net/NetworkProperties.java
+++ b/core/java/android/net/LinkProperties.java
@@ -16,6 +16,7 @@
 
 package android.net;
 
+import android.net.ProxyProperties;
 import android.os.Parcelable;
 import android.os.Parcel;
 import android.util.Log;
@@ -26,14 +27,14 @@
 import java.net.UnknownHostException;
 import java.util.ArrayList;
 import java.util.Collection;
+import java.util.Collections;
 
 /**
- * Describes the properties of a network interface or single address
- * of an interface.
+ * Describes the properties of a network link.
  * TODO - consider adding optional fields like Apn and ApnType
  * @hide
  */
-public class NetworkProperties implements Parcelable {
+public class LinkProperties implements Parcelable {
 
     private NetworkInterface mIface;
     private Collection<InetAddress> mAddresses;
@@ -41,49 +42,58 @@
     private InetAddress mGateway;
     private ProxyProperties mHttpProxy;
 
-    public NetworkProperties() {
+    public LinkProperties() {
         clear();
     }
 
-    public synchronized void setInterface(NetworkInterface iface) {
+    // copy constructor instead of clone
+    public LinkProperties(LinkProperties source) {
+        mIface = source.getInterface();
+        mAddresses = source.getAddresses();
+        mDnses = source.getDnses();
+        mGateway = source.getGateway();
+        mHttpProxy = new ProxyProperties(source.getHttpProxy());
+    }
+
+    public void setInterface(NetworkInterface iface) {
         mIface = iface;
     }
-    public synchronized NetworkInterface getInterface() {
+    public NetworkInterface getInterface() {
         return mIface;
     }
-    public synchronized String getInterfaceName() {
+    public String getInterfaceName() {
         return (mIface == null ? null : mIface.getName());
     }
 
-    public synchronized void addAddress(InetAddress address) {
+    public void addAddress(InetAddress address) {
         mAddresses.add(address);
     }
-    public synchronized Collection<InetAddress> getAddresses() {
-        return mAddresses;
+    public Collection<InetAddress> getAddresses() {
+        return Collections.unmodifiableCollection(mAddresses);
     }
 
-    public synchronized void addDns(InetAddress dns) {
+    public void addDns(InetAddress dns) {
         mDnses.add(dns);
     }
-    public synchronized Collection<InetAddress> getDnses() {
-        return mDnses;
+    public Collection<InetAddress> getDnses() {
+        return Collections.unmodifiableCollection(mDnses);
     }
 
-    public synchronized void setGateway(InetAddress gateway) {
+    public void setGateway(InetAddress gateway) {
         mGateway = gateway;
     }
-    public synchronized InetAddress getGateway() {
+    public InetAddress getGateway() {
         return mGateway;
     }
 
-    public synchronized void setHttpProxy(ProxyProperties proxy) {
+    public void setHttpProxy(ProxyProperties proxy) {
         mHttpProxy = proxy;
     }
-    public synchronized ProxyProperties getHttpProxy() {
+    public ProxyProperties getHttpProxy() {
         return mHttpProxy;
     }
 
-    public synchronized void clear() {
+    public void clear() {
         mIface = null;
         mAddresses = new ArrayList<InetAddress>();
         mDnses = new ArrayList<InetAddress>();
@@ -100,7 +110,7 @@
     }
 
     @Override
-    public synchronized String toString() {
+    public String toString() {
         String ifaceName = (mIface == null ? "" : "InterfaceName: " + mIface.getName() + " ");
 
         String ip = "IpAddresses: [";
@@ -121,7 +131,7 @@
      * Implement the Parcelable interface.
      * @hide
      */
-    public synchronized void writeToParcel(Parcel dest, int flags) {
+    public void writeToParcel(Parcel dest, int flags) {
         dest.writeString(getInterfaceName());
         dest.writeInt(mAddresses.size());
         //TODO: explore an easy alternative to preserve hostname
@@ -151,10 +161,10 @@
      * Implement the Parcelable interface.
      * @hide
      */
-    public static final Creator<NetworkProperties> CREATOR =
-        new Creator<NetworkProperties>() {
-            public NetworkProperties createFromParcel(Parcel in) {
-                NetworkProperties netProp = new NetworkProperties();
+    public static final Creator<LinkProperties> CREATOR =
+        new Creator<LinkProperties>() {
+            public LinkProperties createFromParcel(Parcel in) {
+                LinkProperties netProp = new LinkProperties();
                 String iface = in.readString();
                 if (iface != null) {
                     try {
@@ -186,8 +196,8 @@
                 return netProp;
             }
 
-            public NetworkProperties[] newArray(int size) {
-                return new NetworkProperties[size];
+            public LinkProperties[] newArray(int size) {
+                return new LinkProperties[size];
             }
         };
 }
diff --git a/core/java/android/net/ProxyProperties.java b/core/java/android/net/ProxyProperties.java
index 207fb51..24f6766 100644
--- a/core/java/android/net/ProxyProperties.java
+++ b/core/java/android/net/ProxyProperties.java
@@ -36,24 +36,31 @@
     public ProxyProperties() {
     }
 
-    public synchronized InetAddress getAddress() {
+    // copy constructor instead of clone
+    public ProxyProperties(ProxyProperties source) {
+        mProxy = source.getAddress();
+        mPort = source.getPort();
+        mExclusionList = new String(source.getExclusionList());
+    }
+
+    public InetAddress getAddress() {
         return mProxy;
     }
-    public synchronized void setAddress(InetAddress proxy) {
+    public void setAddress(InetAddress proxy) {
         mProxy = proxy;
     }
 
-    public synchronized int getPort() {
+    public int getPort() {
         return mPort;
     }
-    public synchronized void setPort(int port) {
+    public void setPort(int port) {
         mPort = port;
     }
 
-    public synchronized String getExclusionList() {
+    public String getExclusionList() {
         return mExclusionList;
     }
-    public synchronized void setExclusionList(String exclusionList) {
+    public void setExclusionList(String exclusionList) {
         mExclusionList = exclusionList;
     }
 
@@ -77,7 +84,7 @@
      * Implement the Parcelable interface.
      * @hide
      */
-    public synchronized void writeToParcel(Parcel dest, int flags) {
+    public void writeToParcel(Parcel dest, int flags) {
         if (mProxy != null) {
             dest.writeByte((byte)1);
             dest.writeString(mProxy.getHostName());
diff --git a/services/java/com/android/server/ConnectivityService.java b/services/java/com/android/server/ConnectivityService.java
index 57e8e02..6f23805 100644
--- a/services/java/com/android/server/ConnectivityService.java
+++ b/services/java/com/android/server/ConnectivityService.java
@@ -26,7 +26,7 @@
 import android.net.IConnectivityManager;
 import android.net.MobileDataStateTracker;
 import android.net.NetworkInfo;
-import android.net.NetworkProperties;
+import android.net.LinkProperties;
 import android.net.NetworkStateTracker;
 import android.net.NetworkUtils;
 import android.net.wifi.WifiStateTracker;
@@ -756,7 +756,6 @@
      * specified host is to be routed
      * @param hostAddress the IP address of the host to which the route is
      * desired
-     * todo - deprecate (only v4!)
      * @return {@code true} on success, {@code false} on failure
      */
     public boolean requestRouteToHost(int networkType, int hostAddress) {
@@ -813,7 +812,7 @@
             return false;
         }
 
-        NetworkProperties p = nt.getNetworkProperties();
+        LinkProperties p = nt.getLinkProperties();
         if (p == null) return false;
         String interfaceName = p.getInterfaceName();
 
@@ -1258,7 +1257,7 @@
 
     private void addPrivateDnsRoutes(NetworkStateTracker nt) {
         boolean privateDnsRouteSet = nt.isPrivateDnsRouteSet();
-        NetworkProperties p = nt.getNetworkProperties();
+        LinkProperties p = nt.getLinkProperties();
         if (p == null) return;
         String interfaceName = p.getInterfaceName();
 
@@ -1279,7 +1278,7 @@
     private void removePrivateDnsRoutes(NetworkStateTracker nt) {
         // TODO - we should do this explicitly but the NetUtils api doesnt
         // support this yet - must remove all.  No worse than before
-        NetworkProperties p = nt.getNetworkProperties();
+        LinkProperties p = nt.getLinkProperties();
         if (p == null) return;
         String interfaceName = p.getInterfaceName();
         boolean privateDnsRouteSet = nt.isPrivateDnsRouteSet();
@@ -1295,7 +1294,7 @@
 
 
     private void addDefaultRoute(NetworkStateTracker nt) {
-        NetworkProperties p = nt.getNetworkProperties();
+        LinkProperties p = nt.getLinkProperties();
         if (p == null) return;
         String interfaceName = p.getInterfaceName();
         InetAddress defaultGatewayAddr = p.getGateway();
@@ -1311,7 +1310,7 @@
 
 
     public void removeDefaultRoute(NetworkStateTracker nt) {
-        NetworkProperties p = nt.getNetworkProperties();
+        LinkProperties p = nt.getLinkProperties();
         if (p == null) return;
         String interfaceName = p.getInterfaceName();
 
@@ -1410,7 +1409,7 @@
             NetworkStateTracker nt = mNetTrackers[i];
             if (nt.getNetworkInfo().isConnected() &&
                     !nt.isTeardownRequested()) {
-                NetworkProperties p = nt.getNetworkProperties();
+                LinkProperties p = nt.getLinkProperties();
                 if (p == null) continue;
                 List pids = mNetRequestersPids[i];
                 for (int j=0; j<pids.size(); j++) {
@@ -1465,7 +1464,7 @@
         // add default net's dns entries
         NetworkStateTracker nt = mNetTrackers[netType];
         if (nt != null && nt.getNetworkInfo().isConnected() && !nt.isTeardownRequested()) {
-            NetworkProperties p = nt.getNetworkProperties();
+            LinkProperties p = nt.getLinkProperties();
             if (p == null) return;
             Collection<InetAddress> dnses = p.getDnses();
             if (mNetAttributes[netType].isDefault()) {