Api review: change updateFirewallRule to setUidFirewallRule
Bug: 218494748 Test: TH Change-Id: I52a02ebe109b687359f579c16fded4af3c9cd242 Merged-In: I52a02ebe109b687359f579c16fded4af3c9cd242
This commit is contained in:
@@ -34,6 +34,9 @@ import static android.net.ConnectivityManager.BLOCKED_METERED_REASON_MASK;
|
||||
import static android.net.ConnectivityManager.BLOCKED_REASON_LOCKDOWN_VPN;
|
||||
import static android.net.ConnectivityManager.BLOCKED_REASON_NONE;
|
||||
import static android.net.ConnectivityManager.CONNECTIVITY_ACTION;
|
||||
import static android.net.ConnectivityManager.FIREWALL_RULE_ALLOW;
|
||||
import static android.net.ConnectivityManager.FIREWALL_RULE_DEFAULT;
|
||||
import static android.net.ConnectivityManager.FIREWALL_RULE_DENY;
|
||||
import static android.net.ConnectivityManager.TYPE_BLUETOOTH;
|
||||
import static android.net.ConnectivityManager.TYPE_ETHERNET;
|
||||
import static android.net.ConnectivityManager.TYPE_MOBILE;
|
||||
@@ -11218,17 +11221,43 @@ public class ConnectivityService extends IConnectivityManager.Stub
|
||||
}
|
||||
|
||||
@Override
|
||||
public void updateFirewallRule(final int chain, final int uid, final boolean allow) {
|
||||
public void setUidFirewallRule(final int chain, final int uid, final int rule) {
|
||||
enforceNetworkStackOrSettingsPermission();
|
||||
|
||||
// There are only two type of firewall rule: FIREWALL_RULE_ALLOW or FIREWALL_RULE_DENY
|
||||
int firewallRule = getFirewallRuleType(chain, rule);
|
||||
|
||||
if (firewallRule != FIREWALL_RULE_ALLOW && firewallRule != FIREWALL_RULE_DENY) {
|
||||
throw new IllegalArgumentException("setUidFirewallRule with invalid rule: " + rule);
|
||||
}
|
||||
|
||||
try {
|
||||
mBpfNetMaps.setUidRule(chain, uid,
|
||||
allow ? INetd.FIREWALL_RULE_ALLOW : INetd.FIREWALL_RULE_DENY);
|
||||
mBpfNetMaps.setUidRule(chain, uid, firewallRule);
|
||||
} catch (ServiceSpecificException e) {
|
||||
throw new IllegalStateException(e);
|
||||
}
|
||||
}
|
||||
|
||||
private int getFirewallRuleType(int chain, int rule) {
|
||||
final int defaultRule;
|
||||
switch (chain) {
|
||||
case ConnectivityManager.FIREWALL_CHAIN_STANDBY:
|
||||
defaultRule = FIREWALL_RULE_ALLOW;
|
||||
break;
|
||||
case ConnectivityManager.FIREWALL_CHAIN_DOZABLE:
|
||||
case ConnectivityManager.FIREWALL_CHAIN_POWERSAVE:
|
||||
case ConnectivityManager.FIREWALL_CHAIN_RESTRICTED:
|
||||
case ConnectivityManager.FIREWALL_CHAIN_LOW_POWER_STANDBY:
|
||||
defaultRule = FIREWALL_RULE_DENY;
|
||||
break;
|
||||
default:
|
||||
throw new IllegalArgumentException("Unsupported firewall chain: " + chain);
|
||||
}
|
||||
if (rule == FIREWALL_RULE_DEFAULT) rule = defaultRule;
|
||||
|
||||
return rule;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setFirewallChainEnabled(final int chain, final boolean enable) {
|
||||
enforceNetworkStackOrSettingsPermission();
|
||||
|
||||
Reference in New Issue
Block a user