Skip to content

Commit a150003

Browse files
committed
Sync latest NetGuard changes
1 parent 33c2d57 commit a150003

1 file changed

Lines changed: 41 additions & 0 deletions

File tree

app/src/main/java/eu/faircode/netguard/ServiceSinkhole.java

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -106,13 +106,16 @@
106106
import java.net.Inet6Address;
107107
import java.net.InetAddress;
108108
import java.net.InetSocketAddress;
109+
import java.net.InterfaceAddress;
110+
import java.net.NetworkInterface;
109111
import java.net.Socket;
110112
import java.net.URL;
111113
import java.net.UnknownHostException;
112114
import java.util.ArrayList;
113115
import java.util.Collections;
114116
import java.util.Comparator;
115117
import java.util.Date;
118+
import java.util.Enumeration;
116119
import java.util.HashMap;
117120
import java.util.List;
118121
import java.util.Map;
@@ -131,6 +134,7 @@ public class ServiceSinkhole extends VpnService {
131134

132135
private boolean registeredUser = false;
133136
private boolean registeredIdleState = false;
137+
private boolean registeredApState = false;
134138
private boolean registeredConnectivityChanged = false;
135139
private boolean registeredPackageChanged = false;
136140

@@ -1490,6 +1494,24 @@ private Builder getBuilder(List<Rule> listAllowed, List<Rule> listRule) {
14901494
listExclude.add(new IPUtil.CIDR("192.168.44.0", 24));
14911495
// Wi-Fi direct 192.168.49.x
14921496
listExclude.add(new IPUtil.CIDR("192.168.49.0", 24));
1497+
1498+
try {
1499+
Enumeration<NetworkInterface> nis = NetworkInterface.getNetworkInterfaces();
1500+
if (nis != null)
1501+
while (nis.hasMoreElements()) {
1502+
NetworkInterface ni = nis.nextElement();
1503+
if (ni != null && !ni.isLoopback() && ni.isUp() &&
1504+
ni.getName() != null && ni.getName().startsWith("ap_br_wlan")) {
1505+
List<InterfaceAddress> ias = ni.getInterfaceAddresses();
1506+
if (ias != null)
1507+
for (InterfaceAddress ia : ias)
1508+
if (ia.getAddress() instanceof Inet4Address)
1509+
listExclude.add(new IPUtil.CIDR(ia.getAddress().getHostAddress(), 24));
1510+
}
1511+
}
1512+
} catch (Throwable ex) {
1513+
Log.e(TAG, ex.toString());
1514+
}
14931515
}
14941516

14951517
if (lan) {
@@ -2445,6 +2467,16 @@ public void onReceive(Context context, Intent intent) {
24452467
}
24462468
};
24472469

2470+
private BroadcastReceiver apStateReceiver = new BroadcastReceiver() {
2471+
@Override
2472+
@TargetApi(Build.VERSION_CODES.M)
2473+
public void onReceive(Context context, Intent intent) {
2474+
Log.i(TAG, "Received " + intent);
2475+
Util.logExtras(intent);
2476+
reload("AP state changed", ServiceSinkhole.this, false);
2477+
}
2478+
};
2479+
24482480
private BroadcastReceiver connectivityChangedReceiver = new BroadcastReceiver() {
24492481
@Override
24502482
public void onReceive(Context context, Intent intent) {
@@ -2813,6 +2845,11 @@ public void onCreate() {
28132845
registeredIdleState = true;
28142846
}
28152847

2848+
IntentFilter ifAp = new IntentFilter();
2849+
ifAp.addAction("android.net.wifi.WIFI_AP_STATE_CHANGED");
2850+
ContextCompat.registerReceiver(this, apStateReceiver, ifAp, ContextCompat.RECEIVER_NOT_EXPORTED);
2851+
registeredApState = true;
2852+
28162853
// Listen for added/removed applications
28172854
IntentFilter ifPackage = new IntentFilter();
28182855
ifPackage.addAction(Intent.ACTION_PACKAGE_ADDED);
@@ -3172,6 +3209,10 @@ public void onDestroy() {
31723209
unregisterReceiver(idleStateReceiver);
31733210
registeredIdleState = false;
31743211
}
3212+
if (registeredApState) {
3213+
unregisterReceiver(apStateReceiver);
3214+
registeredApState = false;
3215+
}
31753216
if (registeredPackageChanged) {
31763217
unregisterReceiver(packageChangedReceiver);
31773218
registeredPackageChanged = false;

0 commit comments

Comments
 (0)