Android-PPPoE流程分析1---TvdSettings系统应用

原创 2013年12月03日 19:19:08
1. 相关代码:
1.1 android/system/netd
netd守护进程与framework中的NetworkManagementService通信, 接受command, 上传event
1.2 android/external/ppp/pppoe
使用以太网来进行PPP拨号的native程序, 包含一个bin程序pppoe和多个脚本
1.3 android/external/ppp/pppd

1.4 android/device/softwinner/common/packages/TvdSettings
Android设置应用, 用来设置和开启ppp, 用户名/密码/使用接口/是否自动连接/是否开启
1.5 android/device/softwinner/common/packages/PPPoEService
PPPoE服务, 是一个Android服务, 运行后会持续监听以太网Link事件, 并根据设置来进行PPPoE拨号.

2. TvdSettings系统应用
相关代码:
TvdSettings/src/com/android/settings/PPPoESettings.java
2.1 设置用户名密码
首先当前的ppp拨号采用的是pap加密方式, 在ubuntu上搭建pptp这个vpn服务器时还有一个可选加密是chap方式, 用户信息保存位置,
    static private final String PPPOE_INFO_SAVE_FILE = "/data/system/pap-secrets";
当修改用户和密码时, 会触发onPreferenceChange事件, 此事件的处理函数如下,
public boolean onPreferenceChange(Preference preference, Object value) {
  mDateChanged = true;
        ContentResolver cr = this.getContentResolver();
        if(preference.equals(mDevices)){
            Settings.Secure.putString(cr,Settings.Secure.PPPOE_INTERFACE,(String)value);
        }else if(preference.equals(mUser)){         // 处理修改用户名
            mLoginUsername = (String)value;
            writeLoginInfo(mLoginUsername,mLoginPassword);
        }else if(preference.equals(mPassword)){  // 处理修改密码
            mLoginPassword = (String)value;
            writeLoginInfo(mLoginUsername,mLoginPassword);
        }else if(preference.equals(mAutoConecting)){
            mAutoConecting.setChecked((Boolean) value);
            Settings.Secure.putInt(cr,Settings.Secure.PPPOE_AUTO_CONN,
                    (Boolean)value ? 1 : 0);
        }else if(preference.equals(mToggle)){
            mToggle.setChecked((Boolean) value);
            Settings.Secure.putInt(cr,Settings.Secure.PPPOE_ENABLE,
                    (Boolean)value ? 1 : 0);
            getActivity().sendBroadcast(new Intent("com.softwinner.pppoe.ACTION_STATE_CHANGE"));
        }
        return true;
 }
这里会调用writeLoginInfo函数, 函数定义如下,

    private boolean writeLoginInfo(String username,String password){
        File file = new File(PPPOE_INFO_SAVE_FILE); // 此常量就是/data/system/pap-secrets
        String loginInfo = String.format(mLoginFormat, username, password); // 这个会将用户名/密码在文本中的组织方式格式化为 "name * passwd"
        try {
            BufferedOutputStream out = new BufferedOutputStream(
                    new FileOutputStream(file));
            out.write(loginInfo.getBytes(),0,loginInfo.length()); // 写入/data/system/pap-secrets文件中
            if(DEBUG){
                Log.d(TAG,"write to " + PPPOE_INFO_SAVE_FILE + " login info = " + loginInfo);
            }
            out.flush();
            out.close();
        } catch (IOException e) {
            e.printStackTrace();
            return false;
        }
        return true;
    }

2.2 设置ppp拨号使用的网络接口
    ppp拨号理论不只是pppoe, pppoe的是Point-to-Point Over Ethernet, 也就是使用以太网来进行拨号, 除了Ethernet, wlan也是可以的, 所以在TvdSetting中的PPP设置页面设备列表是有两类, ethx和wlan0, eth类的可以是多个, 是动态通过API获取的, 而wlan0是写死在代码中的, 只有wlan0一个.
    而ppp拨号使用的接口是保存在SettingsProvider应用的database中的, 获取和设置方式如下, 其中的PPPOE_INTERFACE="pppoe_interface"
String iface = Settings.Secure.getString(getContentResolver(),
                Settings.Secure.PPPOE_INTERFACE);   
Settings.Secure.putString(cr,Settings.Secure.PPPOE_INTERFACE,(String)value);  
    在选择接口时同样会触发onPreferenceChange事件, 通过onPreferenceChange函数进行处理, 这里简单些, 只是修改下数据库中PPPOE_INTERFACE的value

2.3 使能PPPoE和设置自动连接功能
    设置自动拨号流程简单, 只是修改下SettingsProvider中的Database中的name Settings.Secure.PPPOE_AUTO_CONN="pppoe_auto_conn", 0或者1
    设置使能PPPoE除了修改Database的name Settings.Secure.PPPOE_ENABLE="pppoe_enable", 0或者1外, 还会发送一个广播,  这个广播的接受方是PPPoEService, 它是Android负责实际开启和关闭PPPoE的.
getActivity().sendBroadcast(new Intent("com.softwinner.pppoe.ACTION_STATE_CHANGE"));

shanxiaoxi@allwinnertech.com:  以前写在有道云笔记里, 在这里分享出来. 
版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

Android5.0网络策略导致PPPOE无法正常上网

===========================

PPPOE流程分析2 --PPPoEService系统应用

1. PPPoEService相关文件 核心代码在android/device/softwinner/common/packages/PPPoEService中, 文件也只有Loader.java/...

PPPOE流程分析3---pppoe native程序包

1. 相关文件 主要源码目录是, android/external/ppp/pppoe, 其中核心的是4个shell script, 和一个bin 1.1 Android.mk 此编译脚本主要用...

Android系统启动流程分析之安装应用

2016六月 21 原 Android系统启动流程分析之安装应用 分类:Android系统源码研究  (295)  (0)  举报  收藏 跟随上一...

Android系统启动流程分析之启动应用 - ActivityManagerService

ActivityManagerService(Ams)就是在initAndLoop方法里加载的.那么,看下initAndLoop方法里关于AMS的核心代码. 1.context = Ac...

Android系统启动和应用启动流程分析(一)

系统启动分析 1、设备加电后执行第一段代码:Bootloader 2、Bootloader初始化CPU和硬件 3、Bootloader装载操作系统映像或者固化的嵌入式应用程序到内存中 4、跳到操作系统...

Android 应用启动流程初步分析之1

Android 应用启动流程初步分析之1为什么要写文章?认识自己的不足,并加强对Android系统的认识,提高自己的表达能力。准备本文以启动时钟应用为例: 基于Android 4.4源码 涉及的进程 ...

Android 5.0 Camera系统源码分析(1):CameraService启动流程

1. 前言 本文将分析Android系统源码,从frameworks层到hal层,暂不涉及app层和kernel层。由于某些函数比较复杂,在贴出代码时会适当对其进行简化。本文属于自己对源码的总结...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)