Android-PPPoE流程分析1---TvdSettings系统应用
来源:互联网 发布:国外设计app软件 编辑:程序博客网 时间:2024/06/07 01:25
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: 以前写在有道云笔记里, 在这里分享出来.
- Android-PPPoE流程分析1---TvdSettings系统应用
- PPPOE流程分析2 --PPPoEService系统应用
- TvdSettings系统应用---Ethernet设置相关
- PPPOE流程分析3---pppoe native程序包
- 系统启动Android应用流程分析
- Android应用启动流程分析
- Android 应用冻结流程分析
- android 应用卸载流程分析
- android系统关机流程分析
- Android 系统关机流程分析
- Android 系统关机流程分析
- pppoe流程
- Android系统应用---SystemUI之二:Statusbar显示流程以及系统状态图标更新分析
- 综合应用:《购票系统》流程分析
- Android 应用启动流程初步分析之1
- Android framework 应用安装流程 分析 PackageManagerService(Android5.1)
- Android系统应用---SystemUI之一:SystemUI概述和创建启动流程分析
- Android 5.0 Camera系统源码分析(1):CameraService启动流程
- 主定理笔记(master theorem)
- vector内存释放
- 最长上升子序列的O(nlgn)解法
- asp_异步无刷新分页
- POJ 1125_Stockbroker Grapevine
- Android-PPPoE流程分析1---TvdSettings系统应用
- 找出两个只出现了一次的数字
- iOS关于SQLite数据库的操作(使用第三方类库FMDB)
- 路由之争?对入口争夺有多渴望,接下来的玩法就有多疯狂!
- iOS 5 与 iOS 6 的 low-memory 处理
- 机器学习、数据挖掘、计算机视觉等领域经典书籍推荐
- Sicily 1152/1153. 马周游
- vmware中的bridge、nat、host-only的区别
- Java工厂方法模式(Factory Method)