Android(安卓)Wi-Fi EAP-SIM代码解析
1. wpa_supplicant
During the process of EAP-SIM Authentication, wpa_supplicant will send APDU-Command:"SELECT" to ApduService.
-
The "SELECT" Command means to select one file from the file system of SIM Card
-
The right APDU-Response is 0x61, or 0x6c, or 0x9f, which means the APDU-Command executed successfully;
-
The wrong APDU-Response is 0x6a82, which means "Selected file not found", according to the protocol: ETSI GSM 11.11
scard_get_imsi() |-->scard_select_file() |-->_scard_select_file() |-->scard_transmit() |-->SCardTransmit() |-->(1)socket_local_client()-->open socket and connect | |-->socket() | |-->socket_local_client_connect() | |-->connect() |-->(2)send() |-->(3)select() |-->(4)recv()
2. ApduService
The ApduService is responsible for setting up a Unix socket when Wifi starts and listening for incoming connections.
Data read from the socket will be parsed and transmitted as a APDU Command to Telephony.
The response will be sent back over the socket. The socket's name is sent to the wpa supplicant.
frameworks/opt/net/wifi/service/java/com/android/server/wifi/ApduService.java
runService() |-->(1)waitForConnection() | |-->ServerSocket.accept() |-->(2)communicationWithClient() |-->ConnectionSocket.getInputStream() |-->ConnectionSocket.getOutputStream() |-->phone.iccTransmitApduBasicChannel()
3. PhoneInterfaceManager
/packages/services/Telephony/src/com/android/phone/PhoneInterfaceManager.java
(1) important events:EVENT_TRANSMIT_APDU_LOGIC_CHANNEL_DONE EVENT_TRANSMIT_APDU_BASIC_CHANNEL_DONE (2) important commands: CMD_TRANSMIT_APDU_LOGIC_CHANNEL CMD_TRANSMIT_APDU_BASIC_CHANNEL (3) important methods: iccTransmitApduLogicalChannel() iccTransmitApduBasicChannel() (4) related System Property: [gsm.sim.operator.numeric]
更多相关文章
- Android(安卓)抽屉导航
- [1] Android主要源代码组成
- android facebook authorize 时禁止调用facebook app
- Android体系结构
- android 胡言乱语 1 android basic
- 【Android】如何调节屏幕亮度,关闭屏幕
- ch020 Android(安卓)SQLite3(第二部分)
- ch013 Android(安卓)ScrollView与ListView
- ch010 Android(安卓)GridView