Skip to content

Commit

Permalink
send TorVpnService Intents directly, do not go through TorService
Browse files Browse the repository at this point in the history
This follows the standard pattern as documented in the Android docs for
starting and stopping a Service with Intents.
  • Loading branch information
eighthave committed Oct 28, 2019
1 parent 22bf175 commit 6f5d48d
Show file tree
Hide file tree
Showing 7 changed files with 41 additions and 50 deletions.
Expand Up @@ -58,6 +58,7 @@
import org.torproject.android.mini.ui.onboarding.OnboardingActivity;
import org.torproject.android.mini.vpn.VPNEnableActivity;
import org.torproject.android.service.OrbotConstants;
import org.torproject.android.service.vpn.TorVpnService;
import org.torproject.android.service.TorService;
import org.torproject.android.service.TorServiceConstants;
import org.torproject.android.service.util.Prefs;
Expand Down Expand Up @@ -466,7 +467,7 @@ public void onBackPressed() {

private void refreshVPNApps ()
{
stopVpnService();
TorVpnService.start(this);
startActivity(new Intent(MiniMainActivity.this, VPNEnableActivity.class));
}

Expand All @@ -482,7 +483,7 @@ private void enableVPN (boolean enable)
if (enable) {
startActivityForResult(new Intent(MiniMainActivity.this, VPNEnableActivity.class), REQUEST_VPN);
} else {
stopVpnService();
TorVpnService.start(this);
stopTor();
}
}
Expand Down Expand Up @@ -610,7 +611,8 @@ public void run() {
else if (request == REQUEST_VPN)
{
if (response == RESULT_OK) {
sendIntentToService(TorServiceConstants.CMD_VPN);
TorVpnService.start(this);

}
else if (response == VPNEnableActivity.ACTIVITY_RESULT_VPN_DENIED)
{
Expand Down Expand Up @@ -710,11 +712,6 @@ private void enableBridges (boolean enable)
private void requestTorRereadConfig() {
sendIntentToService(TorServiceConstants.CMD_SIGNAL_HUP);
}

public void stopVpnService ()
{
sendIntentToService(TorServiceConstants.CMD_VPN_CLEAR);
}

@Override
protected void onResume() {
Expand Down
Expand Up @@ -11,6 +11,7 @@
import org.torproject.android.service.TorService;
import org.torproject.android.service.TorServiceConstants;
import org.torproject.android.service.util.Prefs;
import org.torproject.android.service.vpn.TorVpnService;

/**
* To combat background service being stopped/swiped
Expand Down Expand Up @@ -59,7 +60,7 @@ private void startVpnService ()
Prefs.putUseVpn(true);

Log.d("VPNEnableActivity","VPN enabled, starting Tor...");
sendIntentToService(TorServiceConstants.CMD_VPN);
TorVpnService.start(this);

Handler h = new Handler();
h.postDelayed(new Runnable () {
Expand Down Expand Up @@ -89,7 +90,8 @@ protected void onActivityResult(int request, int response, Intent data) {
super.onActivityResult(request, response, data);

if (request == REQUEST_VPN && response == RESULT_OK) {
sendIntentToService(TorServiceConstants.CMD_VPN);
TorVpnService.start(this);

h.postDelayed(new Runnable () {
@Override
public void run () {
Expand Down
12 changes: 4 additions & 8 deletions app/src/main/java/org/torproject/android/OrbotMainActivity.java
Expand Up @@ -57,6 +57,7 @@
import org.torproject.android.service.TorService;
import org.torproject.android.service.TorServiceConstants;
import org.torproject.android.service.util.Prefs;
import org.torproject.android.service.vpn.TorVpnService;
import org.torproject.android.service.vpn.VpnConstants;
import org.torproject.android.service.vpn.VpnPrefs;
import org.torproject.android.settings.Languages;
Expand Down Expand Up @@ -600,7 +601,7 @@ public void onBackPressed() {

private void refreshVPNApps ()
{
stopVpnService();
TorVpnService.stop(this);
startActivity(new Intent(OrbotMainActivity.this, VPNEnableActivity.class));
}

Expand All @@ -611,7 +612,7 @@ private void enableVPN (boolean enable)
if (enable) {
startActivityForResult(new Intent(OrbotMainActivity.this, VPNEnableActivity.class), REQUEST_VPN);
} else
stopVpnService();
TorVpnService.stop(this);

addAppShortcuts();
}
Expand Down Expand Up @@ -903,7 +904,7 @@ public void run() {
else if (request == REQUEST_VPN)
{
if (response == RESULT_OK) {
sendIntentToService(TorServiceConstants.CMD_VPN);
TorVpnService.start(this);
}
else if (response == VPNEnableActivity.ACTIVITY_RESULT_VPN_DENIED)
{
Expand Down Expand Up @@ -997,11 +998,6 @@ private void enableBridges (boolean enable)
private void requestTorRereadConfig() {
sendIntentToService(TorServiceConstants.CMD_SIGNAL_HUP);
}

public void stopVpnService ()
{
sendIntentToService(TorServiceConstants.CMD_VPN_CLEAR);
}

@Override
protected void onResume() {
Expand Down
Expand Up @@ -11,6 +11,7 @@
import org.torproject.android.service.TorService;
import org.torproject.android.service.TorServiceConstants;
import org.torproject.android.service.util.Prefs;
import org.torproject.android.service.vpn.TorVpnService;

/**
* To combat background service being stopped/swiped
Expand Down Expand Up @@ -59,7 +60,7 @@ private void startVpnService ()
Prefs.putUseVpn(true);

Log.d("VPNEnableActivity","VPN enabled, starting Tor...");
sendIntentToService(TorServiceConstants.CMD_VPN);
TorVpnService.start(this);

Handler h = new Handler();
h.postDelayed(new Runnable () {
Expand Down Expand Up @@ -89,7 +90,7 @@ protected void onActivityResult(int request, int response, Intent data) {
super.onActivityResult(request, response, data);

if (request == REQUEST_VPN && response == RESULT_OK) {
sendIntentToService(TorServiceConstants.CMD_VPN);
TorVpnService.start(this);
h.postDelayed(new Runnable () {
@Override
public void run () {
Expand Down
Expand Up @@ -50,7 +50,6 @@
import org.torproject.android.service.util.TorServiceUtils;
import org.torproject.android.service.util.Utils;
import org.torproject.android.service.vpn.OrbotVpnManager;
import org.torproject.android.service.vpn.TorVpnService;
import org.torproject.android.service.vpn.VpnPrefs;

import java.io.BufferedReader;
Expand Down Expand Up @@ -381,10 +380,6 @@ else if (action.equals(CMD_SIGNAL_HUP)) {
requestTorRereadConfig();
} else if (action.equals(CMD_NEWNYM)) {
newIdentity();
} else if (action.equals(CMD_VPN)) {
startVPNService();
} else if (action.equals(CMD_VPN_CLEAR)) {
clearVpnProxy();
} else if (action.equals(CMD_SET_EXIT)) {

setExitNode(mIntent.getStringExtra("exit"));
Expand Down Expand Up @@ -1961,27 +1956,6 @@ public int getNotifyId ()
return NOTIFY_ID;
}

private void startVPNService ()
{
Intent intentVpn = new Intent(this, TorVpnService.class);
intentVpn.setAction("start");
startService(intentVpn);

}


public void clearVpnProxy ()
{
debug ("clearing VPN Proxy");
Prefs.putUseVpn(false);

Intent intentVpn = new Intent(this,TorVpnService.class);
intentVpn.setAction("stop");
startService(intentVpn);

}


// for bridge loading from the assets default bridges.txt file
class Bridge
{
Expand Down
Expand Up @@ -96,8 +96,6 @@ public interface TorServiceConstants {
String CMD_STATUS = "status";
String CMD_FLUSH = "flush";
String CMD_NEWNYM = "newnym";
String CMD_VPN = "vpn";
String CMD_VPN_CLEAR = "vpnclear";
String CMD_UPDATE_TRANS_PROXY = "update";
String CMD_SET_EXIT = "setexit";

Expand Down
Expand Up @@ -7,8 +7,10 @@
import android.content.IntentFilter;
import android.net.VpnService;
import android.support.v4.content.LocalBroadcastManager;
import android.util.Log;
import org.torproject.android.service.TorService;
import org.torproject.android.service.TorServiceConstants;
import org.torproject.android.service.util.Prefs;

import java.io.IOException;
import java.util.concurrent.TimeoutException;
Expand All @@ -17,6 +19,24 @@
* Created by n8fr8 on 9/26/16.
*/
public class TorVpnService extends VpnService {

public static final String TAG = "TorVpnService";

private static final String ACTION_START = "start";
private static final String ACTION_STOP = "stop";

public static void start(Context context) {
Intent intent = new Intent(context, TorVpnService.class);
intent.setAction(ACTION_START);
context.startService(intent);
}

public static void stop(Context context) {
Intent intent = new Intent(context, TorVpnService.class);
intent.setAction(ACTION_STOP);
context.startService(intent);
}

OrbotVpnManager mVpnManager;

@Override
Expand All @@ -38,14 +58,17 @@ public void onCreate() {
*/
public int onStartCommand(Intent intent, int flags, int startId) {

if (intent.getAction().equals("start"))
if (ACTION_START.equals(intent.getAction()))
{
LocalBroadcastManager lbm = LocalBroadcastManager.getInstance(this);
lbm.registerReceiver(mLocalBroadcastReceiver,
new IntentFilter(TorServiceConstants.LOCAL_ACTION_PORTS));
}
else if (intent.getAction().equals("stop"))
else if (ACTION_STOP.equals(intent.getAction()))
{
Log.d(TAG, "clearing VPN Proxy");
Prefs.putUseVpn(false);

LocalBroadcastManager lbm = LocalBroadcastManager.getInstance(this);
lbm.unregisterReceiver(mLocalBroadcastReceiver);
}
Expand Down

0 comments on commit 6f5d48d

Please sign in to comment.