From 51a53e54721fdb513d3c9331ae8e75a4b56a7cd2 Mon Sep 17 00:00:00 2001 From: Brett Jenkins Date: Fri, 10 Mar 2023 04:25:04 +0000 Subject: [PATCH] IPNReceiver: Add intents to connect and disconnect VPN (#84) * IPNReceiver: Add intents to connect and disconnect VPN Added a new class IPNReceiver to listen to intents silently and connect and disconnect the VPN Also removed unneeded comment Fixes: https://github.com/tailscale/tailscale/issues/3547 Signed-off-by: Brett Jenkins --- android/src/main/AndroidManifest.xml | 7 +++++++ .../java/com/tailscale/ipn/IPNReceiver.java | 20 +++++++++++++++++++ cmd/tailscale/callbacks.go | 10 ++++++++++ 3 files changed, 37 insertions(+) create mode 100644 android/src/main/java/com/tailscale/ipn/IPNReceiver.java diff --git a/android/src/main/AndroidManifest.xml b/android/src/main/AndroidManifest.xml index 8dfe5f1..7c4b06b 100644 --- a/android/src/main/AndroidManifest.xml +++ b/android/src/main/AndroidManifest.xml @@ -55,6 +55,13 @@ + + + + + + diff --git a/android/src/main/java/com/tailscale/ipn/IPNReceiver.java b/android/src/main/java/com/tailscale/ipn/IPNReceiver.java new file mode 100644 index 0000000..e694727 --- /dev/null +++ b/android/src/main/java/com/tailscale/ipn/IPNReceiver.java @@ -0,0 +1,20 @@ +package com.tailscale.ipn; + +import android.content.BroadcastReceiver; +import android.content.Context; +import android.content.Intent; + +public class IPNReceiver extends BroadcastReceiver { + + @Override + public void onReceive(Context context, Intent intent) { + if (intent.getAction() == "com.tailscale.ipn.CONNECT_VPN") { + connect(); + } else if (intent.getAction() == "com.tailscale.ipn.DISCONNECT_VPN") { + disconnect(); + } + } + + private native void connect(); + private native void disconnect(); +} diff --git a/cmd/tailscale/callbacks.go b/cmd/tailscale/callbacks.go index 0895a99..1666c3f 100644 --- a/cmd/tailscale/callbacks.go +++ b/cmd/tailscale/callbacks.go @@ -102,6 +102,16 @@ func Java_com_tailscale_ipn_IPNService_disconnect(env *C.JNIEnv, this C.jobject) onDisconnect <- jni.NewGlobalRef(jenv, jni.Object(this)) } +//export Java_com_tailscale_ipn_IPNReceiver_connect +func Java_com_tailscale_ipn_IPNReceiver_connect(env *C.JNIEnv, this C.jobject) { + requestBackend(ConnectEvent{Enable: true}) +} + +//export Java_com_tailscale_ipn_IPNReceiver_disconnect +func Java_com_tailscale_ipn_IPNReceiver_disconnect(env *C.JNIEnv, this C.jobject) { + requestBackend(ConnectEvent{Enable: false}) +} + //export Java_com_tailscale_ipn_App_onConnectivityChanged func Java_com_tailscale_ipn_App_onConnectivityChanged(env *C.JNIEnv, cls C.jclass, connected C.jboolean) { select {