Ver código fonte

WgQuickBackend: Improve error handling

Signed-off-by: Samuel Holland <samuel@sholland.org>
master
Samuel Holland 6 anos atrás
pai
commit
668d90f063
1 arquivos alterados com 15 adições e 6 exclusões
  1. +15
    -6
      app/src/main/java/com/wireguard/android/backend/WgQuickBackend.java

+ 15
- 6
app/src/main/java/com/wireguard/android/backend/WgQuickBackend.java Ver arquivo

@@ -1,6 +1,8 @@
package com.wireguard.android.backend;

import android.content.Context;
import android.system.ErrnoException;
import android.system.OsConstants;
import android.util.Log;

import com.wireguard.android.model.Tunnel;
@@ -10,7 +12,6 @@ import com.wireguard.android.util.RootShell;
import com.wireguard.config.Config;

import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
@@ -69,18 +70,26 @@ public final class WgQuickBackend implements Backend {
}

@Override
public State setState(final Tunnel tunnel, final State state) throws IOException {
public State setState(final Tunnel tunnel, final State state) throws Exception {
Log.v(TAG, "Requested state change to " + state + " for tunnel " + tunnel.getName());
final State originalState = getState(tunnel);
final State resolvedState = resolveState(originalState, state);
if (resolvedState == originalState)
return originalState;
final int result;
if (resolvedState == State.UP) {
if (!new File("/sys/module/wireguard").exists())
throw new ErrnoException("WireGuard module not loaded", OsConstants.ENODEV);
// FIXME: Assumes file layout from FileConfigStore. Use a temporary file.
final File file = new File(context.getFilesDir(), tunnel.getName() + ".conf");
if (rootShell.run(null, String.format("wg-quick up '%s'", file.getAbsolutePath())) != 0)
throw new IOException("wg-quick failed");
result = rootShell.run(null, String.format("wg-quick up '%s'", file.getAbsolutePath()));
} else {
if (rootShell.run(null, String.format("wg-quick down '%s'", tunnel.getName())) != 0)
throw new IOException("wg-quick failed");
result = rootShell.run(null, String.format("wg-quick down '%s'", tunnel.getName()));
}
if (result != 0) {
final String message = result == OsConstants.EACCES ?
"Root access unavailable" : "wg-quick failed";
throw new Exception(message);
}
return getState(tunnel);
}


Carregando…
Cancelar
Salvar