diff options
| author | 2021-04-06 13:20:26 +0000 | |
|---|---|---|
| committer | 2021-04-06 13:20:26 +0000 | |
| commit | 834026197f5938e877d83f35ae2d550f1036fc6f (patch) | |
| tree | 3c3bd5d8a36c697ffb94daabf63923d4fe20e9d8 | |
| parent | 1bf83b28d9b7f8a1ea7674cdcca6ed3a817e7453 (diff) | |
| parent | f5c7c4956322e001c83d9d15637a3eef006fec90 (diff) | |
Merge changes I5ed1bc8b,Ie9e6af0e
* changes:
  Fix IpConfigStore dependencies on framework-connectivity
  Migrate hidden API in IpConfigStore to formal API
| -rw-r--r-- | services/core/java/com/android/server/net/IpConfigStore.java | 95 | 
1 files changed, 53 insertions, 42 deletions
| diff --git a/services/core/java/com/android/server/net/IpConfigStore.java b/services/core/java/com/android/server/net/IpConfigStore.java index cc3a002adc84..df1eb6d9fe3c 100644 --- a/services/core/java/com/android/server/net/IpConfigStore.java +++ b/services/core/java/com/android/server/net/IpConfigStore.java @@ -22,7 +22,6 @@ import android.net.IpConfiguration.IpAssignment;  import android.net.IpConfiguration.ProxySettings;  import android.net.LinkAddress;  import android.net.ProxyInfo; -import android.net.RouteInfo;  import android.net.StaticIpConfiguration;  import android.net.Uri;  import android.util.ArrayMap; @@ -42,6 +41,8 @@ import java.io.IOException;  import java.io.InputStream;  import java.net.Inet4Address;  import java.net.InetAddress; +import java.util.ArrayList; +import java.util.List;  public class IpConfigStore {      private static final String TAG = "IpConfigStore"; @@ -83,25 +84,25 @@ public class IpConfigStore {          boolean written = false;          try { -            switch (config.ipAssignment) { +            switch (config.getIpAssignment()) {                  case STATIC:                      out.writeUTF(IP_ASSIGNMENT_KEY); -                    out.writeUTF(config.ipAssignment.toString()); -                    StaticIpConfiguration staticIpConfiguration = config.staticIpConfiguration; +                    out.writeUTF(config.getIpAssignment().toString()); +                    StaticIpConfiguration staticIpConfiguration = config.getStaticIpConfiguration();                      if (staticIpConfiguration != null) { -                        if (staticIpConfiguration.ipAddress != null) { -                            LinkAddress ipAddress = staticIpConfiguration.ipAddress; +                        if (staticIpConfiguration.getIpAddress() != null) { +                            LinkAddress ipAddress = staticIpConfiguration.getIpAddress();                              out.writeUTF(LINK_ADDRESS_KEY);                              out.writeUTF(ipAddress.getAddress().getHostAddress());                              out.writeInt(ipAddress.getPrefixLength());                          } -                        if (staticIpConfiguration.gateway != null) { +                        if (staticIpConfiguration.getGateway() != null) {                              out.writeUTF(GATEWAY_KEY);                              out.writeInt(0);  // Default route.                              out.writeInt(1);  // Have a gateway. -                            out.writeUTF(staticIpConfiguration.gateway.getHostAddress()); +                            out.writeUTF(staticIpConfiguration.getGateway().getHostAddress());                          } -                        for (InetAddress inetAddr : staticIpConfiguration.dnsServers) { +                        for (InetAddress inetAddr : staticIpConfiguration.getDnsServers()) {                              out.writeUTF(DNS_KEY);                              out.writeUTF(inetAddr.getHostAddress());                          } @@ -110,7 +111,7 @@ public class IpConfigStore {                      break;                  case DHCP:                      out.writeUTF(IP_ASSIGNMENT_KEY); -                    out.writeUTF(config.ipAssignment.toString()); +                    out.writeUTF(config.getIpAssignment().toString());                      written = true;                      break;                  case UNASSIGNED: @@ -121,13 +122,13 @@ public class IpConfigStore {                      break;              } -            switch (config.proxySettings) { +            switch (config.getProxySettings()) {                  case STATIC: -                    ProxyInfo proxyProperties = config.httpProxy; +                    ProxyInfo proxyProperties = config.getHttpProxy();                      String exclusionList = ProxyUtils.exclusionListAsString(                              proxyProperties.getExclusionList());                      out.writeUTF(PROXY_SETTINGS_KEY); -                    out.writeUTF(config.proxySettings.toString()); +                    out.writeUTF(config.getProxySettings().toString());                      out.writeUTF(PROXY_HOST_KEY);                      out.writeUTF(proxyProperties.getHost());                      out.writeUTF(PROXY_PORT_KEY); @@ -139,16 +140,16 @@ public class IpConfigStore {                      written = true;                      break;                  case PAC: -                    ProxyInfo proxyPacProperties = config.httpProxy; +                    ProxyInfo proxyPacProperties = config.getHttpProxy();                      out.writeUTF(PROXY_SETTINGS_KEY); -                    out.writeUTF(config.proxySettings.toString()); +                    out.writeUTF(config.getProxySettings().toString());                      out.writeUTF(PROXY_PAC_FILE);                      out.writeUTF(proxyPacProperties.getPacFileUrl().toString());                      written = true;                      break;                  case NONE:                      out.writeUTF(PROXY_SETTINGS_KEY); -                    out.writeUTF(config.proxySettings.toString()); +                    out.writeUTF(config.getProxySettings().toString());                      written = true;                      break;                  case UNASSIGNED: @@ -267,11 +268,14 @@ public class IpConfigStore {                  IpAssignment ipAssignment = IpAssignment.DHCP;                  ProxySettings proxySettings = ProxySettings.NONE;                  StaticIpConfiguration staticIpConfiguration = new StaticIpConfiguration(); +                LinkAddress linkAddress = null; +                InetAddress gatewayAddress = null;                  String proxyHost = null;                  String pacFileUrl = null;                  int proxyPort = -1;                  String exclusionList = null;                  String key; +                final List<InetAddress> dnsServers = new ArrayList<>();                  do {                      key = in.readUTF(); @@ -286,15 +290,15 @@ public class IpConfigStore {                          } else if (key.equals(IP_ASSIGNMENT_KEY)) {                              ipAssignment = IpAssignment.valueOf(in.readUTF());                          } else if (key.equals(LINK_ADDRESS_KEY)) { -                            LinkAddress linkAddr = +                            LinkAddress parsedLinkAddress =                                      new LinkAddress(                                              InetAddresses.parseNumericAddress(in.readUTF()),                                              in.readInt()); -                            if (linkAddr.getAddress() instanceof Inet4Address && -                                    staticIpConfiguration.ipAddress == null) { -                                staticIpConfiguration.ipAddress = linkAddr; +                            if (parsedLinkAddress.getAddress() instanceof Inet4Address +                                    && linkAddress == null) { +                                linkAddress = parsedLinkAddress;                              } else { -                                loge("Non-IPv4 or duplicate address: " + linkAddr); +                                loge("Non-IPv4 or duplicate address: " + parsedLinkAddress);                              }                          } else if (key.equals(GATEWAY_KEY)) {                              LinkAddress dest = null; @@ -302,8 +306,8 @@ public class IpConfigStore {                              if (version == 1) {                                  // only supported default gateways - leave the dest/prefix empty                                  gateway = InetAddresses.parseNumericAddress(in.readUTF()); -                                if (staticIpConfiguration.gateway == null) { -                                    staticIpConfiguration.gateway = gateway; +                                if (gatewayAddress == null) { +                                    gatewayAddress = gateway;                                  } else {                                      loge("Duplicate gateway: " + gateway.getHostAddress());                                  } @@ -317,17 +321,18 @@ public class IpConfigStore {                                  if (in.readInt() == 1) {                                      gateway = InetAddresses.parseNumericAddress(in.readUTF());                                  } -                                RouteInfo route = new RouteInfo(dest, gateway); -                                if (route.isIPv4Default() && -                                        staticIpConfiguration.gateway == null) { -                                    staticIpConfiguration.gateway = gateway; +                                // If the destination is a default IPv4 route, use the gateway +                                // address unless already set. +                                if (dest.getAddress() instanceof Inet4Address +                                        && dest.getPrefixLength() == 0 && gatewayAddress == null) { +                                    gatewayAddress = gateway;                                  } else { -                                    loge("Non-IPv4 default or duplicate route: " + route); +                                    loge("Non-IPv4 default or duplicate route: " +                                            + dest.getAddress());                                  }                              }                          } else if (key.equals(DNS_KEY)) { -                            staticIpConfiguration.dnsServers.add( -                                    InetAddresses.parseNumericAddress(in.readUTF())); +                            dnsServers.add(InetAddresses.parseNumericAddress(in.readUTF()));                          } else if (key.equals(PROXY_SETTINGS_KEY)) {                              proxySettings = ProxySettings.valueOf(in.readUTF());                          } else if (key.equals(PROXY_HOST_KEY)) { @@ -348,25 +353,31 @@ public class IpConfigStore {                      }                  } while (true); +                staticIpConfiguration = new StaticIpConfiguration.Builder() +                    .setIpAddress(linkAddress) +                    .setGateway(gatewayAddress) +                    .setDnsServers(dnsServers) +                    .build(); +                  if (uniqueToken != null) {                      IpConfiguration config = new IpConfiguration();                      networks.put(uniqueToken, config);                      switch (ipAssignment) {                          case STATIC: -                            config.staticIpConfiguration = staticIpConfiguration; -                            config.ipAssignment = ipAssignment; +                            config.setStaticIpConfiguration(staticIpConfiguration); +                            config.setIpAssignment(ipAssignment);                              break;                          case DHCP: -                            config.ipAssignment = ipAssignment; +                            config.setIpAssignment(ipAssignment);                              break;                          case UNASSIGNED:                              loge("BUG: Found UNASSIGNED IP on file, use DHCP"); -                            config.ipAssignment = IpAssignment.DHCP; +                            config.setIpAssignment(IpAssignment.DHCP);                              break;                          default:                              loge("Ignore invalid ip assignment while reading."); -                            config.ipAssignment = IpAssignment.UNASSIGNED; +                            config.setIpAssignment(IpAssignment.UNASSIGNED);                              break;                      } @@ -374,25 +385,25 @@ public class IpConfigStore {                          case STATIC:                              ProxyInfo proxyInfo = ProxyInfo.buildDirectProxy(proxyHost, proxyPort,                                      ProxyUtils.exclusionStringAsList(exclusionList)); -                            config.proxySettings = proxySettings; -                            config.httpProxy = proxyInfo; +                            config.setProxySettings(proxySettings); +                            config.setHttpProxy(proxyInfo);                              break;                          case PAC:                              ProxyInfo proxyPacProperties =                                      ProxyInfo.buildPacProxy(Uri.parse(pacFileUrl)); -                            config.proxySettings = proxySettings; -                            config.httpProxy = proxyPacProperties; +                            config.setProxySettings(proxySettings); +                            config.setHttpProxy(proxyPacProperties);                              break;                          case NONE: -                            config.proxySettings = proxySettings; +                            config.setProxySettings(proxySettings);                              break;                          case UNASSIGNED:                              loge("BUG: Found UNASSIGNED proxy on file, use NONE"); -                            config.proxySettings = ProxySettings.NONE; +                            config.setProxySettings(ProxySettings.NONE);                              break;                          default:                              loge("Ignore invalid proxy settings while reading"); -                            config.proxySettings = ProxySettings.UNASSIGNED; +                            config.setProxySettings(ProxySettings.UNASSIGNED);                              break;                      }                  } else { |