diff options
6 files changed, 45 insertions, 46 deletions
diff --git a/app/src/main/java/se/leap/bitmaskclient/EipFragment.java b/app/src/main/java/se/leap/bitmaskclient/EipFragment.java index 43e0c2aa..ed507de4 100644 --- a/app/src/main/java/se/leap/bitmaskclient/EipFragment.java +++ b/app/src/main/java/se/leap/bitmaskclient/EipFragment.java @@ -197,9 +197,9 @@ public class EipFragment extends Fragment implements Observer { eipCommand(Constants.ACTION_START_EIP); } - public void stop() { - Intent intent = new Intent(dashboard.getApplicationContext(), VoidVpnService.class); - dashboard.stopService(intent); + private void stop() { + if(eip_status.isConnecting()) + VoidVpnService.stop(); disconnect(); } @@ -296,7 +296,6 @@ public class EipFragment extends Fragment implements Observer { && !status_message.getText().toString().equalsIgnoreCase(dashboard.getString(R.string.eip_state_not_connected))){ dashboard.showLog(); } - status_message.setText(dashboard.getString(R.string.eip_state_not_connected)); } private void adjustSwitch() { diff --git a/app/src/main/java/se/leap/bitmaskclient/eip/EIP.java b/app/src/main/java/se/leap/bitmaskclient/eip/EIP.java index 5cac4588..3b72a486 100644 --- a/app/src/main/java/se/leap/bitmaskclient/eip/EIP.java +++ b/app/src/main/java/se/leap/bitmaskclient/eip/EIP.java @@ -126,12 +126,8 @@ public final class EIP extends IntentService { private void stopEIP() { EipStatus eip_status = EipStatus.getInstance(); int result_code = Activity.RESULT_CANCELED; - if(eip_status.isConnected() || eip_status.isConnecting()) { - Intent intent = new Intent(); - intent.setComponent(VoidVpnLauncher.getService()); - stopService(intent); - result_code = Activity.RESULT_OK; - } + if(eip_status.isConnected() || eip_status.isConnecting()) + result_code = Activity.RESULT_OK; tellToReceiver(ACTION_STOP_EIP, result_code); } diff --git a/app/src/main/java/se/leap/bitmaskclient/eip/EipStatus.java b/app/src/main/java/se/leap/bitmaskclient/eip/EipStatus.java index 3b9dad1c..adbbaef3 100644 --- a/app/src/main/java/se/leap/bitmaskclient/eip/EipStatus.java +++ b/app/src/main/java/se/leap/bitmaskclient/eip/EipStatus.java @@ -22,7 +22,6 @@ import android.content.*; import java.util.*; import de.blinkt.openvpn.core.*; -import se.leap.bitmaskclient.EipFragment; public class EipStatus extends Observable implements VpnStatus.StateListener { public static String TAG = EipStatus.class.getSimpleName(); @@ -49,6 +48,8 @@ public class EipStatus extends Observable implements VpnStatus.StateListener { updateStatus(state, logmessage, localizedResId, level); if(isConnected() || isDisconnected()) { setConnectedOrDisconnected(); + if(isDisconnected()) + VoidVpnService.stop(); } else if(isConnecting()) setConnecting(); Log.d(TAG, "update state with level " + level); @@ -141,10 +142,10 @@ public class EipStatus extends Observable implements VpnStatus.StateListener { VpnStatus.LogItem[] log = VpnStatus.getlogbuffer(); String message = ""; - for (int i = 1; i <= lines && i < log.length; i++) { - message = log[log.length-i].getString(context); + for (int i = 0; i < lines; i++) { + message = log[log.length-1].getString(context); for(int j = 0; j < error_keywords.length; j++) - if(message.contains(error_keywords[j])) + if(message.contains(error_keywords[i])) result = true; } return result; diff --git a/app/src/main/java/se/leap/bitmaskclient/eip/VoidVpnLauncher.java b/app/src/main/java/se/leap/bitmaskclient/eip/VoidVpnLauncher.java index e7ce74d4..d79d8003 100644 --- a/app/src/main/java/se/leap/bitmaskclient/eip/VoidVpnLauncher.java +++ b/app/src/main/java/se/leap/bitmaskclient/eip/VoidVpnLauncher.java @@ -1,7 +1,6 @@ package se.leap.bitmaskclient.eip; import android.app.Activity; -import android.content.ComponentName; import android.content.Intent; import android.net.VpnService; import android.os.Bundle; @@ -10,8 +9,6 @@ public class VoidVpnLauncher extends Activity { private static final int VPN_USER_PERMISSION = 71; - private static ComponentName service; - @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); @@ -30,17 +27,11 @@ public class VoidVpnLauncher extends Activity { protected void onActivityResult(int requestCode, int resultCode, Intent data){ if(requestCode == VPN_USER_PERMISSION) { if(resultCode == RESULT_OK) { - Intent intent = new Intent(getApplicationContext(), VoidVpnService.class); - intent.setAction(Constants.START_BLOCKING_VPN_PROFILE); - android.util.Log.d(VoidVpnLauncher.class.getSimpleName(), "VoidVpnService starting from Launcher"); - - service = startService(intent); + Intent void_vpn_service = new Intent(getApplicationContext(), VoidVpnService.class); + void_vpn_service.setAction(Constants.START_BLOCKING_VPN_PROFILE); + startService(void_vpn_service); } } finish(); } - - public static ComponentName getService() { - return service; - } } diff --git a/app/src/main/java/se/leap/bitmaskclient/eip/VoidVpnService.java b/app/src/main/java/se/leap/bitmaskclient/eip/VoidVpnService.java index 367a9f1d..0a707ab1 100644 --- a/app/src/main/java/se/leap/bitmaskclient/eip/VoidVpnService.java +++ b/app/src/main/java/se/leap/bitmaskclient/eip/VoidVpnService.java @@ -13,29 +13,42 @@ public class VoidVpnService extends VpnService { @Override public int onStartCommand(Intent intent, int flags, int startId) { - String action = intent != null ? intent.getAction() : ""; - if (action == Constants.START_BLOCKING_VPN_PROFILE) { - start(); - } + String action = intent != null ? intent.getAction() : ""; + if (action == Constants.START_BLOCKING_VPN_PROFILE) { + new Thread(new Runnable() { + public void run() { + Builder builder = new Builder(); + builder.setSession("Blocking until running"); + builder.addAddress("10.42.0.8",16); + builder.addRoute("0.0.0.0", 1); + builder.addRoute("192.168.1.0", 24); + builder.addDnsServer("10.42.0.1"); + try { + fd = builder.establish(); + } catch (Exception e) { + e.printStackTrace(); + } + android.util.Log.d(TAG, "VoidVpnService set up"); + } + }).run(); + } + return 0; + } - return 0; + @Override + public void onRevoke() { + super.onRevoke(); } - protected void start() { - Builder builder = new Builder(); - builder.setSession("Blocking until running"); - builder.addAddress("10.42.0.8", 16); - builder.addRoute("0.0.0.0", 1); - builder.addRoute("192.168.1.0", 24); - builder.addDnsServer("10.42.0.1"); + public static boolean stop() { try { - fd = builder.establish(); - if (fd != null) - android.util.Log.d(TAG, "VoidVpnService set up"); - else - android.util.Log.d(TAG, "VoidVpnService failed to set up"); - } catch (Exception e) { + if(fd != null) + fd.close(); + return true; + } catch (IOException | NullPointerException e) { + android.util.Log.d(TAG, "VoidVpnService didn't stop"); e.printStackTrace(); + return false; } } } diff --git a/app/src/main/java/se/leap/bitmaskclient/eip/VpnConfigGenerator.java b/app/src/main/java/se/leap/bitmaskclient/eip/VpnConfigGenerator.java index c29cc180..5f5dcabd 100644 --- a/app/src/main/java/se/leap/bitmaskclient/eip/VpnConfigGenerator.java +++ b/app/src/main/java/se/leap/bitmaskclient/eip/VpnConfigGenerator.java @@ -148,7 +148,6 @@ public class VpnConfigGenerator { + new_line + "persist-tun" + new_line - + "auth-retry nointeract" - + "fragment 1400"; + + "auth-retry nointeract"; } } |