merge from master branch's latest code.
[apps/core/preloaded/ciss.git] / src / ciss-tapi-request.c
old mode 100755 (executable)
new mode 100644 (file)
index 76a87f2..e9677e4
@@ -1,12 +1,12 @@
 /*
  * 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
- * 
+ *
+ * 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.
  * limitations under the License.
  */
 
-#include <TapiEvent.h>
-#include <ITapiSs.h>
-#include <ITapiSat.h>
-#include <TapiCommon.h>
 #include "ciss-tapi-request.h"
 #include "ciss-parser.h"
 #include "ciss-util.h"
 #include "ciss-resp.h"
 #include "ciss-converter.h"
 
-typedef struct _EventHandler {
-       int event_type;
-       unsigned int event_id;
-       TelAppCallback func;
-} EventHandler;
+static void __ciss_tapi_ss_rel_complete_cb(TapiHandle *tapi_handle, const char *event_type, 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_EVENT_SS_BARRING_CHANGEPASS_CNF, 0, _ciss_on_tapi_ss_event},
-       {TAPI_EVENT_SS_BARRING_CNF, 0, _ciss_on_tapi_ss_event},
-       {TAPI_EVENT_SS_BARRING_QUERYSTATUS_CNF, 0, _ciss_on_tapi_ss_event},
-       {TAPI_EVENT_SS_CLI_QUERYSTATUS_CNF, 0, _ciss_on_tapi_ss_event},
-       {TAPI_EVENT_SS_FORWARD_CNF, 0, _ciss_on_tapi_ss_event},
-       {TAPI_EVENT_SS_FORWARD_QUERYSTATUS_CNF, 0, _ciss_on_tapi_ss_event},
-       {TAPI_EVENT_SS_USSD_CANCEL_CNF, 0, _ciss_on_tapi_ussd_event},
-       {TAPI_EVENT_SS_USSD_CNF, 0, _ciss_on_tapi_ussd_event},
-       {TAPI_EVENT_SS_WAITING_CNF, 0, _ciss_on_tapi_ss_event},
-       {TAPI_EVENT_SS_WAITING_QUERYSTATUS_CNF, 0, _ciss_on_tapi_ss_event},
-       {TAPI_EVENT_SAT_SEND_SS_IND, 0, _ciss_on_tapi_sat_ss_event},
-       {TAPI_EVENT_SAT_SEND_USSD_IND, 0, _ciss_on_tapi_sat_ussd_event},
-       {TAPI_EVENT_SS_REL_COMP_MSG_NOTIFY, 0, _ciss_on_tapi_ss_rel_complete_noti},
+       {TAPI_NOTI_SS_RELEASE_COMPLETE, 0, __ciss_tapi_ss_rel_complete_cb},
 };
 
-int _ciss_tapi_event_setup(struct appdata *ad)
+int _ciss_tapi_event_setup(ciss_appdata_t *ad)
 {
        DBG("Enter");
        int i = 0;
@@ -60,101 +46,80 @@ int _ciss_tapi_event_setup(struct appdata *ad)
 
        len = sizeof(event_list) / sizeof(EventHandler);
 
-       if (tel_init() == 0) {
+       ad->tapi_handle = tel_init(NULL);
+       if (ad->tapi_handle) {
                for (i = 0; i < len; i++) {
-                       tel_register_event(event_list[i].event_type, &(event_list[i].event_id), event_list[i].func, (void *)ad);
+                       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;
+                       }
                }
-
-               if ((api_err = tel_register_app_name("org.tizen.ciss-mmi")) != TAPI_API_SUCCESS)
-                       DBG("tel_register_app_name failed error=%d", api_err);
-       } else
-               DBG("TelTapiInitEcore() failed.");
+       } else {
+               DBG("tapi_init() failed.");
+       }
 
        DBG("Leave");
        return 0;
 }
 
