Loading services/java/com/android/server/ConnectivityService.java +40 −25 Original line number Diff line number Diff line Loading @@ -3929,39 +3929,41 @@ public class ConnectivityService extends IConnectivityManager.Stub { /** * No connection was possible to the network. * This is NOT a warm sim. */ public static final int CMP_RESULT_CODE_NO_CONNECTION = 0; private static final int CMP_RESULT_CODE_NO_CONNECTION = 0; /** * A connection was made to the internet, all is well. * This is NOT a warm sim. */ public static final int CMP_RESULT_CODE_CONNECTABLE = 1; private static final int CMP_RESULT_CODE_CONNECTABLE = 1; /** * A connection was made but there was a redirection, we appear to be in walled garden. * This is an indication of a warm sim on a mobile network. * A connection was made but no dns server was available to resolve a name to address. * This is NOT a warm sim since provisioning network is supported. */ public static final int CMP_RESULT_CODE_REDIRECTED = 2; private static final int CMP_RESULT_CODE_NO_DNS = 2; /** * A connection was made but no dns server was available to resolve a name to address. * This is an indication of a warm sim on a mobile network. * A connection was made but could not open a TCP connection. * This is NOT a warm sim since provisioning network is supported. */ public static final int CMP_RESULT_CODE_NO_DNS = 3; private static final int CMP_RESULT_CODE_NO_TCP_CONNECTION = 3; /** * A connection was made but could not open a TCP connection. * This is an indication of a warm sim on a mobile network. * A connection was made but there was a redirection, we appear to be in walled garden. * This is an indication of a warm sim on a mobile network such as T-Mobile. */ public static final int CMP_RESULT_CODE_NO_TCP_CONNECTION = 4; private static final int CMP_RESULT_CODE_REDIRECTED = 4; /** * The mobile network is a provisioning network. * This is an indication of a warm sim on a mobile network. * This is an indication of a warm sim on a mobile network such as AT&T. */ public static final int CMP_RESULT_CODE_PROVISIONING_NETWORK = 5; private static final int CMP_RESULT_CODE_PROVISIONING_NETWORK = 5; AtomicBoolean mIsCheckingMobileProvisioning = new AtomicBoolean(false); private AtomicBoolean mIsCheckingMobileProvisioning = new AtomicBoolean(false); @Override public int checkMobileProvisioning(int suggestedTimeOutMs) { Loading Loading @@ -4036,7 +4038,9 @@ public class ConnectivityService extends IConnectivityManager.Stub { mNetTrackers[ConnectivityManager.TYPE_MOBILE_HIPRI].getNetworkInfo(); switch(result) { case CMP_RESULT_CODE_CONNECTABLE: case CMP_RESULT_CODE_NO_CONNECTION: { case CMP_RESULT_CODE_NO_CONNECTION: case CMP_RESULT_CODE_NO_DNS: case CMP_RESULT_CODE_NO_TCP_CONNECTION: { if (DBG) log("CheckMp.onComplete: ignore, connected or no connection"); break; } Loading @@ -4055,8 +4059,7 @@ public class ConnectivityService extends IConnectivityManager.Stub { } break; } case CMP_RESULT_CODE_NO_DNS: case CMP_RESULT_CODE_NO_TCP_CONNECTION: { case CMP_RESULT_CODE_PROVISIONING_NETWORK: { String url = getMobileProvisioningUrl(); if (TextUtils.isEmpty(url) == false) { if (DBG) log("CheckMp.onComplete: warm (no dns/tcp), url=" + url); Loading Loading @@ -4222,8 +4225,8 @@ public class ConnectivityService extends IConnectivityManager.Stub { MobileDataStateTracker mdst = (MobileDataStateTracker) mCs.mNetTrackers[ConnectivityManager.TYPE_MOBILE_HIPRI]; if (mdst.isProvisioningNetwork()) { if (DBG) log("isMobileOk: isProvisioningNetwork is true, no TCP conn"); result = CMP_RESULT_CODE_NO_TCP_CONNECTION; if (DBG) log("isMobileOk: isProvisioningNetwork is true"); result = CMP_RESULT_CODE_PROVISIONING_NETWORK; return result; } else { if (DBG) log("isMobileOk: isProvisioningNetwork is false, continue"); Loading Loading @@ -4303,25 +4306,37 @@ public class ConnectivityService extends IConnectivityManager.Stub { urlConn.setAllowUserInteraction(false); urlConn.setRequestProperty("Connection", "close"); int responseCode = urlConn.getResponseCode(); // For debug display the headers Map<String, List<String>> headers = urlConn.getHeaderFields(); log("isMobileOk: headers=" + headers); // Close the connection urlConn.disconnect(); urlConn = null; if (responseCode == 204) { // Return log("isMobileOk: expected responseCode=" + responseCode); result = CMP_RESULT_CODE_CONNECTABLE; return result; } else { // Retry to be sure this was redirected, we've gotten // occasions where a server returned 200 even though // the device didn't have a "warm" sim. log("isMobileOk: not expected responseCode=" + responseCode); result = CMP_RESULT_CODE_REDIRECTED; } log("isMobileOk: connected responseCode=" + responseCode); urlConn.disconnect(); urlConn = null; return result; } catch (Exception e) { log("isMobileOk: HttpURLConnection Exception e=" + e); result = CMP_RESULT_CODE_NO_TCP_CONNECTION; if (urlConn != null) { urlConn.disconnect(); urlConn = null; } } } result = CMP_RESULT_CODE_NO_TCP_CONNECTION; log("isMobileOk: loops|timed out"); log("isMobileOk: loops|timed out result=" + result); return result; } catch (Exception e) { log("isMobileOk: Exception e=" + e); Loading Loading
services/java/com/android/server/ConnectivityService.java +40 −25 Original line number Diff line number Diff line Loading @@ -3929,39 +3929,41 @@ public class ConnectivityService extends IConnectivityManager.Stub { /** * No connection was possible to the network. * This is NOT a warm sim. */ public static final int CMP_RESULT_CODE_NO_CONNECTION = 0; private static final int CMP_RESULT_CODE_NO_CONNECTION = 0; /** * A connection was made to the internet, all is well. * This is NOT a warm sim. */ public static final int CMP_RESULT_CODE_CONNECTABLE = 1; private static final int CMP_RESULT_CODE_CONNECTABLE = 1; /** * A connection was made but there was a redirection, we appear to be in walled garden. * This is an indication of a warm sim on a mobile network. * A connection was made but no dns server was available to resolve a name to address. * This is NOT a warm sim since provisioning network is supported. */ public static final int CMP_RESULT_CODE_REDIRECTED = 2; private static final int CMP_RESULT_CODE_NO_DNS = 2; /** * A connection was made but no dns server was available to resolve a name to address. * This is an indication of a warm sim on a mobile network. * A connection was made but could not open a TCP connection. * This is NOT a warm sim since provisioning network is supported. */ public static final int CMP_RESULT_CODE_NO_DNS = 3; private static final int CMP_RESULT_CODE_NO_TCP_CONNECTION = 3; /** * A connection was made but could not open a TCP connection. * This is an indication of a warm sim on a mobile network. * A connection was made but there was a redirection, we appear to be in walled garden. * This is an indication of a warm sim on a mobile network such as T-Mobile. */ public static final int CMP_RESULT_CODE_NO_TCP_CONNECTION = 4; private static final int CMP_RESULT_CODE_REDIRECTED = 4; /** * The mobile network is a provisioning network. * This is an indication of a warm sim on a mobile network. * This is an indication of a warm sim on a mobile network such as AT&T. */ public static final int CMP_RESULT_CODE_PROVISIONING_NETWORK = 5; private static final int CMP_RESULT_CODE_PROVISIONING_NETWORK = 5; AtomicBoolean mIsCheckingMobileProvisioning = new AtomicBoolean(false); private AtomicBoolean mIsCheckingMobileProvisioning = new AtomicBoolean(false); @Override public int checkMobileProvisioning(int suggestedTimeOutMs) { Loading Loading @@ -4036,7 +4038,9 @@ public class ConnectivityService extends IConnectivityManager.Stub { mNetTrackers[ConnectivityManager.TYPE_MOBILE_HIPRI].getNetworkInfo(); switch(result) { case CMP_RESULT_CODE_CONNECTABLE: case CMP_RESULT_CODE_NO_CONNECTION: { case CMP_RESULT_CODE_NO_CONNECTION: case CMP_RESULT_CODE_NO_DNS: case CMP_RESULT_CODE_NO_TCP_CONNECTION: { if (DBG) log("CheckMp.onComplete: ignore, connected or no connection"); break; } Loading @@ -4055,8 +4059,7 @@ public class ConnectivityService extends IConnectivityManager.Stub { } break; } case CMP_RESULT_CODE_NO_DNS: case CMP_RESULT_CODE_NO_TCP_CONNECTION: { case CMP_RESULT_CODE_PROVISIONING_NETWORK: { String url = getMobileProvisioningUrl(); if (TextUtils.isEmpty(url) == false) { if (DBG) log("CheckMp.onComplete: warm (no dns/tcp), url=" + url); Loading Loading @@ -4222,8 +4225,8 @@ public class ConnectivityService extends IConnectivityManager.Stub { MobileDataStateTracker mdst = (MobileDataStateTracker) mCs.mNetTrackers[ConnectivityManager.TYPE_MOBILE_HIPRI]; if (mdst.isProvisioningNetwork()) { if (DBG) log("isMobileOk: isProvisioningNetwork is true, no TCP conn"); result = CMP_RESULT_CODE_NO_TCP_CONNECTION; if (DBG) log("isMobileOk: isProvisioningNetwork is true"); result = CMP_RESULT_CODE_PROVISIONING_NETWORK; return result; } else { if (DBG) log("isMobileOk: isProvisioningNetwork is false, continue"); Loading Loading @@ -4303,25 +4306,37 @@ public class ConnectivityService extends IConnectivityManager.Stub { urlConn.setAllowUserInteraction(false); urlConn.setRequestProperty("Connection", "close"); int responseCode = urlConn.getResponseCode(); // For debug display the headers Map<String, List<String>> headers = urlConn.getHeaderFields(); log("isMobileOk: headers=" + headers); // Close the connection urlConn.disconnect(); urlConn = null; if (responseCode == 204) { // Return log("isMobileOk: expected responseCode=" + responseCode); result = CMP_RESULT_CODE_CONNECTABLE; return result; } else { // Retry to be sure this was redirected, we've gotten // occasions where a server returned 200 even though // the device didn't have a "warm" sim. log("isMobileOk: not expected responseCode=" + responseCode); result = CMP_RESULT_CODE_REDIRECTED; } log("isMobileOk: connected responseCode=" + responseCode); urlConn.disconnect(); urlConn = null; return result; } catch (Exception e) { log("isMobileOk: HttpURLConnection Exception e=" + e); result = CMP_RESULT_CODE_NO_TCP_CONNECTION; if (urlConn != null) { urlConn.disconnect(); urlConn = null; } } } result = CMP_RESULT_CODE_NO_TCP_CONNECTION; log("isMobileOk: loops|timed out"); log("isMobileOk: loops|timed out result=" + result); return result; } catch (Exception e) { log("isMobileOk: Exception e=" + e); Loading