tizen 2.3.1 release
[framework/telephony/libslp-tapi.git] / src / tapi_sim.c
index b30be48..ccb8eb7 100644 (file)
@@ -1,7 +1,7 @@
 /*
  * libslp-tapi
  *
- * Copyright (c) 2012 Samsung Electronics Co., Ltd. All rights reserved.
+ * Copyright (c) 2014 Samsung Electronics Co., Ltd. All rights reserved.
  *
  * Contact: Ja-young Gu <jygu@samsung.com>
  *
 #include "tapi_log.h"
 #include "ITapiSim.h"
 
-static int _tel_check_tapi_state()
-{
-       return 0;
+#define DBUS_SIM_STATUS_ERROR "SIM STATUS ERROR"
+#define DBUS_SIM_NOT_FOUND "SIM NOT FOUND"
+#define DBUS_SIM_PERM_BLOCKED "SIM PERM BLOCKED"
+#define DBUS_SIM_CARD_ERROR "SIM CARD ERROR"
+#define DBUS_SIM_NOT_INITIALIZED "SIM NOT INITIALIZED"
+#define DBUS_SIM_INIT_COMPLETED "SIM INIT COMPLETED"
+#define DBUS_SIM_LOCKED "SIM LOCKED"
+#define DBUS_SIM_NOT_READY "SIM NOT READY"
+#define DBUS_SIM_RESPONSE_DATA_ERROR "SIM RESPONSE DATA ERROR"
+#define DBUS_SIM_SERVICE_IS_DISABLED "SIM SERVICE IS DISABLED"
+#define DBUS_SIM_ACCESS_DENIED "No access rights"
+
+#define TAPI_PIN_TIMEOUT    (350 * 1000) /* Unlimit: G_MAXINT */
+
+#define TAPI_SIM_FUNCTION_ENTER(handle) { \
+       dbg("Func Enterance. cp_name[%s]", handle->cp_name); \
 }
 
-static int _tel_check_sim_state(TapiHandle *handle)
-{
-       GError *gerr = NULL;
-       GVariant *sync_gv = NULL;
-       int api_err = TAPI_API_SUCCESS;
-       TelSimCardStatus_t init_status = 0;
-       int changed = FALSE;
+#define TAPI_SIM_RESP_CB_ENTER(evt_cb_data) { \
+       if (evt_cb_data && evt_cb_data->handle) \
+               dbg("Func Enterance. cp_name[%s]", evt_cb_data->handle->cp_name); \
+}
 
-       sync_gv = g_dbus_connection_call_sync(handle->dbus_connection, DBUS_TELEPHONY_SERVICE,
-                       handle->path, DBUS_TELEPHONY_SIM_INTERFACE, "GetInitStatus", NULL, NULL,
-                       G_DBUS_CALL_FLAGS_NONE, -1, NULL, &gerr);
+#define TAPI_SIM_CHECK_TAPI_STATE() { \
+       TAPI_SIM_FUNCTION_ENTER(handle); \
+       if (_tel_check_tapi_state() != 0) \
+               return TAPI_API_SERVICE_NOT_READY; \
+}
 
-       if (sync_gv) {
-               g_variant_get(sync_gv, "(ib)", &init_status, &changed);
-               dbg("init_status[%d]",init_status);
+#define TAPI_SIM_CHECK_ERR_MSG(error) { \
+               TapiResult_t ret = TAPI_API_OPERATION_FAILED; \
+               if (error) { \
+                       ret = __check_err_msg(error->message); \
+                       g_error_free(error); \
+               } \
+               return ret; \
+}
 
-               switch(init_status){
-                       case TAPI_SIM_STATUS_CARD_NOT_PRESENT :
-                       case TAPI_SIM_STATUS_CARD_REMOVED :
-                               api_err = TAPI_API_SIM_NOT_FOUND;
-                               break;
-                       case TAPI_SIM_STATUS_CARD_BLOCKED :
-                       case TAPI_SIM_STATUS_CARD_ERROR :
-                               api_err = TAPI_API_SIM_CARD_ERROR;
-                               break;
-                       case TAPI_SIM_STATUS_SIM_INITIALIZING :
-                               api_err = TAPI_API_SIM_NOT_INITIALIZED;
-                               break;
-                       case TAPI_SIM_STATUS_SIM_INIT_COMPLETED :
-                               api_err = TAPI_API_SUCCESS;
-                               break;
-                       case TAPI_SIM_STATUS_SIM_PIN_REQUIRED :
-                       case TAPI_SIM_STATUS_SIM_PUK_REQUIRED :
-                       case TAPI_SIM_STATUS_SIM_NCK_REQUIRED :
-                       case TAPI_SIM_STATUS_SIM_NSCK_REQUIRED :
-                       case TAPI_SIM_STATUS_SIM_SPCK_REQUIRED :
-                       case TAPI_SIM_STATUS_SIM_CCK_REQUIRED :
-                       case TAPI_SIM_STATUS_SIM_LOCK_REQUIRED :
-                               api_err = TAPI_API_SIM_LOCKED;
-                               break;
-                       case TAPI_SIM_STATUS_UNKNOWN:
-                               api_err = TAPI_API_SERVICE_NOT_READY;
-                               break;
-                       default:
-                               dbg("not handled status[%d] in here",init_status);
-                               break;
-               }
+#define TAPI_SIM_CALL_CBFUNC(evtcbdata, result, data) { \
+               if (evtcbdata->cb_fn) { \
+                       evtcbdata->cb_fn(evtcbdata->handle, result, data, evtcbdata->user_data); \
+               } \
+}
+
+#define TAPI_SIM_CHECK_ERR_MSG_AND_CALL_NULL_CBFUNC(error, evtcbdata) { \
+               TapiResult_t ret = TAPI_API_OPERATION_FAILED; \
+               if (error) { \
+                       ret = __check_err_msg(error->message); \
+                       g_error_free(error); \
+               } \
+               TAPI_SIM_CALL_CBFUNC(evtcbdata, ret, NULL); \
+               g_free(evtcbdata); \
+               return; \
+}
+
+#define SIM_CHECK_ERROR(error, evt_cb_data) \
+       if (error) { \
+               warn("(%s) dbus error = %d (%s)", evt_cb_data->handle->cp_name, error->code, error->message); \
+               if (error->code == G_IO_ERROR_CANCELLED \
+                               && error->domain == G_IO_ERROR) { \
+                       /* Do not invoke callback in case of deinit TapiHandle */ \
+                       g_error_free(error); \
+                       g_free(evt_cb_data); \
+                       return; \
+               } else if (strstr(error->message, "No access rights")) { \
+                       err("Access denied"); \
+                       if (evt_cb_data->cb_fn) \
+                               evt_cb_data->cb_fn(evt_cb_data->handle, TAPI_ERROR_ACCESS_DENIED, NULL, evt_cb_data->user_data); \
+                       g_error_free(error); \
+                       g_free(evt_cb_data); \
+                       return; \
+               } else if (strstr(error->message, "Operation not supported")) { \
+                       err("Operation not supported"); \
+                       if (evt_cb_data->cb_fn) \
+                               evt_cb_data->cb_fn(evt_cb_data->handle, TAPI_ERROR_OPERATION_NOT_SUPPORTED, NULL, evt_cb_data->user_data); \
+                       g_error_free(error); \
+                       g_free(evt_cb_data); \
+                       return; \
+               } \
+       }
+
+static TapiResult_t __check_err_msg(gchar* err_msg)
+{
+       TapiResult_t ret = TAPI_API_OPERATION_FAILED;
+       if (err_msg == NULL)
+               return ret;
+
+       err( "error from dbus layer. (%s)", err_msg);
+
+       if( strstr(err_msg, DBUS_SIM_NOT_FOUND) ) {
+               ret = TAPI_API_SIM_NOT_FOUND;
+       } else if( strstr(err_msg, DBUS_SIM_PERM_BLOCKED) ) {
+               ret = TAPI_API_SIM_PERM_BLOCKED;
+       } else if( strstr(err_msg, DBUS_SIM_CARD_ERROR) ) {
+               ret = TAPI_API_SIM_CARD_ERROR;
+       } else if( strstr(err_msg, DBUS_SIM_NOT_INITIALIZED) ) {
+               ret = TAPI_API_SIM_NOT_INITIALIZED;
+       } else if( strstr(err_msg, DBUS_SIM_INIT_COMPLETED) ) {
+               ret = TAPI_API_SUCCESS;
+       } else if( strstr(err_msg, DBUS_SIM_LOCKED) ) {
+               ret = TAPI_API_SIM_LOCKED;
+       } else if( strstr(err_msg, DBUS_SIM_NOT_READY) ) {
+               ret = TAPI_API_SERVICE_NOT_READY;
+       } else if( strstr(err_msg, DBUS_SIM_RESPONSE_DATA_ERROR) ) {
+               ret = TAPI_API_OPERATION_FAILED;
+       } else if( strstr(err_msg, DBUS_SIM_SERVICE_IS_DISABLED) ) {
+               ret = TAPI_API_SIM_SERVICE_IS_DISABLED;
+       } else if (strstr(err_msg, DBUS_SIM_ACCESS_DENIED)) {
+               ret = TAPI_API_ACCESS_DENIED;
        } else {
-               dbg( "g_dbus_conn failed in _tel_check_sim_state. error (%s)", gerr->message);
-               g_error_free(gerr);
-               return TAPI_API_OPERATION_FAILED;
+               ret = TAPI_API_OPERATION_FAILED;
        }
-       dbg("api_err[%d]", api_err);
-       return api_err;
+
+       return ret;
+}
+
+static int _tel_check_tapi_state()
+{
+       return 0;
 }
 
 static void on_response_get_sim_iccid(GObject *source_object, GAsyncResult *res, gpointer user_data)