-void _ciss_deregister_tel_event(void)
+void _ciss_deregister_tel_event(void *data)
 {
        DBG("Enter");
-       int len, ret, i;
+       ret_if(data == NULL);
 
-       len = sizeof(event_list) / sizeof(EventHandler);
+       ciss_appdata_t *ad = (ciss_appdata_t *)data;
+       int ret = TAPI_API_SUCCESS;
 
-       for (i = 0; i < len; i++) {
-               ret = tel_deregister_event(event_list[i].event_id);
-               if (ret != TAPI_API_SUCCESS)
-                       DBG("tel_deregister_event error=%d", ret);
+       ret = tel_deinit(ad->tapi_handle);
+       if (ret != TAPI_API_SUCCESS) {
+               DBG("tapi_deinit() ret : %d", ret);
        }
-
-       ret = tel_deinit();
-       if (ret != TAPI_API_SUCCESS)
-               DBG("TAPI delinit() ret : %d", ret);
 }
 
-ciss_err_t _ciss_send_tapi_request(ciss_mmi_context_t *mmi_ctx)
+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;
-       TelSsCallBarringInfo_t stCbReq;
+       TelSsBarringInfo_t stCbReq;
        TelSsWaitingInfo_t stCwReq;
-       int RequestId;
-       TapiResult_t err = TAPI_API_SUCCESS;
+       int err = TAPI_API_SUCCESS;
+       TelSsCliType_t cliType;
        ciss_err_t error_code = CISS_ERR_NONE;
 
-       if (mmi_ctx->ss_type == TAPI_SS_TYPE_FORWARDING) {
+       if (mmi_ctx->ss_type == CISS_SERVICE_FORWARDING) {
                memset(&stCfActReq, 0, sizeof(TelSsForwardInfo_t));
-               stCfActReq.Condition = TAPI_SS_FORWARD_WHEN_UNCONDITIONAL_EV;
                stCfActReq.Condition = (TelSsForwardWhen_t) mmi_ctx->ss_flavor;
                DBG("\n [CISS-ENGINE] ss_flavor= %d,%d", stCfActReq.Condition, mmi_ctx->ss_flavor);
 
-               _ciss_get_tapi_forward_type(mmi_ctx->tapi_bsg, &stCfActReq.Type);
+               stCfActReq.Class = mmi_ctx->tapi_bsg;
                stCfActReq.NoReplyConditionTimer = mmi_ctx->nr_timer;
-               strncpy((char *)stCfActReq.szPhoneNumber, mmi_ctx->divert_number, CISS_NUMBER_LEN_MAX);
+               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 == TAPI_SS_TYPE_BARRING) {
-               memset(&stCbReq, 0, sizeof(TelSsCallBarringInfo_t));
-               stCbReq.Type = (TelSsCallBarType_t) mmi_ctx->ss_flavor;
+       } 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);
-               _ciss_get_tapi_call_type(mmi_ctx->tapi_bsg, &stCbReq.CallType);
+               stCbReq.Class = mmi_ctx->tapi_bsg;
                memcpy(&stCbReq.szPassword, mmi_ctx->ss_password, CISS_MAX_PASSWORD_LEN);
-       } else if (mmi_ctx->ss_type == TAPI_SS_TYPE_WAITING) {
+       } else if (mmi_ctx->ss_type == CISS_SERVICE_WAITING) {
                memset(&stCwReq, 0, sizeof(TelSsWaitingInfo_t));
-               _ciss_get_tapi_call_type(mmi_ctx->tapi_bsg, &stCwReq.CallType);
+               stCwReq.Class = mmi_ctx->tapi_bsg;
        }
        switch (mmi_ctx->opcode) {
        case registerSS:
                DBG("registerSS");
-               /* send a register request */
-               if (mmi_ctx->ss_type == TAPI_SS_TYPE_FORWARDING) {
-                       stCfActReq.Mode = TAPI_CALL_FORWARD_MODE_REGISTRATION_EV;
+               if (mmi_ctx->ss_type == CISS_SERVICE_FORWARDING) {
+                       stCfActReq.Mode = TAPI_SS_CF_MODE_REGISTRATION_EV;
 
-                       err = tel_set_ss_forward(&stCfActReq, &RequestId);
+                       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);
-                               DBG("\n [CISS-ENGINE] tel_set_ss_forward : REGISTRATION call fails request ID = %d", RequestId);
-                               _ciss_get_error_from_tapi_error(&error_code, err);
-                               return error_code;
-                       }
-               } else if (mmi_ctx->ss_type == TAPI_SS_TYPE_BARRING) {
-
-                       stCbReq.Mode = TAPI_SS_CALL_BAR_ACTIVATE;
-
-                       err = tel_set_ss_barring(&stCbReq, &RequestId);
-                       if (err != TAPI_API_SUCCESS) {
-                               DBG("\n [CISS-ENGINE] tel_set_ss_barring : ACTIVATE call fails g_err_code = %x", err);
-                               DBG("\n [CISS-ENGINE] tel_set_ss_barring : ACTIVATE call fails request ID       = %d", RequestId);
-                               _ciss_get_error_from_tapi_error(&error_code, err);
-                               return error_code;
-                       }
-               } else if (mmi_ctx->ss_type == TAPI_SS_TYPE_WAITING) {
-                       stCwReq.Mode = TAPI_SS_CW_ACTIVATE;
-                       err = tel_set_ss_waiting(&stCwReq, &RequestId);
-                       if (err != TAPI_API_SUCCESS) {
-                               DBG("\n [CISS-ENGINE] tel_set_ss_waiting : ACTIVATION call fails g_err_code = %x", err);
-                               DBG("\n [CISS-ENGINE] tel_set_ss_waiting : ACTIVATION call fails request ID  = %d", RequestId);
                                _ciss_get_error_from_tapi_error(&error_code, err);
                                return error_code;
                        }
@@ -162,152 +127,117 @@ ciss_err_t _ciss_send_tapi_request(ciss_mmi_context_t *mmi_ctx)
                break;
        case eraseSS:
                DBG("eraseSS");
-               /* send an erase command */
-               if (mmi_ctx->ss_type == TAPI_SS_TYPE_FORWARDING) {
-                       stCfActReq.Mode = TAPI_CALL_FORWARD_MODE_ERASURE_EV;
+               if (mmi_ctx->ss_type == CISS_SERVICE_FORWARDING) {
+                       stCfActReq.Mode = TAPI_SS_CF_MODE_ERASURE_EV;
 
-                       err = tel_set_ss_forward(&stCfActReq, &RequestId);
+                       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);
-                               DBG("\n [CISS-ENGINE] tel_set_ss_forward : DE-REGISTRATION call fails request = %d", RequestId);
                                _ciss_get_error_from_tapi_error(&error_code, err);
-                               return error_code;
-                       }
-               } else if (mmi_ctx->ss_type == TAPI_SS_TYPE_BARRING) {
-                       stCbReq.Mode = TAPI_SS_CALL_BAR_DEACTIVATE;
-
-                       err = tel_set_ss_barring(&stCbReq, &RequestId);
-                       if (err != TAPI_API_SUCCESS) {
-                               DBG("\n [CISS-ENGINE] tel_set_ss_barring : DEACTIVATE call fails g_err_code = %x", err);
-                               DBG("\n [CISS-ENGINE] tel_set_ss_barring : DEACTIVATE call fails request ID  = %d", RequestId);
-                               _ciss_get_error_from_tapi_error(&error_code, err);
-                               return error_code;
-                       }
-               } else if (mmi_ctx->ss_type == TAPI_SS_TYPE_WAITING) {
-                       stCwReq.Mode = TAPI_SS_CW_DEACTIVATE;
-
-                       err = tel_set_ss_waiting(&stCwReq, &RequestId);
-                       if (err != TAPI_API_SUCCESS) {
-                               DBG("\n [CISS-ENGINE] tel_set_ss_waiting : DEACTIVATION call fails g_err_code = %x", err);
-                               DBG("\n [CISS-ENGINE] tel_set_ss_waiting : DEACTIVATION call fails request ID   = %d", RequestId);
-                               _ciss_get_error_from_tapi_error(&error_code, err);
-                               return error_code;
                        }
                }
                break;
        case activateSS:
                DBG("activateSS");
