diff --git a/app/src/main/java/com/wireguard/android/backend/GoBackend.java b/app/src/main/java/com/wireguard/android/backend/GoBackend.java index f9dca4c5..d11802f3 100644 --- a/app/src/main/java/com/wireguard/android/backend/GoBackend.java +++ b/app/src/main/java/com/wireguard/android/backend/GoBackend.java @@ -51,10 +51,6 @@ public final class GoBackend implements Backend { private static native int wgGetSocketV6(int handle); - private static native void wgPutSocketV4(int handle); - - private static native void wgPutSocketV6(int handle); - private static native void wgTurnOff(int handle); private static native int wgTurnOn(String ifName, int tunFd, String settings); @@ -190,9 +186,7 @@ public final class GoBackend implements Backend { currentTunnel = tunnel; service.protect(wgGetSocketV4(currentTunnelHandle)); - wgPutSocketV4(currentTunnelHandle); service.protect(wgGetSocketV6(currentTunnelHandle)); - wgPutSocketV6(currentTunnelHandle); } else { Log.i(TAG, "Bringing tunnel down"); diff --git a/app/tools/libwg-go/src/git.zx2c4.com/wireguard-go/api-android.go b/app/tools/libwg-go/src/git.zx2c4.com/wireguard-go/api-android.go index 74a0c97f..24a0eaec 100644 --- a/app/tools/libwg-go/src/git.zx2c4.com/wireguard-go/api-android.go +++ b/app/tools/libwg-go/src/git.zx2c4.com/wireguard-go/api-android.go @@ -85,7 +85,6 @@ func wgTurnOn(ifnameRef string, tun_fd int32, settings string) int32 { } device.Up() - device.net.bind.(*NativeBind).clearSourceOnAllRouteChanges = true logger.Info.Println("Device started") var i int32 @@ -122,7 +121,18 @@ func wgGetSocketV4(tunnelHandle int32) int32 { if !ok { return -1 } - return int32(native.sock4) + fd := int32(-1) + conn, err := native.ipv4.SyscallConn() + if err != nil { + return -1 + } + err = conn.Control(func(f uintptr) { + fd = int32(f) + }) + if err != nil { + return -1 + } + return fd } //export wgGetSocketV6 @@ -135,41 +145,18 @@ func wgGetSocketV6(tunnelHandle int32) int32 { if !ok { return -1 } - return int32(native.sock6) -} - -//export wgPutSocketV4 -func wgPutSocketV4(tunnelHandle int32) { - device, ok := tunnelHandles[tunnelHandle] - if !ok { - return + fd := int32(-1) + conn, err := native.ipv6.SyscallConn() + if err != nil { + return -1 } - native, ok := device.net.bind.(*NativeBind) - if !ok { - return - } - fwmark, err := unix.GetsockoptInt(native.sock6, unix.SOL_SOCKET, unix.SO_MARK) - if err == nil { - native.lastMark = uint32(fwmark) - device.net.fwmark = uint32(fwmark) - } -} - -//export wgPutSocketV6 -func wgPutSocketV6(tunnelHandle int32) { - device, ok := tunnelHandles[tunnelHandle] - if !ok { - return - } - native, ok := device.net.bind.(*NativeBind) - if !ok { - return - } - fwmark, err := unix.GetsockoptInt(native.sock6, unix.SOL_SOCKET, unix.SO_MARK) - if err == nil { - native.lastMark = uint32(fwmark) - device.net.fwmark = uint32(fwmark) + err = conn.Control(func(f uintptr) { + fd = int32(f) + }) + if err != nil { + return -1 } + return fd } func main() {} diff --git a/app/tools/libwg-go/src/git.zx2c4.com/wireguard-go/jni.c b/app/tools/libwg-go/src/git.zx2c4.com/wireguard-go/jni.c index ae6422ab..a0f3d0ba 100644 --- a/app/tools/libwg-go/src/git.zx2c4.com/wireguard-go/jni.c +++ b/app/tools/libwg-go/src/git.zx2c4.com/wireguard-go/jni.c @@ -10,8 +10,6 @@ extern int wgTurnOn(struct go_string ifname, int tun_fd, struct go_string settin extern void wgTurnOff(int handle); extern int wgGetSocketV4(int handle); extern int wgGetSocketV6(int handle); -extern void wgPutSocketV4(int handle); -extern void wgPutSocketV6(int handle); JNIEXPORT jint JNICALL Java_com_wireguard_android_backend_GoBackend_wgTurnOn(JNIEnv *env, jclass c, jstring ifname, jint tun_fd, jstring settings) { @@ -45,13 +43,3 @@ JNIEXPORT jint JNICALL Java_com_wireguard_android_backend_GoBackend_wgGetSocketV { return wgGetSocketV6(handle); } - -JNIEXPORT void JNICALL Java_com_wireguard_android_backend_GoBackend_wgPutSocketV4(JNIEnv *env, jclass c, jint handle) -{ - wgPutSocketV4(handle); -} - -JNIEXPORT void JNICALL Java_com_wireguard_android_backend_GoBackend_wgPutSocketV6(JNIEnv *env, jclass c, jint handle) -{ - wgPutSocketV6(handle); -} diff --git a/app/tools/wireguard-go b/app/tools/wireguard-go index 4365b458..1dab5b94 160000 --- a/app/tools/wireguard-go +++ b/app/tools/wireguard-go @@ -1 +1 @@ -Subproject commit 4365b4583fa32b1b77d33f5074da9c165a28f824 +Subproject commit 1dab5b94dd4e87a278c5cbbabe7d045ebab8283a