diff options
Diffstat (limited to 'tunnel/src/main/java/com/wireguard/android/backend/WgQuickBackend.java')
-rw-r--r-- | tunnel/src/main/java/com/wireguard/android/backend/WgQuickBackend.java | 20 |
1 files changed, 12 insertions, 8 deletions
diff --git a/tunnel/src/main/java/com/wireguard/android/backend/WgQuickBackend.java b/tunnel/src/main/java/com/wireguard/android/backend/WgQuickBackend.java index d4d1f152..87fdf6e5 100644 --- a/tunnel/src/main/java/com/wireguard/android/backend/WgQuickBackend.java +++ b/tunnel/src/main/java/com/wireguard/android/backend/WgQuickBackend.java @@ -1,5 +1,5 @@ /* - * Copyright © 2017-2019 WireGuard LLC. All Rights Reserved. + * Copyright © 2017-2025 WireGuard LLC. All Rights Reserved. * SPDX-License-Identifier: Apache-2.0 */ @@ -20,6 +20,7 @@ import com.wireguard.util.NonNullForAll; import java.io.File; import java.io.FileOutputStream; import java.nio.charset.StandardCharsets; +import java.time.Instant; import java.util.ArrayList; import java.util.Collection; import java.util.Collections; @@ -32,11 +33,10 @@ import java.util.Objects; import java.util.Set; import androidx.annotation.Nullable; -import java9.util.stream.Collectors; -import java9.util.stream.Stream; /** - * WireGuard backend that uses {@code wg-quick} to implement tunnel configuration. + * Implementation of {@link Backend} that uses the kernel module and {@code wg-quick} to provide + * WireGuard tunnels. */ @NonNullForAll @@ -54,6 +54,10 @@ public final class WgQuickBackend implements Backend { this.toolsInstaller = toolsInstaller; } + public static boolean hasKernelSupport() { + return new File("/sys/module/wireguard").exists(); + } + @Override public Set<String> getRunningTunnelNames() { final List<String> output = new ArrayList<>(); @@ -67,7 +71,7 @@ public final class WgQuickBackend implements Backend { return Collections.emptySet(); } // wg puts all interface names on the same line. Split them into separate elements. - return Stream.of(output.get(0).split(" ")).collect(Collectors.toUnmodifiableSet()); + return Set.of(output.get(0).split(" ")); } @Override @@ -80,17 +84,17 @@ public final class WgQuickBackend implements Backend { final Statistics stats = new Statistics(); final Collection<String> output = new ArrayList<>(); try { - if (rootShell.run(output, String.format("wg show '%s' transfer", tunnel.getName())) != 0) + if (rootShell.run(output, String.format("wg show '%s' dump", tunnel.getName())) != 0) return stats; } catch (final Exception ignored) { return stats; } for (final String line : output) { final String[] parts = line.split("\\t"); - if (parts.length != 3) + if (parts.length != 8) continue; try { - stats.add(Key.fromBase64(parts[0]), Long.parseLong(parts[1]), Long.parseLong(parts[2])); + stats.add(Key.fromBase64(parts[0]), Long.parseLong(parts[5]), Long.parseLong(parts[6]), Long.parseLong(parts[4]) * 1000); } catch (final Exception ignored) { } } |