summaryrefslogtreecommitdiff
path: root/app/src/main/java/se/leap/bitmaskclient/eip
diff options
context:
space:
mode:
authorcyBerta <cyberta@riseup.net>2021-11-23 12:32:07 +0100
committercyBerta <cyberta@riseup.net>2021-11-23 12:32:07 +0100
commit9bf787465a3ae22c76249317496c8927b22ffdb4 (patch)
treefb37e1079a6aa19d027a38e024e0b5519eda7d52 /app/src/main/java/se/leap/bitmaskclient/eip
parentecbf65eeb79a0172b19881beb3805c8f3ebff132 (diff)
calculate and show gateway load related to transport
Diffstat (limited to 'app/src/main/java/se/leap/bitmaskclient/eip')
-rw-r--r--app/src/main/java/se/leap/bitmaskclient/eip/GatewaySelector.java9
-rw-r--r--app/src/main/java/se/leap/bitmaskclient/eip/GatewaysManager.java61
2 files changed, 36 insertions, 34 deletions
diff --git a/app/src/main/java/se/leap/bitmaskclient/eip/GatewaySelector.java b/app/src/main/java/se/leap/bitmaskclient/eip/GatewaySelector.java
index a48cc6d5..52030ce3 100644
--- a/app/src/main/java/se/leap/bitmaskclient/eip/GatewaySelector.java
+++ b/app/src/main/java/se/leap/bitmaskclient/eip/GatewaySelector.java
@@ -11,6 +11,7 @@ import java.util.Set;
import java.util.TreeMap;
import static se.leap.bitmaskclient.base.utils.ConfigHelper.getCurrentTimezone;
+import static se.leap.bitmaskclient.base.utils.ConfigHelper.timezoneDistance;
public class GatewaySelector {
private final static String TAG = GatewaySelector.class.getSimpleName();
@@ -67,12 +68,4 @@ public class GatewaySelector {
return offsets;
}
- private int timezoneDistance(int local_timezone, int remote_timezone) {
- // Distance along the numberline of Prime Meridian centric, assumes UTC-11 through UTC+12
- int dist = Math.abs(local_timezone - remote_timezone);
- // Farther than 12 timezones and it's shorter around the "back"
- if (dist > 12)
- dist = 12 - (dist - 12); // Well i'll be. Absolute values make equations do funny things.
- return dist;
- }
}
diff --git a/app/src/main/java/se/leap/bitmaskclient/eip/GatewaysManager.java b/app/src/main/java/se/leap/bitmaskclient/eip/GatewaysManager.java
index 92a6af5a..a0867605 100644
--- a/app/src/main/java/se/leap/bitmaskclient/eip/GatewaysManager.java
+++ b/app/src/main/java/se/leap/bitmaskclient/eip/GatewaysManager.java
@@ -149,54 +149,63 @@ public class GatewaysManager {
if (!locationNames.containsKey(name)) {
locationNames.put(name, locations.size());
- // fake values for now
- Random rand = new Random();
- double averageLoad = rand.nextDouble(); //location.averageLoad;
- Log.d(TAG, "getGatewayLocations - new averageLoad (" + name + " - " + gateway.getHost()+ "): " + averageLoad);
-
- Location location = new Location(
- name,
- averageLoad
- /*gateway.getFullness()*/,
- 1,
- gateway.getSupportedTransports(),
- name.equals(preferredCity)
- );
+ Location location = initLocation(name, gateway, preferredCity);
locations.add(location);
} else {
int index = locationNames.get(gateway.getName());
Location location = locations.get(index);
- location.averageLoad = (location.numberOfGateways * location.averageLoad + gateway.getFullness()) / (location.numberOfGateways + 1);
- Log.d(TAG, "getGatewayLocations - updated averageLoad: (" + gateway.getName() + " - " + gateway.getHost()+ "): " + location.averageLoad);
- location.numberOfGateways += 1;
- location.supportedTransports.addAll(gateway.getSupportedTransports());
+ updateLocation(location, gateway, OBFS4);
+ updateLocation(location, gateway, OPENVPN);
locations.set(index, location);
}
}
-
this.locations = locations;
return locations;
}
+ private Location initLocation(String name, Gateway gateway, String preferredCity) {
+ HashMap<Connection.TransportType, Double> averageLoadMap = new HashMap<>();
+ HashMap<Connection.TransportType, Integer> numberOfGatewaysMap = new HashMap<>();
+ if (gateway.getSupportedTransports().contains(OBFS4)) {
+ averageLoadMap.put(OBFS4, gateway.getFullness());
+ numberOfGatewaysMap.put(OBFS4, 1);
+ }
+ if (gateway.getSupportedTransports().contains(OPENVPN)) {
+ averageLoadMap.put(OPENVPN, gateway.getFullness());
+ numberOfGatewaysMap.put(OPENVPN, 1);
+ }
+ return new Location(
+ name,
+ averageLoadMap,
+ numberOfGatewaysMap,
+ name.equals(preferredCity));
+ }
+
+ private void updateLocation(Location location, Gateway gateway, Connection.TransportType transportType) {
+ if (gateway.getSupportedTransports().contains(transportType)) {
+ double averageLoad = location.getAverageLoad(transportType);
+ int numberOfGateways = location.getNumberOfGateways(transportType);
+ averageLoad = (numberOfGateways * averageLoad + gateway.getFullness()) / (numberOfGateways + 1);
+ numberOfGateways++;
+ location.setAverageLoad(transportType, averageLoad);
+ location.setNumberOfGateways(transportType, numberOfGateways);
+ }
+ }
+
@Nullable
public Location getLocation(String name) {
List <Location> locations = getGatewayLocations();
for (Location location : locations) {
- if (location.name.equals(name)) {
+ if (location.getName().equals(name)) {
return location;
}
}
return null;
}
- public Load getLoadForLocation(@Nullable String name) {
+ public Load getLoadForLocation(@Nullable String name, Connection.TransportType transportType) {
Location location = getLocation(name);
- if (location != null) {
- return Load.getLoadByValue(location.averageLoad);
- }
-
- // location not found
- return Load.UNKNOWN;
+ return Load.getLoadByValue(location.getAverageLoad(transportType));
}
private Gateway getGatewayFromTimezoneCalculation(int nClosest, Connection.TransportType transportType, @Nullable String city) {