From e67c55d2d39fea60ee06ca14ca7b61ba638b7f2a Mon Sep 17 00:00:00 2001 From: cyBerta Date: Wed, 8 Jan 2020 05:06:23 +0100 Subject: implement bluetooth tethering detection, refactor TetheringObservable --- .../tethering/TetheringObservable.java | 50 ++++++++++++++++++++++ 1 file changed, 50 insertions(+) create mode 100644 app/src/main/java/se/leap/bitmaskclient/tethering/TetheringObservable.java (limited to 'app/src/main/java/se/leap/bitmaskclient/tethering/TetheringObservable.java') diff --git a/app/src/main/java/se/leap/bitmaskclient/tethering/TetheringObservable.java b/app/src/main/java/se/leap/bitmaskclient/tethering/TetheringObservable.java new file mode 100644 index 00000000..594258bf --- /dev/null +++ b/app/src/main/java/se/leap/bitmaskclient/tethering/TetheringObservable.java @@ -0,0 +1,50 @@ +package se.leap.bitmaskclient.tethering; + +import java.util.Observable; + +public class TetheringObservable extends Observable { + private static TetheringObservable instance; + + private boolean isWifiTetheringEnabled; + private boolean isUsbTetheringEnabled; + private boolean isBluetoothTetheringEnabled; + + private TetheringObservable() { } + + public static TetheringObservable getInstance() { + if (instance == null) { + instance = new TetheringObservable(); + } + return instance; + } + + static void setWifiTethering(boolean enabled) { + getInstance().isWifiTetheringEnabled = enabled; + getInstance().setChanged(); + getInstance().notifyObservers(); + } + + static void setUsbTethering(boolean enabled) { + getInstance().isUsbTetheringEnabled = enabled; + getInstance().setChanged(); + getInstance().notifyObservers(); + } + + static void setBluetoothTethering(boolean enabled) { + getInstance().isBluetoothTetheringEnabled = enabled; + getInstance().setChanged(); + getInstance().notifyObservers(); + } + + public boolean isBluetoothTetheringEnabled() { + return isBluetoothTetheringEnabled; + } + + public boolean isUsbTetheringEnabled() { + return isUsbTetheringEnabled; + } + + public boolean isWifiTetheringEnabled() { + return isWifiTetheringEnabled; + } +} -- cgit v1.2.3 From 2ff2358861bcd0c05586f972724ef76e5a67060c Mon Sep 17 00:00:00 2001 From: cyBerta Date: Fri, 10 Jan 2020 03:11:39 +0100 Subject: add some copyright headers --- .../bitmaskclient/tethering/TetheringObservable.java | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) (limited to 'app/src/main/java/se/leap/bitmaskclient/tethering/TetheringObservable.java') diff --git a/app/src/main/java/se/leap/bitmaskclient/tethering/TetheringObservable.java b/app/src/main/java/se/leap/bitmaskclient/tethering/TetheringObservable.java index 594258bf..9ea9160f 100644 --- a/app/src/main/java/se/leap/bitmaskclient/tethering/TetheringObservable.java +++ b/app/src/main/java/se/leap/bitmaskclient/tethering/TetheringObservable.java @@ -1,3 +1,19 @@ +/** + * Copyright (c) 2020 LEAP Encryption Access Project and contributers + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ package se.leap.bitmaskclient.tethering; import java.util.Observable; -- cgit v1.2.3 From cade04a80ac91d7a4d9ea839fec75aff3f932651 Mon Sep 17 00:00:00 2001 From: cyberta Date: Sat, 25 Jan 2020 11:20:48 -0600 Subject: implement tethering firewall rules pt.1 --- .../tethering/TetheringObservable.java | 24 +++++++++++++--------- 1 file changed, 14 insertions(+), 10 deletions(-) (limited to 'app/src/main/java/se/leap/bitmaskclient/tethering/TetheringObservable.java') diff --git a/app/src/main/java/se/leap/bitmaskclient/tethering/TetheringObservable.java b/app/src/main/java/se/leap/bitmaskclient/tethering/TetheringObservable.java index 9ea9160f..fc06ee12 100644 --- a/app/src/main/java/se/leap/bitmaskclient/tethering/TetheringObservable.java +++ b/app/src/main/java/se/leap/bitmaskclient/tethering/TetheringObservable.java @@ -21,11 +21,11 @@ import java.util.Observable; public class TetheringObservable extends Observable { private static TetheringObservable instance; - private boolean isWifiTetheringEnabled; - private boolean isUsbTetheringEnabled; - private boolean isBluetoothTetheringEnabled; + private TetheringState tetheringState; - private TetheringObservable() { } + private TetheringObservable() { + tetheringState = new TetheringState(); + } public static TetheringObservable getInstance() { if (instance == null) { @@ -35,32 +35,36 @@ public class TetheringObservable extends Observable { } static void setWifiTethering(boolean enabled) { - getInstance().isWifiTetheringEnabled = enabled; + getInstance().tetheringState.isWifiTetheringEnabled = enabled; getInstance().setChanged(); getInstance().notifyObservers(); } static void setUsbTethering(boolean enabled) { - getInstance().isUsbTetheringEnabled = enabled; + getInstance().tetheringState.isUsbTetheringEnabled = enabled; getInstance().setChanged(); getInstance().notifyObservers(); } static void setBluetoothTethering(boolean enabled) { - getInstance().isBluetoothTetheringEnabled = enabled; + getInstance().tetheringState.isBluetoothTetheringEnabled = enabled; getInstance().setChanged(); getInstance().notifyObservers(); } public boolean isBluetoothTetheringEnabled() { - return isBluetoothTetheringEnabled; + return tetheringState.isBluetoothTetheringEnabled; } public boolean isUsbTetheringEnabled() { - return isUsbTetheringEnabled; + return tetheringState.isUsbTetheringEnabled; } public boolean isWifiTetheringEnabled() { - return isWifiTetheringEnabled; + return tetheringState.isWifiTetheringEnabled; + } + + public TetheringState getTetheringState() { + return tetheringState; } } -- cgit v1.2.3 From 20f906ef16d10d7f69a7355bd590ae99cb64723b Mon Sep 17 00:00:00 2001 From: cyberta Date: Sat, 25 Jan 2020 14:40:13 -0600 Subject: add and remove configuring tethering rules on vpn start and shutdown --- .../java/se/leap/bitmaskclient/tethering/TetheringObservable.java | 4 ++++ 1 file changed, 4 insertions(+) (limited to 'app/src/main/java/se/leap/bitmaskclient/tethering/TetheringObservable.java') diff --git a/app/src/main/java/se/leap/bitmaskclient/tethering/TetheringObservable.java b/app/src/main/java/se/leap/bitmaskclient/tethering/TetheringObservable.java index fc06ee12..79c1ec6d 100644 --- a/app/src/main/java/se/leap/bitmaskclient/tethering/TetheringObservable.java +++ b/app/src/main/java/se/leap/bitmaskclient/tethering/TetheringObservable.java @@ -67,4 +67,8 @@ public class TetheringObservable extends Observable { public TetheringState getTetheringState() { return tetheringState; } + + public boolean hasAnyTetheringEnabled() { + return tetheringState.isBluetoothTetheringEnabled || tetheringState.isUsbTetheringEnabled || tetheringState.isWifiTetheringEnabled; + } } -- cgit v1.2.3 From 7fbea5459e59de1327f2c76a23f5940d67e4ae8d Mon Sep 17 00:00:00 2001 From: cyberta Date: Wed, 29 Jan 2020 02:55:25 -0600 Subject: implement wifi tethering --- .../tethering/TetheringObservable.java | 62 +++++++++++++++++----- 1 file changed, 48 insertions(+), 14 deletions(-) (limited to 'app/src/main/java/se/leap/bitmaskclient/tethering/TetheringObservable.java') diff --git a/app/src/main/java/se/leap/bitmaskclient/tethering/TetheringObservable.java b/app/src/main/java/se/leap/bitmaskclient/tethering/TetheringObservable.java index 79c1ec6d..b84f3494 100644 --- a/app/src/main/java/se/leap/bitmaskclient/tethering/TetheringObservable.java +++ b/app/src/main/java/se/leap/bitmaskclient/tethering/TetheringObservable.java @@ -34,22 +34,60 @@ public class TetheringObservable extends Observable { return instance; } - static void setWifiTethering(boolean enabled) { - getInstance().tetheringState.isWifiTetheringEnabled = enabled; - getInstance().setChanged(); - getInstance().notifyObservers(); + public static void allowVpnWifiTethering(boolean enabled) { + if (getInstance().tetheringState.isVpnWifiTetheringAllowed != enabled) { + getInstance().tetheringState.isVpnWifiTetheringAllowed = enabled; + getInstance().setChanged(); + getInstance().notifyObservers(); + } + } + + public static void allowVpnUsbTethering(boolean enabled) { + if (getInstance().tetheringState.isUsbTetheringEnabled != enabled) { + getInstance().tetheringState.isUsbTetheringEnabled = enabled; + getInstance().setChanged(); + getInstance().notifyObservers(); + } + } + + public static void allowVpnBluetoothTethering(boolean enabled) { + if (getInstance().tetheringState.isBluetoothTetheringEnabled != enabled) { + getInstance().tetheringState.isBluetoothTetheringEnabled = enabled; + getInstance().setChanged(); + getInstance().notifyObservers(); + } + } + + static void setWifiTethering(boolean enabled, String address, String interfaceName) { + if (getInstance().tetheringState.isWifiTetheringEnabled != enabled || + !getInstance().tetheringState.wifiInterface.equals(interfaceName) || + !getInstance().tetheringState.wifiAddress.equals(address)) { + getInstance().tetheringState.isWifiTetheringEnabled = enabled; + getInstance().tetheringState.wifiInterface = interfaceName; + getInstance().tetheringState.wifiAddress = address; + if ("".equals(address)) { + getInstance().tetheringState.lastWifiAddress = address; + } + getInstance().setChanged(); + getInstance().notifyObservers(); + } + } static void setUsbTethering(boolean enabled) { - getInstance().tetheringState.isUsbTetheringEnabled = enabled; - getInstance().setChanged(); - getInstance().notifyObservers(); + if (getInstance().tetheringState.isUsbTetheringEnabled != enabled) { + getInstance().tetheringState.isUsbTetheringEnabled = enabled; + getInstance().setChanged(); + getInstance().notifyObservers(); + } } static void setBluetoothTethering(boolean enabled) { - getInstance().tetheringState.isBluetoothTetheringEnabled = enabled; - getInstance().setChanged(); - getInstance().notifyObservers(); + if (getInstance().tetheringState.isBluetoothTetheringEnabled != enabled) { + getInstance().tetheringState.isBluetoothTetheringEnabled = enabled; + getInstance().setChanged(); + getInstance().notifyObservers(); + } } public boolean isBluetoothTetheringEnabled() { @@ -67,8 +105,4 @@ public class TetheringObservable extends Observable { public TetheringState getTetheringState() { return tetheringState; } - - public boolean hasAnyTetheringEnabled() { - return tetheringState.isBluetoothTetheringEnabled || tetheringState.isUsbTetheringEnabled || tetheringState.isWifiTetheringEnabled; - } } -- cgit v1.2.3 From 97a117cb3bbc022ee16008dea9896a8dfea7c681 Mon Sep 17 00:00:00 2001 From: cyberta Date: Thu, 30 Jan 2020 16:14:22 -0600 Subject: implement usb tethering --- .../tethering/TetheringObservable.java | 37 ++++++++++++++-------- 1 file changed, 23 insertions(+), 14 deletions(-) (limited to 'app/src/main/java/se/leap/bitmaskclient/tethering/TetheringObservable.java') diff --git a/app/src/main/java/se/leap/bitmaskclient/tethering/TetheringObservable.java b/app/src/main/java/se/leap/bitmaskclient/tethering/TetheringObservable.java index b84f3494..75d29417 100644 --- a/app/src/main/java/se/leap/bitmaskclient/tethering/TetheringObservable.java +++ b/app/src/main/java/se/leap/bitmaskclient/tethering/TetheringObservable.java @@ -16,6 +16,8 @@ */ package se.leap.bitmaskclient.tethering; +import android.support.annotation.NonNull; + import java.util.Observable; public class TetheringObservable extends Observable { @@ -43,40 +45,47 @@ public class TetheringObservable extends Observable { } public static void allowVpnUsbTethering(boolean enabled) { - if (getInstance().tetheringState.isUsbTetheringEnabled != enabled) { - getInstance().tetheringState.isUsbTetheringEnabled = enabled; + if (getInstance().tetheringState.isVpnUsbTetheringAllowed != enabled) { + getInstance().tetheringState.isVpnUsbTetheringAllowed = enabled; getInstance().setChanged(); getInstance().notifyObservers(); } } public static void allowVpnBluetoothTethering(boolean enabled) { - if (getInstance().tetheringState.isBluetoothTetheringEnabled != enabled) { - getInstance().tetheringState.isBluetoothTetheringEnabled = enabled; + if (getInstance().tetheringState.isVpnBluetoothTetheringAllowed != enabled) { + getInstance().tetheringState.isVpnBluetoothTetheringAllowed = enabled; getInstance().setChanged(); getInstance().notifyObservers(); } } - static void setWifiTethering(boolean enabled, String address, String interfaceName) { + static void setWifiTethering(boolean enabled, @NonNull String address, @NonNull String interfaceName) { if (getInstance().tetheringState.isWifiTetheringEnabled != enabled || !getInstance().tetheringState.wifiInterface.equals(interfaceName) || !getInstance().tetheringState.wifiAddress.equals(address)) { - getInstance().tetheringState.isWifiTetheringEnabled = enabled; - getInstance().tetheringState.wifiInterface = interfaceName; - getInstance().tetheringState.wifiAddress = address; - if ("".equals(address)) { - getInstance().tetheringState.lastWifiAddress = address; - } + TetheringState state = getInstance().tetheringState; + state.isWifiTetheringEnabled = enabled; + state.wifiInterface = interfaceName; + state.wifiAddress = address; + state.lastSeenWifiAddress = address.isEmpty() ? state.lastSeenWifiAddress : address; + state.lastSeenWifiInterface = interfaceName.isEmpty() ? state.lastSeenWifiInterface : interfaceName; getInstance().setChanged(); getInstance().notifyObservers(); } } - static void setUsbTethering(boolean enabled) { - if (getInstance().tetheringState.isUsbTetheringEnabled != enabled) { - getInstance().tetheringState.isUsbTetheringEnabled = enabled; + static void setUsbTethering(boolean enabled, @NonNull String address, @NonNull String interfaceName) { + if (getInstance().tetheringState.isUsbTetheringEnabled != enabled || + !getInstance().tetheringState.usbAddress.equals(address) || + !getInstance().tetheringState.usbInterface.equals(interfaceName)) { + TetheringState state = getInstance().tetheringState; + state.isUsbTetheringEnabled = enabled; + state.usbAddress = address; + state.usbInterface = interfaceName; + state.lastSeenUsbAddress = address.isEmpty() ? state.lastSeenUsbAddress : address; + state.lastSeenUsbInterface = interfaceName.isEmpty() ? state.lastSeenUsbInterface : interfaceName; getInstance().setChanged(); getInstance().notifyObservers(); } -- cgit v1.2.3