-               /* send an activate request */
-               if (mmi_ctx->ss_type == TAPI_SS_TYPE_FORWARDING) {
-                       stCfActReq.Mode = TAPI_CALL_FORWARD_MODE_ENABLE_EV;
+               switch (mmi_ctx->ss_type) {
+               case CISS_SERVICE_FORWARDING:
+                       stCfActReq.Mode = TAPI_SS_CF_MODE_ENABLE_EV;
 
-                       err = tel_set_ss_forward(&stCfActReq, &RequestId);
+                       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);
-                               DBG("\n [CISS-ENGINE] tel_set_ss_forward : ACTIVATE call fails request ID       = %d", RequestId);
                                _ciss_get_error_from_tapi_error(&error_code, err);
-                               return error_code;
                        }
-               } else if (mmi_ctx->ss_type == TAPI_SS_TYPE_BARRING) {
-                       stCbReq.Mode = TAPI_SS_CALL_BAR_ACTIVATE;
+                       break;
+               case CISS_SERVICE_BARRING:
+                       stCbReq.Mode = TAPI_SS_CB_MODE_ACTIVATE;
 
-                       err = tel_set_ss_barring(&stCbReq, &RequestId);
+                       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);
-                               DBG("\n [CISS-ENGINE] tel_set_ss_barring : ACTIVATE call fails request ID       = %d", RequestId);
                                _ciss_get_error_from_tapi_error(&error_code, err);
-                               return error_code;
                        }
+                       break;
+               case CISS_SERVICE_WAITING:
+                       stCwReq.Mode = TAPI_SS_CW_MODE_ACTIVATE;
 
-               } else if (mmi_ctx->ss_type == TAPI_SS_TYPE_WAITING) {
-                       stCwReq.Mode = TAPI_SS_CW_ACTIVATE;
-
-                       err = tel_set_ss_waiting(&stCwReq, &RequestId);
+                       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);
-                               DBG("\n [CISS-ENGINE] tel_set_ss_waiting : ACTIVATION call fails request ID  = %d", RequestId);
                                _ciss_get_error_from_tapi_error(&error_code, err);
-                               return error_code;
                        }
