Merge "Add PCSCF to LinkProperties."

This commit is contained in:
Chalard Jean
2019-01-10 05:55:05 +00:00
committed by Gerrit Code Review
2 changed files with 144 additions and 0 deletions

View File

@@ -55,6 +55,8 @@ public final class LinkProperties implements Parcelable {
private String mIfaceName; private String mIfaceName;
private ArrayList<LinkAddress> mLinkAddresses = new ArrayList<>(); private ArrayList<LinkAddress> mLinkAddresses = new ArrayList<>();
private ArrayList<InetAddress> mDnses = new ArrayList<>(); private ArrayList<InetAddress> mDnses = new ArrayList<>();
// PCSCF addresses are addresses of SIP proxies that only exist for the IMS core service.
private ArrayList<InetAddress> mPcscfs = new ArrayList<InetAddress>();
private ArrayList<InetAddress> mValidatedPrivateDnses = new ArrayList<>(); private ArrayList<InetAddress> mValidatedPrivateDnses = new ArrayList<>();
private boolean mUsePrivateDns; private boolean mUsePrivateDns;
private String mPrivateDnsServerName; private String mPrivateDnsServerName;
@@ -179,6 +181,7 @@ public final class LinkProperties implements Parcelable {
mValidatedPrivateDnses.addAll(source.mValidatedPrivateDnses); mValidatedPrivateDnses.addAll(source.mValidatedPrivateDnses);
mUsePrivateDns = source.mUsePrivateDns; mUsePrivateDns = source.mUsePrivateDns;
mPrivateDnsServerName = source.mPrivateDnsServerName; mPrivateDnsServerName = source.mPrivateDnsServerName;
mPcscfs.addAll(source.mPcscfs);
mDomains = source.mDomains; mDomains = source.mDomains;
mRoutes.addAll(source.mRoutes); mRoutes.addAll(source.mRoutes);
mHttpProxy = (source.mHttpProxy == null) ? null : new ProxyInfo(source.mHttpProxy); mHttpProxy = (source.mHttpProxy == null) ? null : new ProxyInfo(source.mHttpProxy);
@@ -524,6 +527,60 @@ public final class LinkProperties implements Parcelable {
return Collections.unmodifiableList(mValidatedPrivateDnses); return Collections.unmodifiableList(mValidatedPrivateDnses);
} }
/**
* Adds the given {@link InetAddress} to the list of PCSCF servers, if not present.
*
* @param pcscfServer The {@link InetAddress} to add to the list of PCSCF servers.
* @return true if the PCSCF server was added, false otherwise.
* @hide
*/
public boolean addPcscfServer(InetAddress pcscfServer) {
if (pcscfServer != null && !mPcscfs.contains(pcscfServer)) {
mPcscfs.add(pcscfServer);
return true;
}
return false;
}
/**
* Removes the given {@link InetAddress} from the list of PCSCF servers.
*
* @param pcscf Server The {@link InetAddress} to remove from the list of PCSCF servers.
* @return true if the PCSCF server was removed, false otherwise.
* @hide
*/
public boolean removePcscfServer(InetAddress pcscfServer) {
if (pcscfServer != null) {
return mPcscfs.remove(pcscfServer);
}
return false;
}
/**
* Replaces the PCSCF servers in this {@code LinkProperties} with
* the given {@link Collection} of {@link InetAddress} objects.
*
* @param addresses The {@link Collection} of PCSCF servers to set in this object.
* @hide
*/
public void setPcscfServers(Collection<InetAddress> pcscfServers) {
mPcscfs.clear();
for (InetAddress pcscfServer: pcscfServers) {
addPcscfServer(pcscfServer);
}
}
/**
* Returns all the {@link InetAddress} for PCSCF servers on this link.
*
* @return An unmodifiable {@link List} of {@link InetAddress} for PCSCF servers on
* this link.
* @hide
*/
public List<InetAddress> getPcscfServers() {
return Collections.unmodifiableList(mPcscfs);
}
/** /**
* Sets the DNS domain search path used on this link. * Sets the DNS domain search path used on this link.
* *
@@ -767,6 +824,7 @@ public final class LinkProperties implements Parcelable {
mDnses.clear(); mDnses.clear();
mUsePrivateDns = false; mUsePrivateDns = false;
mPrivateDnsServerName = null; mPrivateDnsServerName = null;
mPcscfs.clear();
mDomains = null; mDomains = null;
mRoutes.clear(); mRoutes.clear();
mHttpProxy = null; mHttpProxy = null;
@@ -813,6 +871,12 @@ public final class LinkProperties implements Parcelable {
resultJoiner.add(mPrivateDnsServerName); resultJoiner.add(mPrivateDnsServerName);
} }
if (!mPcscfs.isEmpty()) {
resultJoiner.add("PcscfAddresses: [");
resultJoiner.add(TextUtils.join(",", mPcscfs));
resultJoiner.add("]");
}
if (!mValidatedPrivateDnses.isEmpty()) { if (!mValidatedPrivateDnses.isEmpty()) {
final StringJoiner validatedPrivateDnsesJoiner = final StringJoiner validatedPrivateDnsesJoiner =
new StringJoiner(",", "ValidatedPrivateDnsAddresses: [", "]"); new StringJoiner(",", "ValidatedPrivateDnsAddresses: [", "]");
@@ -964,6 +1028,36 @@ public final class LinkProperties implements Parcelable {
return false; return false;
} }
/**
* Returns true if this link has an IPv4 PCSCF server.
*
* @return {@code true} if there is an IPv4 PCSCF server, {@code false} otherwise.
* @hide
*/
public boolean hasIPv4PcscfServer() {
for (InetAddress ia : mPcscfs) {
if (ia instanceof Inet4Address) {
return true;
}
}
return false;
}
/**
* Returns true if this link has an IPv6 PCSCF server.
*
* @return {@code true} if there is an IPv6 PCSCF server, {@code false} otherwise.
* @hide
*/
public boolean hasIPv6PcscfServer() {
for (InetAddress ia : mPcscfs) {
if (ia instanceof Inet6Address) {
return true;
}
}
return false;
}
/** /**
* Returns true if this link is provisioned for global IPv4 connectivity. * Returns true if this link is provisioned for global IPv4 connectivity.
* This requires an IP address, default route, and DNS server. * This requires an IP address, default route, and DNS server.
@@ -1116,6 +1210,19 @@ public final class LinkProperties implements Parcelable {
? mValidatedPrivateDnses.containsAll(targetDnses) : false; ? mValidatedPrivateDnses.containsAll(targetDnses) : false;
} }
/**
* Compares this {@code LinkProperties} PCSCF addresses against the target
*
* @param target LinkProperties to compare.
* @return {@code true} if both are identical, {@code false} otherwise.
* @hide
*/
public boolean isIdenticalPcscfs(LinkProperties target) {
Collection<InetAddress> targetPcscfs = target.getPcscfServers();
return (mPcscfs.size() == targetPcscfs.size()) ?
mPcscfs.containsAll(targetPcscfs) : false;
}
/** /**
* Compares this {@code LinkProperties} Routes against the target * Compares this {@code LinkProperties} Routes against the target
* *
@@ -1218,6 +1325,7 @@ public final class LinkProperties implements Parcelable {
&& isIdenticalDnses(target) && isIdenticalDnses(target)
&& isIdenticalPrivateDns(target) && isIdenticalPrivateDns(target)
&& isIdenticalValidatedPrivateDnses(target) && isIdenticalValidatedPrivateDnses(target)
&& isIdenticalPcscfs(target)
&& isIdenticalRoutes(target) && isIdenticalRoutes(target)
&& isIdenticalHttpProxy(target) && isIdenticalHttpProxy(target)
&& isIdenticalStackedLinks(target) && isIdenticalStackedLinks(target)
@@ -1334,6 +1442,7 @@ public final class LinkProperties implements Parcelable {
+ mMtu * 51 + mMtu * 51
+ ((null == mTcpBufferSizes) ? 0 : mTcpBufferSizes.hashCode()) + ((null == mTcpBufferSizes) ? 0 : mTcpBufferSizes.hashCode())
+ (mUsePrivateDns ? 57 : 0) + (mUsePrivateDns ? 57 : 0)
+ mPcscfs.size() * 67
+ ((null == mPrivateDnsServerName) ? 0 : mPrivateDnsServerName.hashCode()); + ((null == mPrivateDnsServerName) ? 0 : mPrivateDnsServerName.hashCode());
} }
@@ -1357,6 +1466,10 @@ public final class LinkProperties implements Parcelable {
} }
dest.writeBoolean(mUsePrivateDns); dest.writeBoolean(mUsePrivateDns);
dest.writeString(mPrivateDnsServerName); dest.writeString(mPrivateDnsServerName);
dest.writeInt(mPcscfs.size());
for (InetAddress d : mPcscfs) {
dest.writeByteArray(d.getAddress());
}
dest.writeString(mDomains); dest.writeString(mDomains);
dest.writeInt(mMtu); dest.writeInt(mMtu);
dest.writeString(mTcpBufferSizes); dest.writeString(mTcpBufferSizes);
@@ -1406,6 +1519,12 @@ public final class LinkProperties implements Parcelable {
} }
netProp.setUsePrivateDns(in.readBoolean()); netProp.setUsePrivateDns(in.readBoolean());
netProp.setPrivateDnsServerName(in.readString()); netProp.setPrivateDnsServerName(in.readString());
addressCount = in.readInt();
for (int i = 0; i < addressCount; i++) {
try {
netProp.addPcscfServer(InetAddress.getByAddress(in.createByteArray()));
} catch (UnknownHostException e) { }
}
netProp.setDomains(in.readString()); netProp.setDomains(in.readString());
netProp.setMtu(in.readInt()); netProp.setMtu(in.readInt());
netProp.setTcpBufferSizes(in.readString()); netProp.setTcpBufferSizes(in.readString());

View File

@@ -53,6 +53,8 @@ public class LinkPropertiesTest {
private static InetAddress DNS1 = NetworkUtils.numericToInetAddress("75.208.7.1"); private static InetAddress DNS1 = NetworkUtils.numericToInetAddress("75.208.7.1");
private static InetAddress DNS2 = NetworkUtils.numericToInetAddress("69.78.7.1"); private static InetAddress DNS2 = NetworkUtils.numericToInetAddress("69.78.7.1");
private static InetAddress DNS6 = NetworkUtils.numericToInetAddress("2001:4860:4860::8888"); private static InetAddress DNS6 = NetworkUtils.numericToInetAddress("2001:4860:4860::8888");
private static InetAddress PCSCFV6 = NetworkUtils.numericToInetAddress(
"2001:0db8:85a3:0000:0000:8a2e:0370:1");
private static InetAddress GATEWAY1 = NetworkUtils.numericToInetAddress("75.208.8.1"); private static InetAddress GATEWAY1 = NetworkUtils.numericToInetAddress("75.208.8.1");
private static InetAddress GATEWAY2 = NetworkUtils.numericToInetAddress("69.78.8.1"); private static InetAddress GATEWAY2 = NetworkUtils.numericToInetAddress("69.78.8.1");
private static InetAddress GATEWAY61 = NetworkUtils.numericToInetAddress("fe80::6:0000:613"); private static InetAddress GATEWAY61 = NetworkUtils.numericToInetAddress("fe80::6:0000:613");
@@ -86,6 +88,9 @@ public class LinkPropertiesTest {
assertTrue(source.isIdenticalValidatedPrivateDnses(target)); assertTrue(source.isIdenticalValidatedPrivateDnses(target));
assertTrue(target.isIdenticalValidatedPrivateDnses(source)); assertTrue(target.isIdenticalValidatedPrivateDnses(source));
assertTrue(source.isIdenticalPcscfs(target));
assertTrue(target.isIdenticalPcscfs(source));
assertTrue(source.isIdenticalRoutes(target)); assertTrue(source.isIdenticalRoutes(target));
assertTrue(target.isIdenticalRoutes(source)); assertTrue(target.isIdenticalRoutes(source));
@@ -128,6 +133,8 @@ public class LinkPropertiesTest {
// set 2 dnses // set 2 dnses
source.addDnsServer(DNS1); source.addDnsServer(DNS1);
source.addDnsServer(DNS2); source.addDnsServer(DNS2);
// set 1 pcscf
source.addPcscfServer(PCSCFV6);
// set 2 gateways // set 2 gateways
source.addRoute(new RouteInfo(GATEWAY1)); source.addRoute(new RouteInfo(GATEWAY1));
source.addRoute(new RouteInfo(GATEWAY2)); source.addRoute(new RouteInfo(GATEWAY2));
@@ -141,6 +148,7 @@ public class LinkPropertiesTest {
target.addLinkAddress(LINKADDRV6); target.addLinkAddress(LINKADDRV6);
target.addDnsServer(DNS1); target.addDnsServer(DNS1);
target.addDnsServer(DNS2); target.addDnsServer(DNS2);
target.addPcscfServer(PCSCFV6);
target.addRoute(new RouteInfo(GATEWAY1)); target.addRoute(new RouteInfo(GATEWAY1));
target.addRoute(new RouteInfo(GATEWAY2)); target.addRoute(new RouteInfo(GATEWAY2));
target.setMtu(MTU); target.setMtu(MTU);
@@ -154,6 +162,7 @@ public class LinkPropertiesTest {
target.addLinkAddress(LINKADDRV6); target.addLinkAddress(LINKADDRV6);
target.addDnsServer(DNS1); target.addDnsServer(DNS1);
target.addDnsServer(DNS2); target.addDnsServer(DNS2);
target.addPcscfServer(PCSCFV6);
target.addRoute(new RouteInfo(GATEWAY1)); target.addRoute(new RouteInfo(GATEWAY1));
target.addRoute(new RouteInfo(GATEWAY2)); target.addRoute(new RouteInfo(GATEWAY2));
target.setMtu(MTU); target.setMtu(MTU);
@@ -167,6 +176,7 @@ public class LinkPropertiesTest {
target.addLinkAddress(LINKADDRV6); target.addLinkAddress(LINKADDRV6);
target.addDnsServer(DNS1); target.addDnsServer(DNS1);
target.addDnsServer(DNS2); target.addDnsServer(DNS2);
target.addPcscfServer(PCSCFV6);
target.addRoute(new RouteInfo(GATEWAY1)); target.addRoute(new RouteInfo(GATEWAY1));
target.addRoute(new RouteInfo(GATEWAY2)); target.addRoute(new RouteInfo(GATEWAY2));
target.setMtu(MTU); target.setMtu(MTU);
@@ -179,6 +189,21 @@ public class LinkPropertiesTest {
// change dnses // change dnses
target.addDnsServer(NetworkUtils.numericToInetAddress("75.208.7.2")); target.addDnsServer(NetworkUtils.numericToInetAddress("75.208.7.2"));
target.addDnsServer(DNS2); target.addDnsServer(DNS2);
target.addPcscfServer(PCSCFV6);
target.addRoute(new RouteInfo(GATEWAY1));
target.addRoute(new RouteInfo(GATEWAY2));
target.setMtu(MTU);
assertFalse(source.equals(target));
target.clear();
target.setInterfaceName(NAME);
target.addLinkAddress(LINKADDRV4);
target.addLinkAddress(LINKADDRV6);
target.addDnsServer(NetworkUtils.numericToInetAddress("75.208.7.2"));
target.addDnsServer(DNS2);
// change pcscf
target.addPcscfServer(NetworkUtils.numericToInetAddress(
"2001::1"));
target.addRoute(new RouteInfo(GATEWAY1)); target.addRoute(new RouteInfo(GATEWAY1));
target.addRoute(new RouteInfo(GATEWAY2)); target.addRoute(new RouteInfo(GATEWAY2));
target.setMtu(MTU); target.setMtu(MTU);