• android NetworkMonitor和ConnectivityService记录


    一、NetworkMonitor

    packages/modules/NetworkStack/src/com/android/server/connectivity/NetworkMonitor.java

    网络上都叫网络可用性校验,在WIFI和数据(以太网切换中使用)

    有多个状态机

    方法:isCaptivePortal

    11-03 12:01:17.885  2535  4681 D NetworkMonitor/100: isCaptivePortal: isSuccessful()=false isPortal()=false RedirectUrl=null isPartialConnectivity()=false Time=23029ms

    类 EvaluationState下的reportEvaluationResult

    ----------------------------------------------------------------------------------------------------------------------

    父类下的notifyNetworkTested,会将校验结果发送给ConnectivityService

    1. private final INetworkMonitorCallbacks mCallback;
    2. private void notifyNetworkTested(NetworkTestResultParcelable result) {
    3. mCallback.notifyNetworkTestedWithExtras(result);
    4. }

    ConnectivityService.java里有个子类NetworkMonitorCallbacks 重写了notifyNetworkTestedWithExtras

    NetworkMonitorCallbacks是在registerNetworkAgent里注册的

    1. mDeps.getNetworkStack().makeNetworkMonitor(
    2. nai.network, name, new NetworkMonitorCallbacks(nai));

    -----------------------------------------------------------------------------------------------------------------------

    二、NetworkMonitor与ConnectivityService的回调

    class EvaluationState 应该是上报数据给ConnectivityService的 

    reportEvaluationResult

            notifyNetworkTested

                    mCallback.notifyNetworkTestedWithExtras

    isCaptivePortal

            else if (mUseHttps && httpsUrls.length == 1 && httpUrls.length == 1)

            sendHttpAndHttpsParallelWithFallbackProbes

                    reportHttpProbeResult(NETWORK_VALIDATION_PROBE_FALLBACK) (16)

                    reportHttpProbeResult(NETWORK_VALIDATION_PROBE_HTTPS) (32)

    packages/modules/NetworkStack/src/com/android/server/connectivity/NetworkMonitor.java

    sendDnsProbe

            sendDnsProbeWithTimeout    //这个是阻塞执行

                    DnsUtils.getAllByName

    11-28 10:57:11.770  2414  4178 D NetworkMonitor/100: PROBE_DNS connectivitycheck.gstatic.com 12508ms FAIL in type ADDRCONFIG Timeout

    这个日志一直没找到在哪儿打印,后来发现是在这儿

    1. protected InetAddress[] sendDnsProbeWithTimeout(String host, int timeoutMs)
    2. throws UnknownHostException {
    3. return DnsUtils.getAllByName(mDependencies.getDnsResolver(), mCleartextDnsNetwork, host,
    4. TYPE_ADDRCONFIG, FLAG_EMPTY, timeoutMs,
    5. str -> validationLog(ValidationProbeEvent.PROBE_DNS, host, str));
    6. }
    7. private void validationLog(int probeType, Object url, String msg) {
    8. String probeName = ValidationProbeEvent.getProbeName(probeType);
    9. //自己加的日志
    10. Log.i(TAG, "validationLog, probeName = " + probeName + " url = " + url.toString());
    11. validationLog(String.format("%s %s %s", probeName, url, msg));
    12. }

  • 相关阅读:
    npm 打包后自动压缩成zip文件
    从物理转AI、战数据库,95后程序员的职业选择
    网络渗透day10-工具和技术
    利用matlab求解线性优化问题【基于matlab的动力学模型学习笔记_11】
    辞职转行学IT,学网络安全运维可以吗?
    SSL证书验证原理和https加密
    eclipse和idea如何打开和关闭debug功能
    一幅长文细学JavaScript(三)——一幅长文系列
    云计算:掌控未来,一触即发!
    mysql-4:SQL的解析顺序
  • 原文地址:https://blog.csdn.net/yudelian/article/details/134204147