-               } else if (mmi_ctx->ss_type == TAPI_SS_TYPE_IDENTIFICATION) {
+                       break;
+               case CISS_SERVICE_IDENTIFICATION:
                        DBG("\n [CISS-ENGINE] Don't activated CLI option");
                        error_code = CISS_ERR_ILLEGAL_SS_OPER;
-                       return error_code;
+                       break;
                }
                break;
        case deactivateSS:
                DBG("deactivateSS");
-               /* deactivate request */
-               if (mmi_ctx->ss_type == TAPI_SS_TYPE_FORWARDING) {
-                       stCfActReq.Mode = TAPI_CALL_FORWARD_MODE_DISABLE_EV;
-                       err = tel_set_ss_forward(&stCfActReq, &RequestId);
+               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);
-                               DBG("\n [CISS-ENGINE] tel_set_ss_forward : DEACTIVATE call fails request ID  = %d", RequestId);
                                _ciss_get_error_from_tapi_error(&error_code, err);
-                               return error_code;
                        }
-               } else if (mmi_ctx->ss_type == TAPI_SS_TYPE_BARRING) {
-                       stCbReq.Mode = TAPI_SS_CALL_BAR_DEACTIVATE;
-
-                       DBG("\n [CISS-ENGINE] **** ss_mode = %d\n", stCbReq.Mode);
-                       DBG("\n [CISS-ENGINE] **** flavor = %d\n", stCbReq.Type);
-                       DBG("\n [CISS-ENGINE] **** call type = %d\n", stCbReq.CallType);
-                       DBG("\n [CISS-ENGINE] **** Pwd = %s\n", stCbReq.szPassword);
-
-                       err = tel_set_ss_barring(&stCbReq, &RequestId);
+                       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);
-                               DBG("\n [CISS-ENGINE] tel_set_ss_barring : DEACTIVATE call fails request ID  = %d", RequestId);
                                _ciss_get_error_from_tapi_error(&error_code, err);
-                               return error_code;
                        }
-               } else if (mmi_ctx->ss_type == TAPI_SS_TYPE_WAITING) {
-                       stCwReq.Mode = TAPI_SS_CW_DEACTIVATE;
-                       err = tel_set_ss_waiting(&stCwReq, &RequestId);
+                       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);
-                               DBG("\n [CISS-ENGINE] tel_set_ss_waiting : ACTIVATION call fails request ID  = %d", RequestId);
                                _ciss_get_error_from_tapi_error(&error_code, err);
-                               return error_code;
                        }
+                       break;
                }
                break;
        case interrogateSS:
                DBG("interrogateSS");
-               /* interrogate request */
-               if (mmi_ctx->ss_type == TAPI_SS_TYPE_FORWARDING) {
-                       err = tel_get_ss_forward_status(stCfActReq.Type, stCfActReq.Condition, &RequestId);
+               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);
-                               DBG("\n [CISS-ENGINE] tel_get_ss_forward_status : CHECK_STATUS call fails request ID  = %d", RequestId);
                                _ciss_get_error_from_tapi_error(&error_code, err);
-                               return error_code;
                        }
-               } else if (mmi_ctx->ss_type == TAPI_SS_TYPE_BARRING) {
-                       err = tel_get_ss_barring_status(stCbReq.Type, stCbReq.CallType, &RequestId);
+                       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);
-                               DBG("\n [CISS-ENGINE] tel_get_ss_barring_status : CHECK_STATUS call fails request ID  = %d", RequestId);
                                _ciss_get_error_from_tapi_error(&error_code, err);
-                               return error_code;
                        }
-               } else if (mmi_ctx->ss_type == TAPI_SS_TYPE_WAITING) {
-                       err = tel_get_ss_waiting_status(stCwReq.CallType, &RequestId);
+                       break;
+               case CISS_SERVICE_WAITING:
+                       err = tel_get_ss_waiting_status(ad->tapi_handle, stCwReq.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);
-                               DBG("\n [CISS-ENGINE] tel_get_ss_waiting_status : fails request ID  = %d", RequestId);
                                _ciss_get_error_from_tapi_error(&error_code, err);
-                               return error_code;
                        }
-               } else if (mmi_ctx->ss_type == TAPI_SS_TYPE_IDENTIFICATION) {
-                       err = tel_get_ss_cli_status(mmi_ctx->ss_flavor, &RequestId);
+                       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);
-                               DBG("\n [CISS-ENGINE] tel_get_ss_cli_status : fails request ID  = %d", RequestId);
                                _ciss_get_error_from_tapi_error(&error_code, err);
-                               return error_code;
                        }
+                       break;
                }
                break;
        case registerPassword:
