Separate NetworkMonitor/framework portal URL
The framework cannot return URLs used by the updatable NetworkStack,
which may use configurable URLs, changing URLs, or mechanisms not
involving URLs to detect captive portals. NetworkMonitor has already
been using random fallback URLs for a while that do not match the value
returned by ConnectivityManager#getCaptivePortalServerUrl.
With this change, the default value returned by the framework is
configured in framework resources as
config_networkDefaultCaptivePortalServerUrl. NetworkMonitor behavior may
change as it is an updatable component, but the current URL is
configured in NetworkMonitor resources as
config_captive_portal_http_url.
Test: flashed, booted, WiFi and captive portal working
Test: ConnectivityManager#getCaptivePortalServerUrl returns correct
value.
Bug: 127908503
Change-Id: I371dedc5b22efa909d7fd58e1ebe9b8aaced9780
This commit is contained in:
@@ -1345,12 +1345,15 @@ public class ConnectivityManager {
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the URL that should be used for resolving whether a captive portal is present.
|
||||
* Gets a URL that can be used for resolving whether a captive portal is present.
|
||||
* 1. This URL should respond with a 204 response to a GET request to indicate no captive
|
||||
* portal is present.
|
||||
* 2. This URL must be HTTP as redirect responses are used to find captive portal
|
||||
* sign-in pages. Captive portals cannot respond to HTTPS requests with redirects.
|
||||
*
|
||||
* The system network validation may be using different strategies to detect captive portals,
|
||||
* so this method does not necessarily return a URL used by the system. It only returns a URL
|
||||
* that may be relevant for other components trying to detect captive portals.
|
||||
* @hide
|
||||
*/
|
||||
@SystemApi
|
||||
|
||||
@@ -302,6 +302,15 @@
|
||||
Settings.Global.NETWORK_AVOID_BAD_WIFI. This is the default value of that setting. -->
|
||||
<integer translatable="false" name="config_networkAvoidBadWifi">1</integer>
|
||||
|
||||
<!-- The URL returned by ConnectivityManager#getCaptivePortalServerUrl. The actual returned
|
||||
value is controlled by Settings.Global.CAPTIVE_PORTAL_HTTP_URL. This is the default value
|
||||
used if that setting is unset.
|
||||
This is *NOT* a URL that will always be used by the system network validation to detect
|
||||
captive portals: NetworkMonitor may use different strategies and will not necessarily use
|
||||
this URL. NetworkMonitor behaviour should be configured with NetworkStack resource overlays
|
||||
instead. -->
|
||||
<string translatable="false" name="config_networkDefaultCaptivePortalServerUrl">http://connectivitycheck.gstatic.com/generate_204</string>
|
||||
|
||||
<!-- If the hardware supports specially marking packets that caused a wakeup of the
|
||||
main CPU, set this value to the mark used. -->
|
||||
<integer name="config_networkWakeupPacketMark">0</integer>
|
||||
|
||||
@@ -1945,6 +1945,7 @@
|
||||
<java-symbol type="integer" name="config_networkNotifySwitchType" />
|
||||
<java-symbol type="array" name="config_networkNotifySwitches" />
|
||||
<java-symbol type="integer" name="config_networkAvoidBadWifi" />
|
||||
<java-symbol type="string" name="config_networkDefaultCaptivePortalServerUrl" />
|
||||
<java-symbol type="integer" name="config_networkWakeupPacketMark" />
|
||||
<java-symbol type="integer" name="config_networkWakeupPacketMask" />
|
||||
<java-symbol type="bool" name="config_apfDrop802_3Frames" />
|
||||
|
||||
5
packages/NetworkStack/res/values/config.xml
Normal file
5
packages/NetworkStack/res/values/config.xml
Normal file
@@ -0,0 +1,5 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<!-- Captive portal http url -->
|
||||
<string name="config_captive_portal_http_url" translatable="false">http://connectivitycheck.gstatic.com/generate_204</string>
|
||||
</resources>
|
||||
@@ -83,6 +83,7 @@ import com.android.internal.annotations.VisibleForTesting;
|
||||
import com.android.internal.util.RingBufferIndices;
|
||||
import com.android.internal.util.State;
|
||||
import com.android.internal.util.StateMachine;
|
||||
import com.android.networkstack.R;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.net.HttpURLConnection;
|
||||
@@ -1710,9 +1711,15 @@ public class NetworkMonitor extends StateMachine {
|
||||
|
||||
/**
|
||||
* Get the captive portal server HTTP URL that is configured on the device.
|
||||
*
|
||||
* NetworkMonitor does not use {@link ConnectivityManager#getCaptivePortalServerUrl()} as
|
||||
* it has its own updatable strategies to detect captive portals. The framework only advises
|
||||
* on one URL that can be used, while NetworkMonitor may implement more complex logic.
|
||||
*/
|
||||
public String getCaptivePortalServerHttpUrl(Context context) {
|
||||
return NetworkMonitorUtils.getCaptivePortalServerHttpUrl(context);
|
||||
final String defaultUrl =
|
||||
context.getResources().getString(R.string.config_captive_portal_http_url);
|
||||
return NetworkMonitorUtils.getCaptivePortalServerHttpUrl(context, defaultUrl);
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -6685,7 +6685,9 @@ public class ConnectivityService extends IConnectivityManager.Stub
|
||||
@Override
|
||||
public String getCaptivePortalServerUrl() {
|
||||
enforceConnectivityInternalPermission();
|
||||
return NetworkMonitorUtils.getCaptivePortalServerHttpUrl(mContext);
|
||||
final String defaultUrl = mContext.getResources().getString(
|
||||
R.string.config_networkDefaultCaptivePortalServerUrl);
|
||||
return NetworkMonitorUtils.getCaptivePortalServerHttpUrl(mContext, defaultUrl);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -44,18 +44,14 @@ public class NetworkMonitorUtils {
|
||||
public static final String PERMISSION_ACCESS_NETWORK_CONDITIONS =
|
||||
"android.permission.ACCESS_NETWORK_CONDITIONS";
|
||||
|
||||
// TODO: once the URL is a resource overlay, remove and have the resource define the default
|
||||
private static final String DEFAULT_HTTP_URL =
|
||||
"http://connectivitycheck.gstatic.com/generate_204";
|
||||
|
||||
/**
|
||||
* Get the captive portal server HTTP URL that is configured on the device.
|
||||
*/
|
||||
public static String getCaptivePortalServerHttpUrl(Context context) {
|
||||
public static String getCaptivePortalServerHttpUrl(Context context, String defaultUrl) {
|
||||
final String settingUrl = Settings.Global.getString(
|
||||
context.getContentResolver(),
|
||||
Settings.Global.CAPTIVE_PORTAL_HTTP_URL);
|
||||
return settingUrl != null ? settingUrl : DEFAULT_HTTP_URL;
|
||||
return settingUrl != null ? settingUrl : defaultUrl;
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
Reference in New Issue
Block a user