From b151204424e45b5e4b644ce52bf671eb1d418e06 Mon Sep 17 00:00:00 2001 From: Denton Gentry Date: Sat, 24 Jul 2021 13:09:37 -0700 Subject: [PATCH] Doesn't work yet. --- .../src/main/java/com/tailscale/ipn/IPNService.java | 9 +++++++++ cmd/tailscale/callbacks.go | 10 ++++++++++ cmd/tailscale/main.go | 5 +++++ 3 files changed, 24 insertions(+) diff --git a/android/src/main/java/com/tailscale/ipn/IPNService.java b/android/src/main/java/com/tailscale/ipn/IPNService.java index 88d9a2a..addb52e 100644 --- a/android/src/main/java/com/tailscale/ipn/IPNService.java +++ b/android/src/main/java/com/tailscale/ipn/IPNService.java @@ -24,7 +24,15 @@ public class IPNService extends VpnService { if (intent != null && ACTION_DISCONNECT.equals(intent.getAction())) { close(); return START_NOT_STICKY; + } else if (intent != null && ACTION_CONNECT.equals(intent.getAction())) { + connect(); + return START_STICKY; + } else if (intent != null) { + // we're being started due to Always-on VPN + connectAtBoot(); + return START_STICKY; } + // dunno what this is. connect(); return START_STICKY; } @@ -87,4 +95,5 @@ public class IPNService extends VpnService { private native void connect(); private native void disconnect(); + private native void connectAtBoot(); } diff --git a/cmd/tailscale/callbacks.go b/cmd/tailscale/callbacks.go index 840f3f7..4051f07 100644 --- a/cmd/tailscale/callbacks.go +++ b/cmd/tailscale/callbacks.go @@ -7,6 +7,7 @@ package main // JNI implementations of Java native callback methods. import ( + "log" "unsafe" "github.com/tailscale/tailscale-android/jni" @@ -81,12 +82,14 @@ func notifyVPNClosed() { //export Java_com_tailscale_ipn_IPNService_connect func Java_com_tailscale_ipn_IPNService_connect(env *C.JNIEnv, this C.jobject) { + log.Printf("Java_com_tailscale_ipn_IPNService_connect") jenv := (*jni.Env)(unsafe.Pointer(env)) onConnect <- jni.NewGlobalRef(jenv, jni.Object(this)) } //export Java_com_tailscale_ipn_IPNService_disconnect func Java_com_tailscale_ipn_IPNService_disconnect(env *C.JNIEnv, this C.jobject) { + log.Printf("Java_com_tailscale_ipn_IPNService_disconnect") jenv := (*jni.Env)(unsafe.Pointer(env)) onDisconnect <- jni.NewGlobalRef(jenv, jni.Object(this)) } @@ -174,3 +177,10 @@ func Java_com_tailscale_ipn_App_onShareIntent(env *C.JNIEnv, cls C.jclass, nfile } onFileShare <- files } + +//export Java_com_tailscale_ipn_IPNService_connectAtBoot +func Java_com_tailscale_ipn_IPNService_connectAtBoot(env *C.JNIEnv, cls C.jclass) { + log.Printf("Java_com_tailscale_ipn_IPNService_connectAtBoot") + requestBackend(WantRunningEvent{}) + requestBackend(ConnectEvent{Enable: true}) +} diff --git a/cmd/tailscale/main.go b/cmd/tailscale/main.go index 2ecf735..4852c43 100644 --- a/cmd/tailscale/main.go +++ b/cmd/tailscale/main.go @@ -181,6 +181,7 @@ type ( GoogleAuthEvent struct{} LogoutEvent struct{} FileTargetsEvent struct{} + WantRunningEvent struct{} ) // serverOAuthID is the OAuth ID of the tailscale-android server, used @@ -412,6 +413,10 @@ func (a *App) runBackend() error { go b.backend.SetPrefs(state.Prefs) state.updateExitNodes() a.notify(state) + case WantRunningEvent: + state.Prefs.WantRunning = true + go b.backend.SetPrefs(state.Prefs) + a.notify(state) } case s := <-onConnect: jni.Do(a.jvm, func(env *jni.Env) error {