@@ -315,195 +245,210 @@ ciss_err_t _ciss_send_tapi_request(ciss_mmi_context_t *mmi_ctx)
                /* 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)) {
+                               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;
-                       return error_code;
                }
 
-               err = tel_change_ss_barring_password(mmi_ctx->ss_password, mmi_ctx->ss_new_password, mmi_ctx->ss_new_password2, &RequestId);
+               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 request ID = %d", RequestId);
                        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);
-                       return error_code;
                }
                break;
        case processUnstructuredSS_Request:
                DBG("processUnstructuredSS_Request");
                memset(&stUssdRecord, 0, sizeof(TelSsUssdMsgInfo_t));
-               stUssdRecord.UssdStringLength = strlen(mmi_ctx->user_string);
+               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.szUssdString, sizeof(stUssdRecord.szUssdString), (char *)mmi_ctx->user_string);
+               _ciss_strcpy(stUssdRecord.szString, sizeof(stUssdRecord.szString), (char *)mmi_ctx->user_string);
 
-               DBG("\n [CISS-ENGINE] string_length = %d, stUssdRecord.ussd_string = %s", stUssdRecord.UssdStringLength, stUssdRecord.szUssdString);
+               DBG("\n [CISS-ENGINE] stUssdRecord.Length = %d, stUssdRecord.ussd_string = %s", stUssdRecord.Length, stUssdRecord.szString);
 
-               err = tel_send_ss_ussd_request(&stUssdRecord, &RequestId);
+               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);
-                       DBG("\n [CISS-ENGINE] tel_send_ss_ussd_request :call fails request ID   = %d", RequestId);
                        _ciss_get_error_from_tapi_error(&error_code, err);
-                       return error_code;
                }
                break;
        default:
                error_code = CISS_ERR_UNKNOWN;
-               DBG("\n [CISS-ENGINE] Invalid Parsed opcode = %d",
-                   mmi_ctx->opcode);
-
+               DBG("\n [CISS-ENGINE] Invalid Parsed opcode = %d", mmi_ctx->opcode);
                break;
        }
 
-#if 0
-#ifndef CF_TEST
-       /* Because tapi sends the CF no reply data for All CF and All conditional CF , we have to make a result flavor with requested data here */
-       if (mmi_ctx->ss_type == TAPI_SS_TYPE_FORWARDING) {
-               memset(&this->ss_result_string, 0, sizeof(ciss_result_t));
-               _ciss_get_forward_flavor_type(mmi_ctx->ss_flavor, &this->ss_result_string.szFlavor);
-
-               if (opcode == eraseSS) {
-                       this->ss_req_data.telecommSvc = mmi_ctx->tapi_bsg;
-                       this->ss_req_data.service = CISS_SERVICE_DIVERTING;
-                       this->ss_req_data.flavor = mmi_ctx->ss_flavor;
-                       this->ss_req_data.action = CISS_ACTION_DEACTIVATE;
-                       DBG("\n [CISS-ENGINE] this->ss_req_data.action : %d\n", this->ss_req_data.action);
-                       DBG("\n [CISS-ENGINE] this->ss_req_data.flavor : %d\n", this->ss_req_data.flavor);
-                       DBG("\n [CISS-ENGINE] this->ss_req_data.telecommSvc : %d\n", this->ss_req_data.telecommSvc);
-                       DBG("\n [CISS-ENGINE] this->ss_req_data.service : %d\n", this->ss_req_data.service);
-               }
-
-               DBG("\n [CISS-ENGINE] Forwarding: Requested ss_flavor =%d\n", this->ss_result_string.szFlavor);
-       } else if (mmi_ctx->ss_type == TAPI_SS_TYPE_BARRING) {
-               memset(&this->ss_result_string, 0, sizeof(ciss_result_t));
-               _ciss_get_barring_flavor_type(mmi_ctx->ss_flavor, &this->ss_result_string.szFlavor);
-
-               DBG("\n [CISS-ENGINE] Barring: Requested ss_flavor =%d\n", this->ss_result_string.szFlavor);
-       }
-#endif
-#endif
        DBG("Leave");
        return error_code;
 }
 
-int _ciss_on_tapi_sat_ss_event(const TelTapiEvent_t *event, void *data)
+int _ciss_on_tapi_sat_ss_event(void *tapi_data, void *data)
 {
        DBG("Enter");
-       retv_if(event == NULL, -1);
        retv_if(data == NULL, -1);
 
        int ret = -1;
-       struct appdata *ad = (struct appdata *)data;
 
-       DBG("event type=0x%x status=0x%x pDataLen=%d is_sat=%d",event->EventType, event->Status, event->pDataLen, ad->is_sat_request);
+       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;
        }
 
