Wifi internet access判斷

 /frameworks/base/services/core/java/com/android/server/connectivity/NetworkMonitor.java  

isCaptivePortal()
  if (pacUrl != null) {
         result = sendDnsAndHttpProbes(null, pacUrl, ValidationProbeEvent.PROBE_PAC);
     } else if (mUseHttps) {
         result = sendParallelHttpProbes(proxyInfo, httpsUrl, httpUrl);
     } else {
         result = sendDnsAndHttpProbes(proxyInfo, httpUrl, ValidationProbeEvent.PROBE_HTTP);
     }
     sendNetworkConditionsBroadcast
     
     
sendDnsAndHttpProbes   
        sendDnsProbe(host);                                                                                             
        sendHttpProbe(url, probeType, null);         

sendHttpProbe
  urlConnection = (HttpURLConnection) mNetwork.openConnection(url)
  httpResponseCode = urlConnection.getResponseCode()
  

private class ValidatedState extends State {
          @Override
          public void enter() {
              maybeLogEvaluationResult(
                      networkEventType(validationStage(), EvaluationResult.VALIDATED));
              mConnectivityServiceHandler.sendMessage(obtainMessage(EVENT_NETWORK_TESTED,
                      NETWORK_TEST_RESULT_VALID, mNetId, null));
              mValidations++;
          }


 private void notifyNetworkTestResultInvalid(Object obj) {
          mConnectivityServiceHandler.sendMessage(obtainMessage(
                  EVENT_NETWORK_TESTED, NETWORK_TEST_RESULT_INVALID, mNetId, obj));
      }


/frameworks/base/services/core/java/com/android/server/ConnectivityService.java
 private boolean maybeHandleNetworkMonitorMessage(Message msg) {
  nai.asyncChannel.sendMessage(
              NetworkAgent.CMD_REPORT_NETWORK_STATUS,
              (valid ? NetworkAgent.VALID_NETWORK : NetworkAgent.INVALID_NETWORK),
              0, redirectUrlBundle);

/frameworks/base/core/java/android/net/NetworkAgent.java
 case CMD_REPORT_NETWORK_STATUS: {
         String redirectUrl = ((Bundle)msg.obj).getString(REDIRECT_URL_KEY);
         if (VDBG) {
             log("CMD_REPORT_NETWORK_STATUS(" +
                     (msg.arg1 == VALID_NETWORK ? "VALID, " : "INVALID, ") + redirectUrl);
         }
         networkStatus(msg.arg1, redirectUrl);

/frameworks/opt/net/wifi/service/java/com/android/server/wifi/WifiStateMachine.java

 protected void networkStatus(int status, String redirectUrl) {
            if (this != mNetworkAgent) return;
            if (status == mLastNetworkStatus) return;
            mLastNetworkStatus = status;
            if (status == NetworkAgent.INVALID_NETWORK) {
                if (mVerboseLoggingEnabled) {
                    log("WifiNetworkAgent -> Wifi networkStatus invalid, score="
                            + Integer.toString(mWifiInfo.score));
                }
                unwantedNetwork(NETWORK_STATUS_UNWANTED_VALIDATION_FAILED);
            } else if (status == NetworkAgent.VALID_NETWORK) {
                if (mVerboseLoggingEnabled) {
                    log("WifiNetworkAgent -> Wifi networkStatus valid, score= "
                            + Integer.toString(mWifiInfo.score));
                }
                mWifiMetrics.logStaEvent(StaEvent.TYPE_NETWORK_AGENT_VALID_NETWORK);
                doNetworkStatus(status);
            }
        }

       case CMD_NETWORK_STATUS:
                    if (message.arg1 == NetworkAgent.VALID_NETWORK) {
                        config = getCurrentWifiConfiguration();
                        if (config != null) {
                            // re-enable autojoin
                            mWifiConfigManager.updateNetworkSelectionStatus(
                                    config.networkId,
                                    WifiConfiguration.NetworkSelectionStatus
                                            .NETWORK_SELECTION_ENABLE);
                            mWifiConfigManager.setNetworkValidatedInternetAccess(
                                    config.networkId, true);
                        }
                    }


/frameworks/opt/net/wifi/service/java/com/android/server/wifi/WifiConfigManager.java
 public boolean setNetworkValidatedInternetAccess(int networkId, boolean validated) {
      WifiConfiguration config = getInternalConfiguredNetwork(networkId);
      if (config == null) {
          return false;
      }
      config.validatedInternetAccess = validated;
      config.numNoInternetAccessReports = 0;
      saveToStore(false);
      return true;
  }

 

 

/frameworks/base/packages/SettingsLib/src/com/android/settingslib/wifi/WifiTracker.java
final BroadcastReceiver mReceiver = new BroadcastReceiver()

( WifiManager.NETWORK_STATE_CHANGED_ACTION/WifiManager.RSSI_CHANGED_ACTION
         WifiManager.SCAN_RESULTS_AVAILABLE_ACTION/WifiManager.CONFIGURED_NETWORKS_CHANGED_ACTION/WifiManager.LINK_CONFIGURATION_CHANGED_ACTION)
  fetchScansAndConfigsAndUpdateAccessPoints()
    updateAccessPoints
      conditionallyNotifyListeners()
         mListener.onAccessPointsChanged()

 

/packages/apps/Settings/src/com/android/settings/wifi/WifiSettings.java  
  onAccessPointsChanged() 
    updateAccessPointsDelayed()
       delay300ms 
       updateAccessPointPreferences()
          for { preference.refresh()  }
 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章