您的位置:首页 > 移动开发 > Android开发

Android Wi-Fi EAP-SIM代码解析

2017-07-23 22:24 537 查看


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]
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: