mirror of
https://code.briarproject.org/briar/briar.git
synced 2026-02-12 02:39:05 +01:00
Compare commits
3 Commits
1592-image
...
network-lo
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
f25b16e680 | ||
|
|
467fdb6468 | ||
|
|
c0840dc332 |
@@ -6,6 +6,7 @@ import android.content.Intent;
|
||||
import android.content.IntentFilter;
|
||||
import android.net.ConnectivityManager;
|
||||
import android.net.NetworkInfo;
|
||||
import android.os.Bundle;
|
||||
|
||||
import org.briarproject.bramble.api.nullsafety.NotNullByDefault;
|
||||
import org.briarproject.bramble.api.plugin.Backoff;
|
||||
@@ -19,10 +20,15 @@ import javax.annotation.Nullable;
|
||||
import static android.content.Context.CONNECTIVITY_SERVICE;
|
||||
import static android.net.ConnectivityManager.CONNECTIVITY_ACTION;
|
||||
import static android.net.ConnectivityManager.TYPE_WIFI;
|
||||
import static android.net.wifi.WifiManager.EXTRA_WIFI_STATE;
|
||||
import static java.util.logging.Level.INFO;
|
||||
import static org.briarproject.bramble.util.AndroidUtils.logNetworkState;
|
||||
|
||||
@NotNullByDefault
|
||||
class AndroidLanTcpPlugin extends LanTcpPlugin {
|
||||
|
||||
private static final String WIFI_AP_STATE_ACTION =
|
||||
"android.net.wifi.WIFI_AP_STATE_CHANGED";
|
||||
private static final Logger LOG =
|
||||
Logger.getLogger(AndroidLanTcpPlugin.class.getName());
|
||||
|
||||
@@ -44,8 +50,11 @@ class AndroidLanTcpPlugin extends LanTcpPlugin {
|
||||
running = true;
|
||||
// Register to receive network status events
|
||||
networkStateReceiver = new NetworkStateReceiver();
|
||||
IntentFilter filter = new IntentFilter(CONNECTIVITY_ACTION);
|
||||
IntentFilter filter = new IntentFilter();
|
||||
filter.addAction(CONNECTIVITY_ACTION);
|
||||
filter.addAction(WIFI_AP_STATE_ACTION);
|
||||
appContext.registerReceiver(networkStateReceiver, filter);
|
||||
if (LOG.isLoggable(INFO)) logNetworkState(appContext, LOG);
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -61,10 +70,27 @@ class AndroidLanTcpPlugin extends LanTcpPlugin {
|
||||
@Override
|
||||
public void onReceive(Context ctx, Intent i) {
|
||||
if (!running) return;
|
||||
if (LOG.isLoggable(INFO)) {
|
||||
if (CONNECTIVITY_ACTION.equals(i.getAction())) {
|
||||
LOG.info("Connectivity change");
|
||||
Bundle extras = i.getExtras();
|
||||
if (extras != null) {
|
||||
LOG.info("Extras:");
|
||||
for (String key : extras.keySet())
|
||||
LOG.info("\t" + key + ": " + extras.get(key));
|
||||
}
|
||||
} else if (WIFI_AP_STATE_ACTION.equals(i.getAction())) {
|
||||
int state = i.getIntExtra(EXTRA_WIFI_STATE, 0);
|
||||
if (state == 13) LOG.info("Wifi AP enabled");
|
||||
else LOG.info("Wifi AP state " + state);
|
||||
}
|
||||
logNetworkState(appContext, LOG);
|
||||
}
|
||||
Object o = ctx.getSystemService(CONNECTIVITY_SERVICE);
|
||||
ConnectivityManager cm = (ConnectivityManager) o;
|
||||
NetworkInfo net = cm.getActiveNetworkInfo();
|
||||
if (net != null && net.getType() == TYPE_WIFI && net.isConnected()) {
|
||||
if (net != null && net.getType() == TYPE_WIFI
|
||||
&& net.isConnected()) {
|
||||
LOG.info("Connected to Wi-Fi");
|
||||
if (socket == null || socket.isClosed()) bind();
|
||||
} else {
|
||||
|
||||
@@ -716,8 +716,7 @@ class TorPlugin implements DuplexPlugin, EventHandler, EventListener {
|
||||
boolean online = net != null && net.isConnected();
|
||||
boolean wifi = online && net.getType() == TYPE_WIFI;
|
||||
String country = locationUtils.getCurrentCountry();
|
||||
boolean blocked = TorNetworkMetadata.isTorProbablyBlocked(
|
||||
country);
|
||||
boolean blocked = TorNetworkMetadata.isTorProbablyBlocked(country);
|
||||
Settings s = callback.getSettings();
|
||||
int network = s.getInt(PREF_TOR_NETWORK, PREF_TOR_NETWORK_ALWAYS);
|
||||
|
||||
|
||||
@@ -1,18 +1,41 @@
|
||||
package org.briarproject.bramble.util;
|
||||
|
||||
import android.annotation.SuppressLint;
|
||||
import android.bluetooth.BluetoothAdapter;
|
||||
import android.content.Context;
|
||||
import android.net.ConnectivityManager;
|
||||
import android.net.Network;
|
||||
import android.net.NetworkInfo;
|
||||
import android.net.wifi.WifiInfo;
|
||||
import android.net.wifi.WifiManager;
|
||||
import android.os.Build;
|
||||
import android.provider.Settings;
|
||||
|
||||
import java.io.File;
|
||||
import java.net.InetAddress;
|
||||
import java.net.InterfaceAddress;
|
||||
import java.net.NetworkInterface;
|
||||
import java.net.SocketException;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.Collection;
|
||||
import java.util.List;
|
||||
import java.util.logging.Logger;
|
||||
|
||||
import javax.annotation.Nullable;
|
||||
|
||||
import static android.content.Context.CONNECTIVITY_SERVICE;
|
||||
import static android.content.Context.MODE_PRIVATE;
|
||||
import static android.content.Context.WIFI_SERVICE;
|
||||
import static android.os.Build.VERSION.SDK_INT;
|
||||
import static java.net.NetworkInterface.getNetworkInterfaces;
|
||||
import static java.util.Collections.list;
|
||||
import static java.util.logging.Level.INFO;
|
||||
import static java.util.logging.Level.WARNING;
|
||||
import static org.briarproject.bramble.util.StringUtils.ipToString;
|
||||
import static org.briarproject.bramble.util.StringUtils.toHexString;
|
||||
|
||||
@SuppressLint("HardwareIds")
|
||||
public class AndroidUtils {
|
||||
|
||||
// Fake Bluetooth address returned by BluetoothAdapter on API 23 and later
|
||||
@@ -23,7 +46,7 @@ public class AndroidUtils {
|
||||
@SuppressWarnings("deprecation")
|
||||
public static Collection<String> getSupportedArchitectures() {
|
||||
List<String> abis = new ArrayList<>();
|
||||
if (Build.VERSION.SDK_INT >= 21) {
|
||||
if (SDK_INT >= 21) {
|
||||
abis.addAll(Arrays.asList(Build.SUPPORTED_ABIS));
|
||||
} else {
|
||||
abis.add(Build.CPU_ABI);
|
||||
@@ -67,4 +90,123 @@ public class AndroidUtils {
|
||||
public static File getReportDir(Context ctx) {
|
||||
return ctx.getDir(STORED_REPORTS, MODE_PRIVATE);
|
||||
}
|
||||
|
||||
public static void logNetworkState(Context ctx, Logger logger) {
|
||||
if (!logger.isLoggable(INFO)) return;
|
||||
|
||||
Object o = ctx.getSystemService(CONNECTIVITY_SERVICE);
|
||||
if (o == null) throw new AssertionError();
|
||||
ConnectivityManager cm = (ConnectivityManager) o;
|
||||
o = ctx.getApplicationContext().getSystemService(WIFI_SERVICE);
|
||||
if (o == null) throw new AssertionError();
|
||||
WifiManager wm = (WifiManager) o;
|
||||
|
||||
StringBuilder s = new StringBuilder();
|
||||
logWifiInfo(s, wm.getConnectionInfo());
|
||||
logNetworkInfo(s, cm.getActiveNetworkInfo(), true);
|
||||
if (SDK_INT >= 21) {
|
||||
for (Network network : cm.getAllNetworks())
|
||||
logNetworkInfo(s, cm.getNetworkInfo(network), false);
|
||||
} else {
|
||||
for (NetworkInfo info : cm.getAllNetworkInfo())
|
||||
logNetworkInfo(s, info, false);
|
||||
}
|
||||
try {
|
||||
for (NetworkInterface iface : list(getNetworkInterfaces()))
|
||||
logNetworkInterface(s, iface);
|
||||
} catch (SocketException e) {
|
||||
logger.log(WARNING, e.toString(), e);
|
||||
}
|
||||
logger.log(INFO, s.toString());
|
||||
}
|
||||
|
||||
private static void logWifiInfo(StringBuilder s, @Nullable WifiInfo info) {
|
||||
if (info == null) {
|
||||
s.append("Wifi info: null\n");
|
||||
return;
|
||||
}
|
||||
s.append("Wifi info:\n");
|
||||
s.append("\tSSID: ").append(info.getSSID()).append("\n");
|
||||
s.append("\tBSSID: ").append(info.getBSSID()).append("\n");
|
||||
s.append("\tMAC address: ").append(info.getMacAddress()).append("\n");
|
||||
s.append("\tIP address: ")
|
||||
.append(ipToString(info.getIpAddress())).append("\n");
|
||||
s.append("\tSupplicant state: ")
|
||||
.append(info.getSupplicantState()).append("\n");
|
||||
s.append("\tNetwork ID: ").append(info.getNetworkId()).append("\n");
|
||||
s.append("\tLink speed: ").append(info.getLinkSpeed()).append("\n");
|
||||
s.append("\tRSSI: ").append(info.getRssi()).append("\n");
|
||||
if (info.getHiddenSSID()) s.append("\tHidden SSID\n");
|
||||
if (SDK_INT >= 21)
|
||||
s.append("\tFrequency: ").append(info.getFrequency()).append("\n");
|
||||
}
|
||||
|
||||
private static void logNetworkInfo(StringBuilder s,
|
||||
@Nullable NetworkInfo info, boolean active) {
|
||||
if (info == null) {
|
||||
if (active) s.append("Active network info: null\n");
|
||||
else s.append("Network info: null\n");
|
||||
return;
|
||||
}
|
||||
if (active) s.append("Active network info:\n");
|
||||
else s.append("Network info:\n");
|
||||
s.append("\tType: ").append(info.getTypeName())
|
||||
.append(" (").append(info.getType()).append(")\n");
|
||||
s.append("\tSubtype: ").append(info.getSubtypeName())
|
||||
.append(" (").append(info.getSubtype()).append(")\n");
|
||||
s.append("\tState: ").append(info.getState()).append("\n");
|
||||
s.append("\tDetailed state: ")
|
||||
.append(info.getDetailedState()).append("\n");
|
||||
s.append("\tReason: ").append(info.getReason()).append("\n");
|
||||
s.append("\tExtra info: ").append(info.getExtraInfo()).append("\n");
|
||||
if (info.isAvailable()) s.append("\tAvailable\n");
|
||||
if (info.isConnected()) s.append("\tConnected\n");
|
||||
if (info.isConnectedOrConnecting())
|
||||
s.append("\tConnected or connecting\n");
|
||||
if (info.isFailover()) s.append("\tFailover\n");
|
||||
if (info.isRoaming()) s.append("\tRoaming\n");
|
||||
}
|
||||
|
||||
private static void logNetworkInterface(StringBuilder s,
|
||||
NetworkInterface iface) throws SocketException {
|
||||
s.append("Network interface:\n");
|
||||
s.append("\tName: ").append(iface.getName()).append("\n");
|
||||
s.append("\tDisplay name: ")
|
||||
.append(iface.getDisplayName()).append("\n");
|
||||
s.append("\tHardware address: ")
|
||||
.append(hexOrNull(iface.getHardwareAddress())).append("\n");
|
||||
if (iface.isLoopback()) s.append("\tLoopback\n");
|
||||
if (iface.isPointToPoint()) s.append("\tPoint-to-point\n");
|
||||
if (iface.isVirtual()) s.append("\tVirtual\n");
|
||||
if (iface.isUp()) s.append("\tUp\n");
|
||||
if (SDK_INT >= 19)
|
||||
s.append("\tIndex: ").append(iface.getIndex()).append("\n");
|
||||
for (InterfaceAddress addr : iface.getInterfaceAddresses()) {
|
||||
s.append("\tInterface address:\n");
|
||||
logInetAddress(s, addr.getAddress());
|
||||
s.append("\t\tPrefix length: ")
|
||||
.append(addr.getNetworkPrefixLength()).append("\n");
|
||||
}
|
||||
}
|
||||
|
||||
private static void logInetAddress(StringBuilder s, InetAddress addr) {
|
||||
s.append("\t\tAddress: ")
|
||||
.append(hexOrNull(addr.getAddress())).append("\n");
|
||||
s.append("\t\tHost address: ")
|
||||
.append(addr.getHostAddress()).append("\n");
|
||||
if (addr.isLoopbackAddress()) s.append("\t\tLoopback\n");
|
||||
if (addr.isLinkLocalAddress()) s.append("\t\tLink-local\n");
|
||||
if (addr.isSiteLocalAddress()) s.append("\t\tSite-local\n");
|
||||
if (addr.isAnyLocalAddress()) s.append("\t\tAny local (wildcard)\n");
|
||||
if (addr.isMCNodeLocal()) s.append("\t\tMulticast node-local\n");
|
||||
if (addr.isMCLinkLocal()) s.append("\t\tMulticast link-local\n");
|
||||
if (addr.isMCSiteLocal()) s.append("\t\tMulticast site-local\n");
|
||||
if (addr.isMCOrgLocal()) s.append("\t\tMulticast org-local\n");
|
||||
if (addr.isMCGlobal()) s.append("\t\tMulticast global\n");
|
||||
}
|
||||
|
||||
@Nullable
|
||||
private static String hexOrNull(@Nullable byte[] b) {
|
||||
return b == null ? null : toHexString(b);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -146,6 +146,14 @@ public class StringUtils {
|
||||
return s.toString();
|
||||
}
|
||||
|
||||
public static String ipToString(int ip) {
|
||||
int ip1 = ip & 0xFF;
|
||||
int ip2 = (ip >> 8) & 0xFF;
|
||||
int ip3 = (ip >> 16) & 0xFF;
|
||||
int ip4 = (ip >> 24) & 0xFF;
|
||||
return ip1 + "." + ip2 + "." + ip3 + "." + ip4;
|
||||
}
|
||||
|
||||
public static String getRandomString(int length) {
|
||||
char[] c = new char[length];
|
||||
for (int i = 0; i < length; i++)
|
||||
|
||||
@@ -173,12 +173,7 @@ public class BriarReportPrimer implements ReportPrimer {
|
||||
WifiInfo wifiInfo = wm.getConnectionInfo();
|
||||
if (wifiInfo != null) {
|
||||
int ip = wifiInfo.getIpAddress(); // Nice API, Google
|
||||
int ip1 = ip & 0xFF;
|
||||
int ip2 = (ip >> 8) & 0xFF;
|
||||
int ip3 = (ip >> 16) & 0xFF;
|
||||
int ip4 = (ip >> 24) & 0xFF;
|
||||
String address = ip1 + "." + ip2 + "." + ip3 + "." + ip4;
|
||||
customData.put("Wi-Fi address", address);
|
||||
customData.put("Wi-Fi address", StringUtils.ipToString(ip));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user