4 * Copyright (c) 2014 Samsung Electronics Co., Ltd. All rights reserved.
6 * Contact: Ja-young Gu <jygu@samsung.com>
8 * Licensed under the Apache License, Version 2.0 (the "License");
9 * you may not use this file except in compliance with the License.
10 * You may obtain a copy of the License at
12 * http://www.apache.org/licenses/LICENSE-2.0
14 * Unless required by applicable law or agreed to in writing, software
15 * distributed under the License is distributed on an "AS IS" BASIS,
16 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
17 * See the License for the specific language governing permissions and
18 * limitations under the License.
25 #include "tapi_common.h"
26 #include "TapiUtility.h"
33 #define DBUS_SIM_STATUS_ERROR "SIM STATUS ERROR"
34 #define DBUS_SIM_NOT_FOUND "SIM NOT FOUND"
35 #define DBUS_SIM_PERM_BLOCKED "SIM PERM BLOCKED"
36 #define DBUS_SIM_CARD_ERROR "SIM CARD ERROR"
37 #define DBUS_SIM_NOT_INITIALIZED "SIM NOT INITIALIZED"
38 #define DBUS_SIM_INIT_COMPLETED "SIM INIT COMPLETED"
39 #define DBUS_SIM_LOCKED "SIM LOCKED"
40 #define DBUS_SIM_NOT_READY "SIM NOT READY"
41 #define DBUS_SIM_RESPONSE_DATA_ERROR "SIM RESPONSE DATA ERROR"
42 #define DBUS_SIM_SERVICE_IS_DISABLED "SIM SERVICE IS DISABLED"
43 #define DBUS_SIM_ACCESS_DENIED "No access rights"
45 #define TAPI_PIN_TIMEOUT (350 * 1000) /* Unlimit: G_MAXINT */
47 #define TAPI_SIM_FUNCTION_ENTER(handle) { \
48 dbg("Func Enterance. cp_name[%s]", handle->cp_name); \
51 #define TAPI_SIM_RESP_CB_ENTER(evt_cb_data) { \
52 if (evt_cb_data && evt_cb_data->handle) \
53 dbg("Func Enterance. cp_name[%s]", evt_cb_data->handle->cp_name); \
56 #define TAPI_SIM_CHECK_TAPI_STATE() { \
57 TAPI_SIM_FUNCTION_ENTER(handle); \
58 if (_tel_check_tapi_state() != 0) \
59 return TAPI_API_SERVICE_NOT_READY; \
62 #define TAPI_SIM_CHECK_ERR_MSG(error) { \
63 TapiResult_t ret = TAPI_API_OPERATION_FAILED; \
65 ret = __check_err_msg(error->message); \
66 g_error_free(error); \
71 #define TAPI_SIM_CALL_CBFUNC(evtcbdata, result, data) { \
72 if (evtcbdata->cb_fn) { \
73 evtcbdata->cb_fn(evtcbdata->handle, result, data, evtcbdata->user_data); \
77 #define TAPI_SIM_CHECK_ERR_MSG_AND_CALL_NULL_CBFUNC(error, evtcbdata) { \
78 TapiResult_t ret = TAPI_API_OPERATION_FAILED; \
80 ret = __check_err_msg(error->message); \
81 g_error_free(error); \
83 TAPI_SIM_CALL_CBFUNC(evtcbdata, ret, NULL); \
88 #define SIM_CHECK_ERROR(error, evt_cb_data) \
90 warn("(%s) dbus error = %d (%s)", evt_cb_data->handle->cp_name, error->code, error->message); \
91 if (error->code == G_IO_ERROR_CANCELLED \
92 && error->domain == G_IO_ERROR) { \
93 /* Do not invoke callback in case of deinit TapiHandle */ \
94 g_error_free(error); \
95 g_free(evt_cb_data); \
97 } else if (strstr(error->message, "No access rights")) { \
98 err("Access denied"); \
99 if (evt_cb_data->cb_fn) \
100 evt_cb_data->cb_fn(evt_cb_data->handle, TAPI_ERROR_ACCESS_DENIED, NULL, evt_cb_data->user_data); \
101 g_error_free(error); \
102 g_free(evt_cb_data); \
104 } else if (strstr(error->message, "Operation not supported")) { \
105 err("Operation not supported"); \
106 if (evt_cb_data->cb_fn) \
107 evt_cb_data->cb_fn(evt_cb_data->handle, TAPI_ERROR_OPERATION_NOT_SUPPORTED, NULL, evt_cb_data->user_data); \
108 g_error_free(error); \
109 g_free(evt_cb_data); \
114 static TapiResult_t __check_err_msg(gchar* err_msg)
116 TapiResult_t ret = TAPI_API_OPERATION_FAILED;
120 err( "error from dbus layer. (%s)", err_msg);
122 if( strstr(err_msg, DBUS_SIM_NOT_FOUND) ) {
123 ret = TAPI_API_SIM_NOT_FOUND;
124 } else if( strstr(err_msg, DBUS_SIM_PERM_BLOCKED) ) {
125 ret = TAPI_API_SIM_PERM_BLOCKED;
126 } else if( strstr(err_msg, DBUS_SIM_CARD_ERROR) ) {
127 ret = TAPI_API_SIM_CARD_ERROR;
128 } else if( strstr(err_msg, DBUS_SIM_NOT_INITIALIZED) ) {
129 ret = TAPI_API_SIM_NOT_INITIALIZED;
130 } else if( strstr(err_msg, DBUS_SIM_INIT_COMPLETED) ) {
131 ret = TAPI_API_SUCCESS;
132 } else if( strstr(err_msg, DBUS_SIM_LOCKED) ) {
133 ret = TAPI_API_SIM_LOCKED;
134 } else if( strstr(err_msg, DBUS_SIM_NOT_READY) ) {
135 ret = TAPI_API_SERVICE_NOT_READY;
136 } else if( strstr(err_msg, DBUS_SIM_RESPONSE_DATA_ERROR) ) {
137 ret = TAPI_API_OPERATION_FAILED;
138 } else if( strstr(err_msg, DBUS_SIM_SERVICE_IS_DISABLED) ) {
139 ret = TAPI_API_SIM_SERVICE_IS_DISABLED;
140 } else if (strstr(err_msg, DBUS_SIM_ACCESS_DENIED)) {
141 ret = TAPI_API_ACCESS_DENIED;
143 ret = TAPI_API_OPERATION_FAILED;
149 static int _tel_check_tapi_state()
154 static void on_response_get_sim_iccid(GObject *source_object, GAsyncResult *res, gpointer user_data)
156 GError *error = NULL;
157 GDBusConnection *conn = NULL;
158 GVariant *dbus_result;
160 struct tapi_resp_data *evt_cb_data = user_data;
161 TelSimAccessResult_t result = TAPI_SIM_ACCESS_SUCCESS;
162 TelSimIccIdInfo_t iccid_info;
165 TAPI_SIM_RESP_CB_ENTER(evt_cb_data);
166 memset(&iccid_info, 0, sizeof(TelSimIccIdInfo_t));
168 conn = G_DBUS_CONNECTION (source_object);
169 dbus_result = g_dbus_connection_call_finish(conn, res, &error);
170 SIM_CHECK_ERROR(error, evt_cb_data);
173 TAPI_SIM_CHECK_ERR_MSG_AND_CALL_NULL_CBFUNC(error, evt_cb_data);
176 g_variant_get(dbus_result, "(is)", &result, &iccid);
177 iccid_info.icc_length = strlen((const char*)iccid);
178 if(iccid_info.icc_length > TAPI_SIM_ICCID_LEN_MAX){
179 dbg("current tapi support 20 byte but received length[%d] so changed");
180 iccid_info.icc_length = TAPI_SIM_ICCID_LEN_MAX;
182 memcpy(iccid_info.icc_num, iccid, iccid_info.icc_length);
185 TAPI_SIM_CALL_CBFUNC(evt_cb_data, result, &iccid_info);
187 g_variant_unref(dbus_result);
190 static void on_response_get_sim_language(GObject *source_object, GAsyncResult *res,
193 GError *error = NULL;
194 GDBusConnection *conn = NULL;
195 GVariant *dbus_result;
197 struct tapi_resp_data *evt_cb_data = user_data;
198 TelSimLanguagePreferenceCode_t lang = TAPI_SIM_LP_LANG_UNSPECIFIED;
199 TelSimAccessResult_t result = TAPI_SIM_ACCESS_SUCCESS;
201 TAPI_SIM_RESP_CB_ENTER(evt_cb_data);
202 conn = G_DBUS_CONNECTION (source_object);
203 dbus_result = g_dbus_connection_call_finish(conn, res, &error);
204 SIM_CHECK_ERROR(error, evt_cb_data);
207 TAPI_SIM_CHECK_ERR_MSG_AND_CALL_NULL_CBFUNC(error, evt_cb_data);
210 g_variant_get(dbus_result, "(ii)", &result, &lang);
212 if (evt_cb_data->cb_fn) {
213 evt_cb_data->cb_fn(evt_cb_data->handle, result, &lang, evt_cb_data->user_data);
217 g_variant_unref(dbus_result);
220 static void on_response_set_sim_language(GObject *source_object, GAsyncResult *res,
223 GError *error = NULL;
224 GDBusConnection *conn = NULL;
225 GVariant *dbus_result;
227 struct tapi_resp_data *evt_cb_data = user_data;
228 TelSimAccessResult_t result = TAPI_SIM_ACCESS_SUCCESS;
230 TAPI_SIM_RESP_CB_ENTER(evt_cb_data);
231 conn = G_DBUS_CONNECTION (source_object);
232 dbus_result = g_dbus_connection_call_finish(conn, res, &error);
233 SIM_CHECK_ERROR(error, evt_cb_data);
236 TAPI_SIM_CHECK_ERR_MSG_AND_CALL_NULL_CBFUNC(error, evt_cb_data);
239 g_variant_get(dbus_result, "(i)", &result);
241 if (evt_cb_data->cb_fn) {
242 evt_cb_data->cb_fn(evt_cb_data->handle, result, NULL, evt_cb_data->user_data);
246 g_variant_unref(dbus_result);
249 static void on_response_get_sim_callforwarding_info(GObject *source_object, GAsyncResult *res,
252 GError *error = NULL;
253 GDBusConnection *conn = NULL;
254 GVariant *dbus_result;
255 GVariant *value = NULL;
256 GVariantIter *cphs_iter = NULL;
257 GVariantIter *iter = NULL;
258 GVariantIter *iter_row = NULL;
259 const gchar *key = NULL;
260 const gchar *str_value = NULL;
261 struct tapi_resp_data *evt_cb_data = user_data;
262 TelSimAccessResult_t result = TAPI_SIM_ACCESS_SUCCESS;
263 TelSimCallForwardingResp_t cf;
266 TAPI_SIM_RESP_CB_ENTER(evt_cb_data);
267 memset(&cf, 0, sizeof(TelSimCallForwardingResp_t));
269 conn = G_DBUS_CONNECTION (source_object);
270 dbus_result = g_dbus_connection_call_finish(conn, res, &error);
271 SIM_CHECK_ERROR(error, evt_cb_data);
274 TAPI_SIM_CHECK_ERR_MSG_AND_CALL_NULL_CBFUNC(error, evt_cb_data);
276 dbg("dbus_result format(%s)", g_variant_get_type_string(dbus_result));
277 g_variant_get(dbus_result, "(ibaa{sv}a{sv})", &result, &cf.b_cphs, &iter, &cphs_iter);
280 while (g_variant_iter_loop(cphs_iter, "{sv}", &key, &value)) {
281 if (!g_strcmp0(key, "b_line1")) {
282 cf.cphs_cf.b_line1 = g_variant_get_boolean(value);
284 if (!g_strcmp0(key, "b_line2")) {
285 cf.cphs_cf.b_line2 = g_variant_get_boolean(value);
287 if (!g_strcmp0(key, "b_fax")) {
288 cf.cphs_cf.b_fax = g_variant_get_boolean(value);
290 if (!g_strcmp0(key, "b_data")) {
291 cf.cphs_cf.b_data = g_variant_get_boolean(value);
295 cf.cf_list.profile_count = g_variant_iter_n_children(iter);
297 while (g_variant_iter_next(iter, "a{sv}", &iter_row)) {
298 while (g_variant_iter_loop(iter_row, "{sv}", &key, &value)) {
299 if (!g_strcmp0(key, "rec_index")) {
300 cf.cf_list.cf[i].rec_index = g_variant_get_int32(value);
302 if (!g_strcmp0(key, "msp_num")) {
303 cf.cf_list.cf[i].msp_num = g_variant_get_byte(value);
305 if (!g_strcmp0(key, "cfu_status")) {
306 cf.cf_list.cf[i].cfu_status = g_variant_get_byte(value);
308 if (!g_strcmp0(key, "cfu_num")) {
309 str_value = g_variant_get_string(value, NULL);
310 snprintf(cf.cf_list.cf[i].cfu_num, strlen((const char*) str_value) + 1, "%s", str_value);
312 if (!g_strcmp0(key, "ton")) {
313 cf.cf_list.cf[i].ton = g_variant_get_int32(value);
315 if (!g_strcmp0(key, "npi")) {
316 cf.cf_list.cf[i].npi = g_variant_get_int32(value);
318 if (!g_strcmp0(key, "cc2_id")) {
319 cf.cf_list.cf[i].cc2_id = g_variant_get_byte(value);
321 if (!g_strcmp0(key, "ext7_id")) {
322 cf.cf_list.cf[i].ext7_id = g_variant_get_byte(value);
326 g_variant_iter_free(iter_row);
328 g_variant_iter_free(iter);
331 if (evt_cb_data->cb_fn) {
332 evt_cb_data->cb_fn(evt_cb_data->handle, result, &cf, evt_cb_data->user_data);
336 g_variant_unref(dbus_result);
339 static void on_response_set_sim_callforwarding_info(GObject *source_object, GAsyncResult *res,
342 GError *error = NULL;
343 GDBusConnection *conn = NULL;
344 GVariant *dbus_result;
346 struct tapi_resp_data *evt_cb_data = user_data;
347 TelSimAccessResult_t result = TAPI_SIM_ACCESS_SUCCESS;
349 TAPI_SIM_RESP_CB_ENTER(evt_cb_data);
350 conn = G_DBUS_CONNECTION (source_object);
351 dbus_result = g_dbus_connection_call_finish(conn, res, &error);
352 SIM_CHECK_ERROR(error, evt_cb_data);
355 TAPI_SIM_CHECK_ERR_MSG_AND_CALL_NULL_CBFUNC(error, evt_cb_data);
358 g_variant_get(dbus_result, "(i)", &result);
360 if (evt_cb_data->cb_fn) {
361 evt_cb_data->cb_fn(evt_cb_data->handle, result, NULL, evt_cb_data->user_data);
365 g_variant_unref(dbus_result);
369 static void on_response_get_sim_messagewaiting_info(GObject *source_object, GAsyncResult *res,
372 GError *error = NULL;
373 GDBusConnection *conn = NULL;
374 GVariant *dbus_result;
375 GVariant *value = NULL;
376 GVariantIter *cphs_iter = NULL;
377 GVariantIter *iter = NULL;
378 GVariantIter *iter_row = NULL;
379 const gchar *key = NULL;
380 struct tapi_resp_data *evt_cb_data = user_data;
381 TelSimAccessResult_t result = TAPI_SIM_ACCESS_SUCCESS;
382 TelSimMessageWaitingResp_t mw;
385 TAPI_SIM_RESP_CB_ENTER(evt_cb_data);
386 memset(&mw, 0, sizeof(TelSimMessageWaitingResp_t));
388 conn = G_DBUS_CONNECTION (source_object);
389 dbus_result = g_dbus_connection_call_finish(conn, res, &error);
390 SIM_CHECK_ERROR(error, evt_cb_data);
393 TAPI_SIM_CHECK_ERR_MSG_AND_CALL_NULL_CBFUNC(error, evt_cb_data);
396 dbg("dbus_result format(%s)", g_variant_get_type_string(dbus_result));
397 g_variant_get(dbus_result, "(ibaa{sv}a{sv})", &result, &mw.b_cphs, &iter, &cphs_iter);
400 while (g_variant_iter_loop(cphs_iter, "{sv}", &key, &value)) {
401 if (!g_strcmp0(key, "b_voice1")) {
402 mw.cphs_mw.b_voice1 = g_variant_get_boolean(value);
404 if (!g_strcmp0(key, "b_voice2")) {
405 mw.cphs_mw.b_voice2 = g_variant_get_boolean(value);
407 if (!g_strcmp0(key, "b_fax")) {
408 mw.cphs_mw.b_fax = g_variant_get_boolean(value);
410 if (!g_strcmp0(key, "b_data")) {
411 mw.cphs_mw.b_data = g_variant_get_boolean(value);
416 while (g_variant_iter_next(iter, "a{sv}", &iter_row)) {
417 while (g_variant_iter_loop(iter_row, "{sv}", &key, &value)) {
418 if (!g_strcmp0(key, "rec_index")) {
419 mw.mw_list.mw[i].rec_index = g_variant_get_int32(value);
421 if (!g_strcmp0(key, "indicator_status")) {
422 mw.mw_list.mw[i].indicator_status = g_variant_get_byte(value);
424 if (!g_strcmp0(key, "voice_count")) {
425 mw.mw_list.mw[i].voice_count = g_variant_get_int32(value);
427 if (!g_strcmp0(key, "fax_count")) {
428 mw.mw_list.mw[i].fax_count = g_variant_get_int32(value);
430 if (!g_strcmp0(key, "email_count")) {
431 mw.mw_list.mw[i].email_count = g_variant_get_int32(value);
433 if (!g_strcmp0(key, "other_count")) {
434 mw.mw_list.mw[i].other_count = g_variant_get_int32(value);
436 if (!g_strcmp0(key, "video_count")) {
437 mw.mw_list.mw[i].video_count = g_variant_get_int32(value);
441 g_variant_iter_free(iter_row);
442 mw.mw_list.profile_count++;
444 /* Max MSP record supported check */
445 if (i == TAPI_SIM_MSP_CNT_MAX)
448 g_variant_iter_free(iter);
451 if (evt_cb_data->cb_fn) {
452 evt_cb_data->cb_fn(evt_cb_data->handle, result, &mw, evt_cb_data->user_data);
456 g_variant_unref(dbus_result);
459 static void on_response_set_sim_messagewaiting_info(GObject *source_object, GAsyncResult *res,
462 GError *error = NULL;
463 GDBusConnection *conn = NULL;
464 GVariant *dbus_result;
466 struct tapi_resp_data *evt_cb_data = user_data;
467 TelSimAccessResult_t result = TAPI_SIM_ACCESS_SUCCESS;
469 TAPI_SIM_RESP_CB_ENTER(evt_cb_data);
470 conn = G_DBUS_CONNECTION (source_object);
471 dbus_result = g_dbus_connection_call_finish(conn, res, &error);
472 SIM_CHECK_ERROR(error, evt_cb_data);
475 TAPI_SIM_CHECK_ERR_MSG_AND_CALL_NULL_CBFUNC(error, evt_cb_data);
478 g_variant_get(dbus_result, "(i)", &result);
480 if (evt_cb_data->cb_fn) {
481 evt_cb_data->cb_fn(evt_cb_data->handle, result, NULL, evt_cb_data->user_data);
485 g_variant_unref(dbus_result);
488 static void on_response_get_sim_mailbox_info(GObject *source_object, GAsyncResult *res,
491 GError *error = NULL;
492 GDBusConnection *conn = NULL;
493 GVariant *dbus_result;
494 GVariant *value = NULL;
495 GVariantIter *iter = NULL;
496 GVariantIter *iter_row = NULL;
497 const gchar *key = NULL;
498 const gchar *str_value = NULL;
499 struct tapi_resp_data *evt_cb_data = user_data;
500 TelSimAccessResult_t result = TAPI_SIM_ACCESS_SUCCESS;
501 TelSimMailboxList_t list;
505 TAPI_SIM_RESP_CB_ENTER(evt_cb_data);
506 memset(&list, 0, sizeof(TelSimMailboxList_t));
508 conn = G_DBUS_CONNECTION (source_object);
509 dbus_result = g_dbus_connection_call_finish(conn, res, &error);
510 SIM_CHECK_ERROR(error, evt_cb_data);
513 TAPI_SIM_CHECK_ERR_MSG_AND_CALL_NULL_CBFUNC(error, evt_cb_data);
516 g_variant_get(dbus_result, "(ibaa{sv})", &result, &b_cphs, &iter);
517 list.count = g_variant_iter_n_children(iter);
518 msg("list.count=[%d]", list.count);
521 while (g_variant_iter_next(iter, "a{sv}", &iter_row)) {
522 while (g_variant_iter_loop(iter_row, "{sv}", &key, &value)) {
523 list.list[i].b_cphs = b_cphs;
525 if (!g_strcmp0(key, "rec_index")) {
526 list.list[i].rec_index = g_variant_get_int32(value);
528 if (!g_strcmp0(key, "profile_num")) {
529 list.list[i].profile_num = g_variant_get_int32(value);
531 if (!g_strcmp0(key, "mb_type")) {
532 list.list[i].mb_type = g_variant_get_int32(value);
534 if (!g_strcmp0(key, "alpha_id_max_len")) {
535 list.list[i].alpha_id_max_len = g_variant_get_int32(value);
537 if (!g_strcmp0(key, "alpha_id")) {
538 str_value = g_variant_get_string(value, NULL);
539 snprintf(list.list[i].alpha_id, strlen((const char*)str_value) + 1, "%s", str_value);
541 if (!g_strcmp0(key, "ton")) {
542 list.list[i].ton = g_variant_get_int32(value);
544 if (!g_strcmp0(key, "npi")) {
545 list.list[i].npi = g_variant_get_int32(value);
547 if (!g_strcmp0(key, "num")) {
548 str_value = g_variant_get_string(value, NULL);
549 snprintf(list.list[i].num, strlen((const char*)str_value) + 1, "%s", str_value);
551 if (!g_strcmp0(key, "cc_id")) {
552 list.list[i].cc_id = g_variant_get_byte(value);
554 if (!g_strcmp0(key, "ext1_id")) {
555 list.list[i].ext1_id = g_variant_get_byte(value);
559 g_variant_iter_free(iter_row);
561 g_variant_iter_free(iter);
563 if (evt_cb_data->cb_fn) {
564 evt_cb_data->cb_fn(evt_cb_data->handle, result, &list, evt_cb_data->user_data);
568 g_variant_unref(dbus_result);
571 static void on_response_set_sim_mailbox_info(GObject *source_object, GAsyncResult *res,
574 GError *error = NULL;
575 GDBusConnection *conn = NULL;
576 GVariant *dbus_result;
578 struct tapi_resp_data *evt_cb_data = user_data;
579 TelSimAccessResult_t result = TAPI_SIM_ACCESS_SUCCESS;
581 TAPI_SIM_RESP_CB_ENTER(evt_cb_data);
582 conn = G_DBUS_CONNECTION (source_object);
583 dbus_result = g_dbus_connection_call_finish(conn, res, &error);
584 SIM_CHECK_ERROR(error, evt_cb_data);
587 TAPI_SIM_CHECK_ERR_MSG_AND_CALL_NULL_CBFUNC(error, evt_cb_data);
590 g_variant_get(dbus_result, "(i)", &result);
592 if (evt_cb_data->cb_fn) {
593 evt_cb_data->cb_fn(evt_cb_data->handle, result, NULL, evt_cb_data->user_data);
597 g_variant_unref(dbus_result);
600 static void on_response_get_sim_cphs_info(GObject *source_object, GAsyncResult *res,
603 GError *error = NULL;
604 GDBusConnection *conn = NULL;
605 GVariant *dbus_result;
607 struct tapi_resp_data *evt_cb_data = user_data;
608 TelSimAccessResult_t result = TAPI_SIM_ACCESS_SUCCESS;
609 TelSimCphsInfo_t cphs;
611 TAPI_SIM_RESP_CB_ENTER(evt_cb_data);
612 memset(&cphs, 0, sizeof(TelSimCphsInfo_t));
614 conn = G_DBUS_CONNECTION (source_object);
615 dbus_result = g_dbus_connection_call_finish(conn, res, &error);
616 SIM_CHECK_ERROR(error, evt_cb_data);
619 TAPI_SIM_CHECK_ERR_MSG_AND_CALL_NULL_CBFUNC(error, evt_cb_data);
622 g_variant_get(dbus_result, "(iibbbbb)", &result, &cphs.CphsPhase,
623 &cphs.CphsServiceTable.bOperatorNameShortForm, &cphs.CphsServiceTable.bMailBoxNumbers,
624 &cphs.CphsServiceTable.bServiceStringTable,
625 &cphs.CphsServiceTable.bCustomerServiceProfile,
626 &cphs.CphsServiceTable.bInformationNumbers);
628 if (evt_cb_data->cb_fn) {
629 evt_cb_data->cb_fn(evt_cb_data->handle, result, &cphs, evt_cb_data->user_data);
633 g_variant_unref(dbus_result);
636 static void on_response_get_sim_service_table(GObject *source_object, GAsyncResult *res,
639 GError *error = NULL;
640 GDBusConnection *conn = NULL;
641 GVariant *dbus_result = NULL;
643 GVariantIter *iter = NULL;
644 GVariant *param_gv = NULL;
645 GVariant *inner_gv = NULL;
649 struct tapi_resp_data *evt_cb_data = user_data;
650 TelSimAccessResult_t result = TAPI_SIM_ACCESS_SUCCESS;
651 TelSimServiceTable_t svct;
653 TAPI_SIM_RESP_CB_ENTER(evt_cb_data);
654 memset(&svct, 0, sizeof(TelSimServiceTable_t));
656 conn = G_DBUS_CONNECTION (source_object);
657 dbus_result = g_dbus_connection_call_finish(conn, res, &error);
658 SIM_CHECK_ERROR(error, evt_cb_data);
661 TAPI_SIM_CHECK_ERR_MSG_AND_CALL_NULL_CBFUNC(error, evt_cb_data);
664 g_variant_get(dbus_result, "(ii@v)", &result, &svct.sim_type, ¶m_gv);
665 inner_gv = g_variant_get_variant(param_gv);
667 g_variant_get(inner_gv, "ay", &iter);
669 if (TAPI_SIM_CARD_TYPE_GSM == svct.sim_type) {
670 while (g_variant_iter_loop(iter, "y", &value)) {
671 svct.table.sst.service[i] = value;
674 } else if(TAPI_SIM_CARD_TYPE_USIM == svct.sim_type) {
675 while (g_variant_iter_loop(iter, "y", &value)) {
676 svct.table.ust.service[i] = value;
679 } else if(TAPI_SIM_CARD_TYPE_RUIM == svct.sim_type) {
680 g_variant_get(dbus_result, "(ii@v)", &result, &svct.table.cst.cdma_svc_table, ¶m_gv);
681 inner_gv = g_variant_get_variant(param_gv);
683 g_variant_get(inner_gv, "ay", &iter);
685 if(TAPI_SIM_CDMA_SVC_TABLE == svct.table.cst.cdma_svc_table) {
686 while (g_variant_iter_loop(iter, "y", &value)) {
687 svct.table.cst.service.cdma_service[i] = value;
690 } else if(TAPI_SIM_CSIM_SVC_TABLE == svct.table.cst.cdma_svc_table) {
691 while (g_variant_iter_loop(iter, "y", &value)) {
692 svct.table.cst.service.csim_service[i] = value;
696 err("Invalid cdma_svc_table:[%d]", svct.table.cst.cdma_svc_table);
699 err("Invalid sim_type:[%d]", svct.sim_type);
702 g_variant_iter_free(iter);
703 g_variant_unref(inner_gv);
704 g_variant_unref(param_gv);
706 if (evt_cb_data->cb_fn) {
707 evt_cb_data->cb_fn(evt_cb_data->handle, result, &svct, evt_cb_data->user_data);
711 g_variant_unref(dbus_result);
714 static void on_response_get_sim_msisdn(GObject *source_object, GAsyncResult *res,
717 GError *error = NULL;
718 GDBusConnection *conn = NULL;
719 GVariant *dbus_result;
720 GVariant *value = NULL;
721 GVariantIter *iter = NULL;
722 GVariantIter *iter_row = NULL;
723 const gchar *key = NULL;
724 const gchar *str_value = NULL;
725 struct tapi_resp_data *evt_cb_data = user_data;
726 TelSimAccessResult_t result = TAPI_SIM_ACCESS_SUCCESS;
727 TelSimMsisdnList_t list;
730 TAPI_SIM_RESP_CB_ENTER(evt_cb_data);
731 memset(&list, 0, sizeof(TelSimMsisdnList_t));
733 conn = G_DBUS_CONNECTION (source_object);
734 dbus_result = g_dbus_connection_call_finish(conn, res, &error);
735 SIM_CHECK_ERROR(error, evt_cb_data);
738 TAPI_SIM_CHECK_ERR_MSG_AND_CALL_NULL_CBFUNC(error, evt_cb_data);
741 g_variant_get(dbus_result, "(iaa{sv})", &result, &iter);
742 list.count = g_variant_iter_n_children(iter);
744 /*this can be changed regarding concept*/
746 dbg("current list.count[%d] but we fixed maximum with 3", list.count);
749 /*this can be changed regarding concept*/
752 while (g_variant_iter_next(iter, "a{sv}", &iter_row)) {
753 while (g_variant_iter_loop(iter_row, "{sv}", &key, &value)) {
754 if (!g_strcmp0(key, "name")) {
755 str_value = g_variant_get_string(value, NULL);
756 snprintf(list.list[i].name, strlen((const char*)str_value) + 1, "%s", str_value);
758 if (!g_strcmp0(key, "number")) {
759 str_value = g_variant_get_string(value, NULL);
760 snprintf(list.list[i].num, strlen((const char*)str_value) + 1, "%s", str_value);
764 g_variant_iter_free(iter_row);
765 /*this can be changed regarding concept*/
768 /*this can be changed regarding concept*/
770 g_variant_iter_free(iter);
772 msg("msisdn count[%d]", list.count);
773 for(i =0; i < list.count; i++){
774 dbg("msisdn[%d]-name[%s]number[%s]",i,list.list[i].name, list.list[i].num);
777 TAPI_SIM_CALL_CBFUNC(evt_cb_data, result, &list);
779 g_variant_unref(dbus_result);
782 static void on_response_get_sim_oplmnwact(GObject *source_object, GAsyncResult *res,
785 GError *error = NULL;
786 GDBusConnection *conn = NULL;
787 GVariant *dbus_result;
788 GVariant *value = NULL;
789 GVariantIter *iter = NULL;
790 GVariantIter *iter_row = NULL;
791 const gchar *key = NULL;
792 const gchar *str_value = NULL;
793 struct tapi_resp_data *evt_cb_data = user_data;
794 TelSimAccessResult_t result = TAPI_SIM_ACCESS_SUCCESS;
795 TelSimOplmnwactList_t list;
798 TAPI_SIM_RESP_CB_ENTER(evt_cb_data);
799 memset(&list, 0, sizeof(TelSimOplmnwactList_t));
801 conn = G_DBUS_CONNECTION (source_object);
802 dbus_result = g_dbus_connection_call_finish(conn, res, &error);
803 SIM_CHECK_ERROR(error, evt_cb_data);
806 TAPI_SIM_CHECK_ERR_MSG_AND_CALL_NULL_CBFUNC(error, evt_cb_data);
809 g_variant_get(dbus_result, "(iaa{sv})", &result, &iter);
810 list.count = g_variant_iter_n_children(iter);
813 while (g_variant_iter_next(iter, "a{sv}", &iter_row)) {
814 while (g_variant_iter_loop(iter_row, "{sv}", &key, &value)) {
815 if (!g_strcmp0(key, "plmn")) {
816 str_value = g_variant_get_string(value, NULL);
817 snprintf(list.list[i].plmn, strlen((const char*)str_value) + 1, "%s", str_value);
819 if (!g_strcmp0(key, "b_umst")) {
820 list.list[i].b_umts = g_variant_get_boolean(value);
822 if (!g_strcmp0(key, "b_gsm")) {
823 list.list[i].b_gsm = g_variant_get_boolean(value);
827 g_variant_iter_free(iter_row);
829 g_variant_iter_free(iter);
831 if (evt_cb_data->cb_fn) {
832 evt_cb_data->cb_fn(evt_cb_data->handle, result, &list, evt_cb_data->user_data);
836 g_variant_unref(dbus_result);
839 static void on_response_get_sim_spn(GObject *source_object, GAsyncResult *res,
842 GError *error = NULL;
843 GDBusConnection *conn = NULL;
844 GVariant *dbus_result;
846 struct tapi_resp_data *evt_cb_data = user_data;
847 TelSimAccessResult_t result = TAPI_SIM_ACCESS_SUCCESS;
848 TelSimSpn_t spn_info;
852 TAPI_SIM_RESP_CB_ENTER(evt_cb_data);
853 memset(&spn_info, 0, sizeof(TelSimSpn_t));
855 conn = G_DBUS_CONNECTION (source_object);
856 dbus_result = g_dbus_connection_call_finish(conn, res, &error);
857 SIM_CHECK_ERROR(error, evt_cb_data);
860 TAPI_SIM_CHECK_ERR_MSG_AND_CALL_NULL_CBFUNC(error, evt_cb_data);
863 g_variant_get(dbus_result, "(iys)", &result, &dc, &spn);
865 dbg("result[%d]", result);
866 if ( result == TAPI_SIM_ACCESS_SUCCESS) {
867 msg("spn[%s], display condition[0x%x]", spn, dc);
868 spn_info.display_condition = dc;
869 snprintf((char *)spn_info.spn, strlen((const char*)spn)+1, "%s", spn);
873 TAPI_SIM_CALL_CBFUNC(evt_cb_data, result, &spn_info);
875 g_variant_unref(dbus_result);
878 static void on_response_get_sim_cphs_netname(GObject *source_object, GAsyncResult *res,
881 GError *error = NULL;
882 GDBusConnection *conn = NULL;
883 GVariant *dbus_result;
885 struct tapi_resp_data *evt_cb_data = user_data;
886 TelSimAccessResult_t result = TAPI_SIM_ACCESS_SUCCESS;
887 TelSimCphsNetName_t cphs_net;
888 gchar *full_name = NULL;
889 gchar *short_name = NULL;
891 TAPI_SIM_RESP_CB_ENTER(evt_cb_data);
892 memset(&cphs_net, 0, sizeof(TelSimCphsNetName_t));
894 conn = G_DBUS_CONNECTION (source_object);
895 dbus_result = g_dbus_connection_call_finish(conn, res, &error);
896 SIM_CHECK_ERROR(error, evt_cb_data);
899 TAPI_SIM_CHECK_ERR_MSG_AND_CALL_NULL_CBFUNC(error, evt_cb_data);
902 g_variant_get(dbus_result, "(iss)", &result, &full_name, &short_name);
904 dbg("result[%d]", result);
905 if ( result == TAPI_SIM_ACCESS_SUCCESS) {
906 msg("full name[%s], short name[%s]", full_name, short_name);
907 snprintf((char *)cphs_net.full_name, strlen((const char*)full_name)+1, "%s", full_name);
908 snprintf((char *)cphs_net.short_name, strlen((const char*)short_name)+1, "%s", short_name);
913 if (evt_cb_data->cb_fn) {
914 evt_cb_data->cb_fn(evt_cb_data->handle, result, &cphs_net, evt_cb_data->user_data);
918 g_variant_unref(dbus_result);
921 static void on_response_req_sim_authentication(GObject *source_object, GAsyncResult *res,
924 GError *error = NULL;
925 GDBusConnection *conn = NULL;
926 GVariant *dbus_result;
928 GVariantIter *iter = NULL;
929 GVariant *ak_gv = NULL;
930 GVariant *cp_gv = NULL;
931 GVariant *it_gv = NULL;
932 GVariant *resp_gv = NULL;
936 GVariant *resp = NULL;
940 struct tapi_resp_data *evt_cb_data = user_data;
941 TelSimAccessResult_t result = TAPI_SIM_ACCESS_SUCCESS;
942 TelSimAuthenticationResponse_t auth_resp;
944 TAPI_SIM_RESP_CB_ENTER(evt_cb_data);
945 memset(&auth_resp, 0, sizeof(TelSimAuthenticationResponse_t));
947 conn = G_DBUS_CONNECTION (source_object);
948 dbus_result = g_dbus_connection_call_finish(conn, res, &error);
949 SIM_CHECK_ERROR(error, evt_cb_data);
952 TAPI_SIM_CHECK_ERR_MSG_AND_CALL_NULL_CBFUNC(error, evt_cb_data);
955 dbg("dbus_result type_format(%s)", g_variant_get_type_string(dbus_result));
956 g_variant_get(dbus_result, "(iii@v@v@v@v)", &result, &auth_resp.auth_type,
957 &auth_resp.auth_result, &ak_gv, &cp_gv, &it_gv, &resp_gv);
959 ak = g_variant_get_variant(ak_gv);
960 g_variant_get(ak, "ay", &iter);
961 while (g_variant_iter_loop(iter, "y", &rt_i)) {
962 auth_resp.authentication_key[i] = rt_i;
965 auth_resp.authentication_key_length = i;
966 g_variant_iter_free(iter);
969 cp = g_variant_get_variant(cp_gv);
970 g_variant_get(cp, "ay", &iter);
971 while (g_variant_iter_loop(iter, "y", &rt_i)) {
972 auth_resp.cipher_data[i] = rt_i;
975 auth_resp.cipher_length = i;
976 g_variant_iter_free(iter);
979 it = g_variant_get_variant(it_gv);
980 g_variant_get(it, "ay", &iter);
981 while (g_variant_iter_loop(iter, "y", &rt_i)) {
982 auth_resp.integrity_data[i] = rt_i;
985 auth_resp.integrity_length = i;
986 g_variant_iter_free(iter);
989 resp = g_variant_get_variant(resp_gv);
990 g_variant_get(resp, "ay", &iter);
991 while (g_variant_iter_loop(iter, "y", &rt_i)) {
992 auth_resp.resp_data[i] = rt_i;
995 auth_resp.resp_length = i;
996 g_variant_iter_free(iter);
999 if (evt_cb_data->cb_fn) {
1000 evt_cb_data->cb_fn(evt_cb_data->handle, result, &auth_resp, evt_cb_data->user_data);
1003 g_free(evt_cb_data);
1004 g_variant_unref(dbus_result);
1007 static void on_response_verify_sim_pins(GObject *source_object, GAsyncResult *res,
1010 GError *error = NULL;
1011 GDBusConnection *conn = NULL;
1012 GVariant *dbus_result;
1014 struct tapi_resp_data *evt_cb_data = user_data;
1015 TelSimPinOperationResult_t result = TAPI_SIM_PIN_OPERATION_SUCCESS;
1016 TelSimSecResult_t sec_rt;
1018 TAPI_SIM_RESP_CB_ENTER(evt_cb_data);
1019 memset(&sec_rt, 0, sizeof(TelSimSecResult_t));
1021 conn = G_DBUS_CONNECTION (source_object);
1022 dbus_result = g_dbus_connection_call_finish(conn, res, &error);
1023 SIM_CHECK_ERROR(error, evt_cb_data);
1026 TAPI_SIM_CHECK_ERR_MSG_AND_CALL_NULL_CBFUNC(error, evt_cb_data);
1029 g_variant_get(dbus_result, "(iii)", &result, &sec_rt.type, &sec_rt.retry_count);
1031 if (evt_cb_data->cb_fn) {
1032 evt_cb_data->cb_fn(evt_cb_data->handle, result, &sec_rt, evt_cb_data->user_data);
1035 g_free(evt_cb_data);
1036 g_variant_unref(dbus_result);
1039 static void on_response_verify_sim_puks(GObject *source_object, GAsyncResult *res,
1042 GError *error = NULL;
1043 GDBusConnection *conn = NULL;
1044 GVariant *dbus_result;
1046 struct tapi_resp_data *evt_cb_data = user_data;
1047 TelSimPinOperationResult_t result = TAPI_SIM_PIN_OPERATION_SUCCESS;
1048 TelSimSecResult_t sec_rt;
1050 TAPI_SIM_RESP_CB_ENTER(evt_cb_data);
1051 memset(&sec_rt, 0, sizeof(TelSimSecResult_t));
1053 conn = G_DBUS_CONNECTION (source_object);
1054 dbus_result = g_dbus_connection_call_finish(conn, res, &error);
1055 SIM_CHECK_ERROR(error, evt_cb_data);
1058 TAPI_SIM_CHECK_ERR_MSG_AND_CALL_NULL_CBFUNC(error, evt_cb_data);
1061 g_variant_get(dbus_result, "(iii)", &result, &sec_rt.type, &sec_rt.retry_count);
1063 if (evt_cb_data->cb_fn) {
1064 evt_cb_data->cb_fn(evt_cb_data->handle, result, &sec_rt, evt_cb_data->user_data);
1067 g_free(evt_cb_data);
1068 g_variant_unref(dbus_result);
1071 static void on_response_change_sim_pins(GObject *source_object, GAsyncResult *res,
1074 GError *error = NULL;
1075 GDBusConnection *conn = NULL;
1076 GVariant *dbus_result;
1078 struct tapi_resp_data *evt_cb_data = user_data;
1079 TelSimPinOperationResult_t result = TAPI_SIM_PIN_OPERATION_SUCCESS;
1080 TelSimSecResult_t sec_rt;
1082 TAPI_SIM_RESP_CB_ENTER(evt_cb_data);
1083 memset(&sec_rt, 0, sizeof(TelSimSecResult_t));
1085 conn = G_DBUS_CONNECTION (source_object);
1086 dbus_result = g_dbus_connection_call_finish(conn, res, &error);
1087 SIM_CHECK_ERROR(error, evt_cb_data);
1090 TAPI_SIM_CHECK_ERR_MSG_AND_CALL_NULL_CBFUNC(error, evt_cb_data);
1093 g_variant_get(dbus_result, "(iii)", &result, &sec_rt.type, &sec_rt.retry_count);
1095 if (evt_cb_data->cb_fn) {
1096 evt_cb_data->cb_fn(evt_cb_data->handle, result, &sec_rt, evt_cb_data->user_data);
1099 g_free(evt_cb_data);
1100 g_variant_unref(dbus_result);
1103 static void on_response_disable_sim_facility(GObject *source_object, GAsyncResult *res,
1106 GError *error = NULL;
1107 GDBusConnection *conn = NULL;
1108 GVariant *dbus_result;
1110 struct tapi_resp_data *evt_cb_data = user_data;
1111 TelSimPinOperationResult_t result = TAPI_SIM_PIN_OPERATION_SUCCESS;
1112 TelSimFacilityResult_t f_rt;
1114 TAPI_SIM_RESP_CB_ENTER(evt_cb_data);
1115 memset(&f_rt, 0, sizeof(TelSimFacilityResult_t));
1117 conn = G_DBUS_CONNECTION (source_object);
1118 dbus_result = g_dbus_connection_call_finish(conn, res, &error);
1119 SIM_CHECK_ERROR(error, evt_cb_data);
1122 TAPI_SIM_CHECK_ERR_MSG_AND_CALL_NULL_CBFUNC(error, evt_cb_data);
1125 g_variant_get(dbus_result, "(iii)", &result, &f_rt.type, &f_rt.retry_count);
1127 TAPI_SIM_CALL_CBFUNC(evt_cb_data, result, &f_rt);
1128 g_free(evt_cb_data);
1129 g_variant_unref(dbus_result);
1132 static void on_response_enable_sim_facility(GObject *source_object, GAsyncResult *res,
1135 GError *error = NULL;
1136 GDBusConnection *conn = NULL;
1137 GVariant *dbus_result;
1139 struct tapi_resp_data *evt_cb_data = user_data;
1140 TelSimPinOperationResult_t result = TAPI_SIM_PIN_OPERATION_SUCCESS;
1141 TelSimFacilityResult_t f_rt;
1143 TAPI_SIM_RESP_CB_ENTER(evt_cb_data);
1144 memset(&f_rt, 0, sizeof(TelSimFacilityResult_t));
1146 conn = G_DBUS_CONNECTION (source_object);
1147 dbus_result = g_dbus_connection_call_finish(conn, res, &error);
1148 SIM_CHECK_ERROR(error, evt_cb_data);
1151 TAPI_SIM_CHECK_ERR_MSG_AND_CALL_NULL_CBFUNC(error, evt_cb_data);
1154 g_variant_get(dbus_result, "(iii)", &result, &f_rt.type, &f_rt.retry_count);
1156 TAPI_SIM_CALL_CBFUNC(evt_cb_data, result, &f_rt);
1157 g_free(evt_cb_data);
1158 g_variant_unref(dbus_result);
1161 static void on_response_get_sim_facility(GObject *source_object, GAsyncResult *res,
1164 GError *error = NULL;
1165 GDBusConnection *conn = NULL;
1166 GVariant *dbus_result;
1168 struct tapi_resp_data *evt_cb_data = user_data;
1169 TelSimPinOperationResult_t result = TAPI_SIM_PIN_OPERATION_SUCCESS;
1170 TelSimFacilityInfo_t fi;
1172 TAPI_SIM_RESP_CB_ENTER(evt_cb_data);
1173 memset(&fi, 0, sizeof(TelSimFacilityInfo_t));
1175 conn = G_DBUS_CONNECTION (source_object);
1176 dbus_result = g_dbus_connection_call_finish(conn, res, &error);
1177 SIM_CHECK_ERROR(error, evt_cb_data);
1180 TAPI_SIM_CHECK_ERR_MSG_AND_CALL_NULL_CBFUNC(error, evt_cb_data);
1183 g_variant_get(dbus_result, "(iii)", &result, &fi.type, &fi.f_status);
1185 TAPI_SIM_CALL_CBFUNC(evt_cb_data, result, &fi);
1186 g_free(evt_cb_data);
1187 g_variant_unref(dbus_result);
1190 static void on_response_get_sim_lock_info(GObject *source_object, GAsyncResult *res,
1193 GError *error = NULL;
1194 GDBusConnection *conn = NULL;
1195 GVariant *dbus_result;
1197 struct tapi_resp_data *evt_cb_data = user_data;
1198 TelSimPinOperationResult_t result = TAPI_SIM_PIN_OPERATION_SUCCESS;
1199 TelSimLockInfo_t lock;
1201 TAPI_SIM_RESP_CB_ENTER(evt_cb_data);
1202 memset(&lock, 0, sizeof(TelSimLockInfo_t));
1204 conn = G_DBUS_CONNECTION (source_object);
1205 dbus_result = g_dbus_connection_call_finish(conn, res, &error);
1206 SIM_CHECK_ERROR(error, evt_cb_data);
1209 TAPI_SIM_CHECK_ERR_MSG_AND_CALL_NULL_CBFUNC(error, evt_cb_data);
1212 g_variant_get(dbus_result, "(iiii)", &result, &lock.lock_type, &lock.lock_status,
1215 if (evt_cb_data->cb_fn) {
1216 evt_cb_data->cb_fn(evt_cb_data->handle, result, &lock, evt_cb_data->user_data);
1219 g_free(evt_cb_data);
1220 g_variant_unref(dbus_result);
1223 static void on_response_req_sim_apdu(GObject *source_object, GAsyncResult *res, gpointer user_data)
1225 GError *error = NULL;
1226 GDBusConnection *conn = NULL;
1227 GVariant *dbus_result;
1229 GVariantIter *iter = NULL;
1230 GVariant *param_gv = NULL;
1231 GVariant *inner_gv = NULL;
1233 unsigned short i = 0;
1235 struct tapi_resp_data *evt_cb_data = user_data;
1236 TelSimAccessResult_t result = TAPI_SIM_ACCESS_SUCCESS;
1237 TelSimApduResp_t r_apdu;
1239 TAPI_SIM_RESP_CB_ENTER(evt_cb_data);
1240 memset(&r_apdu, 0, sizeof(TelSimApduResp_t));
1242 conn = G_DBUS_CONNECTION (source_object);
1243 dbus_result = g_dbus_connection_call_finish(conn, res, &error);
1244 SIM_CHECK_ERROR(error, evt_cb_data);
1247 TAPI_SIM_CHECK_ERR_MSG_AND_CALL_NULL_CBFUNC(error, evt_cb_data);
1250 /* dbg("dbus_result type_format(%s)", g_variant_get_type_string(dbus_result));*/
1251 g_variant_get(dbus_result, "(i@v)", &result, ¶m_gv);
1252 inner_gv = g_variant_get_variant(param_gv);
1254 g_variant_get(inner_gv, "ay", &iter);
1255 while (g_variant_iter_loop(iter, "y", &rt_i)) {
1256 r_apdu.apdu_resp[i] = rt_i;
1258 if (i >= TAPI_SIM_APDU_MAX_LEN)
1261 r_apdu.apdu_resp_len = i;
1262 dbg("r_apdu.apdu_resp_len=[%d]", r_apdu.apdu_resp_len);
1263 g_variant_iter_free(iter);
1264 g_variant_unref(inner_gv);
1265 g_variant_unref(param_gv);
1267 if (evt_cb_data->cb_fn) {
1268 evt_cb_data->cb_fn(evt_cb_data->handle, result, &r_apdu, evt_cb_data->user_data);
1271 g_free(evt_cb_data);
1272 g_variant_unref(dbus_result);
1275 static void on_response_req_sim_atr(GObject *source_object, GAsyncResult *res, gpointer user_data)
1277 GError *error = NULL;
1278 GDBusConnection *conn = NULL;
1279 GVariant *dbus_result;
1281 GVariantIter *iter = NULL;
1282 GVariant *param_gv = NULL;
1283 GVariant *inner_gv = NULL;
1285 unsigned short i = 0;
1287 struct tapi_resp_data *evt_cb_data = user_data;
1288 TelSimAccessResult_t result = TAPI_SIM_ACCESS_SUCCESS;
1289 TelSimAtrResp_t r_atr;
1291 TAPI_SIM_RESP_CB_ENTER(evt_cb_data);
1292 memset(&r_atr, 0, sizeof(TelSimAtrResp_t));
1294 conn = G_DBUS_CONNECTION (source_object);
1295 dbus_result = g_dbus_connection_call_finish(conn, res, &error);
1296 SIM_CHECK_ERROR(error, evt_cb_data);
1299 TAPI_SIM_CHECK_ERR_MSG_AND_CALL_NULL_CBFUNC(error, evt_cb_data);
1302 dbg("dbus_result type_format(%s)", g_variant_get_type_string(dbus_result));
1303 g_variant_get(dbus_result, "(i@v)", &result, ¶m_gv);
1304 inner_gv = g_variant_get_variant(param_gv);
1306 g_variant_get(inner_gv, "ay", &iter);
1307 while (g_variant_iter_loop(iter, "y", &rt_i)) {
1308 r_atr.atr_resp[i] = rt_i;
1311 r_atr.atr_resp_len = i;
1312 dbg("r_atr.atr_resp_len=[%d]", r_atr.atr_resp_len);
1313 g_variant_iter_free(iter);
1314 g_variant_unref(inner_gv);
1315 g_variant_unref(param_gv);
1317 if (evt_cb_data->cb_fn) {
1318 evt_cb_data->cb_fn(evt_cb_data->handle, result, &r_atr, evt_cb_data->user_data);
1321 g_free(evt_cb_data);
1322 g_variant_unref(dbus_result);
1325 static void on_response_set_sim_power_state(GObject *source_object, GAsyncResult *res,
1328 GError *error = NULL;
1329 GDBusConnection *conn = NULL;
1330 GVariant *dbus_result;
1332 struct tapi_resp_data *evt_cb_data = user_data;
1333 TelSimPowerSetResult_t result = TAPI_SIM_POWER_SET_SUCCESS;
1335 TAPI_SIM_RESP_CB_ENTER(evt_cb_data);
1336 conn = G_DBUS_CONNECTION (source_object);
1337 dbus_result = g_dbus_connection_call_finish(conn, res, &error);
1338 SIM_CHECK_ERROR(error, evt_cb_data);
1341 TAPI_SIM_CHECK_ERR_MSG_AND_CALL_NULL_CBFUNC(error, evt_cb_data);
1344 g_variant_get(dbus_result, "(i)", &result);
1346 if (evt_cb_data->cb_fn) {
1347 evt_cb_data->cb_fn(evt_cb_data->handle, result, NULL, evt_cb_data->user_data);
1350 g_free(evt_cb_data);
1351 g_variant_unref(dbus_result);
1355 EXPORT_API int tel_get_sim_init_info(TapiHandle *handle, TelSimCardStatus_t *sim_status,
1358 GError *gerr = NULL;
1359 GVariant *sync_gv = NULL;
1360 TelSimCardStatus_t init_status = 0;
1361 int changed = FALSE;
1363 TAPI_RET_ERR_NUM_IF_FAIL(handle, TAPI_API_INVALID_PTR);
1364 TAPI_RET_ERR_NUM_IF_FAIL(sim_status, TAPI_API_INVALID_PTR);
1365 TAPI_RET_ERR_NUM_IF_FAIL(card_changed, TAPI_API_INVALID_PTR);
1367 TAPI_SIM_CHECK_TAPI_STATE();
1369 sync_gv = g_dbus_connection_call_sync(handle->dbus_connection, DBUS_TELEPHONY_SERVICE,
1370 handle->path, DBUS_TELEPHONY_SIM_INTERFACE, "GetInitStatus", NULL, NULL,
1371 G_DBUS_CALL_FLAGS_NONE, TAPI_DEFAULT_TIMEOUT, handle->ca, &gerr);
1374 g_variant_get(sync_gv, "(ib)", &init_status, &changed);
1375 *sim_status = init_status;
1376 *card_changed = changed;
1377 msg("[%s] sim_init_status[%d] changed[%d]", handle->cp_name, init_status, changed);
1379 g_variant_unref(sync_gv);
1381 TAPI_SIM_CHECK_ERR_MSG(gerr);
1384 return TAPI_API_SUCCESS;
1387 EXPORT_API int tel_get_sim_type(TapiHandle *handle, TelSimCardType_t *card_type)
1389 GError *gerr = NULL;
1390 GVariant *sync_gv = NULL;
1392 TAPI_RET_ERR_NUM_IF_FAIL(handle, TAPI_API_INVALID_PTR);
1393 TAPI_RET_ERR_NUM_IF_FAIL(card_type, TAPI_API_INVALID_PTR);
1395 TAPI_SIM_CHECK_TAPI_STATE();
1397 sync_gv = g_dbus_connection_call_sync(handle->dbus_connection, DBUS_TELEPHONY_SERVICE,
1398 handle->path, DBUS_TELEPHONY_SIM_INTERFACE, "GetCardType", NULL, NULL,
1399 G_DBUS_CALL_FLAGS_NONE, TAPI_DEFAULT_TIMEOUT, handle->ca, &gerr);
1401 g_variant_get(sync_gv, "(i)", card_type);
1403 g_variant_unref(sync_gv);
1405 TAPI_SIM_CHECK_ERR_MSG(gerr);
1407 return TAPI_API_SUCCESS;
1410 EXPORT_API int tel_get_sim_imsi(TapiHandle *handle, TelSimImsiInfo_t *imsi)
1412 GError *gerr = NULL;
1413 GVariant *sync_gv = NULL;
1415 TAPI_RET_ERR_NUM_IF_FAIL(handle, TAPI_API_INVALID_PTR);
1416 TAPI_RET_ERR_NUM_IF_FAIL(imsi, TAPI_API_INVALID_PTR);
1418 TAPI_SIM_CHECK_TAPI_STATE();
1420 sync_gv = g_dbus_connection_call_sync(handle->dbus_connection, DBUS_TELEPHONY_SERVICE,
1421 handle->path, DBUS_TELEPHONY_SIM_INTERFACE, "GetIMSI", NULL, NULL,
1422 G_DBUS_CALL_FLAGS_NONE, TAPI_DEFAULT_TIMEOUT, handle->ca, &gerr);
1424 gchar *gplmn = NULL;
1425 gchar *gmsin = NULL;
1429 g_variant_get(sync_gv, "(ss)", &gplmn, &gmsin);
1431 gplmn_len = strlen((const char*)gplmn);
1432 gmsin_len = strlen((const char*)gmsin);
1434 if (gplmn_len >= 5 && gmsin_len >= 9) {
1435 snprintf(imsi->szMcc, 3 + 1, "%s", gplmn);
1436 snprintf(imsi->szMnc, gplmn_len - 3 + 1, "%s", &gplmn[3]);
1437 snprintf(imsi->szMsin, gmsin_len + 1, "%s", gmsin);
1439 msg("invalid length.(plmn_len=%d, msin_len=%d)", gplmn_len,gmsin_len);
1440 memset(imsi, 0, sizeof(TelSimImsiInfo_t));
1445 g_variant_unref(sync_gv);
1447 TAPI_SIM_CHECK_ERR_MSG(gerr);
1450 return TAPI_API_SUCCESS;
1453 EXPORT_API int tel_get_sim_ecc(TapiHandle *handle, TelSimEccList_t *ecc)
1455 GError *gerr = NULL;
1457 GVariant *value = NULL;
1458 GVariantIter *iter = NULL;
1459 GVariantIter *iter_row = NULL;
1460 const gchar *key = NULL;
1461 const gchar *str_value = NULL;
1464 TAPI_RET_ERR_NUM_IF_FAIL(handle, TAPI_API_INVALID_PTR);
1465 TAPI_RET_ERR_NUM_IF_FAIL(ecc, TAPI_API_INVALID_PTR);
1467 TAPI_SIM_CHECK_TAPI_STATE();
1469 memset(ecc, 0, sizeof(TelSimEccList_t));
1471 sync_gv = g_dbus_connection_call_sync(handle->dbus_connection, DBUS_TELEPHONY_SERVICE,
1472 handle->path, DBUS_TELEPHONY_SIM_INTERFACE, "GetECC", NULL, NULL,
1473 G_DBUS_CALL_FLAGS_NONE, TAPI_DEFAULT_TIMEOUT, handle->ca, &gerr);
1476 /* dbg("ecc type_format(%s)", g_variant_get_type_string(sync_gv));*/
1477 g_variant_get(sync_gv, "(aa{sv})", &iter);
1478 ecc->ecc_count = g_variant_iter_n_children(iter);
1479 msg("ecc->ecc_count[%d]",ecc->ecc_count);
1481 while (g_variant_iter_next(iter, "a{sv}", &iter_row)) {
1482 while (g_variant_iter_loop(iter_row, "{sv}", &key, &value)) {
1483 if (!g_strcmp0(key, "name")) {
1484 str_value = g_variant_get_string(value, NULL);
1485 snprintf(ecc->list[i].name, strlen((const char*)str_value) + 1, "%s", str_value);
1487 if (!g_strcmp0(key, "number")) {
1488 str_value = g_variant_get_string(value, NULL);
1489 snprintf(ecc->list[i].number, strlen((const char*)str_value) + 1, "%s", str_value);
1491 if (!g_strcmp0(key, "category")) {
1492 ecc->list[i].category = g_variant_get_int32(value);
1496 g_variant_iter_free(iter_row);
1498 g_variant_iter_free(iter);
1500 g_variant_unref(sync_gv);
1503 TAPI_SIM_CHECK_ERR_MSG(gerr);
1505 return TAPI_API_SUCCESS;
1508 EXPORT_API int tel_get_sim_iccid(TapiHandle *handle, tapi_response_cb callback, void *user_data)
1510 struct tapi_resp_data *evt_cb_data = NULL;
1512 TAPI_RET_ERR_NUM_IF_FAIL(handle, TAPI_API_INVALID_PTR);
1514 TAPI_SIM_CHECK_TAPI_STATE();
1516 MAKE_RESP_CB_DATA(evt_cb_data, handle, callback, user_data);
1518 g_dbus_connection_call(handle->dbus_connection, DBUS_TELEPHONY_SERVICE, handle->path,
1519 DBUS_TELEPHONY_SIM_INTERFACE, "GetICCID", NULL, NULL, G_DBUS_CALL_FLAGS_NONE, TAPI_DEFAULT_TIMEOUT, handle->ca,
1520 on_response_get_sim_iccid, evt_cb_data);
1522 return TAPI_API_SUCCESS;
1525 EXPORT_API int tel_get_sim_language(TapiHandle *handle, tapi_response_cb callback, void *user_data)
1527 struct tapi_resp_data *evt_cb_data = NULL;
1529 TAPI_RET_ERR_NUM_IF_FAIL(handle, TAPI_API_INVALID_PTR);
1531 TAPI_SIM_CHECK_TAPI_STATE();
1533 MAKE_RESP_CB_DATA(evt_cb_data, handle, callback, user_data);
1535 g_dbus_connection_call(handle->dbus_connection, DBUS_TELEPHONY_SERVICE, handle->path,
1536 DBUS_TELEPHONY_SIM_INTERFACE, "GetLanguage", NULL, NULL, G_DBUS_CALL_FLAGS_NONE, TAPI_DEFAULT_TIMEOUT,
1537 handle->ca, on_response_get_sim_language, evt_cb_data);
1539 return TAPI_API_SUCCESS;
1542 EXPORT_API int tel_set_sim_language(TapiHandle *handle, TelSimLanguagePreferenceCode_t language,
1543 tapi_response_cb callback, void *user_data)
1545 struct tapi_resp_data *evt_cb_data = NULL;
1546 GVariant *param = NULL;
1548 TAPI_RET_ERR_NUM_IF_FAIL(handle, TAPI_API_INVALID_PTR);
1550 TAPI_SIM_CHECK_TAPI_STATE();
1552 MAKE_RESP_CB_DATA(evt_cb_data, handle, callback, user_data);
1554 param = g_variant_new("(i)", language);
1556 g_dbus_connection_call(handle->dbus_connection, DBUS_TELEPHONY_SERVICE, handle->path,
1557 DBUS_TELEPHONY_SIM_INTERFACE, "SetLanguage", param, NULL, G_DBUS_CALL_FLAGS_NONE, TAPI_DEFAULT_TIMEOUT,
1558 handle->ca, on_response_set_sim_language, evt_cb_data);
1560 return TAPI_API_SUCCESS;
1563 EXPORT_API int tel_get_sim_callforwarding_info(TapiHandle *handle, tapi_response_cb callback,
1566 struct tapi_resp_data *evt_cb_data = NULL;
1568 TAPI_RET_ERR_NUM_IF_FAIL(handle, TAPI_API_INVALID_PTR);
1570 TAPI_SIM_CHECK_TAPI_STATE();
1572 MAKE_RESP_CB_DATA(evt_cb_data, handle, callback, user_data);
1574 g_dbus_connection_call(handle->dbus_connection, DBUS_TELEPHONY_SERVICE, handle->path,
1575 DBUS_TELEPHONY_SIM_INTERFACE, "GetCallForwarding", NULL, NULL, G_DBUS_CALL_FLAGS_NONE,
1576 TAPI_DEFAULT_TIMEOUT, handle->ca, on_response_get_sim_callforwarding_info, evt_cb_data);
1578 return TAPI_API_SUCCESS;
1581 EXPORT_API int tel_set_sim_callforwarding_info(TapiHandle *handle, TelSimCallForwardingReq_t *req_cf,
1582 tapi_response_cb callback, void *user_data)
1584 struct tapi_resp_data *evt_cb_data = NULL;
1585 GVariant *param = NULL;
1586 gchar *g_number = NULL;
1588 TAPI_RET_ERR_NUM_IF_FAIL(handle, TAPI_API_INVALID_PTR);
1589 TAPI_RET_ERR_NUM_IF_FAIL(req_cf, TAPI_API_INVALID_PTR);
1591 TAPI_SIM_CHECK_TAPI_STATE();
1593 MAKE_RESP_CB_DATA(evt_cb_data, handle, callback, user_data);
1595 g_number = calloc(1, strlen((const char*)&req_cf->cf_data_u.cf.cfu_num)+1);
1597 g_free(evt_cb_data);
1598 return TAPI_API_SYSTEM_OUT_OF_MEM;
1601 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));
1603 param = g_variant_new("(biiyiisiibbbb)",
1605 req_cf->cf_data_u.cf.rec_index,
1606 req_cf->cf_data_u.cf.msp_num,
1607 req_cf->cf_data_u.cf.cfu_status,
1608 req_cf->cf_data_u.cf.ton,
1609 req_cf->cf_data_u.cf.npi,
1611 req_cf->cf_data_u.cf.cc2_id,
1612 req_cf->cf_data_u.cf.ext7_id,
1613 req_cf->cf_data_u.cphs_cf.b_line1,
1614 req_cf->cf_data_u.cphs_cf.b_line2,
1615 req_cf->cf_data_u.cphs_cf.b_fax,
1616 req_cf->cf_data_u.cphs_cf.b_data);
1618 g_dbus_connection_call(handle->dbus_connection, DBUS_TELEPHONY_SERVICE, handle->path,
1619 DBUS_TELEPHONY_SIM_INTERFACE, "SetCallForwarding", param, NULL, G_DBUS_CALL_FLAGS_NONE, TAPI_DEFAULT_TIMEOUT,
1620 handle->ca, on_response_set_sim_callforwarding_info, evt_cb_data);
1625 return TAPI_API_SUCCESS;
1628 EXPORT_API int tel_get_sim_messagewaiting_info(TapiHandle *handle, tapi_response_cb callback,
1631 struct tapi_resp_data *evt_cb_data = NULL;
1633 TAPI_RET_ERR_NUM_IF_FAIL(handle, TAPI_API_INVALID_PTR);
1635 TAPI_SIM_CHECK_TAPI_STATE();
1637 MAKE_RESP_CB_DATA(evt_cb_data, handle, callback, user_data);
1639 g_dbus_connection_call(handle->dbus_connection, DBUS_TELEPHONY_SERVICE, handle->path,
1640 DBUS_TELEPHONY_SIM_INTERFACE, "GetMessageWaiting", NULL, NULL, G_DBUS_CALL_FLAGS_NONE,
1641 TAPI_DEFAULT_TIMEOUT, handle->ca, on_response_get_sim_messagewaiting_info, evt_cb_data);
1643 return TAPI_API_SUCCESS;
1646 EXPORT_API int tel_set_sim_messagewaiting_info(TapiHandle *handle, TelSimMessageWaitingReq_t *req_mw,
1647 tapi_response_cb callback, void *user_data)
1649 struct tapi_resp_data *evt_cb_data = NULL;
1650 GVariant *param = NULL;
1652 TAPI_RET_ERR_NUM_IF_FAIL(handle, TAPI_API_INVALID_PTR);
1653 TAPI_RET_ERR_NUM_IF_FAIL(req_mw, TAPI_API_INVALID_PTR);
1655 TAPI_SIM_CHECK_TAPI_STATE();
1657 MAKE_RESP_CB_DATA(evt_cb_data, handle, callback, user_data);
1659 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]",
1661 req_mw->mw_data_u.mw.rec_index,
1662 req_mw->mw_data_u.mw.indicator_status,
1663 req_mw->mw_data_u.mw.voice_count,
1664 req_mw->mw_data_u.mw.fax_count,
1665 req_mw->mw_data_u.mw.email_count,
1666 req_mw->mw_data_u.mw.other_count,
1667 req_mw->mw_data_u.mw.video_count,
1668 req_mw->mw_data_u.cphs_mw.b_voice1,
1669 req_mw->mw_data_u.cphs_mw.b_voice2,
1670 req_mw->mw_data_u.cphs_mw.b_fax,
1671 req_mw->mw_data_u.cphs_mw.b_data);
1673 param = g_variant_new("(biyiiiiibbbb)",
1675 req_mw->mw_data_u.mw.rec_index,
1676 req_mw->mw_data_u.mw.indicator_status,
1677 req_mw->mw_data_u.mw.voice_count,
1678 req_mw->mw_data_u.mw.fax_count,
1679 req_mw->mw_data_u.mw.email_count,
1680 req_mw->mw_data_u.mw.other_count,
1681 req_mw->mw_data_u.mw.video_count,
1682 req_mw->mw_data_u.cphs_mw.b_voice1,
1683 req_mw->mw_data_u.cphs_mw.b_voice2,
1684 req_mw->mw_data_u.cphs_mw.b_fax,
1685 req_mw->mw_data_u.cphs_mw.b_data);
1687 g_dbus_connection_call(handle->dbus_connection, DBUS_TELEPHONY_SERVICE, handle->path,
1688 DBUS_TELEPHONY_SIM_INTERFACE, "SetMessageWaiting", param, NULL, G_DBUS_CALL_FLAGS_NONE, TAPI_DEFAULT_TIMEOUT,
1689 handle->ca, on_response_set_sim_messagewaiting_info, evt_cb_data);
1691 return TAPI_API_SUCCESS;
1694 EXPORT_API int tel_get_sim_mailbox_info(TapiHandle *handle, tapi_response_cb callback,
1697 struct tapi_resp_data *evt_cb_data = NULL;
1699 TAPI_RET_ERR_NUM_IF_FAIL(handle, TAPI_API_INVALID_PTR);
1701 TAPI_SIM_CHECK_TAPI_STATE();
1703 MAKE_RESP_CB_DATA(evt_cb_data, handle, callback, user_data);
1705 g_dbus_connection_call(handle->dbus_connection, DBUS_TELEPHONY_SERVICE, handle->path,
1706 DBUS_TELEPHONY_SIM_INTERFACE, "GetMailbox", NULL, NULL, G_DBUS_CALL_FLAGS_NONE, TAPI_DEFAULT_TIMEOUT,
1707 handle->ca, on_response_get_sim_mailbox_info, evt_cb_data);
1709 return TAPI_API_SUCCESS;
1712 EXPORT_API int tel_set_sim_mailbox_info(TapiHandle *handle, TelSimMailBoxNumber_t *req_mb,
1713 tapi_response_cb callback, void *user_data)
1715 struct tapi_resp_data *evt_cb_data = NULL;
1716 GVariant *param = NULL;
1717 gchar *g_alpha = NULL;
1718 gchar *g_number = NULL;
1720 TAPI_RET_ERR_NUM_IF_FAIL(handle, TAPI_API_INVALID_PTR);
1721 TAPI_RET_ERR_NUM_IF_FAIL(req_mb, TAPI_API_INVALID_PTR);
1723 TAPI_SIM_CHECK_TAPI_STATE();
1725 MAKE_RESP_CB_DATA(evt_cb_data, handle, callback, user_data);
1727 g_alpha = calloc(1, strlen((const char*)&req_mb->alpha_id)+1);
1729 g_free(evt_cb_data);
1730 return TAPI_API_SYSTEM_OUT_OF_MEM;
1733 memcpy((void*)g_alpha, (const void*)&req_mb->alpha_id, strlen((const char*)&req_mb->alpha_id));
1735 g_number = calloc(1, strlen((const char*)&req_mb->num)+1);
1738 g_free(evt_cb_data);
1739 return TAPI_API_SYSTEM_OUT_OF_MEM;
1742 memcpy((void*)g_number, (const void*)&req_mb->num, strlen((const char*)&req_mb->num));
1744 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]",
1747 req_mb->profile_num,
1749 req_mb->alpha_id_max_len,
1752 dbg("req_mb->ton[%d],req_mb->npi[%d],g_number[%s],req_mb->cc_id[%d],req_mb->ext1_id[%d]",
1759 param = g_variant_new("(biiiisiisii)",
1763 req_mb->profile_num,
1764 req_mb->alpha_id_max_len,
1772 g_dbus_connection_call(handle->dbus_connection, DBUS_TELEPHONY_SERVICE, handle->path,
1773 DBUS_TELEPHONY_SIM_INTERFACE, "SetMailbox", param, NULL, G_DBUS_CALL_FLAGS_NONE, TAPI_DEFAULT_TIMEOUT,
1774 handle->ca, on_response_set_sim_mailbox_info, evt_cb_data);
1782 return TAPI_API_SUCCESS;
1785 EXPORT_API int tel_get_sim_cphs_info(TapiHandle *handle, tapi_response_cb callback,
1788 struct tapi_resp_data *evt_cb_data = NULL;
1790 TAPI_RET_ERR_NUM_IF_FAIL(handle, TAPI_API_INVALID_PTR);
1792 TAPI_SIM_CHECK_TAPI_STATE();
1794 MAKE_RESP_CB_DATA(evt_cb_data, handle, callback, user_data);
1796 g_dbus_connection_call(handle->dbus_connection, DBUS_TELEPHONY_SERVICE, handle->path,
1797 DBUS_TELEPHONY_SIM_INTERFACE, "GetCPHSInfo", NULL, NULL, G_DBUS_CALL_FLAGS_NONE, TAPI_DEFAULT_TIMEOUT, handle->ca,
1798 on_response_get_sim_cphs_info, evt_cb_data);
1800 return TAPI_API_SUCCESS;
1803 EXPORT_API int tel_get_sim_service_table(TapiHandle *handle, tapi_response_cb callback,
1806 struct tapi_resp_data *evt_cb_data = NULL;
1808 TAPI_RET_ERR_NUM_IF_FAIL(handle, TAPI_API_INVALID_PTR);
1810 TAPI_SIM_CHECK_TAPI_STATE();
1812 MAKE_RESP_CB_DATA(evt_cb_data, handle, callback, user_data);
1814 g_dbus_connection_call(handle->dbus_connection, DBUS_TELEPHONY_SERVICE, handle->path,
1815 DBUS_TELEPHONY_SIM_INTERFACE, "GetServiceTable", NULL, NULL, G_DBUS_CALL_FLAGS_NONE, TAPI_DEFAULT_TIMEOUT, handle->ca,
1816 on_response_get_sim_service_table, evt_cb_data);
1818 return TAPI_API_SUCCESS;
1821 EXPORT_API int tel_get_sim_msisdn(TapiHandle *handle, tapi_response_cb callback, void *user_data)
1823 struct tapi_resp_data *evt_cb_data = NULL;
1825 TAPI_RET_ERR_NUM_IF_FAIL(handle, TAPI_API_INVALID_PTR);
1827 TAPI_SIM_CHECK_TAPI_STATE();
1829 MAKE_RESP_CB_DATA(evt_cb_data, handle, callback, user_data);
1831 g_dbus_connection_call(handle->dbus_connection, DBUS_TELEPHONY_SERVICE, handle->path,
1832 DBUS_TELEPHONY_SIM_INTERFACE, "GetMSISDN", NULL, NULL, G_DBUS_CALL_FLAGS_NONE, TAPI_DEFAULT_TIMEOUT, handle->ca,
1833 on_response_get_sim_msisdn, evt_cb_data);
1835 return TAPI_API_SUCCESS;
1838 EXPORT_API int tel_get_sim_oplmnwact(TapiHandle *handle, tapi_response_cb callback,
1841 struct tapi_resp_data *evt_cb_data = NULL;
1843 TAPI_RET_ERR_NUM_IF_FAIL(handle, TAPI_API_INVALID_PTR);
1845 TAPI_SIM_CHECK_TAPI_STATE();
1847 MAKE_RESP_CB_DATA(evt_cb_data, handle, callback, user_data);
1849 g_dbus_connection_call(handle->dbus_connection, DBUS_TELEPHONY_SERVICE, handle->path,
1850 DBUS_TELEPHONY_SIM_INTERFACE, "GetOplmnwact", NULL, NULL, G_DBUS_CALL_FLAGS_NONE, TAPI_DEFAULT_TIMEOUT,
1851 handle->ca, on_response_get_sim_oplmnwact, evt_cb_data);
1853 return TAPI_API_SUCCESS;
1856 EXPORT_API int tel_get_sim_spn(TapiHandle *handle, tapi_response_cb callback,
1859 struct tapi_resp_data *evt_cb_data = NULL;
1861 TAPI_RET_ERR_NUM_IF_FAIL(handle, TAPI_API_INVALID_PTR);
1863 TAPI_SIM_CHECK_TAPI_STATE();
1865 MAKE_RESP_CB_DATA(evt_cb_data, handle, callback, user_data);
1867 g_dbus_connection_call(handle->dbus_connection, DBUS_TELEPHONY_SERVICE, handle->path,
1868 DBUS_TELEPHONY_SIM_INTERFACE, "GetSpn", NULL, NULL, G_DBUS_CALL_FLAGS_NONE, TAPI_DEFAULT_TIMEOUT,
1869 handle->ca, on_response_get_sim_spn, evt_cb_data);
1871 return TAPI_API_SUCCESS;
1874 EXPORT_API int tel_get_sim_cphs_netname(TapiHandle *handle, tapi_response_cb callback,
1877 struct tapi_resp_data *evt_cb_data = NULL;
1879 TAPI_RET_ERR_NUM_IF_FAIL(handle, TAPI_API_INVALID_PTR);
1881 TAPI_SIM_CHECK_TAPI_STATE();
1883 MAKE_RESP_CB_DATA(evt_cb_data, handle, callback, user_data);
1885 g_dbus_connection_call(handle->dbus_connection, DBUS_TELEPHONY_SERVICE, handle->path,
1886 DBUS_TELEPHONY_SIM_INTERFACE, "GetCphsNetName", NULL, NULL, G_DBUS_CALL_FLAGS_NONE, TAPI_DEFAULT_TIMEOUT,
1887 handle->ca, on_response_get_sim_cphs_netname, evt_cb_data);
1889 return TAPI_API_SUCCESS;
1892 EXPORT_API int tel_req_sim_authentication(TapiHandle *handle,
1893 TelSimAuthenticationData_t *authentication_data, tapi_response_cb callback, void *user_data)
1895 struct tapi_resp_data *evt_cb_data = NULL;
1896 GVariantBuilder builder;
1897 GVariant *param = NULL;
1898 GVariant *rand_gv = NULL;
1899 GVariant *autn_gv = NULL;
1902 TAPI_RET_ERR_NUM_IF_FAIL(handle, TAPI_API_INVALID_PTR);
1903 TAPI_RET_ERR_NUM_IF_FAIL(authentication_data, TAPI_API_INVALID_PTR);
1905 TAPI_SIM_CHECK_TAPI_STATE();
1907 if (authentication_data->auth_type > TAPI_SIM_AUTH_TYPE_3G)
1908 return TAPI_API_INVALID_INPUT;
1910 if (authentication_data->rand_length == 0)
1911 return TAPI_API_INVALID_INPUT;
1913 if (authentication_data->auth_type != TAPI_SIM_AUTH_TYPE_GSM
1914 && authentication_data->autn_length == 0)
1915 return TAPI_API_INVALID_INPUT;
1917 MAKE_RESP_CB_DATA(evt_cb_data, handle, callback, user_data);
1919 g_variant_builder_init(&builder, G_VARIANT_TYPE ("ay"));
1920 for (i = 0; i < authentication_data->rand_length; i++) {
1921 g_variant_builder_add(&builder, "y", authentication_data->rand_data[i]);
1923 rand_gv = g_variant_builder_end(&builder);
1925 g_variant_builder_init(&builder, G_VARIANT_TYPE ("ay"));
1926 for (i = 0; i < authentication_data->autn_length; i++) {
1927 g_variant_builder_add(&builder, "y", authentication_data->autn_data[i]);
1929 autn_gv = g_variant_builder_end(&builder);
1931 param = g_variant_new("(ivv)", authentication_data->auth_type, rand_gv, autn_gv);
1933 g_dbus_connection_call(handle->dbus_connection, DBUS_TELEPHONY_SERVICE, handle->path,
1934 DBUS_TELEPHONY_SIM_INTERFACE, "Authentication", param, NULL, G_DBUS_CALL_FLAGS_NONE, TAPI_DEFAULT_TIMEOUT,
1935 handle->ca, on_response_req_sim_authentication, evt_cb_data);
1937 return TAPI_API_SUCCESS;
1940 EXPORT_API int tel_verifiy_sim_pins(TapiHandle *handle, const TelSimSecPw_t *pin_data,
1941 tapi_response_cb callback, void *user_data)
1943 struct tapi_resp_data *evt_cb_data = NULL;
1944 GVariant *param = NULL;
1947 TAPI_RET_ERR_NUM_IF_FAIL(handle, TAPI_API_INVALID_PTR);
1948 TAPI_RET_ERR_NUM_IF_FAIL(pin_data, TAPI_API_INVALID_PTR);
1949 TAPI_RET_ERR_NUM_IF_FAIL(pin_data->pw, TAPI_API_INVALID_PTR);
1951 TAPI_SIM_CHECK_TAPI_STATE();
1953 msg("pin type[%d]", pin_data->type);
1954 if (pin_data->type != TAPI_SIM_PTYPE_PIN1 && pin_data->type != TAPI_SIM_PTYPE_PIN2
1955 && pin_data->type != TAPI_SIM_PTYPE_SIM)
1956 return TAPI_API_INVALID_INPUT;
1958 if ((pin_data->pw_len < 4) || (pin_data->pw_len > 8))
1959 return TAPI_API_INVALID_INPUT;
1961 MAKE_RESP_CB_DATA(evt_cb_data, handle, callback, user_data);
1963 gpw = calloc(1, pin_data->pw_len+1);
1965 g_free(evt_cb_data);
1966 return TAPI_API_SYSTEM_OUT_OF_MEM;
1969 memcpy((void*)gpw, (const void*)pin_data->pw, pin_data->pw_len);
1971 param = g_variant_new("(is)", pin_data->type, gpw);
1973 g_dbus_connection_call(handle->dbus_connection, DBUS_TELEPHONY_SERVICE, handle->path,
1974 DBUS_TELEPHONY_SIM_INTERFACE, "VerifySec", param, NULL, G_DBUS_CALL_FLAGS_NONE, TAPI_PIN_TIMEOUT,
1975 handle->ca, on_response_verify_sim_pins, evt_cb_data);
1980 return TAPI_API_SUCCESS;
1983 EXPORT_API int tel_verify_sim_puks(TapiHandle *handle, const TelSimSecPw_t *puk_data,
1984 const TelSimSecPw_t *new_pin_data, tapi_response_cb callback, void *user_data)
1986 struct tapi_resp_data *evt_cb_data = NULL;
1987 GVariant *param = NULL;
1991 TAPI_RET_ERR_NUM_IF_FAIL(handle, TAPI_API_INVALID_PTR);
1992 TAPI_RET_ERR_NUM_IF_FAIL((puk_data != NULL && new_pin_data != NULL), TAPI_API_INVALID_PTR);
1993 TAPI_RET_ERR_NUM_IF_FAIL((puk_data->pw != NULL && new_pin_data->pw != NULL), TAPI_API_INVALID_PTR);
1995 TAPI_SIM_CHECK_TAPI_STATE();
1997 msg("puk type[%d] pin type[%d]", puk_data->type, new_pin_data->type);
1998 if ((puk_data->type != TAPI_SIM_PTYPE_PUK1 && puk_data->type != TAPI_SIM_PTYPE_PUK2)
1999 || (new_pin_data->type != TAPI_SIM_PTYPE_PIN1 && new_pin_data->type != TAPI_SIM_PTYPE_PIN2))
2000 return TAPI_API_INVALID_INPUT;
2002 if ((puk_data->type != TAPI_SIM_PTYPE_PUK1 || new_pin_data->type != TAPI_SIM_PTYPE_PIN1)
2003 && (puk_data->type != TAPI_SIM_PTYPE_PUK2 || new_pin_data->type != TAPI_SIM_PTYPE_PIN2))
2004 return TAPI_API_INVALID_INPUT;
2006 if ((puk_data->pw_len < 4) || (puk_data->pw_len > 8) || (new_pin_data->pw_len < 4)
2007 || (new_pin_data->pw_len > 8))
2008 return TAPI_API_INVALID_INPUT;
2010 MAKE_RESP_CB_DATA(evt_cb_data, handle, callback, user_data);
2012 gpin = calloc(1, new_pin_data->pw_len+1);
2014 g_free(evt_cb_data);
2015 return TAPI_API_SYSTEM_OUT_OF_MEM;
2018 gpuk = calloc(1, puk_data->pw_len+1);
2020 g_free(evt_cb_data);
2022 return TAPI_API_SYSTEM_OUT_OF_MEM;
2025 memcpy((void*)gpin, (const void*)new_pin_data->pw, new_pin_data->pw_len);
2026 memcpy((void*)gpuk, (const void*)puk_data->pw, puk_data->pw_len);
2028 param = g_variant_new("(iss)", puk_data->type, gpuk, gpin);
2030 g_dbus_connection_call(handle->dbus_connection, DBUS_TELEPHONY_SERVICE, handle->path,
2031 DBUS_TELEPHONY_SIM_INTERFACE, "VerifyPUK", param, NULL, G_DBUS_CALL_FLAGS_NONE, TAPI_PIN_TIMEOUT,
2032 handle->ca, on_response_verify_sim_puks, evt_cb_data);
2040 return TAPI_API_SUCCESS;
2043 EXPORT_API int tel_change_sim_pins(TapiHandle *handle, const TelSimSecPw_t *old_pin,
2044 const TelSimSecPw_t *new_pin, tapi_response_cb callback, void *user_data)
2046 struct tapi_resp_data *evt_cb_data = NULL;
2047 GVariant *param = NULL;
2048 gchar *gpin_o = NULL;
2049 gchar *gpin_n = NULL;
2051 TAPI_RET_ERR_NUM_IF_FAIL(handle, TAPI_API_INVALID_PTR);
2052 TAPI_RET_ERR_NUM_IF_FAIL((old_pin != NULL && new_pin != NULL), TAPI_API_INVALID_PTR);
2053 TAPI_RET_ERR_NUM_IF_FAIL((old_pin->pw != NULL && new_pin->pw != NULL), TAPI_API_INVALID_PTR);
2055 TAPI_SIM_CHECK_TAPI_STATE();
2057 msg("old_pin type[%d],new_pin type[%d]", old_pin->type, new_pin->type);
2058 if ((old_pin->type != TAPI_SIM_PTYPE_PIN1) && (old_pin->type != TAPI_SIM_PTYPE_PIN2)
2059 && (new_pin->type != TAPI_SIM_PTYPE_PIN1) && (new_pin->type != TAPI_SIM_PTYPE_PIN2))
2060 return TAPI_API_INVALID_INPUT;
2062 if (old_pin->type != new_pin->type)
2063 return TAPI_API_INVALID_INPUT;
2065 if ((old_pin->pw_len < 4) || (old_pin->pw_len > 8))
2066 return TAPI_API_INVALID_INPUT;
2068 if ((new_pin->pw_len < 4) || (new_pin->pw_len > 8))
2069 return TAPI_API_INVALID_INPUT;
2071 MAKE_RESP_CB_DATA(evt_cb_data, handle, callback, user_data);
2073 gpin_o = calloc(1, old_pin->pw_len+1);
2075 g_free(evt_cb_data);
2076 return TAPI_API_SYSTEM_OUT_OF_MEM;
2079 gpin_n = calloc(1, new_pin->pw_len+1);
2082 g_free(evt_cb_data);
2083 return TAPI_API_SYSTEM_OUT_OF_MEM;
2086 memcpy((void*)gpin_o, (const void*)old_pin->pw, old_pin->pw_len);
2087 memcpy((void*)gpin_n, (const void*)new_pin->pw, new_pin->pw_len);
2089 param = g_variant_new("(iss)", old_pin->type, gpin_o, gpin_n);
2090 msg("old_pin len[%d],new_pin len[%d]", old_pin->pw_len, new_pin->pw_len);
2092 g_dbus_connection_call(handle->dbus_connection, DBUS_TELEPHONY_SERVICE, handle->path,
2093 DBUS_TELEPHONY_SIM_INTERFACE, "ChangePIN", param, NULL, G_DBUS_CALL_FLAGS_NONE, TAPI_DEFAULT_TIMEOUT,
2094 handle->ca, on_response_change_sim_pins, evt_cb_data);
2102 return TAPI_API_SUCCESS;
2105 EXPORT_API int tel_disable_sim_facility(TapiHandle *handle, TelSimFacilityPw_t *pw,
2106 tapi_response_cb callback, void *user_data)
2108 struct tapi_resp_data *evt_cb_data = NULL;
2109 GVariant *param = NULL;
2112 TAPI_RET_ERR_NUM_IF_FAIL(handle, TAPI_API_INVALID_PTR);
2113 TAPI_RET_ERR_NUM_IF_FAIL(pw, TAPI_API_INVALID_PTR);
2114 TAPI_RET_ERR_NUM_IF_FAIL(pw->pw, TAPI_API_INVALID_PTR);
2116 TAPI_SIM_CHECK_TAPI_STATE();
2118 dbg("facility type[%d]", pw->lock_type);
2119 if(pw->lock_type < TAPI_SIM_LOCK_PS || pw->lock_type >TAPI_SIM_LOCK_PC)
2120 return TAPI_API_INVALID_INPUT;
2121 if ((pw->lock_type < TAPI_SIM_LOCK_PN) && ((pw->pw_len < 4) || (pw->pw_len > 8)) )
2122 return TAPI_API_INVALID_INPUT;
2123 if ((pw->lock_type > TAPI_SIM_LOCK_FD) && (pw->pw_len < 6) )
2124 return TAPI_API_INVALID_INPUT;
2126 MAKE_RESP_CB_DATA(evt_cb_data, handle, callback, user_data);
2128 gpw = calloc(1, pw->pw_len+1);
2130 g_free(evt_cb_data);
2131 return TAPI_API_SYSTEM_OUT_OF_MEM;
2134 memcpy((void*)gpw, (const void*)pw->pw, pw->pw_len);
2136 param = g_variant_new("(is)", pw->lock_type, gpw);
2138 g_dbus_connection_call(handle->dbus_connection, DBUS_TELEPHONY_SERVICE, handle->path,
2139 DBUS_TELEPHONY_SIM_INTERFACE, "DisableFacility", param, NULL, G_DBUS_CALL_FLAGS_NONE,
2140 TAPI_DEFAULT_TIMEOUT, handle->ca, on_response_disable_sim_facility, evt_cb_data);
2145 return TAPI_API_SUCCESS;
2148 EXPORT_API int tel_enable_sim_facility(TapiHandle *handle, TelSimFacilityPw_t *pw,
2149 tapi_response_cb callback, void *user_data)
2151 struct tapi_resp_data *evt_cb_data = NULL;
2152 GVariant *param = NULL;
2155 TAPI_RET_ERR_NUM_IF_FAIL(handle, TAPI_API_INVALID_PTR);
2156 TAPI_RET_ERR_NUM_IF_FAIL(pw, TAPI_API_INVALID_PTR);
2157 TAPI_RET_ERR_NUM_IF_FAIL(pw->pw, TAPI_API_INVALID_PTR);
2159 TAPI_SIM_CHECK_TAPI_STATE();
2161 msg("facility type[%d]", pw->lock_type);
2162 if(pw->lock_type < TAPI_SIM_LOCK_PS || pw->lock_type >TAPI_SIM_LOCK_PC)
2163 return TAPI_API_INVALID_INPUT;
2164 if ((pw->lock_type < TAPI_SIM_LOCK_PN) && ((pw->pw_len < 4) || (pw->pw_len > 8)) )
2165 return TAPI_API_INVALID_INPUT;
2166 if ((pw->lock_type > TAPI_SIM_LOCK_FD) && (pw->pw_len < 6) )
2167 return TAPI_API_INVALID_INPUT;
2169 MAKE_RESP_CB_DATA(evt_cb_data, handle, callback, user_data);
2171 gpw = calloc(1, pw->pw_len+1);
2173 g_free(evt_cb_data);
2174 return TAPI_API_SYSTEM_OUT_OF_MEM;
2177 memcpy((void*)gpw, (const void*)pw->pw, pw->pw_len);
2179 param = g_variant_new("(is)", pw->lock_type, gpw);
2181 g_dbus_connection_call(handle->dbus_connection, DBUS_TELEPHONY_SERVICE, handle->path,
2182 DBUS_TELEPHONY_SIM_INTERFACE, "EnableFacility", param, NULL, G_DBUS_CALL_FLAGS_NONE, TAPI_DEFAULT_TIMEOUT,
2183 handle->ca, on_response_enable_sim_facility, evt_cb_data);
2188 return TAPI_API_SUCCESS;
2191 EXPORT_API int tel_get_sim_facility(TapiHandle *handle, TelSimLockType_t type,
2192 tapi_response_cb callback, void *user_data)
2194 struct tapi_resp_data *evt_cb_data = NULL;
2195 GVariant *param = NULL;
2197 TAPI_RET_ERR_NUM_IF_FAIL(handle, TAPI_API_INVALID_PTR);
2199 TAPI_SIM_CHECK_TAPI_STATE();
2201 msg("facility type[%d]", type);
2202 if(type < TAPI_SIM_LOCK_PS || type >TAPI_SIM_LOCK_PC)
2203 return TAPI_API_INVALID_INPUT;
2205 MAKE_RESP_CB_DATA(evt_cb_data, handle, callback, user_data);
2207 param = g_variant_new("(i)", type);
2209 g_dbus_connection_call(handle->dbus_connection, DBUS_TELEPHONY_SERVICE, handle->path,
2210 DBUS_TELEPHONY_SIM_INTERFACE, "GetFacility", param, NULL, G_DBUS_CALL_FLAGS_NONE, TAPI_DEFAULT_TIMEOUT,
2211 handle->ca, on_response_get_sim_facility, evt_cb_data);
2213 return TAPI_API_SUCCESS;
2216 EXPORT_API int tel_get_sim_lock_info(TapiHandle *handle, TelSimLockType_t type,
2217 tapi_response_cb callback, void *user_data)
2219 struct tapi_resp_data *evt_cb_data = NULL;
2220 GVariant *param = NULL;
2222 TAPI_RET_ERR_NUM_IF_FAIL(handle, TAPI_API_INVALID_PTR);
2224 TAPI_SIM_CHECK_TAPI_STATE();
2226 msg("lock type[%d]", type);
2227 if(type < TAPI_SIM_LOCK_PS || type >TAPI_SIM_LOCK_PC)
2228 return TAPI_API_INVALID_INPUT;
2230 MAKE_RESP_CB_DATA(evt_cb_data, handle, callback, user_data);
2232 param = g_variant_new("(i)", type);
2234 g_dbus_connection_call(handle->dbus_connection, DBUS_TELEPHONY_SERVICE, handle->path,
2235 DBUS_TELEPHONY_SIM_INTERFACE, "GetLockInfo", param, NULL, G_DBUS_CALL_FLAGS_NONE, TAPI_DEFAULT_TIMEOUT,
2236 handle->ca, on_response_get_sim_lock_info, evt_cb_data);
2238 return TAPI_API_SUCCESS;
2241 EXPORT_API int tel_set_sim_power_state(TapiHandle *handle, TelSimPowerState_t state,
2242 tapi_response_cb callback, void *user_data)
2244 struct tapi_resp_data *evt_cb_data = NULL;
2245 GVariant *param = NULL;
2247 TAPI_RET_ERR_NUM_IF_FAIL(handle, TAPI_API_INVALID_PTR);
2249 dbg("Func Enterance. cp_name[%s], state[%d]", handle->cp_name, state);
2250 //TAPI_SIM_CHECK_TAPI_STATE(); -- TO be decided later
2252 if (state >= TAPI_SIM_POWER_UNSPECIFIED){
2253 return TAPI_API_INVALID_INPUT;
2256 MAKE_RESP_CB_DATA(evt_cb_data, handle, callback, user_data);
2258 param = g_variant_new("(i)", state);
2260 g_dbus_connection_call(handle->dbus_connection, DBUS_TELEPHONY_SERVICE, handle->path,
2261 DBUS_TELEPHONY_SIM_INTERFACE, "SetPowerstate", param, NULL, G_DBUS_CALL_FLAGS_NONE, TAPI_DEFAULT_TIMEOUT,
2262 handle->ca, on_response_set_sim_power_state, evt_cb_data);
2264 return TAPI_API_SUCCESS;
2268 EXPORT_API int tel_req_sim_apdu(TapiHandle *handle, TelSimApdu_t* apdu_data,
2269 tapi_response_cb callback, void *user_data)
2271 struct tapi_resp_data *evt_cb_data = NULL;
2272 GVariantBuilder builder;
2273 GVariant *param = NULL;
2274 GVariant *inner_gv = NULL;
2277 TAPI_RET_ERR_NUM_IF_FAIL(handle, TAPI_API_INVALID_PTR);
2278 TAPI_RET_ERR_NUM_IF_FAIL(apdu_data, TAPI_API_INVALID_PTR);
2280 TAPI_SIM_CHECK_TAPI_STATE();
2282 MAKE_RESP_CB_DATA(evt_cb_data, handle, callback, user_data);
2284 g_variant_builder_init(&builder, G_VARIANT_TYPE ("ay"));
2285 for (i = 0; i < apdu_data->apdu_len; i++) {
2286 g_variant_builder_add(&builder, "y", apdu_data->apdu[i]);
2288 inner_gv = g_variant_builder_end(&builder);
2289 param = g_variant_new("(v)", inner_gv);
2291 g_dbus_connection_call(handle->dbus_connection, DBUS_TELEPHONY_SERVICE, handle->path,
2292 DBUS_TELEPHONY_SIM_INTERFACE, "TransferAPDU", param, NULL, G_DBUS_CALL_FLAGS_NONE, TAPI_DEFAULT_TIMEOUT,
2293 handle->ca, on_response_req_sim_apdu, evt_cb_data);
2295 return TAPI_API_SUCCESS;
2298 EXPORT_API int tel_req_sim_atr(TapiHandle *handle, tapi_response_cb callback, void *user_data)
2300 struct tapi_resp_data *evt_cb_data = NULL;
2302 TAPI_RET_ERR_NUM_IF_FAIL(handle, TAPI_API_INVALID_PTR);
2304 TAPI_SIM_CHECK_TAPI_STATE();
2306 MAKE_RESP_CB_DATA(evt_cb_data, handle, callback, user_data);
2308 g_dbus_connection_call(handle->dbus_connection, DBUS_TELEPHONY_SERVICE, handle->path,
2309 DBUS_TELEPHONY_SIM_INTERFACE, "GetATR", NULL, NULL, G_DBUS_CALL_FLAGS_NONE, TAPI_DEFAULT_TIMEOUT, handle->ca,
2310 on_response_req_sim_atr, evt_cb_data);
2312 return TAPI_API_SUCCESS;