summaryrefslogtreecommitdiff
path: root/app/src/main/java/se/leap/bitmaskclient/tethering/TetheringStateManager.java
diff options
context:
space:
mode:
authorcyberta <cyberta@riseup.net>2020-01-29 02:55:25 -0600
committercyberta <cyberta@riseup.net>2020-01-29 02:55:25 -0600
commit7fbea5459e59de1327f2c76a23f5940d67e4ae8d (patch)
treec11fbdcb5a51b23e842e785b364a069b3f75c681 /app/src/main/java/se/leap/bitmaskclient/tethering/TetheringStateManager.java
parentec4cafb1026db8f461d94908dbdfcd8281d235a4 (diff)
implement wifi tethering
Diffstat (limited to 'app/src/main/java/se/leap/bitmaskclient/tethering/TetheringStateManager.java')
-rw-r--r--app/src/main/java/se/leap/bitmaskclient/tethering/TetheringStateManager.java70
1 files changed, 61 insertions, 9 deletions
diff --git a/app/src/main/java/se/leap/bitmaskclient/tethering/TetheringStateManager.java b/app/src/main/java/se/leap/bitmaskclient/tethering/TetheringStateManager.java
index 0d4f56d8..58d67872 100644
--- a/app/src/main/java/se/leap/bitmaskclient/tethering/TetheringStateManager.java
+++ b/app/src/main/java/se/leap/bitmaskclient/tethering/TetheringStateManager.java
@@ -18,12 +18,20 @@ package se.leap.bitmaskclient.tethering;
import android.content.Context;
import android.content.IntentFilter;
+import android.util.Log;
+import java.net.Inet4Address;
+import java.net.InterfaceAddress;
import java.net.NetworkInterface;
import java.util.Enumeration;
+import java.util.List;
import se.leap.bitmaskclient.utils.Cmd;
+import static se.leap.bitmaskclient.utils.PreferenceHelper.isBluetoothTetheringAllowed;
+import static se.leap.bitmaskclient.utils.PreferenceHelper.isUsbTetheringAllowed;
+import static se.leap.bitmaskclient.utils.PreferenceHelper.isWifiTetheringAllowed;
+
/**
* This manager tries to figure out the current tethering states for Wifi, USB and Bluetooth
* The default behavior differs for failing attempts to get these states:
@@ -55,15 +63,14 @@ public class TetheringStateManager {
intentFilter.addAction("android.net.wifi.WIFI_AP_STATE_CHANGED");
context.getApplicationContext().registerReceiver(broadcastReceiver, intentFilter);
instance.wifiManager = new WifiManagerWrapper(context);
+ TetheringObservable.allowVpnWifiTethering(isWifiTetheringAllowed(context));
+ TetheringObservable.allowVpnUsbTethering(isUsbTetheringAllowed(context));
+ TetheringObservable.allowVpnBluetoothTethering(isBluetoothTetheringAllowed(context));
updateWifiTetheringState();
updateUsbTetheringState();
updateBluetoothTetheringState();
}
- private static boolean isWifiApEnabled() throws Exception {
- return instance.wifiManager.isWifiAPEnabled();
- }
-
private static boolean getUsbTetheringState() {
try {
@@ -82,6 +89,54 @@ public class TetheringStateManager {
return false;
}
+ public static String getWifiAddressRange() {
+ String interfaceAddress = getWifiInterfaceAddress();
+ if (interfaceAddress.split("\\.").length == 4) {
+ String result = interfaceAddress.substring(0, interfaceAddress.lastIndexOf("."));
+ result = result + ".0/24";
+ Log.d(TAG, "wifiAddressRange = " + result);
+ return result;
+ }
+ return "";
+ }
+
+ private static String getWifiInterfaceAddress() {
+ NetworkInterface networkInterface = getWlanInterface();
+ if (networkInterface != null) {
+ List<InterfaceAddress> ifaceAddresses = networkInterface.getInterfaceAddresses();
+ for (InterfaceAddress ifaceAddres : ifaceAddresses) {
+ if (ifaceAddres.getAddress() instanceof Inet4Address) {
+ return ifaceAddres.getAddress().getHostAddress();
+ }
+ }
+ }
+ return "";
+ }
+
+ public static String getWifiInterfaceName() {
+ NetworkInterface networkInterface = getWlanInterface();
+ if (networkInterface != null) {
+ return networkInterface.getName();
+ }
+ return "";
+ }
+
+ private static NetworkInterface getWlanInterface() {
+ try {
+ for(Enumeration<NetworkInterface> en = NetworkInterface.getNetworkInterfaces(); en.hasMoreElements();) {
+ NetworkInterface networkInterface = en.nextElement();
+ if(!networkInterface.isLoopback()){
+ if(networkInterface.getName().contains("wlan") || networkInterface.getName().contains("eth")){
+ return networkInterface;
+ }
+ }
+ }
+ } catch(Exception e){
+ e.printStackTrace();
+ }
+ return null;
+ }
+
private static boolean isBluetoothTetheringEnabled() {
StringBuilder log = new StringBuilder();
boolean hasBtPan = false;
@@ -104,12 +159,9 @@ public class TetheringStateManager {
}
static void updateWifiTetheringState() {
- boolean lastState = TetheringObservable.getInstance().isWifiTetheringEnabled();
+ WifiManagerWrapper manager = getInstance().wifiManager;
try {
- boolean currentState = isWifiApEnabled();
- if (currentState != lastState) {
- TetheringObservable.setWifiTethering(currentState);
- }
+ TetheringObservable.setWifiTethering(manager.isWifiAPEnabled(), getWifiAddressRange(), getWifiInterfaceName());
} catch (Exception e) {
e.printStackTrace();
}