Quellcode durchsuchen

ToolsInstaller: Add a method to ensure tool availability

Signed-off-by: Samuel Holland <samuel@sholland.org>
master
Samuel Holland vor 6 Jahren
Ursprung
Commit
5201c7f849
1 geänderte Dateien mit 28 neuen und 0 gelöschten Zeilen
  1. +28
    -0
      app/src/main/java/com/wireguard/android/util/ToolsInstaller.java

+ 28
- 0
app/src/main/java/com/wireguard/android/util/ToolsInstaller.java Datei anzeigen

@@ -3,12 +3,14 @@ package com.wireguard.android.util;
import android.content.Context;
import android.system.ErrnoException;
import android.system.OsConstants;
import android.util.Log;

import com.wireguard.android.Application.ApplicationContext;
import com.wireguard.android.Application.ApplicationScope;
import com.wireguard.android.util.RootShell.NoRootException;

import java.io.File;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.Arrays;
import java.util.List;
@@ -30,10 +32,12 @@ public final class ToolsInstaller {
new File("/system/bin"),
};
private static final File INSTALL_DIR = getInstallDir();
private static final String TAG = "WireGuard/" + ToolsInstaller.class.getSimpleName();

private final File localBinaryDir;
private final File nativeLibraryDir;
private final RootShell rootShell;
private Boolean areToolsAvailable;

@Inject
public ToolsInstaller(@ApplicationContext final Context context, final RootShell rootShell) {
@@ -85,6 +89,30 @@ public final class ToolsInstaller {
}
}

public void ensureToolsAvailable() throws FileNotFoundException {
if (areToolsAvailable == null) {
synchronized (this) {
if (areToolsAvailable == null) {
if (areInstalled()) {
Log.d(TAG, "Tools are installed to /system");
areToolsAvailable = true;
} else if (areSymlinked()) {
Log.d(TAG, "Tools were already symlinked into our private binary dir");
areToolsAvailable = true;
} else if (symlink() == OsConstants.EXIT_SUCCESS) {
Log.d(TAG, "Tools are now symlinked into our private binary dir");
areToolsAvailable = true;
} else {
Log.e(TAG, "For some reason, wg and wg-quick are not available at all");
areToolsAvailable = false;
}
}
}
}
if (!areToolsAvailable)
throw new FileNotFoundException("Required tools unavailable");
}

public int install() {
if (INSTALL_DIR == null)
return OsConstants.ENOENT;


Laden…
Abbrechen
Speichern