IpConfigStore: Changes for parsing old wifi backup
Some changes in IpConfigStore to parse old backup data. The old backup
data contained a raw byte dump of the ipconfig.txt. So, make changes in
IpConfigStore to parse the inputstream from backup data into
IpConfiguration objects.
Changes in the CL:
1. Make the |readIpAndProxyConfigurations| method static so that
it can be used as a utility for parsing the backup data.
2. Create a new version of |readIpAndProxyConfigurations| method to
accept an input stream parameter.
3. Make |writeConfig| method static so that it can be used for
unit-testing the backup migration logic.
BUG: 29075035
Change-Id: Ic074952d9f9ef143089a371e6c527470cb1c229c
(cherry picked from commit ad683cadb293a97570ba1f31e64cf9c95bbb7d09)
diff --git a/services/core/java/com/android/server/net/IpConfigStore.java b/services/core/java/com/android/server/net/IpConfigStore.java
index 2807ec8..4d56468 100644
--- a/services/core/java/com/android/server/net/IpConfigStore.java
+++ b/services/core/java/com/android/server/net/IpConfigStore.java
@@ -27,6 +27,7 @@
import android.util.Log;
import android.util.SparseArray;
+import com.android.internal.annotations.VisibleForTesting;
import com.android.server.net.DelayedDiskWrite;
import java.io.BufferedInputStream;
@@ -34,7 +35,9 @@
import java.io.DataOutputStream;
import java.io.EOFException;
import java.io.FileInputStream;
+import java.io.FileNotFoundException;
import java.io.IOException;
+import java.io.InputStream;
import java.net.InetAddress;
import java.net.Inet4Address;
@@ -67,7 +70,8 @@
this(new DelayedDiskWrite());
}
- private boolean writeConfig(DataOutputStream out, int configKey,
+ @VisibleForTesting
+ public static boolean writeConfig(DataOutputStream out, int configKey,
IpConfiguration config) throws IOException {
boolean written = false;
@@ -171,12 +175,25 @@
});
}
- public SparseArray<IpConfiguration> readIpAndProxyConfigurations(String filePath) {
- SparseArray<IpConfiguration> networks = new SparseArray<IpConfiguration>();
+ public static SparseArray<IpConfiguration> readIpAndProxyConfigurations(String filePath) {
+ BufferedInputStream bufferedInputStream;
+ try {
+ bufferedInputStream = new BufferedInputStream(new FileInputStream(filePath));
+ } catch (FileNotFoundException e) {
+ // Return an empty array here because callers expect an empty array when the file is
+ // not present.
+ loge("Error opening configuration file: " + e);
+ return new SparseArray<>();
+ }
+ return readIpAndProxyConfigurations(bufferedInputStream);
+ }
+ public static SparseArray<IpConfiguration> readIpAndProxyConfigurations(
+ InputStream inputStream) {
+ SparseArray<IpConfiguration> networks = new SparseArray<IpConfiguration>();
DataInputStream in = null;
try {
- in = new DataInputStream(new BufferedInputStream(new FileInputStream(filePath)));
+ in = new DataInputStream(inputStream);
int version = in.readInt();
if (version != 2 && version != 1) {
@@ -327,11 +344,11 @@
return networks;
}
- protected void loge(String s) {
+ protected static void loge(String s) {
Log.e(TAG, s);
}
- protected void log(String s) {
+ protected static void log(String s) {
Log.d(TAG, s);
}
}