diff options
author | Paul Kocialkowski <contact@paulk.fr> | 2013-09-28 16:38:51 +0200 |
---|---|---|
committer | Paul Kocialkowski <contact@paulk.fr> | 2013-09-28 16:38:51 +0200 |
commit | fd051580b347b09bf43d1fab29cea3d58b113e09 (patch) | |
tree | df76485577c71a1435be41a1b6115f2fe4795263 /sec.c | |
parent | 233ef2c6769c1c833e89651ae5846e66a5097cfb (diff) | |
download | hardware_ril_samsung-ril-fd051580b347b09bf43d1fab29cea3d58b113e09.zip hardware_ril_samsung-ril-fd051580b347b09bf43d1fab29cea3d58b113e09.tar.gz hardware_ril_samsung-ril-fd051580b347b09bf43d1fab29cea3d58b113e09.tar.bz2 |
Check modem state before RIL requests and properly report it on crash
Signed-off-by: Paul Kocialkowski <contact@paulk.fr>
Diffstat (limited to 'sec.c')
-rw-r--r-- | sec.c | 35 |
1 files changed, 23 insertions, 12 deletions
@@ -76,10 +76,6 @@ void ril_state_update(ril_sim_state sim_state) { RIL_RadioState radio_state; - /* If power mode isn't at least normal, don't update RIL state */ - if (ril_data.state.power_state != IPC_PWR_PHONE_STATE_NORMAL) - return; - ril_data.state.sim_state = sim_state; switch (sim_state) { @@ -108,12 +104,7 @@ void ril_state_update(ril_sim_state sim_state) break; } - LOGD("Setting radio state to %x", radio_state); - ril_data.state.radio_state = radio_state; - - ril_tokens_check(); - - ril_request_unsolicited(RIL_UNSOL_RESPONSE_RADIO_STATE_CHANGED, NULL, 0); + ril_radio_state_update(radio_state); } #if RIL_VERSION >= 6 @@ -221,8 +212,7 @@ void ipc_sec_sim_status(struct ipc_message_info *info) switch (info->type) { case IPC_TYPE_NOTI: - // Don't consider this if modem isn't in normal power mode - if (ril_data.state.power_state != IPC_PWR_PHONE_STATE_NORMAL) + if (ril_radio_state_complete(RADIO_STATE_OFF, RIL_TOKEN_NULL)) return; LOGD("Got UNSOL PIN status message"); @@ -281,6 +271,9 @@ void ril_request_get_sim_status(RIL_Token t) RIL_CardStatus card_status; #endif + if (ril_radio_state_complete(RADIO_STATE_OFF, t)) + return; + if (ril_data.tokens.pin_status == RIL_TOKEN_DATA_WAITING) { LOGD("Got RILJ request for UNSOL data"); hex_dump(&(ril_data.state.sim_pin_status), sizeof(struct ipc_sec_sim_status_response)); @@ -511,6 +504,9 @@ void ril_request_sim_io(RIL_Token t, void *data, int length) if (data == NULL || length < (int) sizeof(*sim_io)) goto error; + if (ril_radio_state_complete(RADIO_STATE_SIM_NOT_READY, t)) + return; + #if RIL_VERSION >= 6 sim_io = (RIL_SIM_IO_v6 *) data; #else @@ -768,6 +764,9 @@ void ril_request_enter_sim_pin(RIL_Token t, void *data, size_t length) if (data == NULL || length < (int) sizeof(char *)) goto error; + if (ril_radio_state_complete(RADIO_STATE_OFF, t)) + return; + // 1. Send PIN if (strlen(data) > 16) { LOGE("%s: pin exceeds maximum length", __func__); @@ -803,6 +802,9 @@ void ril_request_change_sim_pin(RIL_Token t, void *data, size_t length) if (data == NULL || length < (int) (2 * sizeof(char *))) goto error; + if (ril_radio_state_complete(RADIO_STATE_SIM_NOT_READY, t)) + return; + password_old = ((char **) data)[0]; password_new = ((char **) data)[1]; @@ -842,6 +844,9 @@ void ril_request_enter_sim_puk(RIL_Token t, void *data, size_t length) if (data == NULL || length < (int) (2 * sizeof(char *))) goto error; + if (ril_radio_state_complete(RADIO_STATE_OFF, t)) + return; + puk = ((char **) data)[0]; pin = ((char **) data)[1]; @@ -885,6 +890,9 @@ void ril_request_query_facility_lock(RIL_Token t, void *data, size_t length) if (data == NULL || length < sizeof(char *)) goto error; + if (ril_radio_state_complete(RADIO_STATE_SIM_NOT_READY, t)) + return; + facility = ((char **) data)[0]; if (!strcmp(facility, "SC")) { @@ -927,6 +935,9 @@ void ril_request_set_facility_lock(RIL_Token t, void *data, size_t length) if (data == NULL || length < (int) (4 * sizeof(char *))) goto error; + if (ril_radio_state_complete(RADIO_STATE_SIM_NOT_READY, t)) + return; + facility = ((char **) data)[0]; lock = ((char **) data)[1]; password = ((char **) data)[2]; |