+/*
+ * Copyright 2012 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.tizenopensource.org/license
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "ciss-tapi-request.h"
+#include "ciss-parser.h"
+#include "ciss-util.h"
+#include "vconf.h"
+#include "ciss-debug.h"
+#include "ciss-string.h"
+#include "ciss-widget.h"
+#include "ciss-ussd.h"
+#include "ciss-resp.h"
+#include "ciss-converter.h"
+
+static void __ciss_tapi_ss_rel_complete_cb(TapiHandle *tapi_handle, const char *noti_id, void *data, void *user_data);
+static void __ciss_ss_forward_resp_cb(TapiHandle *handle, int result, void *data, void *user_data);
+static void __ciss_ss_barring_resp_cb(TapiHandle *handle, int result, void *data, void *user_data);
+static void __ciss_ss_waiting_resp_cb(TapiHandle *handle, int result, void *data, void *user_data);
+static void __ciss_ss_cli_resp_cb(TapiHandle *handle, int result, void *data, void *user_data);
+static void __ciss_change_ss_barring_pw_resp_cb(TapiHandle *handle, int result, void *data, void *user_data);
+static void __ciss_ss_ussd_resp_cb(TapiHandle *handle, int result, void *data, void *user_data);
+
+EventHandler event_list[] = {
+ {TAPI_NOTIFY_SS_REL_COMP_MSG, 0, __ciss_tapi_ss_rel_complete_cb},
+};
+
+int _ciss_tapi_event_setup(ciss_appdata_t *ad)
+{
+ DBG("Enter");
+ int i = 0;
+ int len = 0;
+ int api_err = -1;
+
+ len = sizeof(event_list) / sizeof(EventHandler);
+
+ ad->tapi_handle = tel_init(NULL);
+ if (ad->tapi_handle) {
+ for (i = 0; i < len; i++) {
+ api_err = tel_register_noti_event(ad->tapi_handle, event_list[i].event_type, event_list[i].func, (void *) ad);
+ if (api_err != TAPI_API_SUCCESS) {
+ DBG("tapi_register_noti_event() ret : %d", api_err);
+ break;
+ }
+ }
+ } else {
+ DBG("tapi_init() failed.");
+ }
+
+ DBG("Leave");
+ return 0;
+}
+
+void _ciss_deregister_tel_event(void *data)
+{
+ DBG("Enter");
+ ret_if(data == NULL);
+
+ ciss_appdata_t *ad = (ciss_appdata_t *)data;
+ int ret = TAPI_API_SUCCESS;
+
+ ret = tel_deinit(ad->tapi_handle);
+ if (ret != TAPI_API_SUCCESS)
+ DBG("tapi_deinit() ret : %d", ret);
+}
+
+ciss_err_t _ciss_send_tapi_request(ciss_mmi_context_t *mmi_ctx, void *data)
+{
+ DBG("Enter");
+
+ retv_if(data == NULL, CISS_ERR_UNKNOWN);
+
+ ciss_appdata_t *ad = (ciss_appdata_t *)data;
+ TelSsUssdMsgInfo_t stUssdRecord;
+ TelSsForwardInfo_t stCfActReq;
+ TelSsBarringInfo_t stCbReq;
+ TelSsWaitingInfo_t stCwReq;
+ int err = TAPI_API_SUCCESS;
+ TelSsCliType_t cliType;
+ ciss_err_t error_code = CISS_ERR_NONE;
+
+ if (mmi_ctx->ss_type == CISS_SERVICE_FORWARDING) {
+ memset(&stCfActReq, 0, sizeof(TelSsForwardInfo_t));
+ stCfActReq.Condition = (TelSsForwardWhen_t) mmi_ctx->ss_flavor;
+ DBG("\n [CISS-ENGINE] ss_flavor= %d,%d", stCfActReq.Condition, mmi_ctx->ss_flavor);
+
+ stCfActReq.Class = mmi_ctx->tapi_bsg;
+ stCfActReq.NoReplyConditionTimer = mmi_ctx->nr_timer;
+ strncpy((char *)stCfActReq.szPhoneNumber, mmi_ctx->forward_number, CISS_NUMBER_LEN_MAX);
+ stCfActReq.szPhoneNumber[CISS_NUMBER_LEN_MAX] = '\0';
+ } else if (mmi_ctx->ss_type == CISS_SERVICE_BARRING) {
+ memset(&stCbReq, 0, sizeof(TelSsBarringInfo_t));
+ stCbReq.Type = (TelSsBarringType_t) mmi_ctx->ss_flavor;
+ DBG("\n [CISS-ENGINE] ss_flavor= %d,%d", stCbReq.Type, mmi_ctx->ss_flavor);
+ stCbReq.Class = mmi_ctx->tapi_bsg;
+ memcpy(&stCbReq.szPassword, mmi_ctx->ss_password, CISS_MAX_PASSWORD_LEN);
+ } else if (mmi_ctx->ss_type == CISS_SERVICE_WAITING) {
+ memset(&stCwReq, 0, sizeof(TelSsWaitingInfo_t));
+ stCwReq.Class = mmi_ctx->tapi_bsg;
+ }
+ switch (mmi_ctx->opcode) {
+ case registerSS:
+ DBG("registerSS");
+ if (mmi_ctx->ss_type == CISS_SERVICE_FORWARDING) {
+ stCfActReq.Mode = TAPI_SS_CF_MODE_REGISTRATION_EV;
+
+ err = tel_set_ss_forward(ad->tapi_handle, &stCfActReq, __ciss_ss_forward_resp_cb, ad);
+ if (err != TAPI_API_SUCCESS) {
+ DBG("\n [CISS-ENGINE] tel_set_ss_forward : REGISTRATION call fails g_err_code = %x", err);
+ _ciss_get_error_from_tapi_error(&error_code, err);
+ return error_code;
+ }
+ }
+ break;
+ case eraseSS:
+ DBG("eraseSS");
+ if (mmi_ctx->ss_type == CISS_SERVICE_FORWARDING) {
+ stCfActReq.Mode = TAPI_SS_CF_MODE_ERASURE_EV;
+
+ err = tel_set_ss_forward(ad->tapi_handle, &stCfActReq, __ciss_ss_forward_resp_cb, ad);
+ if (err != TAPI_API_SUCCESS) {
+ DBG("\n [CISS-ENGINE] tel_set_ss_forward : DE-REGISTRATION call fails g_err_code = %x", err);
+ _ciss_get_error_from_tapi_error(&error_code, err);
+ }
+ }
+ break;
+ case activateSS:
+ DBG("activateSS");
+ switch(mmi_ctx->ss_type){
+ case CISS_SERVICE_FORWARDING:
+ stCfActReq.Mode = TAPI_SS_CF_MODE_ENABLE_EV;
+
+ err = tel_set_ss_forward(ad->tapi_handle, &stCfActReq, __ciss_ss_forward_resp_cb, ad);
+ if (err != TAPI_API_SUCCESS) {
+ DBG("\n [CISS-ENGINE] tel_set_ss_forward : ACTIVATE call fails g_err_code = %x", err);
+ _ciss_get_error_from_tapi_error(&error_code, err);
+ }
+ break;
+ case CISS_SERVICE_BARRING:
+ stCbReq.Mode = TAPI_SS_CB_MODE_ACTIVATE;
+
+ err = tel_set_ss_barring(ad->tapi_handle, &stCbReq, __ciss_ss_barring_resp_cb, ad);
+ if (err != TAPI_API_SUCCESS) {
+ DBG("\n [CISS-ENGINE] tel_set_ss_barring : ACTIVATE call fails g_err_code = %x", err);
+ _ciss_get_error_from_tapi_error(&error_code, err);
+ }
+ break;
+ case CISS_SERVICE_WAITING:
+ stCwReq.Mode = TAPI_SS_CW_MODE_ACTIVATE;
+
+ err = tel_set_ss_waiting(ad->tapi_handle, &stCwReq, __ciss_ss_waiting_resp_cb, ad);
+ if (err != TAPI_API_SUCCESS) {
+ DBG("\n [CISS-ENGINE] tel_set_ss_waiting : ACTIVATION call fails g_err_code = %x", err);
+ _ciss_get_error_from_tapi_error(&error_code, err);
+ }
+ break;
+ case CISS_SERVICE_IDENTIFICATION:
+ DBG("\n [CISS-ENGINE] Don't activated CLI option");
+ error_code = CISS_ERR_ILLEGAL_SS_OPER;
+ break;
+ }
+ break;
+ case deactivateSS:
+ DBG("deactivateSS");
+ switch(mmi_ctx->ss_type){
+ case CISS_SERVICE_FORWARDING:
+ stCfActReq.Mode = TAPI_SS_CF_MODE_DISABLE_EV;
+ err = tel_set_ss_forward(ad->tapi_handle, &stCfActReq, __ciss_ss_forward_resp_cb, ad);
+ if (err != TAPI_API_SUCCESS) {
+ DBG("\n [CISS-ENGINE] tel_set_ss_forward : DEACTIVATE call fails g_err_code = %x", err);
+ _ciss_get_error_from_tapi_error(&error_code, err);
+ }
+ break;
+ case CISS_SERVICE_BARRING:
+ stCbReq.Mode = TAPI_SS_CB_MODE_DEACTIVATE;
+ err = tel_set_ss_barring(ad->tapi_handle, &stCbReq, __ciss_ss_barring_resp_cb, ad);
+ if (err != TAPI_API_SUCCESS) {
+ DBG("\n [CISS-ENGINE] tel_set_ss_barring : DEACTIVATE call fails g_err_code = %x", err);
+ _ciss_get_error_from_tapi_error(&error_code, err);
+ }
+ break;
+ case CISS_SERVICE_WAITING:
+ stCwReq.Mode = TAPI_SS_CW_MODE_DEACTIVATE;
+ err = tel_set_ss_waiting(ad->tapi_handle, &stCwReq, __ciss_ss_waiting_resp_cb, ad);
+ if (err != TAPI_API_SUCCESS) {
+ DBG("\n [CISS-ENGINE] tel_set_ss_waiting : ACTIVATION call fails g_err_code = %x", err);
+ _ciss_get_error_from_tapi_error(&error_code, err);
+ }
+ break;
+ }
+ break;
+ case interrogateSS:
+ DBG("interrogateSS");
+ switch(mmi_ctx->ss_type){
+ case CISS_SERVICE_FORWARDING:
+ err = tel_get_ss_forward_status(ad->tapi_handle, stCfActReq.Class, stCfActReq.Condition,
+ __ciss_ss_forward_resp_cb, ad);
+ if (err != TAPI_API_SUCCESS) {
+ DBG("\n [CISS-ENGINE] tel_get_ss_forward_status call fails g_err_code = %x", err);
+ _ciss_get_error_from_tapi_error(&error_code, err);
+ }
+ break;
+ case CISS_SERVICE_BARRING:
+ err = tel_get_ss_barring_status(ad->tapi_handle, stCbReq.Class, stCbReq.Type,
+ __ciss_ss_barring_resp_cb, ad);
+ if (err != TAPI_API_SUCCESS) {
+ DBG("\n [CISS-ENGINE] tel_get_ss_barring_status call fails g_err_code = %x", err);
+ _ciss_get_error_from_tapi_error(&error_code, err);
+ }
+ break;
+ case CISS_SERVICE_WAITING:
+ err = tel_get_ss_waiting_status(ad->tapi_handle, stCbReq.Class,
+ __ciss_ss_waiting_resp_cb, ad);
+ if (err != TAPI_API_SUCCESS) {
+ DBG("\n [CISS-ENGINE] tel_get_ss_waiting_status call fails g_err_code = %x", err);
+ _ciss_get_error_from_tapi_error(&error_code, err);
+ }
+ break;
+ case CISS_SERVICE_IDENTIFICATION:
+ cliType = (TelSsCliType_t)mmi_ctx->ss_flavor;
+ err = tel_get_ss_cli_status(ad->tapi_handle, cliType,
+ __ciss_ss_cli_resp_cb, ad);
+ if (err != TAPI_API_SUCCESS) {
+ DBG("\n [CISS-ENGINE] tel_get_ss_cli_status call fails g_err_code = %x", err);
+ _ciss_get_error_from_tapi_error(&error_code, err);
+ }
+ break;
+ }
+ break;
+ case registerPassword:
+ DBG("registerPassword");
+ /* password registration request */
+ /* check for too short password and mismatch password */
+ if (CISS_MAX_PASSWORD_LEN > strlen(mmi_ctx->ss_password) ||
+ CISS_MAX_PASSWORD_LEN > strlen(mmi_ctx->ss_new_password) ||
+ CISS_MAX_PASSWORD_LEN > strlen(mmi_ctx->ss_new_password2)) {
+ /* too short password */
+ DBG("\n [CISS-ENGINE] Too short password");
+ error_code = CISS_ERR_CB_PWD_TOO_SORT;
+ }
+
+ err = tel_change_ss_barring_password(ad->tapi_handle,
+ mmi_ctx->ss_password,
+ mmi_ctx->ss_new_password,
+ mmi_ctx->ss_new_password2,
+ __ciss_change_ss_barring_pw_resp_cb, ad);
+
+ if (err != TAPI_API_SUCCESS) {
+ DBG("\n [CISS-ENGINE] tel_change_ss_barring_password call fails g_err_code = %x", err);
+ _ciss_get_error_from_tapi_error(&error_code, err);
+ }
+ break;
+ case processUnstructuredSS_Request:
+ DBG("processUnstructuredSS_Request");
+ memset(&stUssdRecord, 0, sizeof(TelSsUssdMsgInfo_t));
+ stUssdRecord.Length = mmi_ctx->user_string_length;
+ stUssdRecord.Type = mmi_ctx->ussd_type;
+
+ _ciss_strcpy(stUssdRecord.szString, sizeof(stUssdRecord.szString), (char *)mmi_ctx->user_string);
+
+ DBG("\n [CISS-ENGINE] stUssdRecord.Length = %d, stUssdRecord.ussd_string = %s", stUssdRecord.Length, stUssdRecord.szString);
+
+ err = tel_send_ss_ussd_request(ad->tapi_handle,
+ &stUssdRecord,
+ __ciss_ss_ussd_resp_cb, ad);
+ if (err != TAPI_API_SUCCESS) {
+ DBG("\n [CISS-ENGINE] tel_send_ss_ussd_request call fails g_err_code = %x", err);
+ _ciss_get_error_from_tapi_error(&error_code, err);
+ }
+ break;
+ case unstructuredSS_Request:
+ DBG("unstructuredSS_Request");
+ memset(&stUssdRecord, 0, sizeof(TelSsUssdMsgInfo_t));
+ stUssdRecord.Length = mmi_ctx->user_string_length;
+ stUssdRecord.Type = mmi_ctx->ussd_type;
+
+ _ciss_strcpy(stUssdRecord.szString, sizeof(stUssdRecord.szString), (char *)mmi_ctx->user_string);
+
+ DBG("\n [CISS-ENGINE] stUssdRecord.Length = %d, stUssdRecord.ussd_string = %s", stUssdRecord.Length, stUssdRecord.szString);
+
+ err = tel_send_ss_ussd_request(ad->tapi_handle,
+ &stUssdRecord,
+ __ciss_ss_ussd_resp_cb, ad);
+ if (err != TAPI_API_SUCCESS) {
+ DBG("\n [CISS-ENGINE] tel_send_ss_ussd_request call fails g_err_code = %x", err);
+ _ciss_get_error_from_tapi_error(&error_code, err);
+ }
+ break;
+ default:
+ error_code = CISS_ERR_UNKNOWN;
+ DBG("\n [CISS-ENGINE] Invalid Parsed opcode = %d", mmi_ctx->opcode);
+ break;
+ }
+
+ DBG("Leave");
+ return error_code;
+}
+
+int _ciss_on_tapi_sat_ss_event(void *tapi_data, void *data)
+{
+ DBG("Enter");
+ retv_if(data == NULL, -1);
+
+ int ret = -1;
+
+ ciss_appdata_t *ad = (ciss_appdata_t *)data;
+ TelSatSendSsIndSsData_t send_ss_info;
+ memset(&send_ss_info, 0, sizeof(TelSatSendSsIndSsData_t));
+ memcpy(&send_ss_info, tapi_data, sizeof(TelSatSendSsIndSsData_t));
+
+ DBG("ad->is_sat_request = %d", ad->is_sat_request);
+
+ if (ad->popup) {
+ evas_object_del(ad->popup);
+ ad->popup = NULL;
+ }
+
+ if (send_ss_info.ssStringLen > 0) {
+ ciss_err_t ciss_err_code;
+ ad->is_sat_request = EINA_TRUE;
+ ad->sat_terminal_response.sat_command_id = send_ss_info.commandId;
+
+ ciss_mmi_context_t mmi_ctx;
+ ciss_err_code = _ciss_parse_req_string((char *)send_ss_info.ssString, &mmi_ctx);
+
+ if (ciss_err_code == CISS_ERR_NONE) {
+ ciss_err_code = _ciss_send_tapi_request(&mmi_ctx, ad);
+ ret = 0;
+ } else {
+ TelSatAppsRetInfo_t app_ret_info;
+ memset(&app_ret_info, 0, sizeof(TelSatAppsRetInfo_t));
+
+ app_ret_info.commandType = TAPI_SAT_CMD_TYPE_SEND_SS;
+ app_ret_info.commandId = ad->sat_terminal_response.sat_command_id;
+ app_ret_info.appsRet.sendSs.resp = TAPI_SAT_R_COMMAND_DATA_NOT_UNDERSTOOD_BY_ME;
+ app_ret_info.appsRet.sendSs.ssCause = TAPI_SS_UNKNOWNERROR;
+ app_ret_info.appsRet.sendSs.meProblem = TAPI_SAT_ME_PROBLEM_INVALID;
+ app_ret_info.appsRet.sendSs.ssString.stringLen = 0;
+ ret = tel_send_sat_app_exec_result(ad->tapi_handle, &app_ret_info);
+ elm_exit();
+ }
+ }
+ DBG("Leave");
+
+ return ret;
+}
+
+int _ciss_on_tapi_sat_ussd_event(void *tapi_data, void *data)
+{
+ DBG("Enter");
+ retv_if(tapi_data == NULL, -1);
+ retv_if(data == NULL, -1);
+
+ int ret = -1;
+
+ ciss_appdata_t *ad = (ciss_appdata_t *)data;
+ TelSatSendUssdIndUssdData_t send_ussd_info;
+ memset(&send_ussd_info, 0, sizeof(TelSatSendUssdIndUssdData_t));
+ memcpy(&send_ussd_info, tapi_data, sizeof(TelSatSendUssdIndUssdData_t));
+
+ DBG("ad->is_sat_request = %d", ad->is_sat_request);
+
+ if (ad->popup) {
+ evas_object_del(ad->popup);
+ ad->popup = NULL;
+ }
+
+ if (send_ussd_info.ussdStringLen > 0) {
+ ad->is_sat_request = EINA_TRUE;
+ ad->sat_terminal_response.sat_command_id = send_ussd_info.commandId;
+
+ TelSsUssdMsgInfo_t ussd_info;
+ ussd_info.Type = TAPI_SS_USSD_TYPE_USER_INIT;
+ ussd_info.Length = (int)(send_ussd_info.ussdStringLen);
+ if (ussd_info.Length >0)
+ memcpy(&ussd_info.szString, send_ussd_info.ussdString, ussd_info.Length);
+
+ ret = tel_send_ss_ussd_request(ad->tapi_handle, &ussd_info,
+ __ciss_ss_ussd_resp_cb, ad);
+ } else {
+ TelSatAppsRetInfo_t app_ret_info;
+ memset(&app_ret_info, 0, sizeof(TelSatAppsRetInfo_t));
+
+ app_ret_info.commandType = TAPI_SAT_CMD_TYPE_SEND_USSD;
+ app_ret_info.commandId = ad->sat_terminal_response.sat_command_id;
+
+ app_ret_info.appsRet.sendUssd.resp = TAPI_SAT_R_COMMAND_DATA_NOT_UNDERSTOOD_BY_ME;
+ app_ret_info.appsRet.sendUssd.ssCause = TAPI_SS_UNKNOWNERROR;
+ app_ret_info.appsRet.sendUssd.meProblem = TAPI_SAT_ME_PROBLEM_INVALID;
+ app_ret_info.appsRet.sendUssd.ussdString.stringLen = 0;
+ ret = tel_send_sat_app_exec_result(ad->tapi_handle, &app_ret_info);
+ elm_exit();
+ }
+ DBG("Leave, return=%d", ret);
+
+ return ret;
+}
+
+static void __ciss_tapi_ss_rel_complete_cb(TapiHandle *tapi_handle, const char *noti_id, void *data, void *user_data)
+{
+ DBG("Enter");
+ ret_if(data == NULL);
+ ret_if(user_data == NULL);
+
+ char * msg_length_temp;
+
+ ciss_appdata_t *ad = (ciss_appdata_t *)user_data;
+ TelSsRelCompMsgInfo_t rel_comp_info;
+
+ DBG("event type=%s, is_sat_request=%d", noti_id, ad->is_sat_request);
+ ad->sat_terminal_response.rel_comp_msg_length = 0;
+
+ if (ad->is_sat_request == EINA_TRUE) {
+ memcpy(&rel_comp_info, data, sizeof(TelSsRelCompMsgInfo_t));
+ msg_length_temp = (char *)(&(rel_comp_info.RelCompMsgLen));
+ ad->sat_terminal_response.rel_comp_msg_length = (unsigned short)(atoi(msg_length_temp));
+
+ if (ad->sat_terminal_response.rel_comp_msg_length > 0) {
+ memcpy(ad->sat_terminal_response.rel_comp_msg_string, rel_comp_info.szRelCompMsg, rel_comp_info.RelCompMsgLen);
+ }
+ }
+
+ DBG("rel_comp_info.RelCompMsgLen = %s", rel_comp_info.RelCompMsgLen);
+ DBG("rel_comp_info.szRelCompMsg = %s", rel_comp_info.szRelCompMsg);
+ DBG("ad->sat_terminal_response.rel_comp_msg_length = %d", ad->sat_terminal_response.rel_comp_msg_length);
+ DBG("ad->sat_terminal_response.rel_comp_msg_string = %s", ad->sat_terminal_response.rel_comp_msg_string);
+
+ return ;
+}
+
+static void __ciss_tapi_ss_resp_handle(int result, void *tapi_data, void *data)
+{
+ DBG("Enter");
+ ret_if(data == NULL);
+
+ int ret = -1;
+ ciss_appdata_t *ad = (ciss_appdata_t *)data;
+
+ DBG("result=0x%x ad->is_sat_request=%d", result, ad->is_sat_request);
+
+ if (ad->popup) {
+ evas_object_del(ad->popup);
+ ad->popup = NULL;
+ }
+
+ if (ad->is_sat_request == EINA_TRUE) {
+ TelSatAppsRetInfo_t app_ret_info;
+ app_ret_info.commandType = TAPI_SAT_CMD_TYPE_SEND_SS;
+ app_ret_info.commandId = ad->sat_terminal_response.sat_command_id;
+
+ if (result == TAPI_SS_SUCCESS) {
+ app_ret_info.appsRet.sendSs.resp = TAPI_SAT_R_SUCCESS;
+ app_ret_info.appsRet.sendSs.ssCause = TAPI_SS_SUCCESS;
+ app_ret_info.appsRet.sendSs.meProblem = TAPI_SAT_ME_PROBLEM_NO_SPECIFIC_CAUSE;
+ if (ad->sat_terminal_response.rel_comp_msg_length >0) {
+ app_ret_info.appsRet.sendSs.ssString.stringLen = ad->sat_terminal_response.rel_comp_msg_length;
+ memcpy(app_ret_info.appsRet.sendSs.ssString.string,
+ ad->sat_terminal_response.rel_comp_msg_string, ad->sat_terminal_response.rel_comp_msg_length);
+ } else {
+ app_ret_info.appsRet.sendSs.ssString.stringLen = 0;
+ }
+ } else {
+ app_ret_info.appsRet.sendSs.resp = TAPI_SAT_R_SS_RETURN_ERROR;
+ app_ret_info.appsRet.sendSs.ssCause = result;
+ }
+ ret = tel_send_sat_app_exec_result(ad->tapi_handle, &app_ret_info);
+ elm_exit();
+ } else {
+ /* create window */
+ Evas_Object *content;
+
+ DBG("win=0x%p main=0x%p",ad->win_main, ad->layout_main);
+
+ if (ad->win_main == NULL) {
+ Evas_Object *win;
+ win = _ciss_create_win(PACKAGE);
+ ad->win_main = win;
+ ret_if(ad->win_main == NULL);
+ ad->end_key_event_handler = ecore_event_handler_add(ECORE_EVENT_KEY_DOWN, _ciss_on_end_key_down, NULL);
+ evas_object_show(win);
+ }
+
+ DBG("win=0x%p main=0x%p", ad->win_main, ad->layout_main);
+
+ if (result == TAPI_SS_SUCCESS) {
+ if (ad->bg == NULL) {
+ ad->bg = _ciss_create_bg(ad->win_main);
+ ret_if(ad->bg == NULL);
+ }
+
+ if (ad->layout_main == NULL) {
+ ad->layout_main = _ciss_create_layout_main(ad->win_main);
+ ret_if(ad->layout_main== NULL);
+ }
+ DBG("win=0x%p main=0x%p", ad->win_main, ad->layout_main);
+
+ content = (Evas_Object *)_ciss_create_ss_resp_view(ad->layout_main, tapi_data, ad);
+ ret_if(content == NULL);
+ elm_object_part_content_set(ad->layout_main, "elm.swallow.content", content);
+ } else {
+ ciss_err_t ciss_err;
+ _ciss_get_error_from_tapi_error(&ciss_err, result);
+ _ciss_create_error_popup(ad->win_main, ciss_err, 2.0, ad);
+ }
+
+ }
+
+ DBG("Leave");
+}
+
+int _ciss_tapi_ussd_resp_handle(int result, void *tapi_data, void *data)
+{
+ DBG("Enter");
+ retv_if(data == NULL, -1);
+
+ ciss_appdata_t *ad = (ciss_appdata_t *)data;
+
+ int ret = -1;
+
+ if (ad->popup) {
+ evas_object_del(ad->popup);
+ ad->popup = NULL;
+ }
+
+ DBG("result=0x%x ad->is_sat_request=%d", result, ad->is_sat_request);
+ if (ad->is_sat_request == EINA_TRUE) {
+ TelSatAppsRetInfo_t app_ret_info;
+ TelSsUssdResp_t ussd_info;
+ memset(&ussd_info, 0, sizeof(TelSsUssdResp_t));
+ memcpy(&ussd_info, tapi_data, sizeof(TelSsUssdResp_t));
+
+ app_ret_info.commandType = TAPI_SAT_CMD_TYPE_SEND_USSD;
+ app_ret_info.commandId = ad->sat_terminal_response.sat_command_id;
+
+ if (result == TAPI_SS_SUCCESS) {
+ app_ret_info.appsRet.sendUssd.resp = TAPI_SAT_R_SUCCESS;
+ app_ret_info.appsRet.sendUssd.ssCause = TAPI_SS_SUCCESS;
+ app_ret_info.appsRet.sendUssd.meProblem = TAPI_SAT_ME_PROBLEM_NO_SPECIFIC_CAUSE;
+ app_ret_info.appsRet.sendUssd.ussdString.stringLen = ussd_info.Length;
+ if (ad->sat_terminal_response.rel_comp_msg_length >0) {
+ app_ret_info.appsRet.sendUssd.ussdString.stringLen = ad->sat_terminal_response.rel_comp_msg_length;
+ memcpy(app_ret_info.appsRet.sendUssd.ussdString.string,
+ ad->sat_terminal_response.rel_comp_msg_string, ad->sat_terminal_response.rel_comp_msg_length);
+ } else {
+ app_ret_info.appsRet.sendUssd.ussdString.stringLen = 0;
+ }
+ } else {
+ app_ret_info.appsRet.sendUssd.resp = TAPI_SAT_R_USSD_RETURN_ERROR;
+ app_ret_info.appsRet.sendUssd.ssCause = result;
+ }
+
+ ret = tel_send_sat_app_exec_result(ad->tapi_handle, &app_ret_info);
+ ad->is_sat_request = EINA_FALSE;
+ }
+
+ /* create window */
+ Evas_Object *content;
+
+ if (ad->win_main == NULL) {
+ Evas_Object *win;
+ win = _ciss_create_win(PACKAGE);
+ retv_if(win == NULL, -1);
+ ad->win_main = win;
+ evas_object_show(win);
+ ad->end_key_event_handler = ecore_event_handler_add(ECORE_EVENT_KEY_DOWN, _ciss_on_end_key_down, NULL);
+ }
+
+ if (result == TAPI_SS_SUCCESS) {
+ if (ad->bg == NULL) {
+ ad->bg = _ciss_create_bg(ad->win_main);
+ retv_if(ad->bg == NULL, -1);
+ }
+
+ if (ad->layout_main == NULL) {
+ ad->layout_main = _ciss_create_layout_main(ad->win_main);
+ retv_if(ad->layout_main== NULL, -1);
+ }
+ DBG("win=0x%p main=0x%p", ad->win_main, ad->layout_main);
+
+ content = (Evas_Object *)_ciss_create_ussd_view(ad->layout_main, tapi_data, ad);
+ retv_if(data == NULL, -1);
+ elm_object_part_content_set(ad->layout_main, "elm.swallow.content", content);
+ } else {
+ ciss_err_t ciss_err;
+ _ciss_get_error_from_tapi_error(&ciss_err, result);
+ _ciss_create_error_popup(ad->win_main, ciss_err, 2.0, ad);
+ }
+ ret = 0;
+
+ DBG("Leave");
+ return ret;
+}
+
+static void __ciss_ss_forward_resp_cb(TapiHandle *handle, int result, void *data, void *user_data)
+{
+ DBG("Enter");
+ ret_if(data == NULL);
+ ret_if(user_data == NULL);
+
+ ciss_appdata_t *ad = (ciss_appdata_t *)user_data;
+
+ ad->resp_ss_type = CISS_SERVICE_FORWARDING;
+ __ciss_tapi_ss_resp_handle(result, data, user_data);
+ return;
+}
+
+static void __ciss_ss_barring_resp_cb(TapiHandle *handle, int result, void *data, void *user_data)
+{
+ DBG("Enter");
+ ret_if(data == NULL);
+ ret_if(user_data == NULL);
+
+ ciss_appdata_t *ad = (ciss_appdata_t *)user_data;
+
+ ad->resp_ss_type = CISS_SERVICE_BARRING;
+ __ciss_tapi_ss_resp_handle(result, data, user_data);
+ return;
+}
+
+static void __ciss_ss_waiting_resp_cb(TapiHandle *handle, int result, void *data, void *user_data)
+{
+ DBG("Enter");
+ ret_if(data == NULL);
+ ret_if(user_data == NULL);
+
+ ciss_appdata_t *ad = (ciss_appdata_t *)user_data;
+
+ ad->resp_ss_type = CISS_SERVICE_WAITING;
+ __ciss_tapi_ss_resp_handle(result, data, user_data);
+ return;
+}
+
+static void __ciss_ss_cli_resp_cb(TapiHandle *handle, int result, void *data, void *user_data)
+{
+ DBG("Enter");
+ ret_if(data == NULL);
+ ret_if(user_data == NULL);
+
+ ciss_appdata_t *ad = (ciss_appdata_t *)user_data;
+
+ ad->resp_ss_type = CISS_SERVICE_IDENTIFICATION;
+ __ciss_tapi_ss_resp_handle(result, data, user_data);
+ return;
+}
+
+static void __ciss_change_ss_barring_pw_resp_cb(TapiHandle *handle, int result, void *data, void *user_data)
+{
+ DBG("Enter");
+ ret_if(data == NULL);
+ ret_if(user_data == NULL);
+
+ ciss_appdata_t *ad = (ciss_appdata_t *)user_data;
+
+ ad->resp_ss_type = CISS_SERVICE_CHANGE_BARRING_PASSWD;
+ __ciss_tapi_ss_resp_handle(result, data, user_data);
+ return;
+}
+
+static void __ciss_ss_ussd_resp_cb(TapiHandle *handle, int result, void *data, void *user_data)
+{
+ DBG("Enter");
+ ret_if(data == NULL);
+ ret_if(user_data == NULL);
+
+ ciss_appdata_t *ad = (ciss_appdata_t *)user_data;
+
+ ad->resp_ss_type = CISS_SERVICE_USSD;
+ _ciss_tapi_ussd_resp_handle(result, data, user_data);
+ return;
+}