summaryrefslogtreecommitdiff
path: root/app/src/main/java/se/leap/bitmaskclient/tethering/TetheringStateManager.java
diff options
context:
space:
mode:
authorcyberta <cyberta@riseup.net>2020-01-30 16:14:22 -0600
committercyberta <cyberta@riseup.net>2020-01-30 16:14:22 -0600
commit97a117cb3bbc022ee16008dea9896a8dfea7c681 (patch)
tree8e3684e0012d3148ed1598ab6f839a562660cd13 /app/src/main/java/se/leap/bitmaskclient/tethering/TetheringStateManager.java
parentb9e4195573da146d48e5921c65dc57273d94ccd2 (diff)
implement usb 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.java127
1 files changed, 69 insertions, 58 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 11e1a83d..4a266d87 100644
--- a/app/src/main/java/se/leap/bitmaskclient/tethering/TetheringStateManager.java
+++ b/app/src/main/java/se/leap/bitmaskclient/tethering/TetheringStateManager.java
@@ -19,7 +19,6 @@ package se.leap.bitmaskclient.tethering;
import android.content.Context;
import android.content.IntentFilter;
import android.support.annotation.VisibleForTesting;
-import android.util.Log;
import java.net.Inet4Address;
import java.net.InterfaceAddress;
@@ -72,26 +71,68 @@ public class TetheringStateManager {
updateBluetoothTetheringState();
}
+ static void updateWifiTetheringState() {
+ WifiManagerWrapper manager = getInstance().wifiManager;
+ try {
+ TetheringObservable.setWifiTethering(manager.isWifiAPEnabled(), getWifiAddressRange(), getWlanInterfaceName());
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ }
+
+ static void updateUsbTetheringState() {
+ TetheringObservable.setUsbTethering(isUsbTetheringEnabled(), getUsbAddressRange(), getUsbInterfaceName());
+ }
+
+ static void updateBluetoothTetheringState() {
+ TetheringObservable.setBluetoothTethering(isBluetoothTetheringEnabled());
+ }
+
+ private static String getWifiAddressRange() {
+ String interfaceAddress = getInterfaceAddress(getWlanInterface());
+ return getAddressRange(interfaceAddress);
+ }
+
+ private static String getUsbAddressRange() {
+ String interfaceAddress = getInterfaceAddress(getUsbInterface());
+ return getAddressRange(interfaceAddress);
+ }
+
+ private static String getWlanInterfaceName() {
+ return getInterfaceName(getWlanInterface());
+ }
- private static boolean getUsbTetheringState() {
+ private static String getUsbInterfaceName() {
+ return getInterfaceName(getUsbInterface());
+ }
+
+ private static NetworkInterface getWlanInterface() {
+ return getNetworkInterface(new String[]{"wlan", "eth"});
+ }
+
+ private static NetworkInterface getUsbInterface() {
+ return getNetworkInterface(new String[]{"rndis", "usb"});
+ }
+
+ private static boolean isBluetoothTetheringEnabled() {
+ StringBuilder log = new StringBuilder();
+ boolean hasBtPan = false;
try {
- for(Enumeration<NetworkInterface> en = NetworkInterface.getNetworkInterfaces(); en.hasMoreElements();) {
- NetworkInterface networkInterface = en.nextElement();
- if(!networkInterface.isLoopback()){
- if(networkInterface.getName().contains("rndis") || networkInterface.getName().contains("usb")){
- return true;
- }
- }
- }
- } catch(Exception e){
+ hasBtPan = Cmd.runBlockingCmd(new String[] {"ifconfig bt-pan"}, log) == 0;
+ //Log.d(TAG, "ifconfig result: " + log.toString());
+ } catch (Exception e) {
e.printStackTrace();
}
+ return hasBtPan;
- return false;
}
- public static String getWifiAddressRange() {
- String interfaceAddress = getWifiInterfaceAddress();
+ private static boolean isUsbTetheringEnabled() {
+ return getUsbInterface() != null;
+ }
+
+ @VisibleForTesting
+ static String getAddressRange(String interfaceAddress) {
if (interfaceAddress.split("\\.").length == 4) {
String result = interfaceAddress.substring(0, interfaceAddress.lastIndexOf("."));
result = result + ".0/24";
@@ -100,72 +141,42 @@ public class TetheringStateManager {
return "";
}
- @VisibleForTesting
- static String getWifiInterfaceAddress() {
- NetworkInterface networkInterface = getWlanInterface();
+ private static String getInterfaceAddress(NetworkInterface networkInterface) {
if (networkInterface != null) {
- List<InterfaceAddress> ifaceAddresses = networkInterface.getInterfaceAddresses();
- for (InterfaceAddress ifaceAddres : ifaceAddresses) {
- if (ifaceAddres.getAddress() instanceof Inet4Address) {
- return ifaceAddres.getAddress().getHostAddress();
- }
- }
+ List<InterfaceAddress> ifaceAddresses = networkInterface.getInterfaceAddresses();
+ for (InterfaceAddress ifaceAddres : ifaceAddresses) {
+ if (ifaceAddres.getAddress() instanceof Inet4Address) {
+ return ifaceAddres.getAddress().getHostAddress();
+ }
+ }
}
return "";
}
- private static String getWifiInterfaceName() {
- NetworkInterface networkInterface = getWlanInterface();
+ private static String getInterfaceName(NetworkInterface networkInterface) {
if (networkInterface != null) {
return networkInterface.getName();
}
return "";
}
- private static NetworkInterface getWlanInterface() {
+ private static NetworkInterface getNetworkInterface(String[] interfaceNames) {
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;
+ for (String interfaceName : interfaceNames) {
+ if (networkInterface.getName().contains(interfaceName)) {
+ return networkInterface;
+ }
}
}
}
} catch(Exception e){
e.printStackTrace();
}
- return null;
- }
-
- private static boolean isBluetoothTetheringEnabled() {
- StringBuilder log = new StringBuilder();
- boolean hasBtPan = false;
- try {
- hasBtPan = Cmd.runBlockingCmd(new String[] {"ifconfig bt-pan"}, log) == 0;
- //Log.d(TAG, "ifconfig result: " + log.toString());
- } catch (Exception e) {
- e.printStackTrace();
- }
- return hasBtPan;
-
- }
- static void updateUsbTetheringState() {
- TetheringObservable.setUsbTethering(getUsbTetheringState());
- }
-
- static void updateBluetoothTetheringState() {
- TetheringObservable.setBluetoothTethering(isBluetoothTetheringEnabled());
- }
-
- static void updateWifiTetheringState() {
- WifiManagerWrapper manager = getInstance().wifiManager;
- try {
- TetheringObservable.setWifiTethering(manager.isWifiAPEnabled(), getWifiAddressRange(), getWifiInterfaceName());
- } catch (Exception e) {
- e.printStackTrace();
- }
+ return null;
}
}