-       TelSatSendSsIndSsData_t send_ss_info;
-       if (event->pDataLen > 0) {
-               memcpy(&send_ss_info, event->pData, sizeof(TelSatSendSsIndSsData_t));
-
-               if (send_ss_info.ssStringLen > 0) {
-                       ciss_err_t ciss_err_code;
-                       ad->is_sat_request = EINA_TRUE;
-                       ad->rel_comp_msg_len = 0;
-                       ad->cmd_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);
-                               ret = 0;
-                       } else {
-                               TelSatAppsRetInfo_t app_ret_info;
-                               app_ret_info.commandId = ad->cmd_id;
-                               app_ret_info.commandType = TAPI_SAT_CMD_TYPE_SEND_SS;
+       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;
 
-                               app_ret_info.appsRet.sendSs.resp = TAPI_SAT_R_NETWORK_UNABLE_TO_PROCESS_COMMAND;
-                               app_ret_info.appsRet.sendSs.ssString.stringLen = 0;
-                               ret = tel_send_sat_app_exec_result(&app_ret_info);
-                               elm_exit();
-                       }
+               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(const TelTapiEvent_t *event, void *data)
+int _ciss_on_tapi_sat_ussd_event(void *tapi_data, void *data)
 {
        DBG("Enter");
-       retv_if(event == NULL, -1);
+       retv_if(tapi_data == NULL, -1);
        retv_if(data == NULL, -1);
 
        int ret = -1;
-       struct appdata *ad = (struct appdata *)data;
 
-       DBG("event type=0x%x status=0x%x pDataLen=%d is_sat=%d", event->EventType, event->Status, event->pDataLen, ad->is_sat_request);
+       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;
        }
 
