tcore_user_request_unref(ur);
}
+static enum tcore_hook_return __ps_handle_network_search_modem_changed(ps_modem_t *modem, CoreObject *co_ps,
+ UserRequest *ur, enum tcore_request_command cmd)
+{
+ gboolean ret = FALSE;
+ TReturn rv = TCORE_RETURN_FAILURE;
+
+ GHashTableIter iter;
+ gpointer key, service;
+ guint job_cnt = 0;
+ int value = 0;
+
+ if (!modem || !co_ps || !ur)
+ return TCORE_HOOK_RETURN_CONTINUE;
+
+ if (FALSE == tcore_ps_any_context_activating_activated(co_ps, &value)) {
+ ps_dbg_ex_modem(modem, "No activating/activated context present");
+ /* Block PS always-on while network operations. */
+ __ps_modem_set_hook_flag(modem, cmd);
+ tcore_user_request_set_response_hook(ur, __ps_hook_response_cb, modem);
+ return TCORE_HOOK_RETURN_CONTINUE;
+ }
+
+ ps_info_ex_modem(modem, "Value returned [%d]", value);
+ if (CONTEXT_STATE_ACTIVATED == value) {
+ ps_dbg_ex_modem(modem, "Internet/mms/tethering Activated/Activating context present need to deactivate them");
+ if (cmd == TREQ_NETWORK_SEARCH) {
+ g_hash_table_iter_init(&iter, modem->services);
+ while (g_hash_table_iter_next(&iter, &key, &service) == TRUE)
+ _ps_service_disconnect_internet_mms_tethering_contexts(service);
+ } else {
+ rv = tcore_ps_deactivate_contexts(co_ps);
+ if (rv != TCORE_RETURN_SUCCESS) {
+ ps_dbg_ex_modem(modem, "fail to deactivation");
+ return TCORE_HOOK_RETURN_CONTINUE;
+ }
+ }
+ } else if (CONTEXT_STATE_ACTIVATING == value) {
+ if (cmd == TREQ_MODEM_SET_FLIGHTMODE) {
+ ps_info_ex_modem(modem, "No need to stop these request for pdp in activating state ");
+ return TCORE_HOOK_RETURN_CONTINUE;
+ }
+ ps_dbg_ex_modem(modem, "For rest command will wait for activation successful ");
+ }
+ if (!modem->work_queue) {
+ ps_err_ex_modem(modem, "no queue present unable to handle request");
+ return TCORE_HOOK_RETURN_CONTINUE;
+ }
+
+ job_cnt = ps_util_get_waiting_job_count(modem->work_queue, cmd);
+ if (job_cnt) {
+ ps_err_ex_modem(modem, "duplicated job for cmd(%d)", cmd);
+
+ if (cmd == TREQ_NETWORK_SEARCH) {
+ struct tresp_network_search search_rsp;
+ memset(&search_rsp, 0, sizeof(struct tresp_network_search));
+
+ search_rsp.result = TCORE_RETURN_OPERATION_ABORTED;
+ search_rsp.list_count = 0;
+ tcore_user_request_send_response(ur, TRESP_NETWORK_SEARCH,
+ sizeof(struct tresp_network_search), &search_rsp);
+ } else if (cmd == TREQ_MODEM_SET_FLIGHTMODE) {
+ struct tresp_modem_set_flightmode set_flight_mode;
+ memset(&set_flight_mode, 0, sizeof(struct tresp_modem_set_flightmode));
+
+ set_flight_mode.result = TCORE_RETURN_OPERATION_ABORTED;
+ tcore_user_request_send_response(ur, TRESP_MODEM_SET_FLIGHTMODE,
+ sizeof(struct tresp_modem_set_flightmode), &set_flight_mode);
+ }
+
+ tcore_user_request_unref(ur);
+ return TCORE_HOOK_RETURN_STOP_PROPAGATION;
+ }
+ ret = ps_util_add_waiting_job(modem->work_queue, cmd, ur);
+ if (!ret) {
+ ps_err_ex_modem(modem, "fail to add the request to queue");
+ return TCORE_HOOK_RETURN_CONTINUE;
+ }
+
+ __ps_modem_get_mode_pref_change(modem, ur);
+ __ps_modem_set_hook_flag(modem, cmd);
+ return TCORE_HOOK_RETURN_STOP_PROPAGATION;
+
+}
+
+static enum tcore_hook_return __ps_handle_cancel_manual_search_modem_changed(ps_modem_t *modem, UserRequest *ur)
+{
+ UserRequest *ur_pending = NULL;
+ ur_pending = ps_util_pop_waiting_job(modem->work_queue, TREQ_NETWORK_SEARCH);
+
+ if (!ur_pending) {
+ ps_dbg_ex_modem(modem, "no pendig search request");
+ tcore_user_request_set_response_hook(ur, __ps_hook_response_cb, modem);
+ return TCORE_HOOK_RETURN_CONTINUE;
+ } else {
+ struct tresp_network_search search_rsp;
+ struct tresp_network_set_cancel_manual_search search_cancel_rsp;
+
+ memset(&search_rsp, 0, sizeof(struct tresp_network_search));
+ memset(&search_cancel_rsp, 0, sizeof(struct tresp_network_set_cancel_manual_search));
+
+ search_rsp.list_count = 0;
+ ps_dbg_ex_modem(modem, "send search response to upper layer");
+ tcore_user_request_send_response(ur_pending, TRESP_NETWORK_SEARCH, sizeof(struct tresp_network_search), &search_rsp);
+ tcore_user_request_unref(ur_pending);
+
+ tcore_user_request_set_response_hook(ur, __ps_hook_response_cb, modem);
+ search_cancel_rsp.result = TCORE_RETURN_SUCCESS;
+ tcore_user_request_send_response(ur, TRESP_NETWORK_SET_CANCEL_MANUAL_SEARCH,
+ sizeof(struct tresp_network_set_cancel_manual_search), &search_cancel_rsp);
+
+ return TCORE_HOOK_RETURN_STOP_PROPAGATION;
+ }
+ return TCORE_HOOK_RETURN_CONTINUE;
+}
+
static void __ps_handle_cancel_manual_search(ps_modem_t *modem, UserRequest *ur, UserRequest *ur_pending)
{
struct tresp_network_search search_rsp;
ps_err_ex_modem(modem, "No ps core object present ");
return TCORE_HOOK_RETURN_CONTINUE;
}
-
- if (FALSE == tcore_ps_any_context_activating_activated(co_ps, &value)) {
- ps_dbg_ex_modem(modem, "No activating/activated context present");
- /* Block PS always-on while network operations. */
- __ps_modem_set_hook_flag(modem, cmd);
- tcore_user_request_set_response_hook(ur, __ps_hook_response_cb, modem);
- return TCORE_HOOK_RETURN_CONTINUE;
- }
-
- ps_info_ex_modem(modem, "Value returned [%d]", value);
- if (CONTEXT_STATE_ACTIVATED == value) {
- ps_dbg_ex_modem(modem, "Internet/mms/tethering Activated/Activating context present need to deactivate them");
- if (cmd == TREQ_NETWORK_SEARCH) {
- g_hash_table_iter_init(&iter, modem->services);
- while (g_hash_table_iter_next(&iter, &key, &service) == TRUE)
- _ps_service_disconnect_internet_mms_tethering_contexts(service);
- } else {
- rv = tcore_ps_deactivate_contexts(co_ps);
- if (rv != TCORE_RETURN_SUCCESS) {
- ps_dbg_ex_modem(modem, "fail to deactivation");
- return TCORE_HOOK_RETURN_CONTINUE;
- }
- }
- } else if (CONTEXT_STATE_ACTIVATING == value) {
- if (cmd == TREQ_MODEM_SET_FLIGHTMODE) {
- ps_info_ex_modem(modem, "No need to stop these request for pdp in activating state ");
- return TCORE_HOOK_RETURN_CONTINUE;
- }
- ps_dbg_ex_modem(modem, "For rest command will wait for activation successful ");
- }
- if (!modem->work_queue) {
- ps_err_ex_modem(modem, "no queue present unable to handle request");
- return TCORE_HOOK_RETURN_CONTINUE;
- }
-
- job_cnt = ps_util_get_waiting_job_count(modem->work_queue, cmd);
- if (job_cnt) {
- ps_err_ex_modem(modem, "duplicated job for cmd(%d)", cmd);
-
- if (cmd == TREQ_NETWORK_SEARCH) {
- struct tresp_network_search search_rsp;
- memset(&search_rsp, 0, sizeof(struct tresp_network_search));
-
- search_rsp.result = TCORE_RETURN_OPERATION_ABORTED;
- search_rsp.list_count = 0;
- tcore_user_request_send_response(ur, TRESP_NETWORK_SEARCH,
- sizeof(struct tresp_network_search), &search_rsp);
- } else if (cmd == TREQ_MODEM_SET_FLIGHTMODE) {
- struct tresp_modem_set_flightmode set_flight_mode;
- memset(&set_flight_mode, 0, sizeof(struct tresp_modem_set_flightmode));
-
- set_flight_mode.result = TCORE_RETURN_OPERATION_ABORTED;
- tcore_user_request_send_response(ur, TRESP_MODEM_SET_FLIGHTMODE,
- sizeof(struct tresp_modem_set_flightmode), &set_flight_mode);
- }
-
- tcore_user_request_unref(ur);
- return TCORE_HOOK_RETURN_STOP_PROPAGATION;
- }
- ret = ps_util_add_waiting_job(modem->work_queue, cmd, ur);
- if (!ret) {
- ps_err_ex_modem(modem, "fail to add the request to queue");
- return TCORE_HOOK_RETURN_CONTINUE;
- }
-
- __ps_modem_get_mode_pref_change(modem, ur);
- __ps_modem_set_hook_flag(modem, cmd);
- return TCORE_HOOK_RETURN_STOP_PROPAGATION;
+ return __ps_handle_network_search_modem_changed(modem, co_ps, ur, cmd);
} else if (cmd == TREQ_NETWORK_SET_CANCEL_MANUAL_SEARCH) {
- UserRequest *ur_pending = NULL;
- ur_pending = ps_util_pop_waiting_job(modem->work_queue, TREQ_NETWORK_SEARCH);
-
- if (!ur_pending) {
- ps_dbg_ex_modem(modem, "no pendig search request");
- tcore_user_request_set_response_hook(ur, __ps_hook_response_cb, modem);
- return TCORE_HOOK_RETURN_CONTINUE;
- } else {
- struct tresp_network_search search_rsp;
- struct tresp_network_set_cancel_manual_search search_cancel_rsp;
-
- memset(&search_rsp, 0, sizeof(struct tresp_network_search));
- memset(&search_cancel_rsp, 0, sizeof(struct tresp_network_set_cancel_manual_search));
-
- search_rsp.list_count = 0;
- ps_dbg_ex_modem(modem, "send search response to upper layer");
- tcore_user_request_send_response(ur_pending, TRESP_NETWORK_SEARCH, sizeof(struct tresp_network_search), &search_rsp);
- tcore_user_request_unref(ur_pending);
-
- tcore_user_request_set_response_hook(ur, __ps_hook_response_cb, modem);
- search_cancel_rsp.result = TCORE_RETURN_SUCCESS;
- tcore_user_request_send_response(ur, TRESP_NETWORK_SET_CANCEL_MANUAL_SEARCH,
- sizeof(struct tresp_network_set_cancel_manual_search), &search_cancel_rsp);
-
- return TCORE_HOOK_RETURN_STOP_PROPAGATION;
- }
+ return __ps_handle_cancel_manual_search_modem_changed(modem, ur);
}
return TCORE_HOOK_RETURN_CONTINUE;
}
}
#endif
+static void __on_hook_status_NO_carrier(ps_modem_t *modem, ps_service_t *service,
+ CoreObject *co_ps, struct tnoti_ps_call_status *cstatus)
+{
+ ps_context_t *def_context = NULL, *ims_context = NULL;
+ unsigned char def_cid = 0, ims_cid = 0;
+ int value = 0;
+ gboolean retry = TRUE;
+
+ if (!modem || !service || !cstatus)
+ return;
+
+ retry = ps_util_check_permanent_reject_cause(cstatus->result, _ps_modem_get_roaming(modem));
+ /* if retry not permitted by network */
+ if (FALSE == retry) {
+ ps_dbg_ex_modem(modem, "DO NOT RETRY NETWORK CONNECTION AUTOMATICALLY");
+ ps_info_ex_modem(modem, "permanent reject cause (%d), roaming(%d)", cstatus->result, _ps_modem_get_roaming(modem));
+
+ def_context = _ps_service_return_default_context(service, CONTEXT_ROLE_INTERNET);
+ if (def_context) {
+ CoreObject *co_context = _ps_context_ref_co_context(def_context);
+ def_cid = tcore_context_get_id(co_context);
+ }
+
+ ims_context = _ps_service_return_default_context(service, CONTEXT_ROLE_IMS);
+ if (ims_context) {
+ CoreObject *co_context = _ps_context_ref_co_context(ims_context);
+ ims_cid = tcore_context_get_id(co_context);
+ }
+ }
+
+ _ps_service_set_ps_defined(service, FALSE, cstatus->context_id);
+ tcore_ps_set_cid_active(co_ps, cstatus->context_id, FALSE);
+ tcore_ps_set_cid_connected(co_ps, cstatus->context_id, FALSE);
+ _ps_service_set_connected(service, cstatus, FALSE);
+
+ if (FALSE == tcore_ps_any_internet_mms_tethering_context_activating_activated(co_ps, &value)) {
+ ps_dbg_ex_modem(modem, "No context open connections, publish disconnected signal");
+#ifdef TIZEN_SUPPORT_REQUEST_HOOK_PDP_CONTROL
+ /* Handle any pending request if present */
+ modem = _ps_service_ref_modem(service);
+ _ps_hook_send_pending_user_request(modem);
+#endif
+ /* Ensured that set_reset_profile is always done default thread's context */
+ if (_ps_modem_get_reset_profile(modem) == TRUE) {
+ /* Initiate Reset Profile */
+ ps_info_ex_modem(modem, "Profiles are being reset");
+ /* Shouldn't invoke set profile directly, as it will remove hooks registered to server while being hook callback*/
+ if (NULL == _ps_modem_get_profile_reset_gsource(modem)) {
+ GSource *gsource = NULL;
+ gsource = ps_util_gsource_dispatch(g_main_context_default(), G_PRIORITY_LOW, (GSourceFunc)_ps_modem_initiate_reset_profile, modem);
+ _ps_modem_set_profile_reset_gsource(modem, gsource);
+ }
+ }
+ }
+
+#ifdef PREPAID_SIM_APN_SUPPORT
+ __on_call_status_for_prepaid_sim(service, def_context, modem);
+#endif
+
+ ps_info_ex_modem(modem, "Any context activating or activated [%d]", value);
+ if (FALSE == retry) {
+ if (cstatus->context_id == def_cid) {
+ _ps_service_reset_connection_timer(def_context);
+ _ps_context_set_alwayson_enable(def_context, FALSE);
+ } else if (cstatus->context_id == ims_cid) {
+ _ps_service_reset_connection_timer(ims_context);
+ _ps_context_set_alwayson_enable(ims_context, FALSE);
+ }
+ }
+}
+
static enum tcore_hook_return __on_hook_call_status(Server *s, CoreObject *source,
enum tcore_notification_command command, unsigned int data_len, void *data,
void *user_data)
}
}
} else if (cstatus->state == PS_CALL_STATE_RESULT_NO_CARRIER) { /* DISCONNECTED-NO CARRIER */
- ps_context_t *def_context = NULL, *ims_context = NULL;
- unsigned char def_cid = 0, ims_cid = 0;
- int value = 0;
- gboolean retry = TRUE;
-
- retry = ps_util_check_permanent_reject_cause(cstatus->result, _ps_modem_get_roaming(modem));
- /* if retry not permitted by network */
- if (FALSE == retry) {
- ps_dbg_ex_modem(modem, "DO NOT RETRY NETWORK CONNECTION AUTOMATICALLY");
- ps_info_ex_modem(modem, "permanent reject cause (%d), roaming(%d)", cstatus->result, _ps_modem_get_roaming(modem));
-
- def_context = _ps_service_return_default_context(service, CONTEXT_ROLE_INTERNET);
- if (def_context) {
- CoreObject *co_context = _ps_context_ref_co_context(def_context);
- def_cid = tcore_context_get_id(co_context);
- }
-
- ims_context = _ps_service_return_default_context(service, CONTEXT_ROLE_IMS);
- if (ims_context) {
- CoreObject *co_context = _ps_context_ref_co_context(ims_context);
- ims_cid = tcore_context_get_id(co_context);
- }
- }
-
- _ps_service_set_ps_defined(service, FALSE, cstatus->context_id);
- tcore_ps_set_cid_active(co_ps, cstatus->context_id, FALSE);
- tcore_ps_set_cid_connected(co_ps, cstatus->context_id, FALSE);
- _ps_service_set_connected(service, cstatus, FALSE);
-
- if (FALSE == tcore_ps_any_internet_mms_tethering_context_activating_activated(co_ps, &value)) {
- ps_dbg_ex_modem(modem, "No context open connections, publish disconnected signal");
-#ifdef TIZEN_SUPPORT_REQUEST_HOOK_PDP_CONTROL
- /* Handle any pending request if present */
- modem = _ps_service_ref_modem(service);
- _ps_hook_send_pending_user_request(modem);
-#endif
- /* Ensured that set_reset_profile is always done default thread's context */
- if (_ps_modem_get_reset_profile(modem) == TRUE) {
- /* Initiate Reset Profile */
- ps_info_ex_modem(modem, "Profiles are being reset");
- /* Shouldn't invoke set profile directly, as it will remove hooks registered to server while being hook callback*/
- if (NULL == _ps_modem_get_profile_reset_gsource(modem)) {
- GSource *gsource = NULL;
- gsource = ps_util_gsource_dispatch(g_main_context_default(), G_PRIORITY_LOW, (GSourceFunc)_ps_modem_initiate_reset_profile, modem);
- _ps_modem_set_profile_reset_gsource(modem, gsource);
- }
- }
- }
-
-
-#ifdef PREPAID_SIM_APN_SUPPORT
- __on_call_status_for_prepaid_sim(service, def_context, modem);
-#endif
-
- ps_info_ex_modem(modem, "Any context activating or activated [%d]", value);
- if (FALSE == retry) {
- if (cstatus->context_id == def_cid) {
- _ps_service_reset_connection_timer(def_context);
- _ps_context_set_alwayson_enable(def_context, FALSE);
- } else if (cstatus->context_id == ims_cid) {
- _ps_service_reset_connection_timer(ims_context);
- _ps_context_set_alwayson_enable(ims_context, FALSE);
- }
- }
+ __on_hook_status_NO_carrier(modem, service, co_ps, cstatus);
} /* disconnected case */
return TCORE_HOOK_RETURN_CONTINUE;