@@ -102,25 +162,29 @@ static void on_response_get_sim_iccid(GObject *source_object, GAsyncResult *res,
        TelSimIccIdInfo_t iccid_info;
        gchar *iccid = NULL;
 
-       dbg("Func Entrance");
+       TAPI_SIM_RESP_CB_ENTER(evt_cb_data);
        memset(&iccid_info, 0, sizeof(TelSimIccIdInfo_t));
 
        conn = G_DBUS_CONNECTION (source_object);
        dbus_result = g_dbus_connection_call_finish(conn, res, &error);
+       SIM_CHECK_ERROR(error, evt_cb_data);
+
+       if (!dbus_result) {
+               TAPI_SIM_CHECK_ERR_MSG_AND_CALL_NULL_CBFUNC(error, evt_cb_data);
+       }
 
        g_variant_get(dbus_result, "(is)", &result, &iccid);
-       iccid_info.icc_length = strlen(iccid);
+       iccid_info.icc_length = strlen((const char*)iccid);
        if(iccid_info.icc_length > TAPI_SIM_ICCID_LEN_MAX){
                dbg("current tapi support 20 byte but received length[%d] so changed");
                iccid_info.icc_length = TAPI_SIM_ICCID_LEN_MAX;
        }
        memcpy(iccid_info.icc_num, iccid, iccid_info.icc_length);
+       g_free(iccid);
 
-       if (evt_cb_data->cb_fn) {
-               evt_cb_data->cb_fn(evt_cb_data->handle, result, &iccid_info, evt_cb_data->user_data);
-       }
-
-       free(evt_cb_data);
+       TAPI_SIM_CALL_CBFUNC(evt_cb_data, result, &iccid_info);
+       g_free(evt_cb_data);
+       g_variant_unref(dbus_result);
 }
 
 static void on_response_get_sim_language(GObject *source_object, GAsyncResult *res,
@@ -134,9 +198,14 @@ static void on_response_get_sim_language(GObject *source_object, GAsyncResult *r
        TelSimLanguagePreferenceCode_t lang = TAPI_SIM_LP_LANG_UNSPECIFIED;
        TelSimAccessResult_t result = TAPI_SIM_ACCESS_SUCCESS;
 
-       dbg("Func Entrance");
+       TAPI_SIM_RESP_CB_ENTER(evt_cb_data);
        conn = G_DBUS_CONNECTION (source_object);
        dbus_result = g_dbus_connection_call_finish(conn, res, &error);
+       SIM_CHECK_ERROR(error, evt_cb_data);
+
+       if (!dbus_result) {
+               TAPI_SIM_CHECK_ERR_MSG_AND_CALL_NULL_CBFUNC(error, evt_cb_data);
+       }
 
        g_variant_get(dbus_result, "(ii)", &result, &lang);
 
@@ -144,7 +213,8 @@ static void on_response_get_sim_language(GObject *source_object, GAsyncResult *r
                evt_cb_data->cb_fn(evt_cb_data->handle, result, &lang, evt_cb_data->user_data);
        }
 
-       free(evt_cb_data);
+       g_free(evt_cb_data);
+       g_variant_unref(dbus_result);
 }
 
 static void on_response_set_sim_language(GObject *source_object, GAsyncResult *res,
@@ -157,9 +227,14 @@ static void on_response_set_sim_language(GObject *source_object, GAsyncResult *r
        struct tapi_resp_data *evt_cb_data = user_data;
        TelSimAccessResult_t result = TAPI_SIM_ACCESS_SUCCESS;
 
-       dbg("Func Entrance");
+       TAPI_SIM_RESP_CB_ENTER(evt_cb_data);
        conn = G_DBUS_CONNECTION (source_object);
        dbus_result = g_dbus_connection_call_finish(conn, res, &error);
+       SIM_CHECK_ERROR(error, evt_cb_data);
+
+       if (!dbus_result) {
+               TAPI_SIM_CHECK_ERR_MSG_AND_CALL_NULL_CBFUNC(error, evt_cb_data);
+       }
 
        g_variant_get(dbus_result, "(i)", &result);
 
@@ -167,7 +242,8 @@ static void on_response_set_sim_language(GObject *source_object, GAsyncResult *r
                evt_cb_data->cb_fn(evt_cb_data->handle, result, NULL, evt_cb_data->user_data);
        }
 
-       free(evt_cb_data);
+       g_free(evt_cb_data);
+       g_variant_unref(dbus_result);
 }
 
 static void on_response_get_sim_callforwarding_info(GObject *source_object, GAsyncResult *res,
@@ -176,27 +252,91 @@ static void on_response_get_sim_callforwarding_info(GObject *source_object, GAsy
        GError *error = NULL;
        GDBusConnection *conn = NULL;
        GVariant *dbus_result;
-
+       GVariant *value = NULL;
+       GVariantIter *cphs_iter = NULL;
+       GVariantIter *iter = NULL;
+       GVariantIter *iter_row = NULL;
+       const gchar *key = NULL;
+       const gchar *str_value = NULL;
        struct tapi_resp_data *evt_cb_data = user_data;
        TelSimAccessResult_t result = TAPI_SIM_ACCESS_SUCCESS;
-       TelSimCallForwardingInfo_t cf;
+       TelSimCallForwardingResp_t cf;
+       int i =0;
 
-       memset(&cf, 0, sizeof(TelSimCallForwardingInfo_t));
+       TAPI_SIM_RESP_CB_ENTER(evt_cb_data);
+       memset(&cf, 0, sizeof(TelSimCallForwardingResp_t));
 
-       dbg("Func Entrance");
        conn = G_DBUS_CONNECTION (source_object);
        dbus_result = g_dbus_connection_call_finish(conn, res, &error);
+       SIM_CHECK_ERROR(error, evt_cb_data);
+
+       if (!dbus_result) {
+               TAPI_SIM_CHECK_ERR_MSG_AND_CALL_NULL_CBFUNC(error, evt_cb_data);
+       }
+       dbg("dbus_result format(%s)", g_variant_get_type_string(dbus_result));
+       g_variant_get(dbus_result, "(ibaa{sv}a{sv})", &result, &cf.b_cphs, &iter, &cphs_iter);
+
+       if( cf.b_cphs ) {
+               while (g_variant_iter_loop(cphs_iter, "{sv}", &key, &value)) {
+                       if (!g_strcmp0(key, "b_line1")) {
+                               cf.cphs_cf.b_line1 = g_variant_get_boolean(value);
+                       }
+                       if (!g_strcmp0(key, "b_line2")) {
+                               cf.cphs_cf.b_line2 = g_variant_get_boolean(value);
+                       }
+                       if (!g_strcmp0(key, "b_fax")) {
+                               cf.cphs_cf.b_fax = g_variant_get_boolean(value);
+                       }
+                       if (!g_strcmp0(key, "b_data")) {
+                               cf.cphs_cf.b_data = g_variant_get_boolean(value);
+                       }
+               }
+       } else {
+               cf.cf_list.profile_count = g_variant_iter_n_children(iter);
 
-       g_variant_get(dbus_result, "(ibb)", &result, &cf.line1, &cf.line2);
+               while (g_variant_iter_next(iter, "a{sv}", &iter_row)) {
+                       while (g_variant_iter_loop(iter_row, "{sv}", &key, &value)) {
+                               if (!g_strcmp0(key, "rec_index")) {
+                                       cf.cf_list.cf[i].rec_index = g_variant_get_int32(value);
+                               }
+                               if (!g_strcmp0(key, "msp_num")) {
+                                       cf.cf_list.cf[i].msp_num = g_variant_get_byte(value);
+                               }
+                               if (!g_strcmp0(key, "cfu_status")) {
+                                       cf.cf_list.cf[i].cfu_status = g_variant_get_byte(value);
+                               }
+                               if (!g_strcmp0(key, "cfu_num")) {
+                                       str_value = g_variant_get_string(value, NULL);
+                                       snprintf(cf.cf_list.cf[i].cfu_num, strlen((const char*) str_value) + 1, "%s", str_value);
+                               }
+                               if (!g_strcmp0(key, "ton")) {
+                                       cf.cf_list.cf[i].ton = g_variant_get_int32(value);
+                               }
+                               if (!g_strcmp0(key, "npi")) {
+                                       cf.cf_list.cf[i].npi = g_variant_get_int32(value);
+                               }
+                               if (!g_strcmp0(key, "cc2_id")) {
+                                       cf.cf_list.cf[i].cc2_id = g_variant_get_byte(value);
+                               }
+                               if (!g_strcmp0(key, "ext7_id")) {
+                                       cf.cf_list.cf[i].ext7_id = g_variant_get_byte(value);
+                               }
+                       }
+                       i++;
+                       g_variant_iter_free(iter_row);
+               }
+               g_variant_iter_free(iter);
+       }
 
        if (evt_cb_data->cb_fn) {
                evt_cb_data->cb_fn(evt_cb_data->handle, result, &cf, evt_cb_data->user_data);
        }
 
-       free(evt_cb_data);
+       g_free(evt_cb_data);
+       g_variant_unref(dbus_result);
 }
 
-static void on_response_get_sim_messagewaiting_info(GObject *source_object, GAsyncResult *res,
+static void on_response_set_sim_callforwarding_info(GObject *source_object, GAsyncResult *res,
                gpointer user_data)
 {
        GError *error = NULL;
@@ -205,21 +345,144 @@ static void on_response_get_sim_messagewaiting_info(GObject *source_object, GAsy
 
        struct tapi_resp_data *evt_cb_data = user_data;
        TelSimAccessResult_t result = TAPI_SIM_ACCESS_SUCCESS;
-       TelSimMessageWaitingInfo_t msg;
 
-       dbg("Func Entrance");
-       memset(&msg, 0, sizeof(TelSimMessageWaitingInfo_t));
+       TAPI_SIM_RESP_CB_ENTER(evt_cb_data);
+       conn = G_DBUS_CONNECTION (source_object);
+       dbus_result = g_dbus_connection_call_finish(conn, res, &error);
+       SIM_CHECK_ERROR(error, evt_cb_data);
+
+       if (!dbus_result) {
+               TAPI_SIM_CHECK_ERR_MSG_AND_CALL_NULL_CBFUNC(error, evt_cb_data);
+       }
+
+       g_variant_get(dbus_result, "(i)", &result);
+
+       if (evt_cb_data->cb_fn) {
+               evt_cb_data->cb_fn(evt_cb_data->handle, result, NULL, evt_cb_data->user_data);
+       }
+
+       g_free(evt_cb_data);
+       g_variant_unref(dbus_result);
+}
+
+
+static void on_response_get_sim_messagewaiting_info(GObject *source_object, GAsyncResult *res,
+               gpointer user_data)
+{
+       GError *error = NULL;
+       GDBusConnection *conn = NULL;
+       GVariant *dbus_result;
+       GVariant *value = NULL;
+       GVariantIter *cphs_iter = NULL;
+       GVariantIter *iter = NULL;
+       GVariantIter *iter_row = NULL;
+       const gchar *key = NULL;
+       struct tapi_resp_data *evt_cb_data = user_data;
+       TelSimAccessResult_t result = TAPI_SIM_ACCESS_SUCCESS;
+       TelSimMessageWaitingResp_t mw;
+       int i =0;
+
+       TAPI_SIM_RESP_CB_ENTER(evt_cb_data);
+       memset(&mw, 0, sizeof(TelSimMessageWaitingResp_t));
+
+       conn = G_DBUS_CONNECTION (source_object);
+       dbus_result = g_dbus_connection_call_finish(conn, res, &error);
+       SIM_CHECK_ERROR(error, evt_cb_data);
+
+       if (!dbus_result) {
+               TAPI_SIM_CHECK_ERR_MSG_AND_CALL_NULL_CBFUNC(error, evt_cb_data);
+       }
+
+       dbg("dbus_result format(%s)", g_variant_get_type_string(dbus_result));
+       g_variant_get(dbus_result, "(ibaa{sv}a{sv})", &result, &mw.b_cphs, &iter, &cphs_iter);
+
+       if( mw.b_cphs ) {
+               while (g_variant_iter_loop(cphs_iter, "{sv}", &key, &value)) {
+                       if (!g_strcmp0(key, "b_voice1")) {
+                               mw.cphs_mw.b_voice1 = g_variant_get_boolean(value);
+                       }
+                       if (!g_strcmp0(key, "b_voice2")) {
+                               mw.cphs_mw.b_voice2 = g_variant_get_boolean(value);
+                       }
+                       if (!g_strcmp0(key, "b_fax")) {
+                               mw.cphs_mw.b_fax = g_variant_get_boolean(value);
+                       }
+                       if (!g_strcmp0(key, "b_data")) {
+                               mw.cphs_mw.b_data = g_variant_get_boolean(value);
+                       }
+               }
+
+       } else {
+               while (g_variant_iter_next(iter, "a{sv}", &iter_row)) {
+                       while (g_variant_iter_loop(iter_row, "{sv}", &key, &value)) {
+                               if (!g_strcmp0(key, "rec_index")) {
+                                       mw.mw_list.mw[i].rec_index = g_variant_get_int32(value);
+                               }
+                               if (!g_strcmp0(key, "indicator_status")) {
+                                       mw.mw_list.mw[i].indicator_status = g_variant_get_byte(value);
+                               }
+                               if (!g_strcmp0(key, "voice_count")) {
+                                       mw.mw_list.mw[i].voice_count = g_variant_get_int32(value);
+                               }
+                               if (!g_strcmp0(key, "fax_count")) {
+                                       mw.mw_list.mw[i].fax_count = g_variant_get_int32(value);
+                               }
+                               if (!g_strcmp0(key, "email_count")) {
+                                       mw.mw_list.mw[i].email_count = g_variant_get_int32(value);
+                               }
+                               if (!g_strcmp0(key, "other_count")) {
+                                       mw.mw_list.mw[i].other_count = g_variant_get_int32(value);
+                               }
+                               if (!g_strcmp0(key, "video_count")) {
+                                       mw.mw_list.mw[i].video_count = g_variant_get_int32(value);
+                               }
+                       }
+                       i++;
+                       g_variant_iter_free(iter_row);
+                       mw.mw_list.profile_count++;
+
+                       /* Max MSP record supported check */
+                       if (i == TAPI_SIM_MSP_CNT_MAX)
+                               break;
+               }
+               g_variant_iter_free(iter);
+       }
 
+       if (evt_cb_data->cb_fn) {
+               evt_cb_data->cb_fn(evt_cb_data->handle, result, &mw, evt_cb_data->user_data);
+       }
+
+       g_free(evt_cb_data);
+       g_variant_unref(dbus_result);
+}
+
+static void on_response_set_sim_messagewaiting_info(GObject *source_object, GAsyncResult *res,
+               gpointer user_data)
+{
+       GError *error = NULL;
+       GDBusConnection *conn = NULL;
+       GVariant *dbus_result;
+
+       struct tapi_resp_data *evt_cb_data = user_data;
+       TelSimAccessResult_t result = TAPI_SIM_ACCESS_SUCCESS;
+
+       TAPI_SIM_RESP_CB_ENTER(evt_cb_data);
        conn = G_DBUS_CONNECTION (source_object);
        dbus_result = g_dbus_connection_call_finish(conn, res, &error);
+       SIM_CHECK_ERROR(error, evt_cb_data);
+
+       if (!dbus_result) {
+               TAPI_SIM_CHECK_ERR_MSG_AND_CALL_NULL_CBFUNC(error, evt_cb_data);
+       }
 
-       g_variant_get(dbus_result, "(iiiii)", &result, &msg.line1, &msg.line2, &msg.fax, &msg.video);
+       g_variant_get(dbus_result, "(i)", &result);
 
        if (evt_cb_data->cb_fn) {
-               evt_cb_data->cb_fn(evt_cb_data->handle, result, &msg, evt_cb_data->user_data);
+               evt_cb_data->cb_fn(evt_cb_data->handle, result, NULL, evt_cb_data->user_data);
        }
 
-       free(evt_cb_data);
+       g_free(evt_cb_data);
+       g_variant_unref(dbus_result);
 }
 
 static void on_response_get_sim_mailbox_info(GObject *source_object, GAsyncResult *res,
@@ -237,33 +500,60 @@ static void on_response_get_sim_mailbox_info(GObject *source_object, GAsyncResul
        TelSimAccessResult_t result = TAPI_SIM_ACCESS_SUCCESS;
        TelSimMailboxList_t list;
        int i = 0;
+       gboolean b_cphs = 0;
 
-       dbg("Func Entrance");
+       TAPI_SIM_RESP_CB_ENTER(evt_cb_data);
        memset(&list, 0, sizeof(TelSimMailboxList_t));
 
        conn = G_DBUS_CONNECTION (source_object);
        dbus_result = g_dbus_connection_call_finish(conn, res, &error);
+       SIM_CHECK_ERROR(error, evt_cb_data);
 
-       g_variant_get(dbus_result, "(iaa{sv})", &result, &iter);
+       if (!dbus_result) {
+               TAPI_SIM_CHECK_ERR_MSG_AND_CALL_NULL_CBFUNC(error, evt_cb_data);
+       }
+
+       g_variant_get(dbus_result, "(ibaa{sv})", &result, &b_cphs, &iter);
        list.count = g_variant_iter_n_children(iter);
+       msg("list.count=[%d]", list.count);
 
        i = 0;
        while (g_variant_iter_next(iter, "a{sv}", &iter_row)) {
                while (g_variant_iter_loop(iter_row, "{sv}", &key, &value)) {
-                       if (!g_strcmp0(key, "type")) {
-                               list.list[i].type = g_variant_get_int32(value);
+                       list.list[i].b_cphs = b_cphs;
+
+                       if (!g_strcmp0(key, "rec_index")) {
+                               list.list[i].rec_index = g_variant_get_int32(value);
                        }
-                       if (!g_strcmp0(key, "name")) {
-                               str_value = g_variant_get_string(value, NULL);
-                               snprintf(list.list[i].name, strlen(str_value) + 1, "%s", str_value);
+                       if (!g_strcmp0(key, "profile_num")) {
+                               list.list[i].profile_num = g_variant_get_int32(value);
                        }
-                       if (!g_strcmp0(key, "number")) {
+                       if (!g_strcmp0(key, "mb_type")) {
+                               list.list[i].mb_type = g_variant_get_int32(value);
+                       }
+                       if (!g_strcmp0(key, "alpha_id_max_len")) {
+                               list.list[i].alpha_id_max_len = g_variant_get_int32(value);
+                       }
+                       if (!g_strcmp0(key, "alpha_id")) {
                                str_value = g_variant_get_string(value, NULL);
-                               snprintf(list.list[i].number, strlen(str_value) + 1, "%s", str_value);
+                               snprintf(list.list[i].alpha_id, strlen((const char*)str_value) + 1, "%s", str_value);
                        }
                        if (!g_strcmp0(key, "ton")) {
                                list.list[i].ton = g_variant_get_int32(value);
                        }
+                       if (!g_strcmp0(key, "npi")) {
+                               list.list[i].npi = g_variant_get_int32(value);
+                       }
+                       if (!g_strcmp0(key, "num")) {
+                               str_value = g_variant_get_string(value, NULL);
+                               snprintf(list.list[i].num, strlen((const char*)str_value) + 1, "%s", str_value);
+                       }
+                       if (!g_strcmp0(key, "cc_id")) {
+                               list.list[i].cc_id = g_variant_get_byte(value);
+                       }
+                       if (!g_strcmp0(key, "ext1_id")) {
+                               list.list[i].ext1_id = g_variant_get_byte(value);
+                       }
                }
                i++;
                g_variant_iter_free(iter_row);
@@ -274,7 +564,37 @@ static void on_response_get_sim_mailbox_info(GObject *source_object, GAsyncResul
                evt_cb_data->cb_fn(evt_cb_data->handle, result, &list, evt_cb_data->user_data);
        }
 
-       free(evt_cb_data);
+       g_free(evt_cb_data);
+       g_variant_unref(dbus_result);
+}
+
+static void on_response_set_sim_mailbox_info(GObject *source_object, GAsyncResult *res,
+               gpointer user_data)
+{
+       GError *error = NULL;
+       GDBusConnection *conn = NULL;
+       GVariant *dbus_result;
+
+       struct tapi_resp_data *evt_cb_data = user_data;
+       TelSimAccessResult_t result = TAPI_SIM_ACCESS_SUCCESS;
+
+       TAPI_SIM_RESP_CB_ENTER(evt_cb_data);
+       conn = G_DBUS_CONNECTION (source_object);
+       dbus_result = g_dbus_connection_call_finish(conn, res, &error);
+       SIM_CHECK_ERROR(error, evt_cb_data);
+
+       if (!dbus_result) {
+               TAPI_SIM_CHECK_ERR_MSG_AND_CALL_NULL_CBFUNC(error, evt_cb_data);
+       }
+
+       g_variant_get(dbus_result, "(i)", &result);
+
+       if (evt_cb_data->cb_fn) {
+               evt_cb_data->cb_fn(evt_cb_data->handle, result, NULL, evt_cb_data->user_data);
+       }
+
+       g_free(evt_cb_data);
+       g_variant_unref(dbus_result);
 }
 
 static void on_response_get_sim_cphs_info(GObject *source_object, GAsyncResult *res,
@@ -288,11 +608,16 @@ static void on_response_get_sim_cphs_info(GObject *source_object, GAsyncResult *
        TelSimAccessResult_t result = TAPI_SIM_ACCESS_SUCCESS;
        TelSimCphsInfo_t cphs;
 
-       dbg("Func Entrance");
+       TAPI_SIM_RESP_CB_ENTER(evt_cb_data);
        memset(&cphs, 0, sizeof(TelSimCphsInfo_t));
 
        conn = G_DBUS_CONNECTION (source_object);
        dbus_result = g_dbus_connection_call_finish(conn, res, &error);
+       SIM_CHECK_ERROR(error, evt_cb_data);
+
+       if (!dbus_result) {
+               TAPI_SIM_CHECK_ERR_MSG_AND_CALL_NULL_CBFUNC(error, evt_cb_data);
+       }
 
        g_variant_get(dbus_result, "(iibbbbb)", &result, &cphs.CphsPhase,
                        &cphs.CphsServiceTable.bOperatorNameShortForm, &cphs.CphsServiceTable.bMailBoxNumbers,
@@ -304,7 +629,86 @@ static void on_response_get_sim_cphs_info(GObject *source_object, GAsyncResult *
                evt_cb_data->cb_fn(evt_cb_data->handle, result, &cphs, evt_cb_data->user_data);
        }
 
-       free(evt_cb_data);
+       g_free(evt_cb_data);
+       g_variant_unref(dbus_result);
+}
+
+static void on_response_get_sim_service_table(GObject *source_object, GAsyncResult *res,
+               gpointer user_data)
+{
+       GError *error = NULL;
+       GDBusConnection *conn = NULL;
+       GVariant *dbus_result = NULL;
+
+       GVariantIter *iter = NULL;
+       GVariant *param_gv = NULL;
+       GVariant *inner_gv = NULL;
+       guchar value = 0;
+       int i = 0;
+
+       struct tapi_resp_data *evt_cb_data = user_data;
+       TelSimAccessResult_t result = TAPI_SIM_ACCESS_SUCCESS;
+       TelSimServiceTable_t svct;
+
+       TAPI_SIM_RESP_CB_ENTER(evt_cb_data);
+       memset(&svct, 0, sizeof(TelSimServiceTable_t));
+
+       conn = G_DBUS_CONNECTION (source_object);
+       dbus_result = g_dbus_connection_call_finish(conn, res, &error);
+       SIM_CHECK_ERROR(error, evt_cb_data);
+
+       if (!dbus_result) {
+               TAPI_SIM_CHECK_ERR_MSG_AND_CALL_NULL_CBFUNC(error, evt_cb_data);
+       }
+
+       g_variant_get(dbus_result, "(ii@v)", &result, &svct.sim_type, &param_gv);
+       inner_gv = g_variant_get_variant(param_gv);
+
+       g_variant_get(inner_gv, "ay", &iter);
+
+       if (TAPI_SIM_CARD_TYPE_GSM == svct.sim_type) {
+               while (g_variant_iter_loop(iter, "y", &value)) {
+                       svct.table.sst.service[i] = value;
+                       i++;
+               }
+       } else if(TAPI_SIM_CARD_TYPE_USIM == svct.sim_type) {
+               while (g_variant_iter_loop(iter, "y", &value)) {
+                       svct.table.ust.service[i] = value;
+                       i++;
+               }
+       } else if(TAPI_SIM_CARD_TYPE_RUIM == svct.sim_type) {
+               g_variant_get(dbus_result, "(ii@v)", &result, &svct.table.cst.cdma_svc_table, &param_gv);
+               inner_gv = g_variant_get_variant(param_gv);
+
+               g_variant_get(inner_gv, "ay", &iter);
+
+               if(TAPI_SIM_CDMA_SVC_TABLE == svct.table.cst.cdma_svc_table) {
+                       while (g_variant_iter_loop(iter, "y", &value)) {
+                               svct.table.cst.service.cdma_service[i] = value;
+                               i++;
+                       }
+               } else if(TAPI_SIM_CSIM_SVC_TABLE == svct.table.cst.cdma_svc_table) {
+                       while (g_variant_iter_loop(iter, "y", &value)) {
+                               svct.table.cst.service.csim_service[i] = value;
+                               i++;
+                       }
+               } else {
+                       err("Invalid cdma_svc_table:[%d]", svct.table.cst.cdma_svc_table);
+               }
+       } else {
+               err("Invalid sim_type:[%d]", svct.sim_type);
+       }
+
+       g_variant_iter_free(iter);
+       g_variant_unref(inner_gv);
+       g_variant_unref(param_gv);
+
+       if (evt_cb_data->cb_fn) {
+               evt_cb_data->cb_fn(evt_cb_data->handle, result, &svct, evt_cb_data->user_data);
+       }
+
+       g_free(evt_cb_data);
+       g_variant_unref(dbus_result);
 }
 
 static void on_response_get_sim_msisdn(GObject *source_object, GAsyncResult *res,
@@ -323,11 +727,16 @@ static void on_response_get_sim_msisdn(GObject *source_object, GAsyncResult *res
        TelSimMsisdnList_t list;
        int i = 0;
 
-       dbg("Func Entrance");
+       TAPI_SIM_RESP_CB_ENTER(evt_cb_data);
        memset(&list, 0, sizeof(TelSimMsisdnList_t));
 
        conn = G_DBUS_CONNECTION (source_object);
        dbus_result = g_dbus_connection_call_finish(conn, res, &error);
+       SIM_CHECK_ERROR(error, evt_cb_data);
+
+       if (!dbus_result) {
+               TAPI_SIM_CHECK_ERR_MSG_AND_CALL_NULL_CBFUNC(error, evt_cb_data);
+       }
 
        g_variant_get(dbus_result, "(iaa{sv})", &result, &iter);
        list.count = g_variant_iter_n_children(iter);
@@ -344,11 +753,11 @@ static void on_response_get_sim_msisdn(GObject *source_object, GAsyncResult *res
                while (g_variant_iter_loop(iter_row, "{sv}", &key, &value)) {
                        if (!g_strcmp0(key, "name")) {
                                str_value = g_variant_get_string(value, NULL);
-                               snprintf(list.list[i].name, strlen(str_value) + 1, "%s", str_value);
+                               snprintf(list.list[i].name, strlen((const char*)str_value) + 1, "%s", str_value);
                        }
                        if (!g_strcmp0(key, "number")) {
                                str_value = g_variant_get_string(value, NULL);
-                               snprintf(list.list[i].num, strlen(str_value) + 1, "%s", str_value);
+                               snprintf(list.list[i].num, strlen((const char*)str_value) + 1, "%s", str_value);
                        }
                }
                i++;
@@ -360,16 +769,14 @@ static void on_response_get_sim_msisdn(GObject *source_object, GAsyncResult *res
        }
        g_variant_iter_free(iter);
 
-       dbg("msisdn count[%d]", list.count);
+       msg("msisdn count[%d]", list.count);
        for(i =0; i < list.count; i++){
                dbg("msisdn[%d]-name[%s]number[%s]",i,list.list[i].name, list.list[i].num);
        }
 
-       if (evt_cb_data->cb_fn) {
-               evt_cb_data->cb_fn(evt_cb_data->handle, result, &list, evt_cb_data->user_data);
-       }
-
-       free(evt_cb_data);
+       TAPI_SIM_CALL_CBFUNC(evt_cb_data, result, &list);
+       g_free(evt_cb_data);
+       g_variant_unref(dbus_result);
 }
 
 static void on_response_get_sim_oplmnwact(GObject *source_object, GAsyncResult *res,
@@ -388,11 +795,16 @@ static void on_response_get_sim_oplmnwact(GObject *source_object, GAsyncResult *
        TelSimOplmnwactList_t list;
        int i = 0;
 
-       dbg("Func Entrance");
+       TAPI_SIM_RESP_CB_ENTER(evt_cb_data);
        memset(&list, 0, sizeof(TelSimOplmnwactList_t));
 
        conn = G_DBUS_CONNECTION (source_object);
        dbus_result = g_dbus_connection_call_finish(conn, res, &error);
+       SIM_CHECK_ERROR(error, evt_cb_data);
+
+       if (!dbus_result) {
+               TAPI_SIM_CHECK_ERR_MSG_AND_CALL_NULL_CBFUNC(error, evt_cb_data);
+       }
 
        g_variant_get(dbus_result, "(iaa{sv})", &result, &iter);
        list.count = g_variant_iter_n_children(iter);
@@ -402,7 +814,7 @@ static void on_response_get_sim_oplmnwact(GObject *source_object, GAsyncResult *
                while (g_variant_iter_loop(iter_row, "{sv}", &key, &value)) {
                        if (!g_strcmp0(key, "plmn")) {
                                str_value = g_variant_get_string(value, NULL);
-                               snprintf(list.list[i].plmn, strlen(str_value) + 1, "%s", str_value);
+                               snprintf(list.list[i].plmn, strlen((const char*)str_value) + 1, "%s", str_value);
                        }
                        if (!g_strcmp0(key, "b_umst")) {
                                list.list[i].b_umts = g_variant_get_boolean(value);
@@ -420,7 +832,8 @@ static void on_response_get_sim_oplmnwact(GObject *source_object, GAsyncResult *
                evt_cb_data->cb_fn(evt_cb_data->handle, result, &list, evt_cb_data->user_data);
        }
 
-       free(evt_cb_data);
+       g_free(evt_cb_data);
+       g_variant_unref(dbus_result);
 }
 
 static void on_response_get_sim_spn(GObject *source_object, GAsyncResult *res,
@@ -436,26 +849,30 @@ static void on_response_get_sim_spn(GObject *source_object, GAsyncResult *res,
        gchar *spn = NULL;
        guchar dc = 0;
 
+       TAPI_SIM_RESP_CB_ENTER(evt_cb_data);
        memset(&spn_info, 0, sizeof(TelSimSpn_t));
 
-       dbg("Func Entrance");
        conn = G_DBUS_CONNECTION (source_object);
        dbus_result = g_dbus_connection_call_finish(conn, res, &error);
+       SIM_CHECK_ERROR(error, evt_cb_data);
+
+       if (!dbus_result) {
+               TAPI_SIM_CHECK_ERR_MSG_AND_CALL_NULL_CBFUNC(error, evt_cb_data);
+       }
 
        g_variant_get(dbus_result, "(iys)", &result, &dc, &spn);
 
        dbg("result[%d]", result);
        if ( result == TAPI_SIM_ACCESS_SUCCESS) {
-               dbg("spn[%s], display condition[0x%x]", spn, dc);
+               msg("spn[%s], display condition[0x%x]", spn, dc);
                spn_info.display_condition = dc;
-               snprintf((char *)spn_info.spn, strlen(spn)+1, "%s", spn);
-       }
-
-       if (evt_cb_data->cb_fn) {
-               evt_cb_data->cb_fn(evt_cb_data->handle, result, &spn_info, evt_cb_data->user_data);
+               snprintf((char *)spn_info.spn, strlen((const char*)spn)+1, "%s", spn);
        }
+       g_free(spn);
 
-       free(evt_cb_data);
+       TAPI_SIM_CALL_CBFUNC(evt_cb_data, result, &spn_info);
+       g_free(evt_cb_data);
+       g_variant_unref(dbus_result);
 }
 
 static void on_response_get_sim_cphs_netname(GObject *source_object, GAsyncResult *res,
@@ -471,26 +888,34 @@ static void on_response_get_sim_cphs_netname(GObject *source_object, GAsyncResul
        gchar *full_name = NULL;
        gchar *short_name = NULL;
 
+       TAPI_SIM_RESP_CB_ENTER(evt_cb_data);
        memset(&cphs_net, 0, sizeof(TelSimCphsNetName_t));
 
-       dbg("Func Entrance");
        conn = G_DBUS_CONNECTION (source_object);
        dbus_result = g_dbus_connection_call_finish(conn, res, &error);
+       SIM_CHECK_ERROR(error, evt_cb_data);
+
+       if (!dbus_result) {
+               TAPI_SIM_CHECK_ERR_MSG_AND_CALL_NULL_CBFUNC(error, evt_cb_data);
+       }
 
        g_variant_get(dbus_result, "(iss)", &result, &full_name, &short_name);
 
        dbg("result[%d]", result);
        if ( result == TAPI_SIM_ACCESS_SUCCESS) {
-               dbg("full name[%s], short name[%s]", full_name, short_name);
-               snprintf((char *)cphs_net.full_name, strlen(full_name)+1, "%s", full_name);
-               snprintf((char *)cphs_net.short_name, strlen(short_name)+1, "%s", short_name);
+               msg("full name[%s], short name[%s]", full_name, short_name);
+               snprintf((char *)cphs_net.full_name, strlen((const char*)full_name)+1, "%s", full_name);
+               snprintf((char *)cphs_net.short_name, strlen((const char*)short_name)+1, "%s", short_name);
        }
+       g_free(full_name);
+       g_free(short_name);
 
        if (evt_cb_data->cb_fn) {
                evt_cb_data->cb_fn(evt_cb_data->handle, result, &cphs_net, evt_cb_data->user_data);
        }
 
-       free(evt_cb_data);
+       g_free(evt_cb_data);
+       g_variant_unref(dbus_result);
 }
 
 static void on_response_req_sim_authentication(GObject *source_object, GAsyncResult *res,
@@ -516,73 +941,67 @@ static void on_response_req_sim_authentication(GObject *source_object, GAsyncRes
        TelSimAccessResult_t result = TAPI_SIM_ACCESS_SUCCESS;
        TelSimAuthenticationResponse_t auth_resp;
 
-       dbg("Func Entrance");
+       TAPI_SIM_RESP_CB_ENTER(evt_cb_data);
        memset(&auth_resp, 0, sizeof(TelSimAuthenticationResponse_t));
 
        conn = G_DBUS_CONNECTION (source_object);
        dbus_result = g_dbus_connection_call_finish(conn, res, &error);
+       SIM_CHECK_ERROR(error, evt_cb_data);
 
-       if (dbus_result) {
-               dbg("dbus_result type_format(%s)", g_variant_get_type_string(dbus_result));
-               g_variant_get(dbus_result, "(iii@v@v@v@v)",
-                               &result, &auth_resp.auth_type, &auth_resp.auth_result,
-                               &ak_gv, &cp_gv, &it_gv, &resp_gv);
-
-               ak = g_variant_get_variant(ak_gv);
-               g_variant_get(ak, "ay", &iter);
-               while (g_variant_iter_loop(iter, "y", &rt_i)) {
-                       auth_resp.authentication_key[i] = rt_i;
-                       dbg("auth_resp.authentication_key[%d]=[0x%02x]", i, auth_resp.authentication_key[i]);
-                       i++;
-               }
-               auth_resp.authentication_key_length = i;
-               g_variant_iter_free(iter);
-               i = 0;
+       if (!dbus_result) {
+               TAPI_SIM_CHECK_ERR_MSG_AND_CALL_NULL_CBFUNC(error, evt_cb_data);
+       }
 
-               cp = g_variant_get_variant(cp_gv);
-               g_variant_get(cp, "ay", &iter);
-               while (g_variant_iter_loop(iter, "y", &rt_i)) {
-                       auth_resp.cipher_data[i] = rt_i;
-                       dbg("auth_resp.cipher_data[%d]=[0x%02x]", i, auth_resp.cipher_data[i]);
-                       i++;
-               }
-               auth_resp.cipher_length = i;
-               g_variant_iter_free(iter);
-               i = 0;
+       dbg("dbus_result type_format(%s)", g_variant_get_type_string(dbus_result));
+       g_variant_get(dbus_result, "(iii@v@v@v@v)", &result, &auth_resp.auth_type,
+                       &auth_resp.auth_result, &ak_gv, &cp_gv, &it_gv, &resp_gv);
 
-               it = g_variant_get_variant(it_gv);
-               g_variant_get(it, "ay", &iter);
-               while (g_variant_iter_loop(iter, "y", &rt_i)) {
-                       auth_resp.integrity_data[i] = rt_i;
-                       dbg("auth_resp.integrity_data[%d]=[0x%02x]", i, auth_resp.integrity_data[i]);
-                       i++;
-               }
-               auth_resp.integrity_length = i;
-               g_variant_iter_free(iter);
-               i = 0;
+       ak = g_variant_get_variant(ak_gv);
+       g_variant_get(ak, "ay", &iter);
+       while (g_variant_iter_loop(iter, "y", &rt_i)) {
+               auth_resp.authentication_key[i] = rt_i;
+               i++;
+       }
+       auth_resp.authentication_key_length = i;
+       g_variant_iter_free(iter);
+       i = 0;
 
-               resp = g_variant_get_variant(resp_gv);
-               g_variant_get(resp, "ay", &iter);
-               while (g_variant_iter_loop(iter, "y", &rt_i)) {
-                       auth_resp.resp_data[i] = rt_i;
-                       dbg("auth_resp.resp_data[%d]=[0x%02x]", i, auth_resp.resp_data[i]);
-                       i++;
-               }
-               auth_resp.resp_length = i;
-               g_variant_iter_free(iter);
-               i = 0;
+       cp = g_variant_get_variant(cp_gv);
+       g_variant_get(cp, "ay", &iter);
+       while (g_variant_iter_loop(iter, "y", &rt_i)) {
+               auth_resp.cipher_data[i] = rt_i;
+               i++;
        }
-       else {
-               result = TAPI_SIM_ACCESS_FAILED;
-               dbg( "g_dbus_conn failed. error (%s)", error->message);
-               g_error_free(error);
+       auth_resp.cipher_length = i;
+       g_variant_iter_free(iter);
+       i = 0;
+
+       it = g_variant_get_variant(it_gv);
+       g_variant_get(it, "ay", &iter);
+       while (g_variant_iter_loop(iter, "y", &rt_i)) {
+               auth_resp.integrity_data[i] = rt_i;
+               i++;
+       }
+       auth_resp.integrity_length = i;
+       g_variant_iter_free(iter);
+       i = 0;
+
+       resp = g_variant_get_variant(resp_gv);
+       g_variant_get(resp, "ay", &iter);
+       while (g_variant_iter_loop(iter, "y", &rt_i)) {
+               auth_resp.resp_data[i] = rt_i;
+               i++;
        }
+       auth_resp.resp_length = i;
+       g_variant_iter_free(iter);
+       i = 0;
 
        if (evt_cb_data->cb_fn) {
                evt_cb_data->cb_fn(evt_cb_data->handle, result, &auth_resp, evt_cb_data->user_data);
        }
 
-       free(evt_cb_data);
+       g_free(evt_cb_data);
+       g_variant_unref(dbus_result);
 }
 
 static void on_response_verify_sim_pins(GObject *source_object, GAsyncResult *res,
@@ -596,11 +1015,16 @@ static void on_response_verify_sim_pins(GObject *source_object, GAsyncResult *re
        TelSimPinOperationResult_t result = TAPI_SIM_PIN_OPERATION_SUCCESS;
        TelSimSecResult_t sec_rt;
 
-       dbg("Func Entrance");
+       TAPI_SIM_RESP_CB_ENTER(evt_cb_data);
        memset(&sec_rt, 0, sizeof(TelSimSecResult_t));
 
        conn = G_DBUS_CONNECTION (source_object);
        dbus_result = g_dbus_connection_call_finish(conn, res, &error);
+       SIM_CHECK_ERROR(error, evt_cb_data);
+
+       if (!dbus_result) {
+               TAPI_SIM_CHECK_ERR_MSG_AND_CALL_NULL_CBFUNC(error, evt_cb_data);
+       }
 
        g_variant_get(dbus_result, "(iii)", &result, &sec_rt.type, &sec_rt.retry_count);
 
@@ -608,7 +1032,8 @@ static void on_response_verify_sim_pins(GObject *source_object, GAsyncResult *re
                evt_cb_data->cb_fn(evt_cb_data->handle, result, &sec_rt, evt_cb_data->user_data);
        }
 
-       free(evt_cb_data);
+       g_free(evt_cb_data);
+       g_variant_unref(dbus_result);
 }
 
 static void on_response_verify_sim_puks(GObject *source_object, GAsyncResult *res,
@@ -622,11 +1047,16 @@ static void on_response_verify_sim_puks(GObject *source_object, GAsyncResult *re
        TelSimPinOperationResult_t result = TAPI_SIM_PIN_OPERATION_SUCCESS;
        TelSimSecResult_t sec_rt;
 
-       dbg("Func Entrance");
+       TAPI_SIM_RESP_CB_ENTER(evt_cb_data);
        memset(&sec_rt, 0, sizeof(TelSimSecResult_t));
 
        conn = G_DBUS_CONNECTION (source_object);
        dbus_result = g_dbus_connection_call_finish(conn, res, &error);
+       SIM_CHECK_ERROR(error, evt_cb_data);
+
+       if (!dbus_result) {
+               TAPI_SIM_CHECK_ERR_MSG_AND_CALL_NULL_CBFUNC(error, evt_cb_data);
+       }
 
        g_variant_get(dbus_result, "(iii)", &result, &sec_rt.type, &sec_rt.retry_count);
 
@@ -634,7 +1064,8 @@ static void on_response_verify_sim_puks(GObject *source_object, GAsyncResult *re
                evt_cb_data->cb_fn(evt_cb_data->handle, result, &sec_rt, evt_cb_data->user_data);
        }
 
-       free(evt_cb_data);
+       g_free(evt_cb_data);
+       g_variant_unref(dbus_result);
 }
 
 static void on_response_change_sim_pins(GObject *source_object, GAsyncResult *res,
@@ -648,11 +1079,16 @@ static void on_response_change_sim_pins(GObject *source_object, GAsyncResult *re
        TelSimPinOperationResult_t result = TAPI_SIM_PIN_OPERATION_SUCCESS;
        TelSimSecResult_t sec_rt;
 
-       dbg("Func Entrance");
+       TAPI_SIM_RESP_CB_ENTER(evt_cb_data);
        memset(&sec_rt, 0, sizeof(TelSimSecResult_t));
 
        conn = G_DBUS_CONNECTION (source_object);
        dbus_result = g_dbus_connection_call_finish(conn, res, &error);
+       SIM_CHECK_ERROR(error, evt_cb_data);
+
+       if (!dbus_result) {
+               TAPI_SIM_CHECK_ERR_MSG_AND_CALL_NULL_CBFUNC(error, evt_cb_data);
+       }
 
        g_variant_get(dbus_result, "(iii)", &result, &sec_rt.type, &sec_rt.retry_count);
 
@@ -660,7 +1096,8 @@ static void on_response_change_sim_pins(GObject *source_object, GAsyncResult *re
                evt_cb_data->cb_fn(evt_cb_data->handle, result, &sec_rt, evt_cb_data->user_data);
        }
 
-       free(evt_cb_data);
+       g_free(evt_cb_data);
+       g_variant_unref(dbus_result);
 }
 
 static void on_response_disable_sim_facility(GObject *source_object, GAsyncResult *res,
@@ -674,19 +1111,22 @@ static void on_response_disable_sim_facility(GObject *source_object, GAsyncResul
        TelSimPinOperationResult_t result = TAPI_SIM_PIN_OPERATION_SUCCESS;
        TelSimFacilityResult_t f_rt;
 
-       dbg("Func Entrance");
+       TAPI_SIM_RESP_CB_ENTER(evt_cb_data);
        memset(&f_rt, 0, sizeof(TelSimFacilityResult_t));
 
        conn = G_DBUS_CONNECTION (source_object);
        dbus_result = g_dbus_connection_call_finish(conn, res, &error);
+       SIM_CHECK_ERROR(error, evt_cb_data);
 
-       g_variant_get(dbus_result, "(iii)", &result, &f_rt.type, &f_rt.retry_count);
-
-       if (evt_cb_data->cb_fn) {
-               evt_cb_data->cb_fn(evt_cb_data->handle, result, &f_rt, evt_cb_data->user_data);
+       if (!dbus_result) {
+               TAPI_SIM_CHECK_ERR_MSG_AND_CALL_NULL_CBFUNC(error, evt_cb_data);
        }
 
-       free(evt_cb_data);
+       g_variant_get(dbus_result, "(iii)", &result, &f_rt.type, &f_rt.retry_count);
+
+       TAPI_SIM_CALL_CBFUNC(evt_cb_data, result, &f_rt);
+       g_free(evt_cb_data);
+       g_variant_unref(dbus_result);
 }
 
 static void on_response_enable_sim_facility(GObject *source_object, GAsyncResult *res,
@@ -700,19 +1140,22 @@ static void on_response_enable_sim_facility(GObject *source_object, GAsyncResult
        TelSimPinOperationResult_t result = TAPI_SIM_PIN_OPERATION_SUCCESS;
        TelSimFacilityResult_t f_rt;
 
-       dbg("Func Entrance");
+       TAPI_SIM_RESP_CB_ENTER(evt_cb_data);
        memset(&f_rt, 0, sizeof(TelSimFacilityResult_t));
 
        conn = G_DBUS_CONNECTION (source_object);
        dbus_result = g_dbus_connection_call_finish(conn, res, &error);
+       SIM_CHECK_ERROR(error, evt_cb_data);
 
-       g_variant_get(dbus_result, "(iii)", &result, &f_rt.type, &f_rt.retry_count);
-
-       if (evt_cb_data->cb_fn) {
-               evt_cb_data->cb_fn(evt_cb_data->handle, result, &f_rt, evt_cb_data->user_data);
+       if (!dbus_result) {
+               TAPI_SIM_CHECK_ERR_MSG_AND_CALL_NULL_CBFUNC(error, evt_cb_data);
        }
 
-       free(evt_cb_data);
+       g_variant_get(dbus_result, "(iii)", &result, &f_rt.type, &f_rt.retry_count);
+
+       TAPI_SIM_CALL_CBFUNC(evt_cb_data, result, &f_rt);
+       g_free(evt_cb_data);
+       g_variant_unref(dbus_result);
 }
 
 static void on_response_get_sim_facility(GObject *source_object, GAsyncResult *res,
@@ -726,19 +1169,22 @@ static void on_response_get_sim_facility(GObject *source_object, GAsyncResult *r
        TelSimPinOperationResult_t result = TAPI_SIM_PIN_OPERATION_SUCCESS;
        TelSimFacilityInfo_t fi;
 
-       dbg("Func Entrance");
+       TAPI_SIM_RESP_CB_ENTER(evt_cb_data);
        memset(&fi, 0, sizeof(TelSimFacilityInfo_t));
 
        conn = G_DBUS_CONNECTION (source_object);
        dbus_result = g_dbus_connection_call_finish(conn, res, &error);
+       SIM_CHECK_ERROR(error, evt_cb_data);
 
-       g_variant_get(dbus_result, "(iii)", &result, &fi.type, &fi.f_status);
-
-       if (evt_cb_data->cb_fn) {
-               evt_cb_data->cb_fn(evt_cb_data->handle, result, &fi, evt_cb_data->user_data);
+       if (!dbus_result) {
+               TAPI_SIM_CHECK_ERR_MSG_AND_CALL_NULL_CBFUNC(error, evt_cb_data);
        }
 
-       free(evt_cb_data);
+       g_variant_get(dbus_result, "(iii)", &result, &fi.type, &fi.f_status);
+
+       TAPI_SIM_CALL_CBFUNC(evt_cb_data, result, &fi);
+       g_free(evt_cb_data);
+       g_variant_unref(dbus_result);
 }
 
 static void on_response_get_sim_lock_info(GObject *source_object, GAsyncResult *res,
@@ -752,11 +1198,16 @@ static void on_response_get_sim_lock_info(GObject *source_object, GAsyncResult *
        TelSimPinOperationResult_t result = TAPI_SIM_PIN_OPERATION_SUCCESS;
        TelSimLockInfo_t lock;
 
-       dbg("Func Entrance");
+       TAPI_SIM_RESP_CB_ENTER(evt_cb_data);
        memset(&lock, 0, sizeof(TelSimLockInfo_t));
 
        conn = G_DBUS_CONNECTION (source_object);
        dbus_result = g_dbus_connection_call_finish(conn, res, &error);
+       SIM_CHECK_ERROR(error, evt_cb_data);
+
+       if (!dbus_result) {
+               TAPI_SIM_CHECK_ERR_MSG_AND_CALL_NULL_CBFUNC(error, evt_cb_data);
+       }
 
        g_variant_get(dbus_result, "(iiii)", &result, &lock.lock_type, &lock.lock_status,
                        &lock.retry_count);
@@ -765,7 +1216,8 @@ static void on_response_get_sim_lock_info(GObject *source_object, GAsyncResult *
                evt_cb_data->cb_fn(evt_cb_data->handle, result, &lock, evt_cb_data->user_data);
        }
 
-       free(evt_cb_data);
+       g_free(evt_cb_data);
+       g_variant_unref(dbus_result);
 }
 
 static void on_response_req_sim_apdu(GObject *source_object, GAsyncResult *res, gpointer user_data)
@@ -778,45 +1230,46 @@ static void on_response_req_sim_apdu(GObject *source_object, GAsyncResult *res,
        GVariant *param_gv = NULL;
        GVariant *inner_gv = NULL;
        guchar rt_i;
-       int i = 0;
+       unsigned short i = 0;
 
        struct tapi_resp_data *evt_cb_data = user_data;
        TelSimAccessResult_t result = TAPI_SIM_ACCESS_SUCCESS;
        TelSimApduResp_t r_apdu;
 
-       dbg("Func Entrance");
+       TAPI_SIM_RESP_CB_ENTER(evt_cb_data);
        memset(&r_apdu, 0, sizeof(TelSimApduResp_t));
 
        conn = G_DBUS_CONNECTION (source_object);
        dbus_result = g_dbus_connection_call_finish(conn, res, &error);
+       SIM_CHECK_ERROR(error, evt_cb_data);
 
-       if (dbus_result) {
-               /*      dbg("dbus_result type_format(%s)", g_variant_get_type_string(dbus_result));*/
-               g_variant_get(dbus_result, "(i@v)", &result, &param_gv);
-               inner_gv = g_variant_get_variant(param_gv);
-
-               g_variant_get(inner_gv, "ay", &iter);
-               while (g_variant_iter_loop(iter, "y", &rt_i)) {
-                       r_apdu.apdu_resp[i] = rt_i;
-                       i++;
-               }
-               r_apdu.apdu_resp_len = (unsigned char) i;
-               g_variant_iter_free(iter);
-               g_variant_unref(inner_gv);
-               g_variant_unref(param_gv);
-               /*              for(i=0; i < (int)r_apdu.apdu_resp_len; i++)
-                dbg("apdu[%d][0x%02x]",i, r_apdu.apdu_resp[i]);*/
+       if (!dbus_result) {
+               TAPI_SIM_CHECK_ERR_MSG_AND_CALL_NULL_CBFUNC(error, evt_cb_data);
        }
-       else {
-               result = TAPI_SIM_ACCESS_FAILED;
-               dbg( "g_dbus_conn failed. error (%s)", error->message);
-               g_error_free(error);
+
+       /*      dbg("dbus_result type_format(%s)", g_variant_get_type_string(dbus_result));*/
+       g_variant_get(dbus_result, "(i@v)", &result, &param_gv);
+       inner_gv = g_variant_get_variant(param_gv);
+
+       g_variant_get(inner_gv, "ay", &iter);
+       while (g_variant_iter_loop(iter, "y", &rt_i)) {
+               r_apdu.apdu_resp[i] = rt_i;
+               i++;
+               if (i >= TAPI_SIM_APDU_MAX_LEN)
+                       break;
        }
+       r_apdu.apdu_resp_len = i;
+       dbg("r_apdu.apdu_resp_len=[%d]", r_apdu.apdu_resp_len);
+       g_variant_iter_free(iter);
+       g_variant_unref(inner_gv);
+       g_variant_unref(param_gv);
+
        if (evt_cb_data->cb_fn) {
                evt_cb_data->cb_fn(evt_cb_data->handle, result, &r_apdu, evt_cb_data->user_data);
        }
 
-       free(evt_cb_data);
+       g_free(evt_cb_data);
+       g_variant_unref(dbus_result);
 }
 
 static void on_response_req_sim_atr(GObject *source_object, GAsyncResult *res, gpointer user_data)
@@ -829,108 +1282,127 @@ static void on_response_req_sim_atr(GObject *source_object, GAsyncResult *res, g
        GVariant *param_gv = NULL;
        GVariant *inner_gv = NULL;
        guchar rt_i;
-       int i = 0;
+       unsigned short i = 0;
 
        struct tapi_resp_data *evt_cb_data = user_data;
        TelSimAccessResult_t result = TAPI_SIM_ACCESS_SUCCESS;
        TelSimAtrResp_t r_atr;
 
-       dbg("Func Entrance");
+       TAPI_SIM_RESP_CB_ENTER(evt_cb_data);
        memset(&r_atr, 0, sizeof(TelSimAtrResp_t));
 
        conn = G_DBUS_CONNECTION (source_object);
        dbus_result = g_dbus_connection_call_finish(conn, res, &error);
+       SIM_CHECK_ERROR(error, evt_cb_data);
 
-       if (dbus_result) {
-               dbg("dbus_result type_format(%s)", g_variant_get_type_string(dbus_result));
-               g_variant_get(dbus_result, "(i@v)", &result, &param_gv);
-               inner_gv = g_variant_get_variant(param_gv);
-
-               g_variant_get(inner_gv, "ay", &iter);
-               while (g_variant_iter_loop(iter, "y", &rt_i)) {
-                       r_atr.atr_resp[i] = rt_i;
-                       i++;
-               }
-               r_atr.atr_resp_len = (unsigned char) i;
-               g_variant_iter_free(iter);
-               g_variant_unref(inner_gv);
-               g_variant_unref(param_gv);
-               /*              for(i=0; i < (int)r_atr.atr_resp_len; i++)
-                dbg("r_atr[%d][0x%02x]",i, r_atr.atr_resp[i]);*/
+       if (!dbus_result) {
+               TAPI_SIM_CHECK_ERR_MSG_AND_CALL_NULL_CBFUNC(error, evt_cb_data);
        }
-       else {
-               result = TAPI_SIM_ACCESS_FAILED;
+
+       dbg("dbus_result type_format(%s)", g_variant_get_type_string(dbus_result));
+       g_variant_get(dbus_result, "(i@v)", &result, &param_gv);
+       inner_gv = g_variant_get_variant(param_gv);
+
+       g_variant_get(inner_gv, "ay", &iter);
+       while (g_variant_iter_loop(iter, "y", &rt_i)) {
+               r_atr.atr_resp[i] = rt_i;
+               i++;
        }
+       r_atr.atr_resp_len = i;
+       dbg("r_atr.atr_resp_len=[%d]", r_atr.atr_resp_len);
+       g_variant_iter_free(iter);
+       g_variant_unref(inner_gv);
+       g_variant_unref(param_gv);
 
        if (evt_cb_data->cb_fn) {
                evt_cb_data->cb_fn(evt_cb_data->handle, result, &r_atr, evt_cb_data->user_data);
        }
 
-       free(evt_cb_data);
+       g_free(evt_cb_data);
+       g_variant_unref(dbus_result);
+}
+
+static void on_response_set_sim_power_state(GObject *source_object, GAsyncResult *res,
+               gpointer user_data)
+{
+       GError *error = NULL;
+       GDBusConnection *conn = NULL;
+       GVariant *dbus_result;
+
+       struct tapi_resp_data *evt_cb_data = user_data;
+       TelSimPowerSetResult_t result = TAPI_SIM_POWER_SET_SUCCESS;
+
+       TAPI_SIM_RESP_CB_ENTER(evt_cb_data);
+       conn = G_DBUS_CONNECTION (source_object);
+       dbus_result = g_dbus_connection_call_finish(conn, res, &error);
+       SIM_CHECK_ERROR(error, evt_cb_data);
+
+       if (!dbus_result) {
+               TAPI_SIM_CHECK_ERR_MSG_AND_CALL_NULL_CBFUNC(error, evt_cb_data);
+       }
+
+       g_variant_get(dbus_result, "(i)", &result);
+
+       if (evt_cb_data->cb_fn) {
+               evt_cb_data->cb_fn(evt_cb_data->handle, result, NULL, evt_cb_data->user_data);
+       }
+
+       g_free(evt_cb_data);
+       g_variant_unref(dbus_result);
 }
 
+
 EXPORT_API int tel_get_sim_init_info(TapiHandle *handle, TelSimCardStatus_t *sim_status,
                int *card_changed)
 {
        GError *gerr = NULL;
        GVariant *sync_gv = NULL;
-       int api_err = TAPI_API_SUCCESS;
        TelSimCardStatus_t init_status = 0;
        int changed = FALSE;
 
-       dbg("Func Entrance");
-       if (_tel_check_tapi_state() != 0)
-               return TAPI_API_SERVICE_NOT_READY;
+       TAPI_RET_ERR_NUM_IF_FAIL(handle, TAPI_API_INVALID_PTR);
+       TAPI_RET_ERR_NUM_IF_FAIL(sim_status, TAPI_API_INVALID_PTR);
+       TAPI_RET_ERR_NUM_IF_FAIL(card_changed, TAPI_API_INVALID_PTR);
 
-       TAPI_RETURN_VAL_IF_FAIL(handle, TAPI_API_INVALID_PTR);
-       TAPI_RETURN_VAL_IF_FAIL(sim_status, TAPI_API_INVALID_PTR);
-       TAPI_RETURN_VAL_IF_FAIL(card_changed, TAPI_API_INVALID_PTR);
+       TAPI_SIM_CHECK_TAPI_STATE();
 
        sync_gv = g_dbus_connection_call_sync(handle->dbus_connection, DBUS_TELEPHONY_SERVICE,
                        handle->path, DBUS_TELEPHONY_SIM_INTERFACE, "GetInitStatus", NULL, NULL,
-                       G_DBUS_CALL_FLAGS_NONE, -1, NULL, &gerr);
+                       G_DBUS_CALL_FLAGS_NONE, TAPI_DEFAULT_TIMEOUT, handle->ca, &gerr);
 
        if (sync_gv) {
                g_variant_get(sync_gv, "(ib)", &init_status, &changed);
                *sim_status = init_status;
                *card_changed = changed;
-               dbg("init_status[%d]",init_status); dbg("changed[%d]",changed);
+               msg("[%s] sim_init_status[%d] changed[%d]", handle->cp_name, init_status, changed);
+
+               g_variant_unref(sync_gv);
        } else {
-               dbg( "g_dbus_conn failed. error (%s)", gerr->message);
-               g_error_free(gerr);
-               return TAPI_API_OPERATION_FAILED;
+               TAPI_SIM_CHECK_ERR_MSG(gerr);
        }
-       return api_err;
+
+       return TAPI_API_SUCCESS;
 }
 
 EXPORT_API int tel_get_sim_type(TapiHandle *handle, TelSimCardType_t *card_type)
 {
        GError *gerr = NULL;
        GVariant *sync_gv = NULL;
-       int sim_ret =0;
-
-       dbg("Func Entrance");
 
-       TAPI_RETURN_VAL_IF_FAIL(handle, TAPI_API_INVALID_PTR);
-       TAPI_RETURN_VAL_IF_FAIL(card_type, TAPI_API_INVALID_PTR);
+       TAPI_RET_ERR_NUM_IF_FAIL(handle, TAPI_API_INVALID_PTR);
+       TAPI_RET_ERR_NUM_IF_FAIL(card_type, TAPI_API_INVALID_PTR);
 
-       if (_tel_check_tapi_state() != 0)
-               return TAPI_API_SERVICE_NOT_READY;
-
-       sim_ret = _tel_check_sim_state(handle);
-       if (sim_ret == TAPI_API_SIM_CARD_ERROR || sim_ret == TAPI_API_SIM_NOT_FOUND)
-               return sim_ret;
+       TAPI_SIM_CHECK_TAPI_STATE();
 
        sync_gv = g_dbus_connection_call_sync(handle->dbus_connection, DBUS_TELEPHONY_SERVICE,
                        handle->path, DBUS_TELEPHONY_SIM_INTERFACE, "GetCardType", NULL, NULL,
-                       G_DBUS_CALL_FLAGS_NONE, -1, NULL, &gerr);
-
+                       G_DBUS_CALL_FLAGS_NONE, TAPI_DEFAULT_TIMEOUT, handle->ca, &gerr);
        if (sync_gv) {
                g_variant_get(sync_gv, "(i)", card_type);
+
+               g_variant_unref(sync_gv);
        } else {
-               dbg( "g_dbus_conn failed. error (%s)", gerr->message);
-               g_error_free(gerr);
-               return TAPI_API_OPERATION_FAILED;
+               TAPI_SIM_CHECK_ERR_MSG(gerr);
        }
        return TAPI_API_SUCCESS;
 }
@@ -939,43 +1411,42 @@ EXPORT_API int tel_get_sim_imsi(TapiHandle *handle, TelSimImsiInfo_t *imsi)
 {
        GError *gerr = NULL;
        GVariant *sync_gv = NULL;
-       gchar *gplmn = NULL;
-       gchar *gmsin = NULL;
-       int sim_ret = 0;
-
-       TAPI_RETURN_VAL_IF_FAIL(handle, TAPI_API_INVALID_PTR);
 
-       dbg("Func Entrance");
-       if (_tel_check_tapi_state() != 0)
-               return TAPI_API_SERVICE_NOT_READY;
+       TAPI_RET_ERR_NUM_IF_FAIL(handle, TAPI_API_INVALID_PTR);
+       TAPI_RET_ERR_NUM_IF_FAIL(imsi, TAPI_API_INVALID_PTR);
 
-       sim_ret =_tel_check_sim_state(handle);
-       if (sim_ret != TAPI_API_SUCCESS)
-               return sim_ret;
-
-       TAPI_RETURN_VAL_IF_FAIL(imsi, TAPI_API_INVALID_PTR);
+       TAPI_SIM_CHECK_TAPI_STATE();
 
        sync_gv = g_dbus_connection_call_sync(handle->dbus_connection, DBUS_TELEPHONY_SERVICE,
                        handle->path, DBUS_TELEPHONY_SIM_INTERFACE, "GetIMSI", NULL, NULL,
-                       G_DBUS_CALL_FLAGS_NONE, -1, NULL, &gerr);
-
+                       G_DBUS_CALL_FLAGS_NONE, TAPI_DEFAULT_TIMEOUT, handle->ca, &gerr);
        if (sync_gv) {
-               dbg("imsi type_format(%s)", g_variant_get_type_string(sync_gv));
+               gchar *gplmn = NULL;
+               gchar *gmsin = NULL;
+               int gplmn_len = 0;
+               int gmsin_len = 0;
+
                g_variant_get(sync_gv, "(ss)", &gplmn, &gmsin);
 
-               dbg("gplmn[%s],gmsin[%s]",gplmn,gmsin);
-               snprintf(imsi->szMcc, 3 + 1, "%s", gplmn);
-               snprintf(imsi->szMnc, strlen(gplmn) - 3 + 1, "%s", &gplmn[3]);
-               snprintf(imsi->szMsin, strlen(gmsin) + 1, "%s", gmsin);
+               gplmn_len = strlen((const char*)gplmn);
+               gmsin_len = strlen((const char*)gmsin);
+
+               if (gplmn_len >= 5 && gmsin_len >= 9) {
+                       snprintf(imsi->szMcc, 3 + 1, "%s", gplmn);
+                       snprintf(imsi->szMnc, gplmn_len - 3 + 1, "%s", &gplmn[3]);
+                       snprintf(imsi->szMsin, gmsin_len + 1, "%s", gmsin);
+               } else {
+                       msg("invalid length.(plmn_len=%d, msin_len=%d)", gplmn_len,gmsin_len);
+                       memset(imsi, 0, sizeof(TelSimImsiInfo_t));
+               }
+               g_free(gplmn);
+               g_free(gmsin);
 
-               dbg("imsi->szMcc[%s]", imsi->szMnc);
-               dbg("imsi->szMnc[%s]", imsi->szMnc);
-               dbg("imsi->szMcc[%s]", imsi->szMcc);
+               g_variant_unref(sync_gv);
        } else {
-               dbg( "g_dbus_conn failed. error (%s)", gerr->message);
-               g_error_free(gerr);
-               return TAPI_API_OPERATION_FAILED;
+               TAPI_SIM_CHECK_ERR_MSG(gerr);
        }
+
        return TAPI_API_SUCCESS;
 }
 
@@ -989,36 +1460,33 @@ EXPORT_API int tel_get_sim_ecc(TapiHandle *handle, TelSimEccList_t *ecc)
        const gchar *key = NULL;
        const gchar *str_value = NULL;
        int i = 0;
-       int sim_ret = 0;
 
-       dbg("Func Entrance");
-       memset(ecc, 0, sizeof(TelSimEccList_t));
-       TAPI_RETURN_VAL_IF_FAIL(handle, TAPI_API_INVALID_PTR);
-       TAPI_RETURN_VAL_IF_FAIL(ecc, TAPI_API_INVALID_PTR);
+       TAPI_RET_ERR_NUM_IF_FAIL(handle, TAPI_API_INVALID_PTR);
+       TAPI_RET_ERR_NUM_IF_FAIL(ecc, TAPI_API_INVALID_PTR);
+
+       TAPI_SIM_CHECK_TAPI_STATE();
 
-       sim_ret =_tel_check_sim_state(handle);
-       if (sim_ret == TAPI_API_SIM_CARD_ERROR || sim_ret == TAPI_API_SIM_NOT_FOUND)
-               return sim_ret;
+       memset(ecc, 0, sizeof(TelSimEccList_t));
 
        sync_gv = g_dbus_connection_call_sync(handle->dbus_connection, DBUS_TELEPHONY_SERVICE,
                        handle->path, DBUS_TELEPHONY_SIM_INTERFACE, "GetECC", NULL, NULL,
-                       G_DBUS_CALL_FLAGS_NONE, -1, NULL, &gerr);
+                       G_DBUS_CALL_FLAGS_NONE, TAPI_DEFAULT_TIMEOUT, handle->ca, &gerr);
 
        if (sync_gv) {
 /*             dbg("ecc type_format(%s)", g_variant_get_type_string(sync_gv));*/
                g_variant_get(sync_gv, "(aa{sv})", &iter);
                ecc->ecc_count = g_variant_iter_n_children(iter);
-               dbg("ecc->ecc_count[%d]",ecc->ecc_count);
+               msg("ecc->ecc_count[%d]",ecc->ecc_count);
                i = 0;
                while (g_variant_iter_next(iter, "a{sv}", &iter_row)) {
                        while (g_variant_iter_loop(iter_row, "{sv}", &key, &value)) {
                                if (!g_strcmp0(key, "name")) {
                                        str_value = g_variant_get_string(value, NULL);
-                                       snprintf(ecc->list[i].name, strlen(str_value) + 1, "%s", str_value);
+                                       snprintf(ecc->list[i].name, strlen((const char*)str_value) + 1, "%s", str_value);
                                }
                                if (!g_strcmp0(key, "number")) {
                                        str_value = g_variant_get_string(value, NULL);
-                                       snprintf(ecc->list[i].number, strlen(str_value) + 1, "%s", str_value);
+                                       snprintf(ecc->list[i].number, strlen((const char*)str_value) + 1, "%s", str_value);
                                }
                                if (!g_strcmp0(key, "category")) {
                                        ecc->list[i].category = g_variant_get_int32(value);
@@ -1028,10 +1496,11 @@ EXPORT_API int tel_get_sim_ecc(TapiHandle *handle, TelSimEccList_t *ecc)
                        g_variant_iter_free(iter_row);
                }
                g_variant_iter_free(iter);
-       } else {
-               dbg( "g_dbus_conn failed. error (%s)", gerr->message);
-               g_error_free(gerr);
-               return TAPI_API_OPERATION_FAILED;
+
+               g_variant_unref(sync_gv);
+       }
+       else {
+               TAPI_SIM_CHECK_ERR_MSG(gerr);
        }
        return TAPI_API_SUCCESS;
 }
@@ -1039,22 +1508,15 @@ EXPORT_API int tel_get_sim_ecc(TapiHandle *handle, TelSimEccList_t *ecc)
 EXPORT_API int tel_get_sim_iccid(TapiHandle *handle, tapi_response_cb callback, void *user_data)
 {
        struct tapi_resp_data *evt_cb_data = NULL;
-       int sim_ret = 0;
-
-       dbg("Func Entrance ");
-       if (_tel_check_tapi_state() != 0)
-               return TAPI_API_SERVICE_NOT_READY;
 
-       TAPI_RETURN_VAL_IF_FAIL(handle, TAPI_API_INVALID_PTR);
+       TAPI_RET_ERR_NUM_IF_FAIL(handle, TAPI_API_INVALID_PTR);
 
-       sim_ret =_tel_check_sim_state(handle);
-       if (sim_ret == TAPI_API_SIM_CARD_ERROR || sim_ret == TAPI_API_SIM_NOT_FOUND)
-               return sim_ret;
+       TAPI_SIM_CHECK_TAPI_STATE();
 
        MAKE_RESP_CB_DATA(evt_cb_data, handle, callback, user_data);
 
        g_dbus_connection_call(handle->dbus_connection, DBUS_TELEPHONY_SERVICE, handle->path,
-                       DBUS_TELEPHONY_SIM_INTERFACE, "GetICCID", NULL, NULL, G_DBUS_CALL_FLAGS_NONE, -1, NULL,
+                       DBUS_TELEPHONY_SIM_INTERFACE, "GetICCID", NULL, NULL, G_DBUS_CALL_FLAGS_NONE, TAPI_DEFAULT_TIMEOUT, handle->ca,
                        on_response_get_sim_iccid, evt_cb_data);
 
        return TAPI_API_SUCCESS;
@@ -1063,23 +1525,16 @@ EXPORT_API int tel_get_sim_iccid(TapiHandle *handle, tapi_response_cb callback,
 EXPORT_API int tel_get_sim_language(TapiHandle *handle, tapi_response_cb callback, void *user_data)
 {
        struct tapi_resp_data *evt_cb_data = NULL;
-       int sim_ret = 0;
 
-       dbg("Func Entrance ");
-       if (_tel_check_tapi_state() != 0)
-               return TAPI_API_SERVICE_NOT_READY;
+       TAPI_RET_ERR_NUM_IF_FAIL(handle, TAPI_API_INVALID_PTR);
 
-       TAPI_RETURN_VAL_IF_FAIL(handle, TAPI_API_INVALID_PTR);
-
-       sim_ret =_tel_check_sim_state(handle);
-       if (sim_ret == TAPI_API_SIM_CARD_ERROR || sim_ret == TAPI_API_SIM_NOT_FOUND)
-               return sim_ret;
+       TAPI_SIM_CHECK_TAPI_STATE();
 
        MAKE_RESP_CB_DATA(evt_cb_data, handle, callback, user_data);
 
        g_dbus_connection_call(handle->dbus_connection, DBUS_TELEPHONY_SERVICE, handle->path,
-                       DBUS_TELEPHONY_SIM_INTERFACE, "GetLanguage", NULL, NULL, G_DBUS_CALL_FLAGS_NONE, -1,
-                       NULL, on_response_get_sim_language, evt_cb_data);
+                       DBUS_TELEPHONY_SIM_INTERFACE, "GetLanguage", NULL, NULL, G_DBUS_CALL_FLAGS_NONE, TAPI_DEFAULT_TIMEOUT,
+                       handle->ca, on_response_get_sim_language, evt_cb_data);
 
        return TAPI_API_SUCCESS;
 }
@@ -1089,25 +1544,18 @@ EXPORT_API int tel_set_sim_language(TapiHandle *handle, TelSimLanguagePreference
 {
        struct tapi_resp_data *evt_cb_data = NULL;
        GVariant *param = NULL;
-       int sim_ret = 0;
-
-       dbg("Func Entrance w/ lang[%d]",language);
-       if (_tel_check_tapi_state() != 0)
-               return TAPI_API_SERVICE_NOT_READY;
 
-       TAPI_RETURN_VAL_IF_FAIL(handle, TAPI_API_INVALID_PTR);
+       TAPI_RET_ERR_NUM_IF_FAIL(handle, TAPI_API_INVALID_PTR);
 
-       sim_ret =_tel_check_sim_state(handle);
-       if (sim_ret != TAPI_API_SUCCESS)
-               return sim_ret;
+       TAPI_SIM_CHECK_TAPI_STATE();
 
        MAKE_RESP_CB_DATA(evt_cb_data, handle, callback, user_data);
 
        param = g_variant_new("(i)", language);
 
        g_dbus_connection_call(handle->dbus_connection, DBUS_TELEPHONY_SERVICE, handle->path,
-                       DBUS_TELEPHONY_SIM_INTERFACE, "SetLanguage", param, NULL, G_DBUS_CALL_FLAGS_NONE, -1,
-                       NULL, on_response_set_sim_language, evt_cb_data);
+                       DBUS_TELEPHONY_SIM_INTERFACE, "SetLanguage", param, NULL, G_DBUS_CALL_FLAGS_NONE, TAPI_DEFAULT_TIMEOUT,
+                       handle->ca, on_response_set_sim_language, evt_cb_data);
 
        return TAPI_API_SUCCESS;
 }
@@ -1116,23 +1564,63 @@ EXPORT_API int tel_get_sim_callforwarding_info(TapiHandle *handle, tapi_response
                void *user_data)
 {
        struct tapi_resp_data *evt_cb_data = NULL;
-       int sim_ret = 0;
 
-       dbg("Func Entrance ");
-       if (_tel_check_tapi_state() != 0)
-               return TAPI_API_SERVICE_NOT_READY;
+       TAPI_RET_ERR_NUM_IF_FAIL(handle, TAPI_API_INVALID_PTR);
+
+       TAPI_SIM_CHECK_TAPI_STATE();
+
+       MAKE_RESP_CB_DATA(evt_cb_data, handle, callback, user_data);
+
+       g_dbus_connection_call(handle->dbus_connection, DBUS_TELEPHONY_SERVICE, handle->path,
+                       DBUS_TELEPHONY_SIM_INTERFACE, "GetCallForwarding", NULL, NULL, G_DBUS_CALL_FLAGS_NONE,
+                       TAPI_DEFAULT_TIMEOUT, handle->ca, on_response_get_sim_callforwarding_info, evt_cb_data);
+
+       return TAPI_API_SUCCESS;
+}
+
+EXPORT_API int tel_set_sim_callforwarding_info(TapiHandle *handle, TelSimCallForwardingReq_t *req_cf,
+               tapi_response_cb callback, void *user_data)
+{
+       struct tapi_resp_data *evt_cb_data = NULL;
+       GVariant *param = NULL;
+       gchar *g_number = NULL;
 
-       TAPI_RETURN_VAL_IF_FAIL(handle, TAPI_API_INVALID_PTR);
+       TAPI_RET_ERR_NUM_IF_FAIL(handle, TAPI_API_INVALID_PTR);
+       TAPI_RET_ERR_NUM_IF_FAIL(req_cf, TAPI_API_INVALID_PTR);
 
-       sim_ret =_tel_check_sim_state(handle);
-       if (sim_ret != TAPI_API_SUCCESS)
-               return sim_ret;
+       TAPI_SIM_CHECK_TAPI_STATE();
 
        MAKE_RESP_CB_DATA(evt_cb_data, handle, callback, user_data);
 
+       g_number = calloc(1, strlen((const char*)&req_cf->cf_data_u.cf.cfu_num)+1);
+       if (!g_number) {
+               g_free(evt_cb_data);
+               return TAPI_API_SYSTEM_OUT_OF_MEM;
+       }
+
+       memcpy((void*)g_number, (const void*)&req_cf->cf_data_u.cf.cfu_num, strlen((const char*)&req_cf->cf_data_u.cf.cfu_num));
+
+       param = g_variant_new("(biiyiisiibbbb)",
+                       req_cf->b_cphs,
+                       req_cf->cf_data_u.cf.rec_index,
+                       req_cf->cf_data_u.cf.msp_num,
+                       req_cf->cf_data_u.cf.cfu_status,
+                       req_cf->cf_data_u.cf.ton,
+                       req_cf->cf_data_u.cf.npi,
+                       g_number,
+                       req_cf->cf_data_u.cf.cc2_id,
+                       req_cf->cf_data_u.cf.ext7_id,
+                       req_cf->cf_data_u.cphs_cf.b_line1,
+                       req_cf->cf_data_u.cphs_cf.b_line2,
+                       req_cf->cf_data_u.cphs_cf.b_fax,
+                       req_cf->cf_data_u.cphs_cf.b_data);
+
        g_dbus_connection_call(handle->dbus_connection, DBUS_TELEPHONY_SERVICE, handle->path,
-                       DBUS_TELEPHONY_SIM_INTERFACE, "GetCallforwarding", NULL, NULL, G_DBUS_CALL_FLAGS_NONE,
-                       -1, NULL, on_response_get_sim_callforwarding_info, evt_cb_data);
+                       DBUS_TELEPHONY_SIM_INTERFACE, "SetCallForwarding", param, NULL, G_DBUS_CALL_FLAGS_NONE, TAPI_DEFAULT_TIMEOUT,
+                       handle->ca, on_response_set_sim_callforwarding_info, evt_cb_data);
+
+       if (g_number)
+               free(g_number);
 
        return TAPI_API_SUCCESS;
 }
@@ -1141,23 +1629,64 @@ EXPORT_API int tel_get_sim_messagewaiting_info(TapiHandle *handle, tapi_response
                void *user_data)
 {
        struct tapi_resp_data *evt_cb_data = NULL;
-       int sim_ret = 0;
-
-       dbg("Func Entrance ");
-       if (_tel_check_tapi_state() != 0)
-               return TAPI_API_SERVICE_NOT_READY;
 
-       TAPI_RETURN_VAL_IF_FAIL(handle, TAPI_API_INVALID_PTR);
+       TAPI_RET_ERR_NUM_IF_FAIL(handle, TAPI_API_INVALID_PTR);
 
-       sim_ret =_tel_check_sim_state(handle);
-       if (sim_ret != TAPI_API_SUCCESS)
-               return sim_ret;
+       TAPI_SIM_CHECK_TAPI_STATE();
 
        MAKE_RESP_CB_DATA(evt_cb_data, handle, callback, user_data);
 
        g_dbus_connection_call(handle->dbus_connection, DBUS_TELEPHONY_SERVICE, handle->path,
                        DBUS_TELEPHONY_SIM_INTERFACE, "GetMessageWaiting", NULL, NULL, G_DBUS_CALL_FLAGS_NONE,
-                       -1, NULL, on_response_get_sim_messagewaiting_info, evt_cb_data);
+                       TAPI_DEFAULT_TIMEOUT, handle->ca, on_response_get_sim_messagewaiting_info, evt_cb_data);
+
+       return TAPI_API_SUCCESS;
+}
+
+EXPORT_API int tel_set_sim_messagewaiting_info(TapiHandle *handle, TelSimMessageWaitingReq_t *req_mw,
+               tapi_response_cb callback, void *user_data)
+{
+       struct tapi_resp_data *evt_cb_data = NULL;
+       GVariant *param = NULL;
+
+       TAPI_RET_ERR_NUM_IF_FAIL(handle, TAPI_API_INVALID_PTR);
+       TAPI_RET_ERR_NUM_IF_FAIL(req_mw, TAPI_API_INVALID_PTR);
+
+       TAPI_SIM_CHECK_TAPI_STATE();
+
+       MAKE_RESP_CB_DATA(evt_cb_data, handle, callback, user_data);
+
+       dbg("b_cphs[%d], rec_index[%d], indicator_status[0x%x], voice_count[%d], fax_count[%d], email_count[%d], other_count[%d], video_count[%d], b_voice1[%d],b_voice2[%d],b_fax[%d], b_data[%d]",
+                       req_mw->b_cphs,
+                       req_mw->mw_data_u.mw.rec_index,
+                       req_mw->mw_data_u.mw.indicator_status,
+                       req_mw->mw_data_u.mw.voice_count,
+                       req_mw->mw_data_u.mw.fax_count,
+                       req_mw->mw_data_u.mw.email_count,
+                       req_mw->mw_data_u.mw.other_count,
+                       req_mw->mw_data_u.mw.video_count,
+                       req_mw->mw_data_u.cphs_mw.b_voice1,
+                       req_mw->mw_data_u.cphs_mw.b_voice2,
+                       req_mw->mw_data_u.cphs_mw.b_fax,
+                       req_mw->mw_data_u.cphs_mw.b_data);
+
+       param = g_variant_new("(biyiiiiibbbb)",
+                       req_mw->b_cphs,
+                       req_mw->mw_data_u.mw.rec_index,
+                       req_mw->mw_data_u.mw.indicator_status,
+                       req_mw->mw_data_u.mw.voice_count,
+                       req_mw->mw_data_u.mw.fax_count,
+                       req_mw->mw_data_u.mw.email_count,
+                       req_mw->mw_data_u.mw.other_count,
+                       req_mw->mw_data_u.mw.video_count,
+                       req_mw->mw_data_u.cphs_mw.b_voice1,
+                       req_mw->mw_data_u.cphs_mw.b_voice2,
+                       req_mw->mw_data_u.cphs_mw.b_fax,
+                       req_mw->mw_data_u.cphs_mw.b_data);
+
+       g_dbus_connection_call(handle->dbus_connection, DBUS_TELEPHONY_SERVICE, handle->path,
+                       DBUS_TELEPHONY_SIM_INTERFACE, "SetMessageWaiting", param, NULL, G_DBUS_CALL_FLAGS_NONE, TAPI_DEFAULT_TIMEOUT,
+                       handle->ca, on_response_set_sim_messagewaiting_info, evt_cb_data);
 
        return TAPI_API_SUCCESS;
 }
@@ -1166,23 +1695,89 @@ EXPORT_API int tel_get_sim_mailbox_info(TapiHandle *handle, tapi_response_cb cal
                void *user_data)
 {
        struct tapi_resp_data *evt_cb_data = NULL;
-       int sim_ret = 0;
 
-       dbg("Func Entrance ");
-       if (_tel_check_tapi_state() != 0)
-               return TAPI_API_SERVICE_NOT_READY;
+       TAPI_RET_ERR_NUM_IF_FAIL(handle, TAPI_API_INVALID_PTR);
+
+       TAPI_SIM_CHECK_TAPI_STATE();
+
+       MAKE_RESP_CB_DATA(evt_cb_data, handle, callback, user_data);
+
+       g_dbus_connection_call(handle->dbus_connection, DBUS_TELEPHONY_SERVICE, handle->path,
+                       DBUS_TELEPHONY_SIM_INTERFACE, "GetMailbox", NULL, NULL, G_DBUS_CALL_FLAGS_NONE, TAPI_DEFAULT_TIMEOUT,
+                       handle->ca, on_response_get_sim_mailbox_info, evt_cb_data);
+
+       return TAPI_API_SUCCESS;
+}
+
+EXPORT_API int tel_set_sim_mailbox_info(TapiHandle *handle, TelSimMailBoxNumber_t *req_mb,
+               tapi_response_cb callback, void *user_data)
+{
+       struct tapi_resp_data *evt_cb_data = NULL;
+       GVariant *param = NULL;
+       gchar *g_alpha = NULL;
+       gchar *g_number = NULL;
 
-       TAPI_RETURN_VAL_IF_FAIL(handle, TAPI_API_INVALID_PTR);
+       TAPI_RET_ERR_NUM_IF_FAIL(handle, TAPI_API_INVALID_PTR);
+       TAPI_RET_ERR_NUM_IF_FAIL(req_mb, TAPI_API_INVALID_PTR);
 
-       sim_ret =_tel_check_sim_state(handle);
-       if (sim_ret != TAPI_API_SUCCESS)
-               return sim_ret;
+       TAPI_SIM_CHECK_TAPI_STATE();
 
        MAKE_RESP_CB_DATA(evt_cb_data, handle, callback, user_data);
 
+       g_alpha = calloc(1, strlen((const char*)&req_mb->alpha_id)+1);
+       if (!g_alpha) {
+               g_free(evt_cb_data);
+               return TAPI_API_SYSTEM_OUT_OF_MEM;
+       }
+
+       memcpy((void*)g_alpha, (const void*)&req_mb->alpha_id, strlen((const char*)&req_mb->alpha_id));
+
+       g_number = calloc(1, strlen((const char*)&req_mb->num)+1);
+       if (!g_number) {
+               free(g_alpha);
+               g_free(evt_cb_data);
+               return TAPI_API_SYSTEM_OUT_OF_MEM;
+       }
+
+       memcpy((void*)g_number, (const void*)&req_mb->num, strlen((const char*)&req_mb->num));
+
+       dbg("req_mb->b_cphs[%d], req_mb->rec_index[%d], req_mb->profile_num[%d], req_mb->mb_type[%d], req_mb->alpha_id_max_len[%d],req_mb->alpha_id[%s]",
+                       req_mb->b_cphs,
+                       req_mb->rec_index,
+                       req_mb->profile_num,
+                       req_mb->mb_type,
+                       req_mb->alpha_id_max_len,
+                       g_alpha);
+
+       dbg("req_mb->ton[%d],req_mb->npi[%d],g_number[%s],req_mb->cc_id[%d],req_mb->ext1_id[%d]",
+                       req_mb->ton,
+                       req_mb->npi,
+                       g_number,
+                       req_mb->cc_id,
+                       req_mb->ext1_id);
+
+       param = g_variant_new("(biiiisiisii)",
+                       req_mb->b_cphs,
+                       req_mb->mb_type,
+                       req_mb->rec_index,
+                       req_mb->profile_num,
+                       req_mb->alpha_id_max_len,
+                       g_alpha,
+                       req_mb->ton,
+                       req_mb->npi,
+                       g_number,
+                       req_mb->cc_id,
+                       req_mb->ext1_id);
+
        g_dbus_connection_call(handle->dbus_connection, DBUS_TELEPHONY_SERVICE, handle->path,
-                       DBUS_TELEPHONY_SIM_INTERFACE, "GetMailbox", NULL, NULL, G_DBUS_CALL_FLAGS_NONE, -1,
-                       NULL, on_response_get_sim_mailbox_info, evt_cb_data);
+                       DBUS_TELEPHONY_SIM_INTERFACE, "SetMailbox", param, NULL, G_DBUS_CALL_FLAGS_NONE, TAPI_DEFAULT_TIMEOUT,
+                       handle->ca, on_response_set_sim_mailbox_info, evt_cb_data);
+
+       if (g_alpha)
+               free(g_alpha);
+
+       if (g_number)
+               free(g_number);
 
        return TAPI_API_SUCCESS;
 }
@@ -1191,46 +1786,50 @@ EXPORT_API int tel_get_sim_cphs_info(TapiHandle *handle, tapi_response_cb callba
                void *user_data)
 {
        struct tapi_resp_data *evt_cb_data = NULL;
-       int sim_ret = 0;
 
-       dbg("Func Entrance ");
-       if (_tel_check_tapi_state() != 0)
-               return TAPI_API_SERVICE_NOT_READY;
+       TAPI_RET_ERR_NUM_IF_FAIL(handle, TAPI_API_INVALID_PTR);
 
-       TAPI_RETURN_VAL_IF_FAIL(handle, TAPI_API_INVALID_PTR);
-
-       sim_ret =_tel_check_sim_state(handle);
-       if (sim_ret == TAPI_API_SIM_CARD_ERROR || sim_ret == TAPI_API_SIM_NOT_FOUND)
-               return sim_ret;
+       TAPI_SIM_CHECK_TAPI_STATE();
 
        MAKE_RESP_CB_DATA(evt_cb_data, handle, callback, user_data);
 
        g_dbus_connection_call(handle->dbus_connection, DBUS_TELEPHONY_SERVICE, handle->path,
-                       DBUS_TELEPHONY_SIM_INTERFACE, "GetCPHSInfo", NULL, NULL, G_DBUS_CALL_FLAGS_NONE, -1, NULL,
+                       DBUS_TELEPHONY_SIM_INTERFACE, "GetCPHSInfo", NULL, NULL, G_DBUS_CALL_FLAGS_NONE, TAPI_DEFAULT_TIMEOUT, handle->ca,
                        on_response_get_sim_cphs_info, evt_cb_data);
 
        return TAPI_API_SUCCESS;
 }
 
-EXPORT_API int tel_get_sim_msisdn(TapiHandle *handle, tapi_response_cb callback, void *user_data)
+EXPORT_API int tel_get_sim_service_table(TapiHandle *handle, tapi_response_cb callback,
+               void *user_data)
 {
        struct tapi_resp_data *evt_cb_data = NULL;
-       int sim_ret = 0;
 
-       dbg("Func Entrance ");
-       if (_tel_check_tapi_state() != 0)
-               return TAPI_API_SERVICE_NOT_READY;
+       TAPI_RET_ERR_NUM_IF_FAIL(handle, TAPI_API_INVALID_PTR);
+
+       TAPI_SIM_CHECK_TAPI_STATE();
+
+       MAKE_RESP_CB_DATA(evt_cb_data, handle, callback, user_data);
+
+       g_dbus_connection_call(handle->dbus_connection, DBUS_TELEPHONY_SERVICE, handle->path,
+                       DBUS_TELEPHONY_SIM_INTERFACE, "GetServiceTable", NULL, NULL, G_DBUS_CALL_FLAGS_NONE, TAPI_DEFAULT_TIMEOUT, handle->ca,
+                       on_response_get_sim_service_table, evt_cb_data);
+
+       return TAPI_API_SUCCESS;
+}
+
+EXPORT_API int tel_get_sim_msisdn(TapiHandle *handle, tapi_response_cb callback, void *user_data)
+{
+       struct tapi_resp_data *evt_cb_data = NULL;
 
-       TAPI_RETURN_VAL_IF_FAIL(handle, TAPI_API_INVALID_PTR);
+       TAPI_RET_ERR_NUM_IF_FAIL(handle, TAPI_API_INVALID_PTR);
 
-       sim_ret =_tel_check_sim_state(handle);
-       if (sim_ret != TAPI_API_SUCCESS)
-               return sim_ret;;
+       TAPI_SIM_CHECK_TAPI_STATE();
 
        MAKE_RESP_CB_DATA(evt_cb_data, handle, callback, user_data);
 
        g_dbus_connection_call(handle->dbus_connection, DBUS_TELEPHONY_SERVICE, handle->path,
-                       DBUS_TELEPHONY_SIM_INTERFACE, "GetMSISDN", NULL, NULL, G_DBUS_CALL_FLAGS_NONE, -1, NULL,
+                       DBUS_TELEPHONY_SIM_INTERFACE, "GetMSISDN", NULL, NULL, G_DBUS_CALL_FLAGS_NONE, TAPI_DEFAULT_TIMEOUT, handle->ca,
                        on_response_get_sim_msisdn, evt_cb_data);
 
        return TAPI_API_SUCCESS;
@@ -1240,23 +1839,16 @@ EXPORT_API int tel_get_sim_oplmnwact(TapiHandle *handle, tapi_response_cb callba
                void *user_data)
 {
        struct tapi_resp_data *evt_cb_data = NULL;
-       int sim_ret = 0;
-
-       dbg("Func Entrance ");
-       if (_tel_check_tapi_state() != 0)
-               return TAPI_API_SERVICE_NOT_READY;
 
-       TAPI_RETURN_VAL_IF_FAIL(handle, TAPI_API_INVALID_PTR);
+       TAPI_RET_ERR_NUM_IF_FAIL(handle, TAPI_API_INVALID_PTR);
 
-       sim_ret =_tel_check_sim_state(handle);
-       if (sim_ret != TAPI_API_SUCCESS)
-               return sim_ret;
+       TAPI_SIM_CHECK_TAPI_STATE();
 
        MAKE_RESP_CB_DATA(evt_cb_data, handle, callback, user_data);
 
        g_dbus_connection_call(handle->dbus_connection, DBUS_TELEPHONY_SERVICE, handle->path,
-                       DBUS_TELEPHONY_SIM_INTERFACE, "GetOplmnwact", NULL, NULL, G_DBUS_CALL_FLAGS_NONE, -1,
-                       NULL, on_response_get_sim_oplmnwact, evt_cb_data);
+                       DBUS_TELEPHONY_SIM_INTERFACE, "GetOplmnwact", NULL, NULL, G_DBUS_CALL_FLAGS_NONE, TAPI_DEFAULT_TIMEOUT,
+                       handle->ca, on_response_get_sim_oplmnwact, evt_cb_data);
 
        return TAPI_API_SUCCESS;
 }
@@ -1265,23 +1857,16 @@ EXPORT_API int tel_get_sim_spn(TapiHandle *handle, tapi_response_cb callback,
                void *user_data)
 {
        struct tapi_resp_data *evt_cb_data = NULL;
-       int sim_ret = 0;
 
-       dbg("Func Entrance ");
-       if (_tel_check_tapi_state() != 0)
-               return TAPI_API_SERVICE_NOT_READY;
+       TAPI_RET_ERR_NUM_IF_FAIL(handle, TAPI_API_INVALID_PTR);
 
-       TAPI_RETURN_VAL_IF_FAIL(handle, TAPI_API_INVALID_PTR);
-
-       sim_ret =_tel_check_sim_state(handle);
-       if (sim_ret == TAPI_API_SIM_CARD_ERROR || sim_ret == TAPI_API_SIM_NOT_FOUND)
-               return sim_ret;
+       TAPI_SIM_CHECK_TAPI_STATE();
 
        MAKE_RESP_CB_DATA(evt_cb_data, handle, callback, user_data);
 
        g_dbus_connection_call(handle->dbus_connection, DBUS_TELEPHONY_SERVICE, handle->path,
-                       DBUS_TELEPHONY_SIM_INTERFACE, "GetSpn", NULL, NULL, G_DBUS_CALL_FLAGS_NONE, -1,
-                       NULL, on_response_get_sim_spn, evt_cb_data);
+                       DBUS_TELEPHONY_SIM_INTERFACE, "GetSpn", NULL, NULL, G_DBUS_CALL_FLAGS_NONE, TAPI_DEFAULT_TIMEOUT,
+                       handle->ca, on_response_get_sim_spn, evt_cb_data);
 
        return TAPI_API_SUCCESS;
 }
@@ -1290,23 +1875,16 @@ EXPORT_API int tel_get_sim_cphs_netname(TapiHandle *handle, tapi_response_cb cal
                void *user_data)
 {
        struct tapi_resp_data *evt_cb_data = NULL;
-       int sim_ret = 0;
-
-       dbg("Func Entrance ");
-       if (_tel_check_tapi_state() != 0)
-               return TAPI_API_SERVICE_NOT_READY;
 
-       TAPI_RETURN_VAL_IF_FAIL(handle, TAPI_API_INVALID_PTR);
+       TAPI_RET_ERR_NUM_IF_FAIL(handle, TAPI_API_INVALID_PTR);
 
-       sim_ret =_tel_check_sim_state(handle);
-       if (sim_ret != TAPI_API_SUCCESS)
-               return sim_ret;
+       TAPI_SIM_CHECK_TAPI_STATE();
 
        MAKE_RESP_CB_DATA(evt_cb_data, handle, callback, user_data);
 
        g_dbus_connection_call(handle->dbus_connection, DBUS_TELEPHONY_SERVICE, handle->path,
-                       DBUS_TELEPHONY_SIM_INTERFACE, "GetCphsNetName", NULL, NULL, G_DBUS_CALL_FLAGS_NONE, -1,
-                       NULL, on_response_get_sim_cphs_netname, evt_cb_data);
+                       DBUS_TELEPHONY_SIM_INTERFACE, "GetCphsNetName", NULL, NULL, G_DBUS_CALL_FLAGS_NONE, TAPI_DEFAULT_TIMEOUT,
+                       handle->ca, on_response_get_sim_cphs_netname, evt_cb_data);
 
        return TAPI_API_SUCCESS;
 }
@@ -1315,24 +1893,16 @@ EXPORT_API int tel_req_sim_authentication(TapiHandle *handle,
                TelSimAuthenticationData_t *authentication_data, tapi_response_cb callback, void *user_data)
 {
        struct tapi_resp_data *evt_cb_data = NULL;
-       GVariantBuilder *builder = NULL;
+       GVariantBuilder builder;
        GVariant *param = NULL;
        GVariant *rand_gv = NULL;
        GVariant *autn_gv = NULL;
        int i =0;
-       int sim_ret = 0;
 
-       dbg("Func Entrance ");
-       if (_tel_check_tapi_state() != 0)
-               return TAPI_API_SERVICE_NOT_READY;
+       TAPI_RET_ERR_NUM_IF_FAIL(handle, TAPI_API_INVALID_PTR);
+       TAPI_RET_ERR_NUM_IF_FAIL(authentication_data, TAPI_API_INVALID_PTR);
 
-       TAPI_RETURN_VAL_IF_FAIL(handle, TAPI_API_INVALID_PTR);
-
-       sim_ret =_tel_check_sim_state(handle);
-       if (sim_ret == TAPI_API_SIM_CARD_ERROR || sim_ret == TAPI_API_SIM_NOT_FOUND)
-               return sim_ret;
-
-       TAPI_RETURN_VAL_IF_FAIL(authentication_data, TAPI_API_INVALID_PTR);
+       TAPI_SIM_CHECK_TAPI_STATE();
 
        if (authentication_data->auth_type > TAPI_SIM_AUTH_TYPE_3G)
                return TAPI_API_INVALID_INPUT;
@@ -1346,26 +1916,23 @@ EXPORT_API int tel_req_sim_authentication(TapiHandle *handle,
 
        MAKE_RESP_CB_DATA(evt_cb_data, handle, callback, user_data);
 
-       builder = g_variant_builder_new(G_VARIANT_TYPE ("ay"));
+       g_variant_builder_init(&builder, G_VARIANT_TYPE ("ay"));
        for (i = 0; i < authentication_data->rand_length; i++) {
-               dbg("authentication_data->rand_data[%d][0x%02x]", i,authentication_data->rand_data[i]);
-               g_variant_builder_add(builder, "y", authentication_data->rand_data[i]);
+               g_variant_builder_add(&builder, "y", authentication_data->rand_data[i]);
        }
-       rand_gv = g_variant_builder_end(builder);
+       rand_gv = g_variant_builder_end(&builder);
 
-       builder = g_variant_builder_new(G_VARIANT_TYPE ("ay"));
+       g_variant_builder_init(&builder, G_VARIANT_TYPE ("ay"));
                for (i = 0; i < authentication_data->autn_length; i++) {
-                       dbg("authentication_data->autn_data[%d][0x%02x]", i,authentication_data->autn_data[i]);
-                       g_variant_builder_add(builder, "y", authentication_data->autn_data[i]);
+                       g_variant_builder_add(&builder, "y", authentication_data->autn_data[i]);
                }
-       autn_gv = g_variant_builder_end(builder);
+       autn_gv = g_variant_builder_end(&builder);
 
        param = g_variant_new("(ivv)", authentication_data->auth_type, rand_gv, autn_gv);
-       /*g_variant_builder_unref (builder);*/
 
        g_dbus_connection_call(handle->dbus_connection, DBUS_TELEPHONY_SERVICE, handle->path,
-                       DBUS_TELEPHONY_SIM_INTERFACE, "Authentication", param, NULL, G_DBUS_CALL_FLAGS_NONE, -1,
-                       NULL, on_response_req_sim_authentication, evt_cb_data);
+                       DBUS_TELEPHONY_SIM_INTERFACE, "Authentication", param, NULL, G_DBUS_CALL_FLAGS_NONE, TAPI_DEFAULT_TIMEOUT,
+                       handle->ca, on_response_req_sim_authentication, evt_cb_data);
 
        return TAPI_API_SUCCESS;
 }
@@ -1376,22 +1943,14 @@ EXPORT_API int tel_verifiy_sim_pins(TapiHandle *handle, const TelSimSecPw_t *pin
        struct tapi_resp_data *evt_cb_data = NULL;
        GVariant *param = NULL;
        gchar *gpw = NULL;
-       int sim_ret = 0;
-
-       dbg("Func Entrance");
-       if (_tel_check_tapi_state() != 0)
-               return TAPI_API_SERVICE_NOT_READY;
-
-       TAPI_RETURN_VAL_IF_FAIL(handle, TAPI_API_INVALID_PTR);
 
-       sim_ret =_tel_check_sim_state(handle);
-       if (sim_ret == TAPI_API_SIM_CARD_ERROR || sim_ret == TAPI_API_SIM_NOT_FOUND)
-               return sim_ret;
+       TAPI_RET_ERR_NUM_IF_FAIL(handle, TAPI_API_INVALID_PTR);
+       TAPI_RET_ERR_NUM_IF_FAIL(pin_data, TAPI_API_INVALID_PTR);
+       TAPI_RET_ERR_NUM_IF_FAIL(pin_data->pw, TAPI_API_INVALID_PTR);
 
-       TAPI_RETURN_VAL_IF_FAIL(pin_data, TAPI_API_INVALID_PTR);
-       TAPI_RETURN_VAL_IF_FAIL(pin_data->pw, TAPI_API_INVALID_PTR);
+       TAPI_SIM_CHECK_TAPI_STATE();
 
-       dbg("pin type[%d]", pin_data->type);
+       msg("pin type[%d]", pin_data->type);
        if (pin_data->type != TAPI_SIM_PTYPE_PIN1 && pin_data->type != TAPI_SIM_PTYPE_PIN2
                        && pin_data->type != TAPI_SIM_PTYPE_SIM)
                return TAPI_API_INVALID_INPUT;
@@ -1401,16 +1960,23 @@ EXPORT_API int tel_verifiy_sim_pins(TapiHandle *handle, const TelSimSecPw_t *pin
 
        MAKE_RESP_CB_DATA(evt_cb_data, handle, callback, user_data);
 
-       gpw = calloc(pin_data->pw_len+1, 1);
+       gpw = calloc(1, pin_data->pw_len+1);
+       if (!gpw) {
+               g_free(evt_cb_data);
+               return TAPI_API_SYSTEM_OUT_OF_MEM;
+       }
+
        memcpy((void*)gpw, (const void*)pin_data->pw, pin_data->pw_len);
 
        param = g_variant_new("(is)", pin_data->type, gpw);
 
        g_dbus_connection_call(handle->dbus_connection, DBUS_TELEPHONY_SERVICE, handle->path,
-                       DBUS_TELEPHONY_SIM_INTERFACE, "VerifySec", param, NULL, G_DBUS_CALL_FLAGS_NONE, -1,
-                       NULL, on_response_verify_sim_pins, evt_cb_data);
+                       DBUS_TELEPHONY_SIM_INTERFACE, "VerifySec", param, NULL, G_DBUS_CALL_FLAGS_NONE, TAPI_PIN_TIMEOUT,
+                       handle->ca, on_response_verify_sim_pins, evt_cb_data);
+
+       if (gpw)
+               free(gpw);
 
-       free(gpw);
        return TAPI_API_SUCCESS;
 }
 
@@ -1421,22 +1987,14 @@ EXPORT_API int tel_verify_sim_puks(TapiHandle *handle, const TelSimSecPw_t *puk_
        GVariant *param = NULL;
        gchar *gpin = NULL;
        gchar *gpuk = NULL;
-       int sim_ret = 0;
-
-       dbg("Func Entrance");
-       if (_tel_check_tapi_state() != 0)
-               return TAPI_API_SERVICE_NOT_READY;
 
-       TAPI_RETURN_VAL_IF_FAIL(handle, TAPI_API_INVALID_PTR);
+       TAPI_RET_ERR_NUM_IF_FAIL(handle, TAPI_API_INVALID_PTR);
+       TAPI_RET_ERR_NUM_IF_FAIL((puk_data != NULL && new_pin_data != NULL), TAPI_API_INVALID_PTR);
+       TAPI_RET_ERR_NUM_IF_FAIL((puk_data->pw != NULL && new_pin_data->pw != NULL),    TAPI_API_INVALID_PTR);
 
-       sim_ret =_tel_check_sim_state(handle);
-       if (sim_ret == TAPI_API_SIM_CARD_ERROR || sim_ret == TAPI_API_SIM_NOT_FOUND)
-               return sim_ret;
+       TAPI_SIM_CHECK_TAPI_STATE();
 
-       TAPI_RETURN_VAL_IF_FAIL((puk_data != NULL && new_pin_data != NULL), TAPI_API_INVALID_PTR);
-       TAPI_RETURN_VAL_IF_FAIL((puk_data->pw != NULL && new_pin_data->pw != NULL),     TAPI_API_INVALID_PTR);
-
-       dbg("puk type[%d] pin type[%d]", puk_data->type, new_pin_data->type);
+       msg("puk type[%d] pin type[%d]", puk_data->type, new_pin_data->type);
        if ((puk_data->type != TAPI_SIM_PTYPE_PUK1 && puk_data->type != TAPI_SIM_PTYPE_PUK2)
                        || (new_pin_data->type != TAPI_SIM_PTYPE_PIN1 && new_pin_data->type != TAPI_SIM_PTYPE_PIN2))
                return TAPI_API_INVALID_INPUT;
@@ -1451,19 +2009,34 @@ EXPORT_API int tel_verify_sim_puks(TapiHandle *handle, const TelSimSecPw_t *puk_
 
        MAKE_RESP_CB_DATA(evt_cb_data, handle, callback, user_data);
 
-       gpin = calloc(new_pin_data->pw_len+1, 1);
-       gpuk = calloc(puk_data->pw_len+1, 1);
+       gpin = calloc(1, new_pin_data->pw_len+1);
+       if (!gpin) {
+               g_free(evt_cb_data);
+               return TAPI_API_SYSTEM_OUT_OF_MEM;
+       }
+
+       gpuk = calloc(1, puk_data->pw_len+1);
+       if (!gpuk) {
+               g_free(evt_cb_data);
+               free(gpin);
+               return TAPI_API_SYSTEM_OUT_OF_MEM;
+       }
+
        memcpy((void*)gpin, (const void*)new_pin_data->pw, new_pin_data->pw_len);
        memcpy((void*)gpuk, (const void*)puk_data->pw, puk_data->pw_len);
 
        param = g_variant_new("(iss)", puk_data->type, gpuk, gpin);
 
        g_dbus_connection_call(handle->dbus_connection, DBUS_TELEPHONY_SERVICE, handle->path,
-                       DBUS_TELEPHONY_SIM_INTERFACE, "VerifyPUK", param, NULL, G_DBUS_CALL_FLAGS_NONE, -1,
-                       NULL, on_response_verify_sim_puks, evt_cb_data);
+                       DBUS_TELEPHONY_SIM_INTERFACE, "VerifyPUK", param, NULL, G_DBUS_CALL_FLAGS_NONE, TAPI_PIN_TIMEOUT,
+                       handle->ca, on_response_verify_sim_puks, evt_cb_data);
+
+       if (gpin)
+               free(gpin);
+
+       if (gpuk)
+               free(gpuk);
 
-       free(gpin);
-       free(gpuk);
        return TAPI_API_SUCCESS;
 }
 
@@ -1474,24 +2047,14 @@ EXPORT_API int tel_change_sim_pins(TapiHandle *handle, const TelSimSecPw_t *old_
        GVariant *param = NULL;
        gchar *gpin_o = NULL;
        gchar *gpin_n = NULL;
-       int sim_ret = 0;
-
-       dbg("Func Entrance");
-       if (_tel_check_tapi_state() != 0)
-               return TAPI_API_SERVICE_NOT_READY;
 
+       TAPI_RET_ERR_NUM_IF_FAIL(handle, TAPI_API_INVALID_PTR);
+       TAPI_RET_ERR_NUM_IF_FAIL((old_pin != NULL && new_pin != NULL), TAPI_API_INVALID_PTR);
+       TAPI_RET_ERR_NUM_IF_FAIL((old_pin->pw != NULL && new_pin->pw != NULL), TAPI_API_INVALID_PTR);
 
-       TAPI_RETURN_VAL_IF_FAIL(handle, TAPI_API_INVALID_PTR);
+       TAPI_SIM_CHECK_TAPI_STATE();
 
-
-       sim_ret =_tel_check_sim_state(handle);
-       if (sim_ret != TAPI_API_SUCCESS)
-               return sim_ret;
-
-       TAPI_RETURN_VAL_IF_FAIL((old_pin != NULL && new_pin != NULL), TAPI_API_INVALID_PTR);
-       TAPI_RETURN_VAL_IF_FAIL((old_pin->pw != NULL && new_pin->pw != NULL), TAPI_API_INVALID_PTR);
-
-       dbg("old_pin type[%d],new_pin type[%d]", old_pin->type, new_pin->type);
+       msg("old_pin type[%d],new_pin type[%d]", old_pin->type, new_pin->type);
        if ((old_pin->type != TAPI_SIM_PTYPE_PIN1) && (old_pin->type != TAPI_SIM_PTYPE_PIN2)
                        && (new_pin->type != TAPI_SIM_PTYPE_PIN1) && (new_pin->type != TAPI_SIM_PTYPE_PIN2))
                return TAPI_API_INVALID_INPUT;
@@ -1507,19 +2070,35 @@ EXPORT_API int tel_change_sim_pins(TapiHandle *handle, const TelSimSecPw_t *old_
 
        MAKE_RESP_CB_DATA(evt_cb_data, handle, callback, user_data);
 
-       gpin_o = calloc(old_pin->pw_len+1, 1);
-       gpin_n = calloc(new_pin->pw_len+1, 1);
+       gpin_o = calloc(1, old_pin->pw_len+1);
+       if (!gpin_o) {
+               g_free(evt_cb_data);
+               return TAPI_API_SYSTEM_OUT_OF_MEM;
+       }
+
+       gpin_n = calloc(1, new_pin->pw_len+1);
+       if (!gpin_n) {
+               free(gpin_o);
+               g_free(evt_cb_data);
+               return TAPI_API_SYSTEM_OUT_OF_MEM;
+       }
+
        memcpy((void*)gpin_o, (const void*)old_pin->pw, old_pin->pw_len);
        memcpy((void*)gpin_n, (const void*)new_pin->pw, new_pin->pw_len);
 
-       param = g_variant_new("(iss)", old_pin->type, old_pin->pw, new_pin->pw);
+       param = g_variant_new("(iss)", old_pin->type, gpin_o, gpin_n);
+       msg("old_pin len[%d],new_pin len[%d]", old_pin->pw_len, new_pin->pw_len);
 
        g_dbus_connection_call(handle->dbus_connection, DBUS_TELEPHONY_SERVICE, handle->path,
-                       DBUS_TELEPHONY_SIM_INTERFACE, "ChangePIN", param, NULL, G_DBUS_CALL_FLAGS_NONE, -1,
-                       NULL, on_response_change_sim_pins, evt_cb_data);
+                       DBUS_TELEPHONY_SIM_INTERFACE, "ChangePIN", param, NULL, G_DBUS_CALL_FLAGS_NONE, TAPI_DEFAULT_TIMEOUT,
+                       handle->ca, on_response_change_sim_pins, evt_cb_data);
+
+       if (gpin_o)
+               free(gpin_o);
+
+       if (gpin_n)
+               free(gpin_n);
 
-       free(gpin_o);
-       free(gpin_n);
        return TAPI_API_SUCCESS;
 }
 
@@ -1529,21 +2108,12 @@ EXPORT_API int tel_disable_sim_facility(TapiHandle *handle, TelSimFacilityPw_t *
        struct tapi_resp_data *evt_cb_data = NULL;
        GVariant *param = NULL;
        gchar *gpw = NULL;
-       int sim_ret = 0;
-
-       dbg("Func Entrance");
-       if (_tel_check_tapi_state() != 0)
-               return TAPI_API_SERVICE_NOT_READY;
-
-       TAPI_RETURN_VAL_IF_FAIL(handle, TAPI_API_INVALID_PTR);
-
 
-       sim_ret =_tel_check_sim_state(handle);
-       if (sim_ret != TAPI_API_SUCCESS)
-               return sim_ret;
+       TAPI_RET_ERR_NUM_IF_FAIL(handle, TAPI_API_INVALID_PTR);
+       TAPI_RET_ERR_NUM_IF_FAIL(pw, TAPI_API_INVALID_PTR);
+       TAPI_RET_ERR_NUM_IF_FAIL(pw->pw, TAPI_API_INVALID_PTR);
 
-       TAPI_RETURN_VAL_IF_FAIL(pw, TAPI_API_INVALID_PTR);
-       TAPI_RETURN_VAL_IF_FAIL(pw->pw, TAPI_API_INVALID_PTR);
+       TAPI_SIM_CHECK_TAPI_STATE();
 
        dbg("facility type[%d]", pw->lock_type);
        if(pw->lock_type < TAPI_SIM_LOCK_PS || pw->lock_type >TAPI_SIM_LOCK_PC)
@@ -1555,16 +2125,23 @@ EXPORT_API int tel_disable_sim_facility(TapiHandle *handle, TelSimFacilityPw_t *
 
        MAKE_RESP_CB_DATA(evt_cb_data, handle, callback, user_data);
 
-       gpw = calloc(pw->pw_len+1, 1);
+       gpw = calloc(1, pw->pw_len+1);
+       if (!gpw) {
+               g_free(evt_cb_data);
+               return TAPI_API_SYSTEM_OUT_OF_MEM;
+       }
+
        memcpy((void*)gpw, (const void*)pw->pw, pw->pw_len);
 
        param = g_variant_new("(is)", pw->lock_type, gpw);
 
        g_dbus_connection_call(handle->dbus_connection, DBUS_TELEPHONY_SERVICE, handle->path,
                        DBUS_TELEPHONY_SIM_INTERFACE, "DisableFacility", param, NULL, G_DBUS_CALL_FLAGS_NONE,
-                       -1, NULL, on_response_disable_sim_facility, evt_cb_data);
+                       TAPI_DEFAULT_TIMEOUT, handle->ca, on_response_disable_sim_facility, evt_cb_data);
+
+       if (gpw)
+               free(gpw);
 
-       free(gpw);
        return TAPI_API_SUCCESS;
 }
 
@@ -1574,23 +2151,14 @@ EXPORT_API int tel_enable_sim_facility(TapiHandle *handle, TelSimFacilityPw_t *p
        struct tapi_resp_data *evt_cb_data = NULL;
        GVariant *param = NULL;
        gchar *gpw = NULL;
-       int sim_ret = 0;
-
-       dbg("Func Entrance");
-       if (_tel_check_tapi_state() != 0)
-               return TAPI_API_SERVICE_NOT_READY;
 
-       TAPI_RETURN_VAL_IF_FAIL(handle, TAPI_API_INVALID_PTR);
+       TAPI_RET_ERR_NUM_IF_FAIL(handle, TAPI_API_INVALID_PTR);
+       TAPI_RET_ERR_NUM_IF_FAIL(pw, TAPI_API_INVALID_PTR);
+       TAPI_RET_ERR_NUM_IF_FAIL(pw->pw, TAPI_API_INVALID_PTR);
 
+       TAPI_SIM_CHECK_TAPI_STATE();
 
-       sim_ret =_tel_check_sim_state(handle);
-       if (sim_ret != TAPI_API_SUCCESS)
-               return sim_ret;
-
-       TAPI_RETURN_VAL_IF_FAIL(pw, TAPI_API_INVALID_PTR);
-       TAPI_RETURN_VAL_IF_FAIL(pw->pw, TAPI_API_INVALID_PTR);
-
-       dbg("facility type[%d]", pw->lock_type);
+       msg("facility type[%d]", pw->lock_type);
        if(pw->lock_type < TAPI_SIM_LOCK_PS || pw->lock_type >TAPI_SIM_LOCK_PC)
                return TAPI_API_INVALID_INPUT;
        if ((pw->lock_type < TAPI_SIM_LOCK_PN) && ((pw->pw_len < 4) || (pw->pw_len > 8)) )
@@ -1600,16 +2168,23 @@ EXPORT_API int tel_enable_sim_facility(TapiHandle *handle, TelSimFacilityPw_t *p
 
        MAKE_RESP_CB_DATA(evt_cb_data, handle, callback, user_data);
 
-       gpw = calloc(pw->pw_len+1, 1);
+       gpw = calloc(1, pw->pw_len+1);
+       if (!gpw) {
+               g_free(evt_cb_data);
+               return TAPI_API_SYSTEM_OUT_OF_MEM;
+       }
+
        memcpy((void*)gpw, (const void*)pw->pw, pw->pw_len);
 
        param = g_variant_new("(is)", pw->lock_type, gpw);
 
        g_dbus_connection_call(handle->dbus_connection, DBUS_TELEPHONY_SERVICE, handle->path,
-                       DBUS_TELEPHONY_SIM_INTERFACE, "EnableFacility", param, NULL, G_DBUS_CALL_FLAGS_NONE, -1,
-                       NULL, on_response_enable_sim_facility, evt_cb_data);
+                       DBUS_TELEPHONY_SIM_INTERFACE, "EnableFacility", param, NULL, G_DBUS_CALL_FLAGS_NONE, TAPI_DEFAULT_TIMEOUT,
+                       handle->ca, on_response_enable_sim_facility, evt_cb_data);
+
+       if (gpw)
+               free(gpw);
 
-       free(gpw);
        return TAPI_API_SUCCESS;
 }
 
@@ -1618,20 +2193,12 @@ EXPORT_API int tel_get_sim_facility(TapiHandle *handle, TelSimLockType_t type,
 {
        struct tapi_resp_data *evt_cb_data = NULL;
        GVariant *param = NULL;
-       int sim_ret = 0;
-
-       dbg("Func Entrance");
-       if (_tel_check_tapi_state() != 0)
-               return TAPI_API_SERVICE_NOT_READY;
-
 
-       TAPI_RETURN_VAL_IF_FAIL(handle, TAPI_API_INVALID_PTR);
+       TAPI_RET_ERR_NUM_IF_FAIL(handle, TAPI_API_INVALID_PTR);
 
-       sim_ret =_tel_check_sim_state(handle);
-       if (sim_ret != TAPI_API_SUCCESS)
-               return sim_ret;
+       TAPI_SIM_CHECK_TAPI_STATE();
 
-       dbg("facility type[%d]", type);
+       msg("facility type[%d]", type);
        if(type < TAPI_SIM_LOCK_PS || type >TAPI_SIM_LOCK_PC)
                return TAPI_API_INVALID_INPUT;
 
@@ -1640,8 +2207,8 @@ EXPORT_API int tel_get_sim_facility(TapiHandle *handle, TelSimLockType_t type,
        param = g_variant_new("(i)", type);
 
        g_dbus_connection_call(handle->dbus_connection, DBUS_TELEPHONY_SERVICE, handle->path,
-                       DBUS_TELEPHONY_SIM_INTERFACE, "GetFacility", param, NULL, G_DBUS_CALL_FLAGS_NONE, -1,
-                       NULL, on_response_get_sim_facility, evt_cb_data);
+                       DBUS_TELEPHONY_SIM_INTERFACE, "GetFacility", param, NULL, G_DBUS_CALL_FLAGS_NONE, TAPI_DEFAULT_TIMEOUT,
+                       handle->ca, on_response_get_sim_facility, evt_cb_data);
 
        return TAPI_API_SUCCESS;
 }
@@ -1651,20 +2218,12 @@ EXPORT_API int tel_get_sim_lock_info(TapiHandle *handle, TelSimLockType_t type,
 {
        struct tapi_resp_data *evt_cb_data = NULL;
        GVariant *param = NULL;
-       int sim_ret = 0;
 
-       dbg("Func Entrance");
-       if (_tel_check_tapi_state() != 0)
-               return TAPI_API_SERVICE_NOT_READY;
+       TAPI_RET_ERR_NUM_IF_FAIL(handle, TAPI_API_INVALID_PTR);
 
+       TAPI_SIM_CHECK_TAPI_STATE();
 
-       TAPI_RETURN_VAL_IF_FAIL(handle, TAPI_API_INVALID_PTR);
-
-       sim_ret =_tel_check_sim_state(handle);
-       if (sim_ret != TAPI_API_SUCCESS)
-               return sim_ret;
-
-       dbg("lock type[%d]", type);
+       msg("lock type[%d]", type);
        if(type < TAPI_SIM_LOCK_PS || type >TAPI_SIM_LOCK_PC)
                return TAPI_API_INVALID_INPUT;
 
@@ -1673,48 +2232,65 @@ EXPORT_API int tel_get_sim_lock_info(TapiHandle *handle, TelSimLockType_t type,
        param = g_variant_new("(i)", type);
 
        g_dbus_connection_call(handle->dbus_connection, DBUS_TELEPHONY_SERVICE, handle->path,
-                       DBUS_TELEPHONY_SIM_INTERFACE, "GetLockInfo", param, NULL, G_DBUS_CALL_FLAGS_NONE, -1,
-                       NULL, on_response_get_sim_lock_info, evt_cb_data);
+                       DBUS_TELEPHONY_SIM_INTERFACE, "GetLockInfo", param, NULL, G_DBUS_CALL_FLAGS_NONE, TAPI_DEFAULT_TIMEOUT,
+                       handle->ca, on_response_get_sim_lock_info, evt_cb_data);
+
+       return TAPI_API_SUCCESS;
+}
+
+EXPORT_API int tel_set_sim_power_state(TapiHandle *handle, TelSimPowerState_t state,
+               tapi_response_cb callback, void *user_data)
+{
+       struct tapi_resp_data *evt_cb_data = NULL;
+       GVariant *param = NULL;
+
+       TAPI_RET_ERR_NUM_IF_FAIL(handle, TAPI_API_INVALID_PTR);
+
+       dbg("Func Enterance. cp_name[%s], state[%d]", handle->cp_name, state);
+       //TAPI_SIM_CHECK_TAPI_STATE(); -- TO be decided later
+
+       if (state >= TAPI_SIM_POWER_UNSPECIFIED){
+               return TAPI_API_INVALID_INPUT;
+       }
+
+       MAKE_RESP_CB_DATA(evt_cb_data, handle, callback, user_data);
+
+       param = g_variant_new("(i)", state);
+
+       g_dbus_connection_call(handle->dbus_connection, DBUS_TELEPHONY_SERVICE, handle->path,
+                       DBUS_TELEPHONY_SIM_INTERFACE, "SetPowerstate", param, NULL, G_DBUS_CALL_FLAGS_NONE, TAPI_DEFAULT_TIMEOUT,
+                       handle->ca, on_response_set_sim_power_state, evt_cb_data);
 
        return TAPI_API_SUCCESS;
 }
 
+
 EXPORT_API int tel_req_sim_apdu(TapiHandle *handle, TelSimApdu_t* apdu_data,
                tapi_response_cb callback, void *user_data)
 {
        struct tapi_resp_data *evt_cb_data = NULL;
-       GVariantBuilder *builder = NULL;
+       GVariantBuilder builder;
        GVariant *param = NULL;
        GVariant *inner_gv = NULL;
        int i = 0;
-       int sim_ret = 0;
-
-       dbg("Func Entrance");
-       if (_tel_check_tapi_state() != 0)
-               return TAPI_API_SERVICE_NOT_READY;
 
-       TAPI_RETURN_VAL_IF_FAIL(handle, TAPI_API_INVALID_PTR);
+       TAPI_RET_ERR_NUM_IF_FAIL(handle, TAPI_API_INVALID_PTR);
+       TAPI_RET_ERR_NUM_IF_FAIL(apdu_data, TAPI_API_INVALID_PTR);
 
+       TAPI_SIM_CHECK_TAPI_STATE();
 
-       sim_ret =_tel_check_sim_state(handle);
-       if (sim_ret == TAPI_API_SIM_CARD_ERROR || sim_ret == TAPI_API_SIM_NOT_FOUND)
-               return sim_ret;
-
-       TAPI_RETURN_VAL_IF_FAIL(apdu_data, TAPI_API_INVALID_PTR);
        MAKE_RESP_CB_DATA(evt_cb_data, handle, callback, user_data);
 
-       builder = g_variant_builder_new(G_VARIANT_TYPE ("ay"));
+       g_variant_builder_init(&builder, G_VARIANT_TYPE ("ay"));
        for (i = 0; i < apdu_data->apdu_len; i++) {
-               dbg("apdu_data->apdu[%d][0x%02x]", i,apdu_data->apdu[i]);
-               g_variant_builder_add(builder, "y", apdu_data->apdu[i]);
+               g_variant_builder_add(&builder, "y", apdu_data->apdu[i]);
        }
-       inner_gv = g_variant_builder_end(builder);
+       inner_gv = g_variant_builder_end(&builder);
        param = g_variant_new("(v)", inner_gv);
-       /*g_variant_builder_unref (builder);*/
 
        g_dbus_connection_call(handle->dbus_connection, DBUS_TELEPHONY_SERVICE, handle->path,
-                       DBUS_TELEPHONY_SIM_INTERFACE, "TransferAPDU", param, NULL, G_DBUS_CALL_FLAGS_NONE, -1,
-                       NULL, on_response_req_sim_apdu, evt_cb_data);
+                       DBUS_TELEPHONY_SIM_INTERFACE, "TransferAPDU", param, NULL, G_DBUS_CALL_FLAGS_NONE, TAPI_DEFAULT_TIMEOUT,
+                       handle->ca, on_response_req_sim_apdu, evt_cb_data);
 
        return TAPI_API_SUCCESS;
 }
@@ -1722,22 +2298,15 @@ EXPORT_API int tel_req_sim_apdu(TapiHandle *handle, TelSimApdu_t* apdu_data,
 EXPORT_API int tel_req_sim_atr(TapiHandle *handle, tapi_response_cb callback, void *user_data)
 {
        struct tapi_resp_data *evt_cb_data = NULL;
-       int sim_ret = 0;
-
-       dbg("Func Entrance");
-       if (_tel_check_tapi_state() != 0)
-               return TAPI_API_SERVICE_NOT_READY;
 
-       TAPI_RETURN_VAL_IF_FAIL(handle, TAPI_API_INVALID_PTR);
+       TAPI_RET_ERR_NUM_IF_FAIL(handle, TAPI_API_INVALID_PTR);
 
-       sim_ret =_tel_check_sim_state(handle);
-       if (sim_ret == TAPI_API_SIM_CARD_ERROR || sim_ret == TAPI_API_SIM_NOT_FOUND)
-               return sim_ret;
+       TAPI_SIM_CHECK_TAPI_STATE();
 
        MAKE_RESP_CB_DATA(evt_cb_data, handle, callback, user_data);
 
        g_dbus_connection_call(handle->dbus_connection, DBUS_TELEPHONY_SERVICE, handle->path,
-                       DBUS_TELEPHONY_SIM_INTERFACE, "GetATR", NULL, NULL, G_DBUS_CALL_FLAGS_NONE, -1, NULL,
+                       DBUS_TELEPHONY_SIM_INTERFACE, "GetATR", NULL, NULL, G_DBUS_CALL_FLAGS_NONE, TAPI_DEFAULT_TIMEOUT, handle->ca,
                        on_response_req_sim_atr, evt_cb_data);
 
        return TAPI_API_SUCCESS;