-       TelSatSendUssdIndUssdData_t send_ussd_info;
-       if (event->pDataLen > 0) {
-               memcpy(&send_ussd_info, event->pData, sizeof(TelSatSendUssdIndUssdData_t));
-
-               if (send_ussd_info.ussdStringLen > 0) {
-                       int req_id;
-                       ad->is_sat_request = EINA_TRUE;
-                       ad->cmd_id = send_ussd_info.commandId;
-                       TelSsUssdMsgInfo_t ussd_info;
-                       ussd_info.UssdStringLength = send_ussd_info.ussdStringLen;
-                       if (ussd_info.UssdStringLength >0)
-                               memcpy(&ussd_info.szUssdString, send_ussd_info.ussdString, ussd_info.UssdStringLength);
-                       ret = tel_send_ss_ussd_request(&ussd_info, &req_id);
+       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;
 }
 
-int _ciss_on_tapi_ss_rel_complete_noti(const TelTapiEvent_t *event, void *data)
+static void __ciss_tapi_ss_rel_complete_cb(TapiHandle *tapi_handle, const char *event_type, void *data, void *user_data)
 {
        DBG("Enter");
-       retv_if(event == NULL, -1);
-       retv_if(data == NULL, -1);
+       ret_if(data == NULL);
+       ret_if(user_data == NULL);
 
-       struct appdata *ad = (struct appdata *)data;
+       ciss_appdata_t *ad = (ciss_appdata_t *)user_data;
        TelSsRelCompMsgInfo_t rel_comp_info;
+       memset(&rel_comp_info, 0, sizeof(TelSsRelCompMsgInfo_t));
 
-       DBG("event type=0x%x status=0x%x pDataLen=%d is_sat=%d",event->EventType, event->Status, event->pDataLen, ad->is_sat_request);
-       ad->rel_comp_msg_len = 0;
+       DBG("event type=%s, is_sat_request=%d", event_type, ad->is_sat_request);
+       ad->sat_terminal_response.rel_comp_msg_length = 0;
 
        if (ad->is_sat_request == EINA_TRUE) {
-               if (event->pDataLen > 0) {
-                       memcpy(&rel_comp_info, event->pData, event->pDataLen);
-                       if (rel_comp_info.RelCompMsgLen > 0) {
-                               memcpy(ad->rel_comp_msg, rel_comp_info.szRelCompMsg, rel_comp_info.RelCompMsgLen);
-                               ad->rel_comp_msg_len = rel_comp_info.RelCompMsgLen;
-                       }
+               memcpy(&rel_comp_info, data, sizeof(TelSsRelCompMsgInfo_t));
+               ad->sat_terminal_response.rel_comp_msg_length = (unsigned short)rel_comp_info.RelCompMsgLen;
+
+               if (ad->sat_terminal_response.rel_comp_msg_length > 0) {
+                       memcpy(ad->sat_terminal_response.rel_comp_msg_string, rel_comp_info.szRelCompMsg, TAPI_MAX_RELEASE_COMPLETE_DATA_LEN);
                }
+
+               DBG("rel_comp_info.RelCompMsgLen = 0x%x", rel_comp_info.RelCompMsgLen);
+               DBG("rel_comp_info.szRelCompMsg = %s", rel_comp_info.szRelCompMsg);
+               DBG("ad->sat_terminal_response.rel_comp_msg_length = 0x%x", 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 0;
+
+       return ;
 }
 
-int _ciss_on_tapi_ss_event(const TelTapiEvent_t *event, void *data)
+static void __ciss_tapi_ss_resp_handle(int result, void *tapi_data, void *data)
 {
        DBG("Enter");
-       retv_if(event == NULL, -1);
-       retv_if(data == NULL, -1);
+       ret_if(data == NULL);
 
-       struct appdata *ad = (struct appdata *)data;
-       TelSsInfo_t ss_info;
        int ret = -1;
+       ciss_appdata_t *ad = (ciss_appdata_t *)data;
 
-       DBG("event type=0x%x status=0x%x pDataLen=%d is_sat=%d", event->EventType, event->Status, event->pDataLen, ad->is_sat_request);
+       DBG("result=0x%x ad->is_sat_request=%d", result, ad->is_sat_request);
 
        if (ad->popup) {
                evas_object_del(ad->popup);
@@ -512,23 +457,25 @@ int _ciss_on_tapi_ss_event(const TelTapiEvent_t *event, void *data)
 
        if (ad->is_sat_request == EINA_TRUE) {
                TelSatAppsRetInfo_t app_ret_info;
-               app_ret_info.commandId = ad->cmd_id;
                app_ret_info.commandType = TAPI_SAT_CMD_TYPE_SEND_SS;
+               app_ret_info.commandId = ad->sat_terminal_response.sat_command_id;
 
-               if (event->Status == TAPI_SS_SUCCESS) {
+               if (result == TAPI_SS_SUCCESS) {
                        app_ret_info.appsRet.sendSs.resp = TAPI_SAT_R_SUCCESS;
-
-                       if (ad->rel_comp_msg_len >0) {
-                               memcpy(app_ret_info.appsRet.sendSs.ssString.string, ad->rel_comp_msg, ad->rel_comp_msg_len);
-                               app_ret_info.appsRet.sendSs.ssString.stringLen = ad->rel_comp_msg_len;
-                       } else
+                       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 = event->Status;
+                       app_ret_info.appsRet.sendSs.ssCause = result;
                }
-               ret = tel_send_sat_app_exec_result(&app_ret_info);
-
+               ret = tel_send_sat_app_exec_result(ad->tapi_handle, &app_ret_info);
                elm_exit();
        } else {
                /* create window */
@@ -540,58 +487,55 @@ int _ciss_on_tapi_ss_event(const TelTapiEvent_t *event, void *data)
                        Evas_Object *win;
                        win = _ciss_create_win(PACKAGE);
                        ad->win_main = win;
-                       retv_if(ad->win_main == NULL, -1);
+                       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 (event->Status == TAPI_SS_SUCCESS) {
-                       if (ad->bg == NULL) {
-                               ad->bg = _ciss_create_bg(ad->win_main);
-                               retv_if(ad->bg == NULL, -1);
-                       }
+               if (ad->conformant == NULL) {
+                       ad->conformant = _ciss_create_conformant(ad->win_main);
+                       ret_if(ad->conformant == NULL);
+                       evas_object_show(ad->conformant);
+               }
 
-                       if (ad->layout_main == NULL) {
-                               ad->layout_main = _ciss_create_layout_main(ad->win_main);
-                               retv_if(ad->layout_main== NULL, -1);
-                       }
+               if (ad->layout_main == NULL) {
+                       ad->layout_main = _ciss_create_layout_main(ad->conformant);
+                       ret_if(ad->layout_main== NULL);
+                       evas_object_show(ad->layout_main);
+               }
+
+               if (ad->bg == NULL) {
+                       ad->bg = _ciss_create_bg(ad->conformant);
+                       ret_if(ad->bg == NULL);
+                       elm_object_part_content_set(ad->layout_main, "elm.swallow.bg", ad->bg);
+               }
+
+               if (result == TAPI_SS_SUCCESS) {
                        DBG("win=0x%p main=0x%p", ad->win_main, ad->layout_main);
 
-                       if (event->pDataLen > 0) {
-                               memcpy(&ss_info, event->pData, sizeof(TelSsInfo_t));
-                               if (event->EventType == TAPI_EVENT_SS_CLI_QUERYSTATUS_CNF &&
-                                       ss_info.SsType == TAPI_SS_TYPE_BARRING) {
-                                       ss_info.SsType = TAPI_SS_TYPE_IDENTIFICATION;
-                               }
-                               content = (Evas_Object *)_ciss_create_ss_resp_view(ad->layout_main, &ss_info, ad);
-                       } else {
-                               content = (Evas_Object *)_ciss_create_ss_resp_view(ad->layout_main, NULL, ad);
-                       }
-                       retv_if(content == NULL, -1);
+                       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, event->Status);
-                       _ciss_create_error_popup(ad->win_main, ciss_err, 2.0, ad);
+                       _ciss_get_error_from_tapi_error(&ciss_err, result);
+                       _ciss_create_error_popup(ad->layout_main, ciss_err, 2.0, ad);
                }
 
-               ret = 0;
        }
 
        DBG("Leave");
-       return ret;
 }
 
-int _ciss_on_tapi_ussd_event(const TelTapiEvent_t *event, void *data)
+int _ciss_tapi_ussd_resp_handle(int result, void *tapi_data, void *data)
 {
        DBG("Enter");
-       retv_if(event == NULL, -1);
        retv_if(data == NULL, -1);
 
-       struct appdata *ad = (struct appdata *)data;
-       TelSsUssdMsgIndInfo_t ussd_info;
+       ciss_appdata_t *ad = (ciss_appdata_t *)data;
+
        int ret = -1;
 
        if (ad->popup) {
@@ -599,73 +543,157 @@ int _ciss_on_tapi_ussd_event(const TelTapiEvent_t *event, void *data)
                ad->popup = NULL;
        }
 
-       DBG("event type=0x%x status=0x%x pDataLen=%d is_sat=%d", event->EventType, event->Status, event->pDataLen, ad->is_sat_request);
-       if (ad->is_sat_request == EINA_TRUE)
-       {
+       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;
-               app_ret_info.commandId = ad->cmd_id;
-               app_ret_info.commandType = TAPI_SAT_CMD_TYPE_SEND_USSD;
+               TelSsUssdResp_t ussd_info;
+               memset(&ussd_info, 0, sizeof(TelSsUssdResp_t));
+               memcpy(&ussd_info, tapi_data, sizeof(TelSsUssdResp_t));
 
-               if (event->Status == TAPI_SS_SUCCESS) {
-                       if (event->pDataLen > 0)
-                               memcpy(&ussd_info, event->pData, sizeof(TelSsUssdMsgIndInfo_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.ussdString.stringLen = ussd_info.UssdInfo.UssdStringLength;
-                       if (app_ret_info.appsRet.sendUssd.ussdString.stringLen > 0)
-                               memcpy(app_ret_info.appsRet.sendUssd.ussdString.string, ussd_info.UssdInfo.szUssdString, ussd_info.UssdInfo.UssdStringLength);
+                       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 = event->Status;
+                       app_ret_info.appsRet.sendUssd.ssCause = result;
                }
 
-               tel_send_sat_app_exec_result(&app_ret_info);
-               ret = 0;
-               elm_exit();
-       } else {
-               /* create window */
-               Evas_Object *content;
+               ret = tel_send_sat_app_exec_result(ad->tapi_handle, &app_ret_info);
+               ad->is_sat_request = EINA_FALSE;
+       }
 
-               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);
-               }
+       /* create window */
+       Evas_Object *content;
 
-               if (event->Status == TAPI_SS_SUCCESS) {
-                       if (event->pDataLen > 0)
-                               memcpy(&ussd_info, event->pData, sizeof(TelSsUssdMsgIndInfo_t));
-                       else    {
-                               DBG("Telephony USSD data is empty");
-                               return -1;
-                       }
+       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 (ad->bg == NULL) {
-                               ad->bg = _ciss_create_bg(ad->win_main);
-                               retv_if(ad->bg == NULL, -1);
-                       }
+       if (ad->conformant == NULL) {
+               ad->conformant = _ciss_create_conformant(ad->win_main);
+               retv_if(ad->conformant == NULL, -1);
+               evas_object_show(ad->conformant);
+       }
 
-                       if (ad->layout_main == NULL) {
-                               Evas_Object *lo;
-                               lo = _ciss_create_layout_main(ad->win_main);
-                               retv_if(lo == NULL, -1);
-                               ad->layout_main = lo;
-                       }
-                       content = (Evas_Object *)_ciss_create_ussd_view(ad->layout_main, &ussd_info, ad);
-                       retv_if(content == 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, event->Status);
-                       _ciss_create_error_popup(ad->win_main, ciss_err, 2.0, ad);
-               }
-               ret = 0;
+       if (ad->layout_main == NULL) {
+               ad->layout_main = _ciss_create_layout_main(ad->conformant);
+               retv_if(ad->layout_main== NULL, -1);
+               evas_object_show(ad->layout_main);
        }
 
+       if (ad->bg == NULL) {
+               ad->bg = _ciss_create_bg(ad->conformant);
+               retv_if(ad->bg == NULL, -1);
+               elm_object_part_content_set(ad->layout_main, "elm.swallow.bg", ad->bg);
+       }
+
+       if (result == TAPI_SS_SUCCESS) {
+               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->layout_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(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;
+}