diff options
| author | 2018-01-18 01:17:17 +0000 | |
|---|---|---|
| committer | 2018-01-18 01:17:17 +0000 | |
| commit | aacb56a7c0626f72e3badecf6d38c9740b22207f (patch) | |
| tree | ffaef796ce097fb509a7f0e72c34317ad5fbf9dd | |
| parent | 877cbe1dc2a870017f22418750f73b4c8c23884f (diff) | |
| parent | d920134258e385250f37d73205139b477beb7afc (diff) | |
Merge "Add public API methods for private DNS."
| -rw-r--r-- | api/current.txt | 2 | ||||
| -rw-r--r-- | core/java/android/net/LinkProperties.java | 110 | ||||
| -rw-r--r-- | tests/net/java/android/net/LinkPropertiesTest.java | 6 |
3 files changed, 107 insertions, 11 deletions
diff --git a/api/current.txt b/api/current.txt index 56d30ddff4d2..40452b763663 100644 --- a/api/current.txt +++ b/api/current.txt @@ -25876,7 +25876,9 @@ package android.net { method public android.net.ProxyInfo getHttpProxy(); method public java.lang.String getInterfaceName(); method public java.util.List<android.net.LinkAddress> getLinkAddresses(); + method public java.lang.String getPrivateDnsServerName(); method public java.util.List<android.net.RouteInfo> getRoutes(); + method public boolean isPrivateDnsActive(); method public void writeToParcel(android.os.Parcel, int); field public static final android.os.Parcelable.Creator<android.net.LinkProperties> CREATOR; } diff --git a/core/java/android/net/LinkProperties.java b/core/java/android/net/LinkProperties.java index 4e474c8e478c..f525b1f37518 100644 --- a/core/java/android/net/LinkProperties.java +++ b/core/java/android/net/LinkProperties.java @@ -50,6 +50,8 @@ public final class LinkProperties implements Parcelable { private String mIfaceName; private ArrayList<LinkAddress> mLinkAddresses = new ArrayList<LinkAddress>(); private ArrayList<InetAddress> mDnses = new ArrayList<InetAddress>(); + private boolean mUsePrivateDns; + private String mPrivateDnsServerName; private String mDomains; private ArrayList<RouteInfo> mRoutes = new ArrayList<RouteInfo>(); private ProxyInfo mHttpProxy; @@ -165,6 +167,8 @@ public final class LinkProperties implements Parcelable { mIfaceName = source.getInterfaceName(); for (LinkAddress l : source.getLinkAddresses()) mLinkAddresses.add(l); for (InetAddress i : source.getDnsServers()) mDnses.add(i); + mUsePrivateDns = source.mUsePrivateDns; + mPrivateDnsServerName = source.mPrivateDnsServerName; mDomains = source.getDomains(); for (RouteInfo r : source.getRoutes()) mRoutes.add(r); mHttpProxy = (source.getHttpProxy() == null) ? @@ -391,6 +395,59 @@ public final class LinkProperties implements Parcelable { } /** + * Set whether private DNS is currently in use on this network. + * + * @param usePrivateDns The private DNS state. + * @hide + */ + public void setUsePrivateDns(boolean usePrivateDns) { + mUsePrivateDns = usePrivateDns; + } + + /** + * Returns whether private DNS is currently in use on this network. When + * private DNS is in use, applications must not send unencrypted DNS + * queries as doing so could reveal private user information. Furthermore, + * if private DNS is in use and {@link #getPrivateDnsServerName} is not + * {@code null}, DNS queries must be sent to the specified DNS server. + * + * @return {@code true} if private DNS is in use, {@code false} otherwise. + */ + public boolean isPrivateDnsActive() { + return mUsePrivateDns; + } + + /** + * Set the name of the private DNS server to which private DNS queries + * should be sent when in strict mode. This value should be {@code null} + * when private DNS is off or in opportunistic mode. + * + * @param privateDnsServerName The private DNS server name. + * @hide + */ + public void setPrivateDnsServerName(@Nullable String privateDnsServerName) { + mPrivateDnsServerName = privateDnsServerName; + } + + /** + * Returns the private DNS server name that is in use. If not {@code null}, + * private DNS is in strict mode. In this mode, applications should ensure + * that all DNS queries are encrypted and sent to this hostname and that + * queries are only sent if the hostname's certificate is valid. If + * {@code null} and {@link #isPrivateDnsActive} is {@code true}, private + * DNS is in opportunistic mode, and applications should ensure that DNS + * queries are encrypted and sent to a DNS server returned by + * {@link #getDnsServers}. System DNS will handle each of these cases + * correctly, but applications implementing their own DNS lookups must make + * sure to follow these requirements. + * + * @return The private DNS server name. + */ + public @Nullable String getPrivateDnsServerName() { + return mPrivateDnsServerName; + } + + /** * Sets the DNS domain search path used on this link. * * @param domains A {@link String} listing in priority order the comma separated @@ -622,6 +679,8 @@ public final class LinkProperties implements Parcelable { mIfaceName = null; mLinkAddresses.clear(); mDnses.clear(); + mUsePrivateDns = false; + mPrivateDnsServerName = null; mDomains = null; mRoutes.clear(); mHttpProxy = null; @@ -649,6 +708,13 @@ public final class LinkProperties implements Parcelable { for (InetAddress addr : mDnses) dns += addr.getHostAddress() + ","; dns += "] "; + String usePrivateDns = "UsePrivateDns: " + mUsePrivateDns + " "; + + String privateDnsServerName = ""; + if (privateDnsServerName != null) { + privateDnsServerName = "PrivateDnsServerName: " + mPrivateDnsServerName + " "; + } + String domainName = "Domains: " + mDomains; String mtu = " MTU: " + mMtu; @@ -671,8 +737,9 @@ public final class LinkProperties implements Parcelable { } stacked += "] "; } - return "{" + ifaceName + linkAddresses + routes + dns + domainName + mtu - + tcpBuffSizes + proxy + stacked + "}"; + return "{" + ifaceName + linkAddresses + routes + dns + usePrivateDns + + privateDnsServerName + domainName + mtu + tcpBuffSizes + proxy + + stacked + "}"; } /** @@ -896,6 +963,20 @@ public final class LinkProperties implements Parcelable { } /** + * Compares this {@code LinkProperties} private DNS settings against the + * target. + * + * @param target LinkProperties to compare. + * @return {@code true} if both are identical, {@code false} otherwise. + * @hide + */ + public boolean isIdenticalPrivateDns(LinkProperties target) { + return (isPrivateDnsActive() == target.isPrivateDnsActive() + && TextUtils.equals(getPrivateDnsServerName(), + target.getPrivateDnsServerName())); + } + + /** * Compares this {@code LinkProperties} Routes against the target * * @param target LinkProperties to compare. @@ -989,14 +1070,15 @@ public final class LinkProperties implements Parcelable { * stacked interfaces are not so much a property of the link as a * description of connections between links. */ - return isIdenticalInterfaceName(target) && - isIdenticalAddresses(target) && - isIdenticalDnses(target) && - isIdenticalRoutes(target) && - isIdenticalHttpProxy(target) && - isIdenticalStackedLinks(target) && - isIdenticalMtu(target) && - isIdenticalTcpBufferSizes(target); + return isIdenticalInterfaceName(target) + && isIdenticalAddresses(target) + && isIdenticalDnses(target) + && isIdenticalPrivateDns(target) + && isIdenticalRoutes(target) + && isIdenticalHttpProxy(target) + && isIdenticalStackedLinks(target) + && isIdenticalMtu(target) + && isIdenticalTcpBufferSizes(target); } /** @@ -1091,7 +1173,9 @@ public final class LinkProperties implements Parcelable { + ((null == mHttpProxy) ? 0 : mHttpProxy.hashCode()) + mStackedLinks.hashCode() * 47) + mMtu * 51 - + ((null == mTcpBufferSizes) ? 0 : mTcpBufferSizes.hashCode()); + + ((null == mTcpBufferSizes) ? 0 : mTcpBufferSizes.hashCode()) + + (mUsePrivateDns ? 57 : 0) + + ((null == mPrivateDnsServerName) ? 0 : mPrivateDnsServerName.hashCode()); } /** @@ -1108,6 +1192,8 @@ public final class LinkProperties implements Parcelable { for(InetAddress d : mDnses) { dest.writeByteArray(d.getAddress()); } + dest.writeBoolean(mUsePrivateDns); + dest.writeString(mPrivateDnsServerName); dest.writeString(mDomains); dest.writeInt(mMtu); dest.writeString(mTcpBufferSizes); @@ -1148,6 +1234,8 @@ public final class LinkProperties implements Parcelable { netProp.addDnsServer(InetAddress.getByAddress(in.createByteArray())); } catch (UnknownHostException e) { } } + netProp.setUsePrivateDns(in.readBoolean()); + netProp.setPrivateDnsServerName(in.readString()); netProp.setDomains(in.readString()); netProp.setMtu(in.readInt()); netProp.setTcpBufferSizes(in.readString()); diff --git a/tests/net/java/android/net/LinkPropertiesTest.java b/tests/net/java/android/net/LinkPropertiesTest.java index 52da79a18c6e..f3c22a51e267 100644 --- a/tests/net/java/android/net/LinkPropertiesTest.java +++ b/tests/net/java/android/net/LinkPropertiesTest.java @@ -79,6 +79,9 @@ public class LinkPropertiesTest { assertTrue(source.isIdenticalDnses(target)); assertTrue(target.isIdenticalDnses(source)); + assertTrue(source.isIdenticalPrivateDns(target)); + assertTrue(target.isIdenticalPrivateDns(source)); + assertTrue(source.isIdenticalRoutes(target)); assertTrue(target.isIdenticalRoutes(source)); @@ -91,6 +94,9 @@ public class LinkPropertiesTest { assertTrue(source.isIdenticalMtu(target)); assertTrue(target.isIdenticalMtu(source)); + assertTrue(source.isIdenticalTcpBufferSizes(target)); + assertTrue(target.isIdenticalTcpBufferSizes(source)); + // Check result of equals(). assertTrue(source.equals(target)); assertTrue(target.equals(source)); |