4 * Copyright (c) 2012 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.
32 #include <communicator.h>
33 #include <core_object.h>
35 #include <user_request.h>
39 #include "generated-code.h"
42 #define DBUS_SIM_STATUS_ERROR "SIM STATUS ERROR"
43 #define DBUS_SIM_NOT_FOUND "SIM NOT FOUND"
44 #define DBUS_SIM_PERM_BLOCKED "SIM PERM BLOCKED"
45 #define DBUS_SIM_CARD_ERROR "SIM CARD ERROR"
46 #define DBUS_SIM_NOT_INITIALIZED "SIM NOT INITIALIZED"
47 #define DBUS_SIM_INIT_COMPLETED "SIM INIT COMPLETED"
48 #define DBUS_SIM_LOCKED "SIM LOCKED"
49 #define DBUS_SIM_NOT_READY "SIM NOT READY"
50 #define DBUS_SIM_RESPONSE_DATA_ERROR "SIM RESPONSE DATA ERROR"
51 #define DBUS_SIM_SERVICE_IS_DISABLED "SIM SERVICE IS DISABLED"
53 #define DBUS_SIM_GET_COSIM(invocation, co_sim, server) { \
54 co_sim = __get_sim_co_by_cp_name(server, GET_CP_NAME(invocation)); \
56 err("SIM Core object is NULL"); \
57 FAIL_RESPONSE (invocation, DEFAULT_MSG_REQ_FAILED); \
62 #define DBUS_SIM_CHECK_SIM_STATUS(op_type, co_sim) {\
63 if (__check_sim_state(op_type, tcore_sim_get_status(co_sim)) == FALSE) { \
64 err("Invalid SIM status"); \
65 __return_fail_response(invocation, tcore_sim_get_status(co_sim)); \
70 #define DBUS_SIM_CHECK_SIM_SERVICE_TABLE(op_type, co_sim) {\
71 gboolean b_cphs = FALSE; \
72 b_cphs = tcore_sim_get_cphs_status(co_sim); \
73 if (b_cphs && op_type != GET_MSISDN) { \
74 dbg("CPHS SIM... Do not check SST"); \
76 struct tel_sim_service_table* svct = tcore_sim_get_service_table(co_sim); \
78 if (__check_sim_service_table(op_type, svct) == FALSE) { \
79 err("'Service' is disabled in SST"); \
80 FAIL_RESPONSE(invocation, DBUS_SIM_SERVICE_IS_DISABLED); \
84 dbg("Request to modem"); \
91 #define DBUS_SIM_CHECK_DISPATCH_RET(ret, invocation, ur) {\
92 if (ret != TCORE_RETURN_SUCCESS) { \
93 if (ret == TCORE_RETURN_SIM_DISABLED_IN_SST) { \
94 err("'Service' is disabled in SST"); \
95 FAIL_RESPONSE (invocation, DBUS_SIM_SERVICE_IS_DISABLED); \
97 err("Dispatch request failed: [0x%x]", ret); \
98 FAIL_RESPONSE (invocation, DEFAULT_MSG_REQ_FAILED); \
100 tcore_user_request_unref(ur); \
104 enum dbus_tapi_sim_gdbus_method_name {
114 GET_MESSAGE_WAITING = 10,
129 ENABLE_FACILITY = 25,
134 GET_FIELDS = 30, //for get various data at once
144 static gboolean __is_valid_sim_status(enum tel_sim_status sim_status)
147 case SIM_STATUS_INIT_COMPLETED:
148 case SIM_STATUS_INITIALIZING:
149 case SIM_STATUS_PIN_REQUIRED:
150 case SIM_STATUS_PUK_REQUIRED:
151 case SIM_STATUS_LOCK_REQUIRED:
152 case SIM_STATUS_CARD_BLOCKED:
153 case SIM_STATUS_NCK_REQUIRED:
154 case SIM_STATUS_NSCK_REQUIRED:
155 case SIM_STATUS_SPCK_REQUIRED:
156 case SIM_STATUS_CCK_REQUIRED:
164 static CoreObject *__get_sim_co_by_cp_name(Server *server, char *cp_name)
166 TcorePlugin *plugin = NULL;
169 err("server is NULL");
173 plugin = tcore_server_find_plugin(server, cp_name);
174 return tcore_plugin_ref_core_object(plugin, CORE_OBJECT_TYPE_SIM);
177 static CoreObject* __get_sim_co_from_ur(Server *server, UserRequest *ur)
179 CoreObject *co_sim = NULL;
180 char *modem_name = NULL;
182 modem_name = tcore_user_request_get_modem_name(ur);
184 err("Modem name is NULL");
188 co_sim = __get_sim_co_by_cp_name(server, modem_name);
194 static gboolean __check_sim_state(enum dbus_tapi_sim_gdbus_method_name method, enum tel_sim_status sim_status)
198 if ((int)sim_status < SIM_STATUS_CARD_ERROR) {
199 err("SIM status is NOT valid");
213 // Regarding Lock facilities
215 case ENABLE_FACILITY:
216 case DISABLE_FACILITY:
221 if (sim_status == SIM_STATUS_CARD_ERROR
222 || sim_status == SIM_STATUS_CARD_BLOCKED
223 || sim_status == SIM_STATUS_CARD_NOT_PRESENT
224 || sim_status == SIM_STATUS_CARD_REMOVED
225 || sim_status == SIM_STATUS_UNKNOWN
226 || sim_status == SIM_STATUS_CARD_POWEROFF) {
234 case GET_CPHS_NET_NAME:
235 case GET_CALL_FORWARDING:
236 case SET_CALL_FORWARDING:
237 case GET_MESSAGE_WAITING:
238 case SET_MESSAGE_WAITING:
244 if (sim_status != SIM_STATUS_INIT_COMPLETED) {
249 if (sim_status != SIM_STATUS_INIT_COMPLETED
250 && sim_status != SIM_STATUS_INITIALIZING
251 && sim_status != SIM_STATUS_PIN_REQUIRED
252 && sim_status != SIM_STATUS_CARD_BLOCKED
253 && sim_status != SIM_STATUS_CARD_POWEROFF) {
257 case GET_INIT_STATUS:
261 err("Unhandled/Unknown operation: [%d]", method);
267 static gboolean __check_sim_service_table(enum dbus_tapi_sim_gdbus_method_name method, struct tel_sim_service_table *svct)
273 if ( !(svct->sim_type == SIM_TYPE_GSM && svct->table.sst.service[SIM_SST_MSISDN]) &&
274 !(svct->sim_type == SIM_TYPE_USIM && svct->table.ust.service[SIM_UST_MSISDN]) ) {
278 case GET_CALL_FORWARDING:
279 case SET_CALL_FORWARDING:
280 if ( !(svct->sim_type == SIM_TYPE_GSM && svct->table.sst.service[SIM_SST_CFIS]) &&
281 !(svct->sim_type == SIM_TYPE_USIM && svct->table.ust.service[SIM_UST_CFIS]) ) {
285 case GET_MESSAGE_WAITING:
286 case SET_MESSAGE_WAITING:
287 if ( !(svct->sim_type == SIM_TYPE_GSM && svct->table.sst.service[SIM_SST_MWIS]) &&
288 !(svct->sim_type == SIM_TYPE_USIM && svct->table.ust.service[SIM_UST_MWIS]) ) {
294 if ( !(svct->sim_type == SIM_TYPE_GSM && svct->table.sst.service[SIM_SST_MBDN]) &&
295 !(svct->sim_type == SIM_TYPE_USIM && svct->table.ust.service[SIM_UST_MBDN]) ) {
300 err("Unhandled/Unknown operation: [%d]", method);
307 static void __return_fail_response(GDBusMethodInvocation *invocation, enum tel_sim_status sim_status)
309 dbg("SIM Status: [%d]", sim_status);
311 switch (sim_status) {
312 case SIM_STATUS_CARD_NOT_PRESENT:
313 case SIM_STATUS_CARD_REMOVED:
314 FAIL_RESPONSE(invocation, DBUS_SIM_NOT_FOUND);
316 case SIM_STATUS_CARD_BLOCKED:
317 FAIL_RESPONSE(invocation, DBUS_SIM_PERM_BLOCKED);
319 case SIM_STATUS_CARD_ERROR:
320 case SIM_STATUS_CARD_CRASHED:
321 FAIL_RESPONSE(invocation, DBUS_SIM_CARD_ERROR);
323 case SIM_STATUS_INITIALIZING:
324 FAIL_RESPONSE(invocation, DBUS_SIM_NOT_INITIALIZED);
326 case SIM_STATUS_INIT_COMPLETED:
327 FAIL_RESPONSE(invocation, DBUS_SIM_INIT_COMPLETED);
329 case SIM_STATUS_PIN_REQUIRED:
330 case SIM_STATUS_PUK_REQUIRED:
331 case SIM_STATUS_NCK_REQUIRED:
332 case SIM_STATUS_NSCK_REQUIRED:
333 case SIM_STATUS_SPCK_REQUIRED:
334 case SIM_STATUS_CCK_REQUIRED:
335 case SIM_STATUS_LOCK_REQUIRED:
336 FAIL_RESPONSE(invocation, DBUS_SIM_LOCKED);
338 case SIM_STATUS_UNKNOWN:
339 FAIL_RESPONSE(invocation, DBUS_SIM_NOT_READY);
342 dbg("Unhandled/Unknown status: [%d]", sim_status);
343 FAIL_RESPONSE(invocation, DBUS_SIM_STATUS_ERROR);
348 static gboolean on_sim_get_init_status(TelephonySim *sim, GDBusMethodInvocation *invocation,
351 struct custom_data *ctx = user_data;
352 enum tel_sim_status sim_status = SIM_STATUS_UNKNOWN;
353 gboolean sim_changed = FALSE;
354 CoreObject *co_sim = NULL;
356 if (!check_access_control (invocation, AC_SIM, "r"))
359 DBUS_SIM_GET_COSIM(invocation, co_sim, ctx->server);
361 sim_status = tcore_sim_get_status(co_sim);
362 sim_changed = tcore_sim_get_identification(co_sim);
363 dbg("SIM - Status: [%d] Changed: [%s]",
364 sim_status, (sim_changed ? "Yes" : "No"));
366 telephony_sim_complete_get_init_status(sim, invocation, sim_status, sim_changed);
371 static gboolean on_sim_get_card_type(TelephonySim *sim, GDBusMethodInvocation *invocation,
374 struct custom_data *ctx = user_data;
375 enum tel_sim_type sim_type = SIM_TYPE_UNKNOWN;
376 CoreObject *co_sim = NULL;
378 DBUS_SIM_GET_COSIM(invocation, co_sim, ctx->server);
379 DBUS_SIM_CHECK_SIM_STATUS(GET_CARD_TYPE, co_sim);
381 sim_type = tcore_sim_get_type(co_sim);
383 telephony_sim_complete_get_card_type(sim, invocation, sim_type);
388 static gboolean on_sim_get_imsi(TelephonySim *sim, GDBusMethodInvocation *invocation,
391 struct custom_data *ctx = user_data;
392 struct tel_sim_imsi *n_imsi;
393 CoreObject *co_sim = NULL;
395 if (!check_access_control (invocation, AC_SIM, "r"))
398 DBUS_SIM_GET_COSIM(invocation, co_sim, ctx->server);
399 DBUS_SIM_CHECK_SIM_STATUS(GET_IMSI, co_sim);
401 n_imsi = tcore_sim_get_imsi(co_sim);
403 FAIL_RESPONSE (invocation, DBUS_SIM_RESPONSE_DATA_ERROR);
406 telephony_sim_complete_get_imsi(sim, invocation, n_imsi->plmn, n_imsi->msin);
413 static gboolean on_sim_get_ecc(TelephonySim *sim, GDBusMethodInvocation *invocation,
416 struct custom_data *ctx = user_data;
417 CoreObject *co_sim = NULL;
418 struct tel_sim_ecc_list *ecc_list = NULL;
420 if (!check_access_control (invocation, AC_SIM, "r"))
423 DBUS_SIM_GET_COSIM(invocation, co_sim, ctx->server);
424 DBUS_SIM_CHECK_SIM_STATUS(GET_ECC, co_sim);
426 ecc_list = tcore_sim_get_ecc_list(co_sim);
428 UserRequest *ur = NULL;
430 dbg("po->ecc_list is NULL. Request to Modem.");
431 ur = MAKE_UR(ctx, sim, invocation);
432 tcore_user_request_set_command(ur, TREQ_SIM_GET_ECC);
433 ret = tcore_communicator_dispatch_request(ctx->comm, ur);
434 if (ret != TCORE_RETURN_SUCCESS) {
435 FAIL_RESPONSE (invocation, DEFAULT_MSG_REQ_FAILED);
436 dbg("[ error ] tcore_communicator_dispatch_request() : (0x%x)", ret);
437 tcore_user_request_unref(ur);
443 g_variant_builder_init(&b, G_VARIANT_TYPE("aa{sv}"));
444 for (i = 0; i<ecc_list->ecc_count; i++) {
445 dbg("ecc[%d] : ecc_category=[0x%x], ecc_num=[%s], ecc_string=[%s]",
446 i, ecc_list->ecc[i].ecc_category, ecc_list->ecc[i].ecc_num, ecc_list->ecc[i].ecc_string);
447 g_variant_builder_open(&b, G_VARIANT_TYPE("a{sv}"));
448 g_variant_builder_add(&b, "{sv}", "category", g_variant_new_int32(ecc_list->ecc[i].ecc_category));
449 g_variant_builder_add(&b, "{sv}", "number", g_variant_new_string(ecc_list->ecc[i].ecc_num));
450 g_variant_builder_add(&b, "{sv}", "name", g_variant_new_string(ecc_list->ecc[i].ecc_string));
451 g_variant_builder_close(&b);
453 gv = g_variant_builder_end(&b);
455 dbg("error - ecc gv is NULL");
457 telephony_sim_complete_get_ecc(sim, invocation, gv);
465 static gboolean on_sim_get_iccid(TelephonySim *sim, GDBusMethodInvocation *invocation,
468 struct custom_data *ctx = user_data;
469 UserRequest *ur = NULL;
471 CoreObject *co_sim = NULL;
472 struct tel_sim_iccid* iccid = NULL;
474 dbg("Func Entrance");
476 if (!check_access_control (invocation, AC_SIM, "r"))
479 DBUS_SIM_GET_COSIM(invocation, co_sim, ctx->server);
480 DBUS_SIM_CHECK_SIM_STATUS(GET_ICCID, co_sim);
482 iccid = tcore_sim_get_iccid(co_sim);
485 ur = MAKE_UR(ctx, sim, invocation);
487 tcore_user_request_set_command(ur, TREQ_SIM_GET_ICCID);
488 ret = tcore_communicator_dispatch_request(ctx->comm, ur);
490 if (ret != TCORE_RETURN_SUCCESS) {
491 FAIL_RESPONSE (invocation, DEFAULT_MSG_REQ_FAILED);
492 dbg("[ error ] tcore_communicator_dispatch_request() : (0x%x)", ret);
493 tcore_user_request_unref(ur);
496 telephony_sim_complete_get_iccid(sim, invocation, SIM_ACCESS_SUCCESS,
504 static gboolean on_sim_get_language(TelephonySim *sim, GDBusMethodInvocation *invocation,
507 struct custom_data *ctx = user_data;
508 UserRequest *ur = NULL;
510 CoreObject *co_sim = NULL;
512 if (!check_access_control (invocation, AC_SIM, "r"))
515 DBUS_SIM_GET_COSIM(invocation, co_sim, ctx->server);
516 DBUS_SIM_CHECK_SIM_STATUS(GET_LANGUAGE, co_sim);
518 ur = MAKE_UR(ctx, sim, invocation);
520 tcore_user_request_set_command(ur, TREQ_SIM_GET_LANGUAGE);
521 ret = tcore_communicator_dispatch_request(ctx->comm, ur);
522 if (ret != TCORE_RETURN_SUCCESS) {
523 FAIL_RESPONSE (invocation, DEFAULT_MSG_REQ_FAILED);
524 dbg("[ error ] tcore_communicator_dispatch_request() : (0x%x)", ret);
525 tcore_user_request_unref(ur);
531 static gboolean on_sim_set_language(TelephonySim *sim, GDBusMethodInvocation *invocation,
532 gint arg_language, gpointer user_data)
534 struct custom_data *ctx = user_data;
535 UserRequest *ur = NULL;
537 CoreObject *co_sim = NULL;
538 struct treq_sim_set_language set_language;
540 if (!check_access_control (invocation, AC_SIM, "w"))
543 DBUS_SIM_GET_COSIM(invocation, co_sim, ctx->server);
544 DBUS_SIM_CHECK_SIM_STATUS(SET_LANGUAGE, co_sim);
546 memset(&set_language, 0, sizeof(struct treq_sim_set_language));
547 set_language.language = arg_language;
549 dbg("set_language.language[%d]", set_language.language);
550 ur = MAKE_UR(ctx, sim, invocation);
552 tcore_user_request_set_data(ur, sizeof(struct treq_sim_set_language), &set_language);
553 tcore_user_request_set_command(ur, TREQ_SIM_SET_LANGUAGE);
554 ret = tcore_communicator_dispatch_request(ctx->comm, ur);
555 if (ret != TCORE_RETURN_SUCCESS) {
556 FAIL_RESPONSE (invocation, DEFAULT_MSG_REQ_FAILED);
557 dbg("[ error ] tcore_communicator_dispatch_request() : (0x%x)", ret);
558 tcore_user_request_unref(ur);
564 static gboolean on_sim_get_call_forwarding(TelephonySim *sim, GDBusMethodInvocation *invocation,
567 struct custom_data *ctx = user_data;
568 UserRequest *ur = NULL;
570 CoreObject *co_sim = NULL;
572 if (!check_access_control (invocation, AC_SIM, "r"))
575 DBUS_SIM_GET_COSIM(invocation, co_sim, ctx->server);
576 DBUS_SIM_CHECK_SIM_STATUS(GET_CALL_FORWARDING, co_sim);
577 DBUS_SIM_CHECK_SIM_SERVICE_TABLE(GET_CALL_FORWARDING, co_sim);
579 ur = MAKE_UR(ctx, sim, invocation);
580 tcore_user_request_set_command(ur, TREQ_SIM_GET_CALLFORWARDING);
582 ret = tcore_communicator_dispatch_request(ctx->comm, ur);
583 DBUS_SIM_CHECK_DISPATCH_RET(ret, invocation, ur);
588 static gboolean on_sim_set_call_forwarding(TelephonySim *sim, GDBusMethodInvocation *invocation,
592 guchar arg_cfu_status,
595 const gchar *arg_number,
598 gboolean arg_cphs_line1,
599 gboolean arg_cphs_line2,
600 gboolean arg_cphs_fax,
601 gboolean arg_cphs_data,
604 struct custom_data *ctx = user_data;
605 UserRequest *ur = NULL;
607 CoreObject *co_sim = NULL;
608 struct treq_sim_set_callforwarding req_cf;
610 if (!check_access_control (invocation, AC_SIM, "w"))
613 DBUS_SIM_GET_COSIM(invocation, co_sim, ctx->server);
614 DBUS_SIM_CHECK_SIM_STATUS(SET_CALL_FORWARDING, co_sim);
615 DBUS_SIM_CHECK_SIM_SERVICE_TABLE(SET_CALL_FORWARDING, co_sim);
617 ur = MAKE_UR(ctx, sim, invocation);
619 memset(&req_cf, 0, sizeof(struct treq_sim_set_callforwarding));
621 req_cf.b_cphs = arg_cphs;
624 req_cf.cphs_cf.b_line1 = arg_cphs_line1;
625 req_cf.cphs_cf.b_line2 = arg_cphs_line2;
626 req_cf.cphs_cf.b_fax = arg_cphs_fax;
627 req_cf.cphs_cf.b_data = arg_cphs_data;
628 dbg("b_line1[%d], b_line2[%d], b_fax[%d], b_data[%d]",
629 req_cf.cphs_cf.b_line1, req_cf.cphs_cf.b_line2,
630 req_cf.cphs_cf.b_fax, req_cf.cphs_cf.b_data);
632 req_cf.cf.rec_index = arg_rec_index;
633 req_cf.cf.msp_num = arg_msp_num;
634 req_cf.cf.cfu_status = arg_cfu_status;
635 req_cf.cf.ton = arg_ton;
636 req_cf.cf.npi = arg_npi;
637 memcpy(&req_cf.cf.cfu_num, arg_number, strlen(arg_number));
638 req_cf.cf.cc2_id = arg_cc2_id;
639 req_cf.cf.ext7_id = arg_ext7_id;
640 dbg("rec_index[%d], msp_num[%d], cfu_status[0x%x], ton[%d], "
641 "npi[%d], cfu_num[%s], cc2_id[%d], ext7_id[%d]",
642 req_cf.cf.rec_index, req_cf.cf.msp_num, req_cf.cf.cfu_status, req_cf.cf.ton,
643 req_cf.cf.npi, req_cf.cf.cfu_num, req_cf.cf.cc2_id, req_cf.cf.ext7_id);
646 tcore_user_request_set_data(ur, sizeof(struct treq_sim_set_callforwarding), &req_cf);
647 tcore_user_request_set_command(ur, TREQ_SIM_SET_CALLFORWARDING);
649 ret = tcore_communicator_dispatch_request(ctx->comm, ur);
650 DBUS_SIM_CHECK_DISPATCH_RET(ret, invocation, ur);
655 static gboolean on_sim_get_message_waiting(TelephonySim *sim, GDBusMethodInvocation *invocation,
658 struct custom_data *ctx = user_data;
659 UserRequest *ur = NULL;
661 CoreObject *co_sim = NULL;
663 if (!check_access_control (invocation, AC_SIM, "r"))
666 DBUS_SIM_GET_COSIM(invocation, co_sim, ctx->server);
667 DBUS_SIM_CHECK_SIM_STATUS(GET_MESSAGE_WAITING, co_sim);
668 DBUS_SIM_CHECK_SIM_SERVICE_TABLE(GET_MESSAGE_WAITING, co_sim);
670 ur = MAKE_UR(ctx, sim, invocation);
671 tcore_user_request_set_command(ur, TREQ_SIM_GET_MESSAGEWAITING);
673 ret = tcore_communicator_dispatch_request(ctx->comm, ur);
674 DBUS_SIM_CHECK_DISPATCH_RET(ret, invocation, ur);
679 static gboolean on_sim_set_message_waiting(TelephonySim *sim, GDBusMethodInvocation *invocation,
682 guchar arg_indicator_status,
688 gboolean arg_cphs_voice1,
689 gboolean arg_cphs_voice2,
690 gboolean arg_cphs_fax,
691 gboolean arg_cphs_data,
694 struct custom_data *ctx = user_data;
695 UserRequest *ur = NULL;
697 CoreObject *co_sim = NULL;
698 struct treq_sim_set_messagewaiting req_mw;
700 if (!check_access_control (invocation, AC_SIM, "w"))
703 DBUS_SIM_GET_COSIM(invocation, co_sim, ctx->server);
704 DBUS_SIM_CHECK_SIM_STATUS(SET_MESSAGE_WAITING, co_sim);
705 DBUS_SIM_CHECK_SIM_SERVICE_TABLE(SET_MESSAGE_WAITING, co_sim);
707 ur = MAKE_UR(ctx, sim, invocation);
709 memset(&req_mw, 0, sizeof(struct treq_sim_set_messagewaiting));
711 req_mw.b_cphs = arg_cphs;
714 req_mw.cphs_mw.b_voice1 = arg_cphs_voice1;
715 req_mw.cphs_mw.b_voice2 = arg_cphs_voice2;
716 req_mw.cphs_mw.b_fax = arg_cphs_fax;
717 req_mw.cphs_mw.b_data = arg_cphs_data;
718 dbg("b_voice1[%d],b_voice2[%d],b_fax[%d], b_data[%d]",
719 req_mw.cphs_mw.b_voice1,
720 req_mw.cphs_mw.b_voice2,
721 req_mw.cphs_mw.b_fax,
722 req_mw.cphs_mw.b_data);
724 req_mw.mw.rec_index = arg_rec_index;
725 req_mw.mw.indicator_status = arg_indicator_status;
726 req_mw.mw.voice_count = arg_voice_cnt;
727 req_mw.mw.fax_count = arg_fax_cnt;
728 req_mw.mw.email_count = arg_email_cnt;
729 req_mw.mw.other_count = arg_other_cnt;
730 req_mw.mw.video_count = arg_video_cnt;
731 dbg("rec_index[%d], indicator_status[0x%x], voice_count[%d], fax_count[%d], email_count[%d], other_count[%d], video_count[%d]",
733 req_mw.mw.indicator_status,
734 req_mw.mw.voice_count,
736 req_mw.mw.email_count,
737 req_mw.mw.other_count,
738 req_mw.mw.video_count);
741 tcore_user_request_set_data(ur, sizeof(struct treq_sim_set_messagewaiting), &req_mw);
742 tcore_user_request_set_command(ur, TREQ_SIM_SET_MESSAGEWAITING);
744 ret = tcore_communicator_dispatch_request(ctx->comm, ur);
745 DBUS_SIM_CHECK_DISPATCH_RET(ret, invocation, ur);
750 static gboolean on_sim_get_mailbox(TelephonySim *sim, GDBusMethodInvocation *invocation,
753 struct custom_data *ctx = user_data;
754 UserRequest *ur = NULL;
756 CoreObject *co_sim = NULL;
758 if (!check_access_control (invocation, AC_SIM, "r"))
761 DBUS_SIM_GET_COSIM(invocation, co_sim, ctx->server);
762 DBUS_SIM_CHECK_SIM_STATUS(GET_MAILBOX, co_sim);
763 DBUS_SIM_CHECK_SIM_SERVICE_TABLE(GET_MAILBOX, co_sim);
765 ur = MAKE_UR(ctx, sim, invocation);
766 tcore_user_request_set_command(ur, TREQ_SIM_GET_MAILBOX);
768 ret = tcore_communicator_dispatch_request(ctx->comm, ur);
769 DBUS_SIM_CHECK_DISPATCH_RET(ret, invocation, ur);
774 static gboolean on_sim_set_mailbox(TelephonySim *sim, GDBusMethodInvocation *invocation,
778 gint arg_profile_number,
779 gint arg_alpha_id_max_len,
780 const gchar *arg_alpha_id,
783 const gchar *arg_number,
788 struct custom_data *ctx = user_data;
789 UserRequest *ur = NULL;
791 CoreObject *co_sim = NULL;
792 struct treq_sim_set_mailbox req_mb;
794 if (!check_access_control (invocation, AC_SIM, "w"))
797 DBUS_SIM_GET_COSIM(invocation, co_sim, ctx->server);
798 DBUS_SIM_CHECK_SIM_STATUS(SET_MAILBOX, co_sim);
799 DBUS_SIM_CHECK_SIM_SERVICE_TABLE(SET_MAILBOX, co_sim);
801 ur = MAKE_UR(ctx, sim, invocation);
803 memset(&req_mb, 0, sizeof(struct treq_sim_set_mailbox));
805 req_mb.b_cphs = arg_cphs;
807 req_mb.mb_info.mb_type = arg_type;
808 req_mb.mb_info.rec_index = arg_rec_index;
809 req_mb.mb_info.profile_number = arg_profile_number;
810 req_mb.mb_info.number_info.alpha_id_max_len = arg_alpha_id_max_len;
811 if (strlen(arg_alpha_id))
812 memcpy(&req_mb.mb_info.number_info.alpha_id, arg_alpha_id, strlen(arg_alpha_id));
813 req_mb.mb_info.number_info.ton = arg_npi;
814 req_mb.mb_info.number_info.npi = arg_npi;
815 if (strlen(arg_number))
816 memcpy(&req_mb.mb_info.number_info.num, arg_number, strlen(arg_number));
817 req_mb.mb_info.number_info.cc_id = arg_ext1_id;
818 req_mb.mb_info.number_info.ext1_id = arg_ext1_id;
820 dbg("b_cphs[%d] mb_type[%d], rec_index[%d], profile_number[%d], alpha_id_max_len[%d], "
821 "alpha_id[%s], ton[%d], npi[%d], num[%s], cc_id[%d], ext1_id[%d]",
823 req_mb.mb_info.mb_type,
824 req_mb.mb_info.rec_index,
825 req_mb.mb_info.profile_number,
826 req_mb.mb_info.number_info.alpha_id_max_len,
827 req_mb.mb_info.number_info.alpha_id,
828 req_mb.mb_info.number_info.ton,
829 req_mb.mb_info.number_info.npi,
830 req_mb.mb_info.number_info.num,
831 req_mb.mb_info.number_info.cc_id,
832 req_mb.mb_info.number_info.ext1_id)
834 tcore_user_request_set_data(ur, sizeof(struct treq_sim_set_mailbox), &req_mb);
835 tcore_user_request_set_command(ur, TREQ_SIM_SET_MAILBOX);
837 ret = tcore_communicator_dispatch_request(ctx->comm, ur);
838 DBUS_SIM_CHECK_DISPATCH_RET(ret, invocation, ur);
843 static gboolean on_sim_get_cphsinfo(TelephonySim *sim, GDBusMethodInvocation *invocation,
846 struct custom_data *ctx = user_data;
847 UserRequest *ur = NULL;
849 CoreObject *co_sim = NULL;
851 if (!check_access_control (invocation, AC_SIM, "r"))
854 DBUS_SIM_GET_COSIM(invocation, co_sim, ctx->server);
855 DBUS_SIM_CHECK_SIM_STATUS(GET_CPHS_INFO, co_sim);
857 ur = MAKE_UR(ctx, sim, invocation);
859 tcore_user_request_set_command(ur, TREQ_SIM_GET_CPHS_INFO);
860 ret = tcore_communicator_dispatch_request(ctx->comm, ur);
861 if (ret != TCORE_RETURN_SUCCESS) {
862 FAIL_RESPONSE (invocation, DEFAULT_MSG_REQ_FAILED);
863 dbg("[ error ] tcore_communicator_dispatch_request() : (0x%x)", ret);
864 tcore_user_request_unref(ur);
870 static gboolean on_sim_get_service_table(TelephonySim *sim, GDBusMethodInvocation *invocation,
873 struct custom_data *ctx = user_data;
874 CoreObject *co_sim = NULL;
875 struct tel_sim_service_table *svct = NULL;
877 if (!check_access_control (invocation, AC_SIM, "r"))
880 DBUS_SIM_GET_COSIM(invocation, co_sim, ctx->server);
881 DBUS_SIM_CHECK_SIM_STATUS(GET_SVCT, co_sim);
883 svct = tcore_sim_get_service_table(co_sim);
885 UserRequest *ur = NULL;
887 ur = MAKE_UR(ctx, sim, invocation);
889 dbg("Not cached. Request to modem");
890 tcore_user_request_set_command(ur, TREQ_SIM_GET_SERVICE_TABLE);
891 ret = tcore_communicator_dispatch_request(ctx->comm, ur);
892 if (ret != TCORE_RETURN_SUCCESS) {
893 FAIL_RESPONSE (invocation, DEFAULT_MSG_REQ_FAILED);
894 dbg("[ error ] tcore_communicator_dispatch_request() : (0x%x)", ret);
895 tcore_user_request_unref(ur);
898 GVariantBuilder builder;
899 GVariant * inner_gv = NULL;
900 GVariant *svct_gv = NULL;
902 dbg("TRESP_SIM_GET_SERVICE_TABLE");
904 g_variant_builder_init (&builder, G_VARIANT_TYPE ("ay"));
905 if (svct->sim_type == SIM_TYPE_GSM) {
906 for (i = 0; i < SIM_SST_SERVICE_CNT_MAX; i++) {
907 g_variant_builder_add (&builder, "y", svct->table.sst.service[i]);
909 } else if (svct->sim_type == SIM_TYPE_USIM) {
910 for (i = 0; i < SIM_UST_SERVICE_CNT_MAX; i++) {
911 g_variant_builder_add (&builder, "y", svct->table.ust.service[i]);
913 } else if(svct->sim_type == SIM_TYPE_RUIM) {
914 if(SIM_CDMA_SVC_TABLE == svct->table.cst.cdma_svc_table) {
915 for(i = 0; i < SIM_CDMA_ST_SERVICE_CNT_MAX; i++) {
916 g_variant_builder_add (&builder, "iy", svct->table.cst.cdma_svc_table,
917 svct->table.cst.service.cdma_service[i]);
919 } else if(SIM_CSIM_SVC_TABLE == svct->table.cst.cdma_svc_table) {
920 for(i = 0; i < SIM_CSIM_ST_SERVICE_CNT_MAX; i++) {
921 g_variant_builder_add (&builder, "iy", svct->table.cst.cdma_svc_table,
922 svct->table.cst.service.csim_service[i]);
925 err("Invalid cdma_svc_table:[%d]", svct->table.cst.cdma_svc_table);
928 err("Unknown SIM type: [%d]", svct->sim_type);
930 inner_gv = g_variant_builder_end(&builder);
931 svct_gv = g_variant_new("v", inner_gv);
933 telephony_sim_complete_get_service_table (sim, invocation,
943 static gboolean on_sim_get_msisdn(TelephonySim *sim, GDBusMethodInvocation *invocation,
946 struct custom_data *ctx = user_data;
948 CoreObject *co_sim = NULL;
949 struct tel_sim_msisdn_list *msisdn_list = NULL;
950 gboolean read_from_modem = FALSE;
952 if (!check_access_control (invocation, AC_SIM, "r"))
955 DBUS_SIM_GET_COSIM(invocation, co_sim, ctx->server);
956 DBUS_SIM_CHECK_SIM_STATUS(GET_MSISDN, co_sim);
957 DBUS_SIM_CHECK_SIM_SERVICE_TABLE(GET_MSISDN, co_sim);
959 if(SIM_TYPE_NVSIM == tcore_sim_get_type(co_sim)) {
960 dbg("In NV SIM, don't use MSISDN cached");
961 read_from_modem = TRUE;
963 msisdn_list = tcore_sim_get_msisdn_list(co_sim);
965 read_from_modem = FALSE;
967 read_from_modem = TRUE;
970 if(read_from_modem) {
971 UserRequest *ur = NULL;
973 ur = MAKE_UR(ctx, sim, invocation);
974 dbg("Not cached. Request to modem");
975 tcore_user_request_set_command(ur, TREQ_SIM_GET_MSISDN);
977 ret = tcore_communicator_dispatch_request(ctx->comm, ur);
978 DBUS_SIM_CHECK_DISPATCH_RET(ret, invocation, ur);
983 dbg("TRESP_SIM_GET_MSISDN");
984 g_variant_builder_init(&b, G_VARIANT_TYPE("aa{sv}"));
986 dbg("msisdn_list->count = %d", msisdn_list->count);
987 for (i = 0;i < msisdn_list->count; i++) {
988 g_variant_builder_open(&b,G_VARIANT_TYPE("a{sv}"));
989 g_variant_builder_add(&b, "{sv}", "name", g_variant_new_string((const gchar *)msisdn_list->msisdn[i].name));
990 if (msisdn_list->msisdn[i].ton == SIM_TON_INTERNATIONAL) {
991 unsigned char *tmp = (unsigned char *)calloc(SIM_MSISDN_NUMBER_LEN_MAX + 1, 1);
994 strncpy((char *)tmp+1, (const char*)msisdn_list->msisdn[i].num, SIM_MSISDN_NUMBER_LEN_MAX - 1);
995 tmp[SIM_MSISDN_NUMBER_LEN_MAX] = '\0';
996 g_variant_builder_add(&b, "{sv}", "number", g_variant_new_string((const gchar *)tmp));
999 dbg("calloc failed.");
1000 g_variant_builder_add(&b, "{sv}", "number", g_variant_new_string((const gchar *)msisdn_list->msisdn[i].num));
1003 g_variant_builder_add(&b, "{sv}", "number", g_variant_new_string((const gchar *)msisdn_list->msisdn[i].num));
1005 g_variant_builder_close(&b);
1007 gv = g_variant_builder_end(&b);
1009 telephony_sim_complete_get_msisdn (sim, invocation, SIM_ACCESS_SUCCESS, gv);
1016 static gboolean on_sim_get_oplmnwact(TelephonySim *sim, GDBusMethodInvocation *invocation,
1019 struct custom_data *ctx = user_data;
1020 UserRequest *ur = NULL;
1022 CoreObject *co_sim = NULL;
1024 if (!check_access_control (invocation, AC_SIM, "r"))
1027 DBUS_SIM_GET_COSIM(invocation, co_sim, ctx->server);
1028 DBUS_SIM_CHECK_SIM_STATUS(GET_OPLMWACT, co_sim);
1030 ur = MAKE_UR(ctx, sim, invocation);
1032 tcore_user_request_set_command(ur, TREQ_SIM_GET_OPLMNWACT);
1033 ret = tcore_communicator_dispatch_request(ctx->comm, ur);
1034 if (ret != TCORE_RETURN_SUCCESS) {
1035 FAIL_RESPONSE (invocation, DEFAULT_MSG_REQ_FAILED);
1036 dbg("[ error ] tcore_communicator_dispatch_request() : (0x%x)", ret);
1037 tcore_user_request_unref(ur);
1043 static gboolean on_sim_get_spn(TelephonySim *sim, GDBusMethodInvocation *invocation,
1046 struct custom_data *ctx = user_data;
1047 UserRequest *ur = NULL;
1049 CoreObject *co_sim = NULL;
1050 struct tel_sim_spn* spn = NULL;
1052 if (!check_access_control (invocation, AC_SIM, "r"))
1055 DBUS_SIM_GET_COSIM(invocation, co_sim, ctx->server);
1056 DBUS_SIM_CHECK_SIM_STATUS(GET_SPN, co_sim);
1058 spn = tcore_sim_get_spn(co_sim);
1061 ur = MAKE_UR(ctx, sim, invocation);
1063 tcore_user_request_set_command(ur, TREQ_SIM_GET_SPN);
1064 ret = tcore_communicator_dispatch_request(ctx->comm, ur);
1066 if (ret != TCORE_RETURN_SUCCESS) {
1067 FAIL_RESPONSE (invocation, DEFAULT_MSG_REQ_FAILED);
1068 dbg("[ error ] tcore_communicator_dispatch_request() : (0x%x)", ret);
1069 tcore_user_request_unref(ur);
1072 telephony_sim_complete_get_spn (sim, invocation, SIM_ACCESS_SUCCESS,
1073 spn->display_condition, (const gchar *)spn->spn);
1079 static gboolean on_sim_get_cphs_netname(TelephonySim *sim, GDBusMethodInvocation *invocation,
1082 struct custom_data *ctx = user_data;
1083 UserRequest *ur = NULL;
1085 CoreObject *co_sim = NULL;
1086 struct tel_sim_cphs_netname *cphs_netname = NULL;
1088 if (!check_access_control (invocation, AC_SIM, "r"))
1091 DBUS_SIM_GET_COSIM(invocation, co_sim, ctx->server);
1092 DBUS_SIM_CHECK_SIM_STATUS(GET_CPHS_NET_NAME, co_sim);
1094 cphs_netname = tcore_sim_get_cphs_netname(co_sim);
1096 if (!cphs_netname) {
1097 ur = MAKE_UR(ctx, sim, invocation);
1099 tcore_user_request_set_command(ur, TREQ_SIM_GET_CPHS_NETNAME);
1100 ret = tcore_communicator_dispatch_request(ctx->comm, ur);
1101 if (ret != TCORE_RETURN_SUCCESS) {
1102 FAIL_RESPONSE (invocation, DEFAULT_MSG_REQ_FAILED);
1103 dbg("[ error ] tcore_communicator_dispatch_request() : (0x%x)", ret);
1104 tcore_user_request_unref(ur);
1107 telephony_sim_complete_get_cphs_net_name (sim, invocation, SIM_ACCESS_SUCCESS,
1108 (const gchar *)cphs_netname->full_name,
1109 (const gchar *)cphs_netname->short_name);
1116 static gboolean on_sim_get_gid(TelephonySim *sim, GDBusMethodInvocation *invocation,
1119 struct custom_data *ctx = user_data;
1120 UserRequest *ur = NULL;
1122 CoreObject *co_sim = NULL;
1124 if (!check_access_control (invocation, AC_SIM, "r"))
1127 DBUS_SIM_GET_COSIM(invocation, co_sim, ctx->server);
1128 DBUS_SIM_CHECK_SIM_STATUS(GET_GID, co_sim);
1130 ur = MAKE_UR(ctx, sim, invocation);
1132 tcore_user_request_set_command(ur, TREQ_SIM_GET_GID);
1133 ret = tcore_communicator_dispatch_request(ctx->comm, ur);
1134 if (ret != TCORE_RETURN_SUCCESS) {
1135 FAIL_RESPONSE (invocation, DEFAULT_MSG_REQ_FAILED);
1136 dbg("[ error ] tcore_communicator_dispatch_request() : (0x%x)", ret);
1137 tcore_user_request_unref(ur);
1143 static gboolean on_sim_authentication(TelephonySim *sim, GDBusMethodInvocation *invocation,
1149 struct custom_data *ctx = user_data;
1150 UserRequest *ur = NULL;
1151 GVariantIter *iter = NULL;
1152 GVariant *rand_gv = NULL;
1153 GVariant *autn_gv = NULL;
1157 CoreObject *co_sim = NULL;
1158 struct treq_sim_req_authentication req_auth;
1160 if (!check_access_control (invocation, AC_SIM, "x"))
1163 DBUS_SIM_GET_COSIM(invocation, co_sim, ctx->server);
1164 DBUS_SIM_CHECK_SIM_STATUS(AUTHENTICATION, co_sim);
1166 memset(&req_auth, 0, sizeof(struct treq_sim_req_authentication));
1168 req_auth.auth_type = arg_type;
1170 rand_gv = g_variant_get_variant(arg_rand);
1171 g_variant_get(rand_gv, "ay", &iter);
1172 while ( g_variant_iter_loop (iter, "y", &rt_i)) {
1173 req_auth.rand_data[i] = rt_i;
1176 req_auth.rand_length = (unsigned int)i;
1179 autn_gv = g_variant_get_variant(arg_autn);
1180 g_variant_get(autn_gv, "ay", &iter);
1181 while ( g_variant_iter_loop (iter, "y", &rt_i)) {
1182 req_auth.autn_data[i] = rt_i;
1185 req_auth.autn_length = (unsigned int)i;
1187 ur = MAKE_UR(ctx, sim, invocation);
1188 tcore_user_request_set_data(ur, sizeof(struct treq_sim_req_authentication), &req_auth);
1189 tcore_user_request_set_command(ur, TREQ_SIM_REQ_AUTHENTICATION);
1190 ret = tcore_communicator_dispatch_request(ctx->comm, ur);
1191 if (ret != TCORE_RETURN_SUCCESS) {
1192 GVariantBuilder builder;
1193 GVariant *ak = NULL;
1194 GVariant *cp = NULL;
1195 GVariant *it = NULL;
1196 GVariant *resp = NULL;
1197 GVariant *ak_gv = NULL;
1198 GVariant *cp_gv = NULL;
1199 GVariant *it_gv = NULL;
1200 GVariant *resp_gv = NULL;
1202 g_variant_builder_init (&builder, G_VARIANT_TYPE ("ay"));
1203 ak = g_variant_builder_end(&builder);
1204 ak_gv = g_variant_new("v", ak);
1206 g_variant_builder_init (&builder, G_VARIANT_TYPE ("ay"));
1207 cp = g_variant_builder_end(&builder);
1208 cp_gv = g_variant_new("v", cp);
1210 g_variant_builder_init (&builder, G_VARIANT_TYPE ("ay"));
1211 it = g_variant_builder_end(&builder);
1212 it_gv = g_variant_new("v", it);
1214 g_variant_builder_init (&builder, G_VARIANT_TYPE ("ay"));
1215 resp = g_variant_builder_end(&builder);
1216 resp_gv = g_variant_new("v", resp);
1218 telephony_sim_complete_authentication (sim, invocation, SIM_ACCESS_FAILED, 0, 0, ak_gv, cp_gv, it_gv, resp_gv);
1219 tcore_user_request_unref(ur);
1225 static gboolean on_sim_verify_sec(TelephonySim *sim, GDBusMethodInvocation *invocation,
1227 const gchar *arg_password,
1230 struct custom_data *ctx = user_data;
1231 UserRequest *ur = NULL;
1233 CoreObject *co_sim = NULL;
1234 struct treq_sim_verify_pins verify_pins;
1236 if (!check_access_control (invocation, AC_SIM, "x"))
1239 DBUS_SIM_GET_COSIM(invocation, co_sim, ctx->server);
1240 DBUS_SIM_CHECK_SIM_STATUS(VERIFY_SEC, co_sim);
1242 memset(&verify_pins, 0, sizeof(struct treq_sim_verify_pins));
1244 verify_pins.pin_type = arg_type;
1245 verify_pins.pin_length = strlen(arg_password);
1246 memcpy(verify_pins.pin, arg_password, verify_pins.pin_length);
1248 ur = MAKE_UR(ctx, sim, invocation);
1249 tcore_user_request_set_data(ur, sizeof(struct treq_sim_verify_pins), &verify_pins);
1250 tcore_user_request_set_command(ur, TREQ_SIM_VERIFY_PINS);
1251 ret = tcore_communicator_dispatch_request(ctx->comm, ur);
1252 if (ret != TCORE_RETURN_SUCCESS) {
1253 FAIL_RESPONSE (invocation, DEFAULT_MSG_REQ_FAILED);
1254 dbg("[ error ] tcore_communicator_dispatch_request() : (0x%x)", ret);
1255 tcore_user_request_unref(ur);
1261 static gboolean on_sim_verify_puk(TelephonySim *sim, GDBusMethodInvocation *invocation,
1263 const gchar *arg_puk,
1264 const gchar *arg_new_pin,
1267 struct custom_data *ctx = user_data;
1268 UserRequest *ur = NULL;
1270 CoreObject *co_sim = NULL;
1271 struct treq_sim_verify_puks verify_puks;
1273 if (!check_access_control (invocation, AC_SIM, "x"))
1276 DBUS_SIM_GET_COSIM(invocation, co_sim, ctx->server);
1277 DBUS_SIM_CHECK_SIM_STATUS(VERIFY_PUK, co_sim);
1279 memset(&verify_puks, 0, sizeof(struct treq_sim_verify_puks));
1281 verify_puks.puk_type = arg_type;
1282 verify_puks.puk_length = strlen(arg_puk);
1283 memcpy(verify_puks.puk, arg_puk, verify_puks.puk_length);
1284 verify_puks.pin_length = strlen(arg_new_pin);
1285 memcpy(verify_puks.pin, arg_new_pin, verify_puks.pin_length);
1287 ur = MAKE_UR(ctx, sim, invocation);
1288 tcore_user_request_set_data(ur, sizeof(struct treq_sim_verify_puks), &verify_puks);
1289 tcore_user_request_set_command(ur, TREQ_SIM_VERIFY_PUKS);
1290 ret = tcore_communicator_dispatch_request(ctx->comm, ur);
1291 if (ret != TCORE_RETURN_SUCCESS) {
1292 FAIL_RESPONSE (invocation, DEFAULT_MSG_REQ_FAILED);
1293 dbg("[ error ] tcore_communicator_dispatch_request() : (0x%x)", ret);
1294 tcore_user_request_unref(ur);
1300 static gboolean on_sim_change_pin(TelephonySim *sim, GDBusMethodInvocation *invocation,
1302 const gchar *arg_old_password,
1303 const gchar *arg_new_password,
1306 struct custom_data *ctx = user_data;
1307 UserRequest *ur = NULL;
1309 CoreObject *co_sim = NULL;
1310 struct treq_sim_change_pins change_pins;
1312 if (!check_access_control (invocation, AC_SIM, "x"))
1315 DBUS_SIM_GET_COSIM(invocation, co_sim, ctx->server);
1316 DBUS_SIM_CHECK_SIM_STATUS(CHANGE_PIN, co_sim);
1318 memset(&change_pins, 0, sizeof(struct treq_sim_change_pins));
1320 change_pins.type = arg_type;
1321 change_pins.old_pin_length = strlen(arg_old_password);
1322 memcpy(change_pins.old_pin, arg_old_password, change_pins.old_pin_length);
1323 change_pins.new_pin_length = strlen(arg_new_password);
1324 memcpy(change_pins.new_pin, arg_new_password, change_pins.new_pin_length);
1326 ur = MAKE_UR(ctx, sim, invocation);
1327 tcore_user_request_set_data(ur, sizeof(struct treq_sim_change_pins), &change_pins);
1328 tcore_user_request_set_command(ur, TREQ_SIM_CHANGE_PINS);
1329 ret = tcore_communicator_dispatch_request(ctx->comm, ur);
1330 if (ret != TCORE_RETURN_SUCCESS) {
1331 FAIL_RESPONSE (invocation, DEFAULT_MSG_REQ_FAILED);
1332 dbg("[ error ] tcore_communicator_dispatch_request() : (0x%x)", ret);
1333 tcore_user_request_unref(ur);
1339 static gboolean on_sim_disable_facility(TelephonySim *sim, GDBusMethodInvocation *invocation,
1341 const gchar *arg_password,
1344 struct custom_data *ctx = user_data;
1345 UserRequest *ur = NULL;
1347 struct treq_sim_disable_facility dis_facility;
1348 CoreObject *co_sim = NULL;
1350 if (!check_access_control (invocation, AC_SIM, "x"))
1353 DBUS_SIM_GET_COSIM(invocation, co_sim, ctx->server);
1354 DBUS_SIM_CHECK_SIM_STATUS(DISABLE_FACILITY, co_sim);
1356 memset(&dis_facility, 0, sizeof(struct treq_sim_disable_facility));
1358 dbg("arg_type[%d]", arg_type);
1361 dis_facility.type = SIM_FACILITY_PS;
1364 dis_facility.type = SIM_FACILITY_SC;
1367 dis_facility.type = SIM_FACILITY_FD;
1370 dis_facility.type = SIM_FACILITY_PN;
1373 dis_facility.type = SIM_FACILITY_PU;
1376 dis_facility.type = SIM_FACILITY_PP;
1379 dis_facility.type = SIM_FACILITY_PC;
1382 err("Unhandled/Unknown type[0x%x]", arg_type);
1385 dis_facility.password_length = strlen(arg_password);
1386 memcpy(dis_facility.password, arg_password, dis_facility.password_length);
1388 ur = MAKE_UR(ctx, sim, invocation);
1389 tcore_user_request_set_data(ur, sizeof(struct treq_sim_disable_facility), &dis_facility);
1390 tcore_user_request_set_command(ur, TREQ_SIM_DISABLE_FACILITY);
1391 ret = tcore_communicator_dispatch_request(ctx->comm, ur);
1392 if (ret != TCORE_RETURN_SUCCESS) {
1393 FAIL_RESPONSE (invocation, DEFAULT_MSG_REQ_FAILED);
1394 dbg("[ error ] tcore_communicator_dispatch_request() : (0x%x)", ret);
1395 tcore_user_request_unref(ur);
1401 static gboolean on_sim_enable_facility(TelephonySim *sim, GDBusMethodInvocation *invocation,
1403 const gchar *arg_password,
1406 struct custom_data *ctx = user_data;
1407 UserRequest *ur = NULL;
1409 struct treq_sim_enable_facility en_facility;
1410 CoreObject *co_sim = NULL;
1412 if (!check_access_control (invocation, AC_SIM, "x"))
1415 DBUS_SIM_GET_COSIM(invocation, co_sim, ctx->server);
1416 DBUS_SIM_CHECK_SIM_STATUS(ENABLE_FACILITY, co_sim);
1418 memset(&en_facility, 0, sizeof(struct treq_sim_enable_facility));
1420 dbg("arg_type[%d]", arg_type);
1423 en_facility.type = SIM_FACILITY_PS;
1426 en_facility.type = SIM_FACILITY_SC;
1429 en_facility.type = SIM_FACILITY_FD;
1432 en_facility.type = SIM_FACILITY_PN;
1435 en_facility.type = SIM_FACILITY_PU;
1438 en_facility.type = SIM_FACILITY_PP;
1441 en_facility.type = SIM_FACILITY_PC;
1444 err("Unhandled/Unknown type[0x%x]", arg_type);
1447 en_facility.password_length = strlen(arg_password);
1448 memcpy(en_facility.password, arg_password, en_facility.password_length);
1450 ur = MAKE_UR(ctx, sim, invocation);
1451 tcore_user_request_set_data(ur, sizeof(struct treq_sim_enable_facility), &en_facility);
1452 tcore_user_request_set_command(ur, TREQ_SIM_ENABLE_FACILITY);
1453 ret = tcore_communicator_dispatch_request(ctx->comm, ur);
1454 if (ret != TCORE_RETURN_SUCCESS) {
1455 FAIL_RESPONSE (invocation, DEFAULT_MSG_REQ_FAILED);
1456 dbg("[ error ] tcore_communicator_dispatch_request() : (0x%x)", ret);
1457 tcore_user_request_unref(ur);
1463 static gboolean on_sim_get_facility(TelephonySim *sim, GDBusMethodInvocation *invocation,
1467 struct custom_data *ctx = user_data;
1468 UserRequest *ur = NULL;
1470 struct treq_sim_get_facility_status facility;
1471 CoreObject *co_sim = NULL;
1473 if (!check_access_control (invocation, AC_SIM, "r"))
1476 DBUS_SIM_GET_COSIM(invocation, co_sim, ctx->server);
1477 DBUS_SIM_CHECK_SIM_STATUS(GET_FACILITY, co_sim);
1479 memset(&facility, 0, sizeof(struct treq_sim_get_facility_status));
1481 dbg("arg_type[%d]", arg_type);
1485 facility.type = SIM_FACILITY_PS;
1488 facility.type = SIM_FACILITY_SC;
1491 facility.type = SIM_FACILITY_FD;
1494 facility.type = SIM_FACILITY_PN;
1497 facility.type = SIM_FACILITY_PU;
1500 facility.type = SIM_FACILITY_PP;
1503 facility.type = SIM_FACILITY_PC;
1506 err("Unhandled/Unknown type[0x%x]", arg_type);
1510 ur = MAKE_UR(ctx, sim, invocation);
1511 tcore_user_request_set_data(ur, sizeof(struct treq_sim_get_facility_status), &facility);
1512 tcore_user_request_set_command(ur, TREQ_SIM_GET_FACILITY_STATUS);
1513 ret = tcore_communicator_dispatch_request(ctx->comm, ur);
1514 if (ret != TCORE_RETURN_SUCCESS) {
1515 FAIL_RESPONSE (invocation, DEFAULT_MSG_REQ_FAILED);
1516 dbg("[ error ] tcore_communicator_dispatch_request() : (0x%x)", ret);
1517 tcore_user_request_unref(ur);
1523 static gboolean on_sim_get_lock_info(TelephonySim *sim, GDBusMethodInvocation *invocation,
1527 struct custom_data *ctx = user_data;
1528 UserRequest *ur = NULL;
1530 CoreObject *co_sim = NULL;
1531 struct treq_sim_get_lock_info lock_info;
1533 if (!check_access_control (invocation, AC_SIM, "r"))
1536 DBUS_SIM_GET_COSIM(invocation, co_sim, ctx->server);
1537 DBUS_SIM_CHECK_SIM_STATUS(GET_LOCK_INFO, co_sim);
1539 memset(&lock_info, 0, sizeof(struct treq_sim_get_lock_info));
1541 dbg("arg_type[%d]", arg_type);
1544 lock_info.type = SIM_FACILITY_PS;
1547 lock_info.type = SIM_FACILITY_SC;
1550 lock_info.type = SIM_FACILITY_FD;
1553 lock_info.type = SIM_FACILITY_PN;
1556 lock_info.type = SIM_FACILITY_PU;
1559 lock_info.type = SIM_FACILITY_PP;
1562 lock_info.type = SIM_FACILITY_PC;
1565 err("Unhandled/Unknown type[0x%x]", arg_type);
1569 ur = MAKE_UR(ctx, sim, invocation);
1570 tcore_user_request_set_data(ur, sizeof(struct treq_sim_get_lock_info), &lock_info);
1571 tcore_user_request_set_command(ur, TREQ_SIM_GET_LOCK_INFO);
1572 ret = tcore_communicator_dispatch_request(ctx->comm, ur);
1573 if (ret != TCORE_RETURN_SUCCESS) {
1574 FAIL_RESPONSE (invocation, DEFAULT_MSG_REQ_FAILED);
1575 dbg("[ error ] tcore_communicator_dispatch_request() : (0x%x)", ret);
1576 tcore_user_request_unref(ur);
1582 static gboolean on_sim_transfer_apdu(TelephonySim *sim, GDBusMethodInvocation *invocation,
1586 struct custom_data *ctx = user_data;
1587 UserRequest *ur = NULL;
1588 struct treq_sim_transmit_apdu send_apdu;
1589 GVariantIter *iter = NULL;
1590 GVariant *inner_gv = NULL;
1593 CoreObject *co_sim = NULL;
1596 if (!check_access_control (invocation, AC_SIM, "x"))
1599 DBUS_SIM_GET_COSIM(invocation, co_sim, ctx->server);
1600 DBUS_SIM_CHECK_SIM_STATUS(TRANSFER_APDU, co_sim);
1602 memset(&send_apdu, 0, sizeof(struct treq_sim_transmit_apdu));
1604 inner_gv = g_variant_get_variant(arg_apdu);
1606 g_variant_get(inner_gv, "ay", &iter);
1607 while ( g_variant_iter_loop (iter, "y", &rt_i)) {
1608 send_apdu.apdu[i] = rt_i;
1611 send_apdu.apdu_length = (unsigned int)i;
1612 g_variant_iter_free(iter);
1613 g_variant_unref(inner_gv);
1614 g_variant_unref(arg_apdu);
1616 tcore_util_hex_dump("[APDU_REQ] ", send_apdu.apdu_length, send_apdu.apdu);
1618 ur = MAKE_UR(ctx, sim, invocation);
1619 tcore_user_request_set_data(ur, sizeof(struct treq_sim_transmit_apdu), &send_apdu);
1620 tcore_user_request_set_command(ur, TREQ_SIM_TRANSMIT_APDU);
1621 ret = tcore_communicator_dispatch_request(ctx->comm, ur);
1622 if (ret != TCORE_RETURN_SUCCESS) {
1623 FAIL_RESPONSE (invocation, DEFAULT_MSG_REQ_FAILED);
1624 dbg("[ error ] tcore_communicator_dispatch_request() : (0x%x)", ret);
1625 tcore_user_request_unref(ur);
1631 static gboolean on_sim_get_atr(TelephonySim *sim, GDBusMethodInvocation *invocation,
1634 struct custom_data *ctx = user_data;
1635 UserRequest *ur = NULL;
1637 CoreObject *co_sim = NULL;
1639 if (!check_access_control (invocation, AC_SIM, "r"))
1642 DBUS_SIM_GET_COSIM(invocation, co_sim, ctx->server);
1643 DBUS_SIM_CHECK_SIM_STATUS(GET_ATR, co_sim);
1645 ur = MAKE_UR(ctx, sim, invocation);
1647 tcore_user_request_set_command(ur, TREQ_SIM_GET_ATR);
1648 ret = tcore_communicator_dispatch_request(ctx->comm, ur);
1649 if (ret != TCORE_RETURN_SUCCESS) {
1650 FAIL_RESPONSE (invocation, DEFAULT_MSG_REQ_FAILED);
1651 dbg("[ error ] tcore_communicator_dispatch_request() : (0x%x)", ret);
1652 tcore_user_request_unref(ur);
1658 static gboolean on_sim_get_fields(TelephonySim *sim, GDBusMethodInvocation *invocation,
1661 struct custom_data *ctx = user_data;
1662 struct tel_sim_imsi *n_imsi = NULL;
1663 //struct tel_sim_msisdn_list *msisdn_list = NULL;
1664 //struct tel_sim_iccid *iccid = NULL;
1665 //struct tel_sim_spn *spn= NULL;
1666 CoreObject *co_sim = NULL;
1668 GVariant *gv_fields = NULL;
1670 dbg("Func Entrance");
1672 if (!check_access_control (invocation, AC_SIM, "r"))
1675 DBUS_SIM_GET_COSIM(invocation, co_sim, ctx->server);
1677 g_variant_builder_init(&b, G_VARIANT_TYPE("a{svv}}"));
1679 DBUS_SIM_CHECK_SIM_STATUS(GET_IMSI, co_sim);
1681 n_imsi = tcore_sim_get_imsi(co_sim);
1682 if (n_imsi != NULL) {
1683 g_variant_builder_add(&b, "{svv}", "imsi", g_variant_new_string("plmn"), g_variant_new_string(n_imsi->plmn));
1684 g_variant_builder_add(&b, "{svv}", "imsi", g_variant_new_string("msin"), g_variant_new_string(n_imsi->msin));
1688 DBUS_SIM_CHECK_SIM_STATUS(GET_ICCID, co_sim);
1689 //n_imsi = tcore_sim_get_imsi(co_sim);
1690 //if (n_imsi != NULL) {
1691 g_variant_builder_add(&b, "{svv}", "iccid", g_variant_new_string(""), g_variant_new_string(""));
1695 DBUS_SIM_CHECK_SIM_STATUS(GET_MSISDN, co_sim);
1696 g_variant_builder_add(&b, "{svv}", "msisdn", g_variant_new_string("name"), g_variant_new_string("number"));
1698 DBUS_SIM_CHECK_SIM_STATUS(GET_SPN, co_sim);
1699 g_variant_builder_add(&b, "{svv}", "spn", g_variant_new_uint16(255), g_variant_new_string("network name"));
1701 DBUS_SIM_CHECK_SIM_STATUS(GET_INIT_STATUS, co_sim);
1702 g_variant_builder_add(&b, "{svv}", "init_status", g_variant_new_uint16(0), g_variant_new_boolean(TRUE));
1704 gv_fields = g_variant_builder_end(&b);
1706 telephony_sim_complete_get_fields(sim, invocation, 0, gv_fields);
1711 static gboolean on_sim_set_power_state(TelephonySim *sim, GDBusMethodInvocation *invocation,
1712 gint arg_state, gpointer user_data)
1714 struct custom_data *ctx = user_data;
1715 UserRequest *ur = NULL;
1717 CoreObject *co_sim = NULL;
1718 struct treq_sim_set_powerstate set_powerstate;
1720 if (!check_access_control (invocation, AC_SIM, "w"))
1723 DBUS_SIM_GET_COSIM(invocation, co_sim, ctx->server);
1724 DBUS_SIM_CHECK_SIM_STATUS(SET_POWERSTATE, co_sim);
1726 memset(&set_powerstate, 0, sizeof(struct treq_sim_set_powerstate));
1727 set_powerstate.state = arg_state;
1729 dbg("set_powerstate.state[%d]", set_powerstate.state);
1730 ur = MAKE_UR(ctx, sim, invocation);
1732 tcore_user_request_set_data(ur, sizeof(struct treq_sim_set_powerstate), &set_powerstate);
1733 tcore_user_request_set_command(ur, TREQ_SIM_SET_POWERSTATE);
1734 ret = tcore_communicator_dispatch_request(ctx->comm, ur);
1735 if (ret != TCORE_RETURN_SUCCESS) {
1736 FAIL_RESPONSE (invocation, DEFAULT_MSG_REQ_FAILED);
1737 dbg("[ error ] tcore_communicator_dispatch_request() : (0x%x)", ret);
1738 tcore_user_request_unref(ur);
1744 gboolean dbus_plugin_setup_sim_interface(TelephonyObjectSkeleton *object, struct custom_data *ctx)
1748 sim = telephony_sim_skeleton_new();
1749 telephony_object_skeleton_set_sim(object, sim);
1750 g_object_unref(sim);
1752 dbg("sim: [%p]", sim);
1754 telephony_sim_set_cf_state(sim, FALSE);
1756 g_signal_connect (sim,
1757 "handle-get-init-status",
1758 G_CALLBACK (on_sim_get_init_status),
1761 g_signal_connect (sim,
1762 "handle-get-card-type",
1763 G_CALLBACK (on_sim_get_card_type),
1766 g_signal_connect (sim,
1768 G_CALLBACK (on_sim_get_imsi),
1771 g_signal_connect (sim,
1773 G_CALLBACK (on_sim_get_ecc),
1776 g_signal_connect (sim,
1778 G_CALLBACK (on_sim_get_iccid),
1781 g_signal_connect (sim,
1782 "handle-get-language",
1783 G_CALLBACK (on_sim_get_language),
1786 g_signal_connect (sim,
1787 "handle-set-language",
1788 G_CALLBACK (on_sim_set_language),
1791 g_signal_connect (sim,
1792 "handle-get-call-forwarding",
1793 G_CALLBACK (on_sim_get_call_forwarding),
1796 g_signal_connect (sim,
1797 "handle-set-call-forwarding",
1798 G_CALLBACK (on_sim_set_call_forwarding),
1801 g_signal_connect (sim,
1802 "handle-get-message-waiting",
1803 G_CALLBACK (on_sim_get_message_waiting),
1806 g_signal_connect (sim,
1807 "handle-set-message-waiting",
1808 G_CALLBACK (on_sim_set_message_waiting),
1811 g_signal_connect (sim,
1812 "handle-get-mailbox",
1813 G_CALLBACK (on_sim_get_mailbox),
1816 g_signal_connect (sim,
1817 "handle-set-mailbox",
1818 G_CALLBACK (on_sim_set_mailbox),
1821 g_signal_connect (sim,
1822 "handle-get-cphsinfo",
1823 G_CALLBACK (on_sim_get_cphsinfo),
1826 g_signal_connect (sim,
1827 "handle-get-service-table",
1828 G_CALLBACK (on_sim_get_service_table),
1831 g_signal_connect (sim,
1832 "handle-get-msisdn",
1833 G_CALLBACK (on_sim_get_msisdn),
1836 g_signal_connect (sim,
1837 "handle-get-oplmnwact",
1838 G_CALLBACK (on_sim_get_oplmnwact),
1841 g_signal_connect (sim,
1843 G_CALLBACK (on_sim_get_spn),
1846 g_signal_connect (sim,
1847 "handle-get-cphs-net-name",
1848 G_CALLBACK (on_sim_get_cphs_netname),
1851 g_signal_connect (sim,
1853 G_CALLBACK (on_sim_get_gid),
1856 g_signal_connect (sim,
1857 "handle-authentication",
1858 G_CALLBACK (on_sim_authentication),
1861 g_signal_connect (sim,
1862 "handle-verify-sec",
1863 G_CALLBACK (on_sim_verify_sec),
1866 g_signal_connect (sim,
1867 "handle-verify-puk",
1868 G_CALLBACK (on_sim_verify_puk),
1871 g_signal_connect (sim,
1872 "handle-change-pin",
1873 G_CALLBACK (on_sim_change_pin),
1876 g_signal_connect (sim,
1877 "handle-disable-facility",
1878 G_CALLBACK (on_sim_disable_facility),
1881 g_signal_connect (sim,
1882 "handle-enable-facility",
1883 G_CALLBACK (on_sim_enable_facility),
1886 g_signal_connect (sim,
1887 "handle-get-facility",
1888 G_CALLBACK (on_sim_get_facility),
1891 g_signal_connect (sim,
1892 "handle-get-lock-info",
1893 G_CALLBACK (on_sim_get_lock_info),
1896 g_signal_connect (sim,
1897 "handle-transfer-apdu",
1898 G_CALLBACK (on_sim_transfer_apdu),
1901 g_signal_connect (sim,
1903 G_CALLBACK (on_sim_get_atr),
1906 g_signal_connect (sim,
1907 "handle-get-fields",
1908 G_CALLBACK (on_sim_get_fields),
1911 g_signal_connect (sim,
1912 "handle-set-powerstate",
1913 G_CALLBACK (on_sim_set_power_state),
1919 gboolean dbus_plugin_sim_response(struct custom_data *ctx, UserRequest *ur,
1920 struct dbus_request_info *dbus_info, enum tcore_response_command command,
1921 unsigned int data_len, const void *data)
1923 dbg("Response!!! Command: [0x%x] CP Name: [%s]",
1924 command, GET_CP_NAME(dbus_info->invocation));
1927 case TRESP_SIM_GET_ECC: {
1928 const struct tresp_sim_read *resp_read = data;
1929 CoreObject *co_sim = NULL;
1930 GVariant *gv = NULL;
1934 dbg("TRESP_SIM_GET_ECC - Result: [%s])",
1935 (resp_read->result == SIM_ACCESS_SUCCESS ? "Success" : "Fail"));
1937 co_sim = __get_sim_co_from_ur(ctx->server, ur);
1939 err("SIM Core object is NULL");
1943 if (resp_read->result == SIM_ACCESS_SUCCESS) {
1944 tcore_sim_set_ecc_list(co_sim, &resp_read->data.ecc);
1945 } else if (resp_read->result == SIM_ACCESS_FILE_NOT_FOUND) {
1946 tcore_sim_set_ecc_list(co_sim, NULL);
1949 g_variant_builder_init(&b, G_VARIANT_TYPE("aa{sv}"));
1950 for (i = 0; i < resp_read->data.ecc.ecc_count; i++) {
1951 dbg("ecc[%d] : ecc_category=[0x%x], ecc_num=[%s], ecc_string=[%s]", i,
1952 resp_read->data.ecc.ecc[i].ecc_category,
1953 resp_read->data.ecc.ecc[i].ecc_num,
1954 resp_read->data.ecc.ecc[i].ecc_string);
1956 g_variant_builder_open(&b, G_VARIANT_TYPE("a{sv}"));
1957 g_variant_builder_add(&b, "{sv}", "category", g_variant_new_int32(resp_read->data.ecc.ecc[i].ecc_category));
1958 g_variant_builder_add(&b, "{sv}", "number", g_variant_new_string(resp_read->data.ecc.ecc[i].ecc_num));
1959 g_variant_builder_add(&b, "{sv}", "name", g_variant_new_string(resp_read->data.ecc.ecc[i].ecc_string));
1960 g_variant_builder_close(&b);
1962 gv = g_variant_builder_end(&b);
1964 telephony_sim_complete_get_ecc (dbus_info->interface_object, dbus_info->invocation, gv);
1968 case TRESP_SIM_GET_ICCID: {
1969 const struct tresp_sim_read *resp_read = data;
1970 CoreObject *co_sim = NULL;
1972 dbg("TRESP_SIM_GET_ICCID - Result: [%s] ICCID: [%s])",
1973 (resp_read->result == SIM_ACCESS_SUCCESS ? "Success" : "Fail"),
1974 resp_read->data.iccid.iccid);
1976 co_sim = __get_sim_co_from_ur(ctx->server, ur);
1978 err("SIM Core object is NULL");
1982 if (resp_read->result == SIM_ACCESS_SUCCESS) {
1983 tcore_sim_set_iccid(co_sim, &resp_read->data.iccid);
1984 } else if (resp_read->result == SIM_ACCESS_FILE_NOT_FOUND) {
1985 tcore_sim_set_iccid(co_sim, NULL);
1988 telephony_sim_complete_get_iccid(dbus_info->interface_object, dbus_info->invocation,
1990 resp_read->data.iccid.iccid);
1994 case TRESP_SIM_GET_LANGUAGE: {
1995 const struct tresp_sim_read *resp_read = data;
1997 dbg("TRESP_SIM_GET_LANGUAGE - Result: [%s] Language: [0x%2x]",
1998 (resp_read->result == SIM_ACCESS_SUCCESS ? "Success" : "Fail"),
1999 resp_read->data.language.language[0]);
2001 telephony_sim_complete_get_language(dbus_info->interface_object, dbus_info->invocation,
2003 resp_read->data.language.language[0]);
2007 case TRESP_SIM_SET_LANGUAGE: {
2008 const struct tresp_sim_set_data *resp_set_data = data;
2010 dbg("TRESP_SIM_SET_LANGUAGE - Result: [%s]",
2011 (resp_set_data->result == SIM_ACCESS_SUCCESS ? "Success" : "Fail"));
2013 telephony_sim_complete_set_language(dbus_info->interface_object, dbus_info->invocation,
2014 resp_set_data->result);
2018 case TRESP_SIM_GET_CALLFORWARDING: {
2019 const struct tresp_sim_read *resp_read = data;
2020 GVariant *gv_cf = NULL;
2021 GVariant *gv_cphs_cf = NULL;
2024 dbg("TRESP_SIM_GET_CALLFORWARDING - Result: [%s] CPHS: [%s]",
2025 (resp_read->result == SIM_ACCESS_SUCCESS ? "Success" : "Fail"),
2026 (resp_read->data.cf.b_cphs ? "Yes" : "No"));
2028 if (resp_read->data.cf.b_cphs) {
2029 dbg("b_line1[%d], b_line2[%d], b_fax[%d], b_data[%d]",
2030 resp_read->data.cf.cphs_cf.b_line1, resp_read->data.cf.cphs_cf.b_line2,
2031 resp_read->data.cf.cphs_cf.b_fax, resp_read->data.cf.cphs_cf.b_data);
2033 g_variant_builder_init(&b, G_VARIANT_TYPE("a{sv}"));
2034 g_variant_builder_add(&b, "{sv}", "b_line1", g_variant_new_boolean(resp_read->data.cf.cphs_cf.b_line1));
2035 g_variant_builder_add(&b, "{sv}", "b_line2", g_variant_new_boolean(resp_read->data.cf.cphs_cf.b_line2));
2036 g_variant_builder_add(&b, "{sv}", "b_fax", g_variant_new_boolean(resp_read->data.cf.cphs_cf.b_fax));
2037 g_variant_builder_add(&b, "{sv}", "b_data", g_variant_new_boolean(resp_read->data.cf.cphs_cf.b_data));
2038 gv_cphs_cf = g_variant_builder_end(&b);
2040 g_variant_builder_init(&b, G_VARIANT_TYPE("aa{sv}"));
2041 gv_cf = g_variant_builder_end(&b);
2046 dbg("profile_count[%d]",resp_read->data.cf.cf_list.profile_count);
2048 g_variant_builder_init(&b, G_VARIANT_TYPE("aa{sv}"));
2049 for (i = 0; i < resp_read->data.cf.cf_list.profile_count; i++) {
2050 dbg("[%d] : rec_index[0x%x], msp_num[0x%x], cfu_status[0x%x], "
2051 "cfu_num[%s], ton[0x%x], npi[0x%x], cc2_id[0x%x], ext7_id[0x%x]",
2052 i, resp_read->data.cf.cf_list.cf[i].rec_index, resp_read->data.cf.cf_list.cf[i].msp_num,
2053 resp_read->data.cf.cf_list.cf[i].cfu_status, resp_read->data.cf.cf_list.cf[i].cfu_num,
2054 resp_read->data.cf.cf_list.cf[i].ton, resp_read->data.cf.cf_list.cf[i].npi,
2055 resp_read->data.cf.cf_list.cf[i].cc2_id, resp_read->data.cf.cf_list.cf[i].ext7_id);
2057 g_variant_builder_open(&b, G_VARIANT_TYPE("a{sv}"));
2058 g_variant_builder_add(&b, "{sv}", "rec_index", g_variant_new_int32(resp_read->data.cf.cf_list.cf[i].rec_index));
2059 g_variant_builder_add(&b, "{sv}", "msp_num", g_variant_new_byte(resp_read->data.cf.cf_list.cf[i].msp_num));
2060 g_variant_builder_add(&b, "{sv}", "cfu_status", g_variant_new_byte(resp_read->data.cf.cf_list.cf[i].cfu_status));
2061 g_variant_builder_add(&b, "{sv}", "cfu_num", g_variant_new_string(resp_read->data.cf.cf_list.cf[i].cfu_num));
2062 g_variant_builder_add(&b, "{sv}", "ton", g_variant_new_int32(resp_read->data.cf.cf_list.cf[i].ton));
2063 g_variant_builder_add(&b, "{sv}", "npi", g_variant_new_int32(resp_read->data.cf.cf_list.cf[i].npi));
2064 g_variant_builder_add(&b, "{sv}", "cc2_id", g_variant_new_byte(resp_read->data.cf.cf_list.cf[i].cc2_id));
2065 g_variant_builder_add(&b, "{sv}", "ext7_id", g_variant_new_byte(resp_read->data.cf.cf_list.cf[i].ext7_id));
2066 g_variant_builder_close(&b);
2068 gv_cf = g_variant_builder_end(&b);
2070 g_variant_builder_init(&b, G_VARIANT_TYPE("a{sv}"));
2071 gv_cphs_cf = g_variant_builder_end(&b);
2074 telephony_sim_complete_get_call_forwarding (dbus_info->interface_object, dbus_info->invocation,
2076 resp_read->data.cf.b_cphs,
2082 case TRESP_SIM_SET_CALLFORWARDING: {
2083 const struct tresp_sim_set_data *resp_set_data = data;
2085 dbg("TRESP_SIM_SET_CALLFORWARDING - Result: [%s]",
2086 (resp_set_data->result == SIM_ACCESS_SUCCESS ? "Success" : "Fail"));
2088 telephony_sim_complete_set_call_forwarding(dbus_info->interface_object, dbus_info->invocation,
2089 resp_set_data->result);
2093 case TRESP_SIM_GET_MESSAGEWAITING: {
2094 const struct tresp_sim_read *resp_read = data;
2095 GVariant *gv_mw = NULL;
2096 GVariant *gv_cphs_mw = NULL;
2099 dbg("TRESP_SIM_GET_MESSAGEWAITING - Result: [%s] CPHS: [%s]",
2100 (resp_read->result == SIM_ACCESS_SUCCESS ? "Success" : "Fail"),
2101 (resp_read->data.mw.b_cphs ? "Yes" : "No"));
2103 if (resp_read->data.mw.b_cphs) {
2104 dbg("b_voice1[%d], b_voice2[%d], b_fax[%d], b_data[%d]",
2105 resp_read->data.mw.cphs_mw.b_voice1, resp_read->data.mw.cphs_mw.b_voice2,
2106 resp_read->data.mw.cphs_mw.b_fax, resp_read->data.mw.cphs_mw.b_data);
2108 g_variant_builder_init(&b, G_VARIANT_TYPE("a{sv}"));
2109 g_variant_builder_add(&b, "{sv}", "b_voice1", g_variant_new_boolean(resp_read->data.mw.cphs_mw.b_voice1));
2110 g_variant_builder_add(&b, "{sv}", "b_voice2", g_variant_new_boolean(resp_read->data.mw.cphs_mw.b_voice2));
2111 g_variant_builder_add(&b, "{sv}", "b_fax", g_variant_new_boolean(resp_read->data.mw.cphs_mw.b_fax));
2112 g_variant_builder_add(&b, "{sv}", "b_data", g_variant_new_boolean(resp_read->data.mw.cphs_mw.b_data));
2113 gv_cphs_mw = g_variant_builder_end(&b);
2115 g_variant_builder_init(&b, G_VARIANT_TYPE("aa{sv}"));
2116 gv_mw = g_variant_builder_end(&b);
2121 dbg("profile_count[%d]", resp_read->data.mw.mw_list.profile_count);
2123 g_variant_builder_init(&b, G_VARIANT_TYPE("aa{sv}"));
2124 for (i = 0; i <resp_read->data.mw.mw_list.profile_count; i++) {
2125 dbg("[%d] : rec_index[0x%x], indicator_status[0x%x], voice_count[0x%x], "
2126 "fax_count[0x%x] email_count[0x%x], other_count[0x%x], video_count[0x%x]",
2127 i, resp_read->data.mw.mw_list.mw[i].rec_index, resp_read->data.mw.mw_list.mw[i].indicator_status,
2128 resp_read->data.mw.mw_list.mw[i].voice_count, resp_read->data.mw.mw_list.mw[i].fax_count,
2129 resp_read->data.mw.mw_list.mw[i].email_count, resp_read->data.mw.mw_list.mw[i].other_count,
2130 resp_read->data.mw.mw_list.mw[i].video_count);
2132 g_variant_builder_open(&b, G_VARIANT_TYPE("a{sv}"));
2133 g_variant_builder_add(&b,"{sv}", "rec_index", g_variant_new_int32( resp_read->data.mw.mw_list.mw[i].rec_index));
2134 g_variant_builder_add(&b, "{sv}", "indicator_status", g_variant_new_byte(resp_read->data.mw.mw_list.mw[i].indicator_status));
2135 g_variant_builder_add(&b,"{sv}", "voice_count", g_variant_new_int32(resp_read->data.mw.mw_list.mw[i].voice_count));
2136 g_variant_builder_add(&b,"{sv}", "fax_count", g_variant_new_int32(resp_read->data.mw.mw_list.mw[i].fax_count));
2137 g_variant_builder_add(&b, "{sv}", "email_count", g_variant_new_int32(resp_read->data.mw.mw_list.mw[i].email_count));
2138 g_variant_builder_add(&b, "{sv}", "other_count", g_variant_new_int32(resp_read->data.mw.mw_list.mw[i].other_count));
2139 g_variant_builder_add(&b, "{sv}", "video_count", g_variant_new_int32(resp_read->data.mw.mw_list.mw[i].video_count));
2140 g_variant_builder_close(&b);
2142 gv_mw = g_variant_builder_end(&b);
2143 g_variant_builder_init(&b, G_VARIANT_TYPE("a{sv}"));
2144 gv_cphs_mw = g_variant_builder_end(&b);
2147 telephony_sim_complete_get_message_waiting(dbus_info->interface_object, dbus_info->invocation,
2149 resp_read->data.mw.b_cphs,
2155 case TRESP_SIM_SET_MESSAGEWAITING: {
2156 const struct tresp_sim_set_data *resp_set_data = data;
2158 dbg("TRESP_SIM_SET_MESSAGEWAITING - Result: [%s]",
2159 (resp_set_data->result == SIM_ACCESS_SUCCESS ? "Success" : "Fail"));
2161 telephony_sim_complete_set_message_waiting(dbus_info->interface_object, dbus_info->invocation,
2162 resp_set_data->result);
2166 case TRESP_SIM_GET_MAILBOX: {
2167 const struct tresp_sim_read *resp_read = data;
2168 GVariant *gv = NULL;
2172 dbg("TRESP_SIM_GET_MAILBOX - Result: [%s] CPHS: [%s] Count: [%d])",
2173 (resp_read->result == SIM_ACCESS_SUCCESS ? "Success" : "Fail"),
2174 (resp_read->data.mb.b_cphs ? "Yes" : "No"),
2175 resp_read->data.mb.count);
2177 g_variant_builder_init(&b, G_VARIANT_TYPE("aa{sv}"));
2178 for (i =0; i < resp_read->data.mb.count; i++) {
2179 dbg("resp_read->data.mb.mb[%d] : "
2180 "rec_index[%d], profile_number[%d], mb_type[%d], alpha_id_max_len[%d]"
2181 "alpha_id[%s], ton[%d], npi[%d], num[%s], cc_id[%d], ext1_id[%d]",
2182 i, resp_read->data.mb.mb[i].rec_index, resp_read->data.mb.mb[i].profile_number,
2183 resp_read->data.mb.mb[i].mb_type, resp_read->data.mb.mb[i].number_info.alpha_id_max_len,
2184 resp_read->data.mb.mb[i].number_info.alpha_id, resp_read->data.mb.mb[i].number_info.ton,
2185 resp_read->data.mb.mb[i].number_info.npi, resp_read->data.mb.mb[i].number_info.num,
2186 resp_read->data.mb.mb[i].number_info.cc_id, resp_read->data.mb.mb[i].number_info.ext1_id);
2188 g_variant_builder_open(&b, G_VARIANT_TYPE("a{sv}"));
2189 g_variant_builder_add(&b, "{sv}", "rec_index", g_variant_new_int32(resp_read->data.mb.mb[i].rec_index));
2190 g_variant_builder_add(&b, "{sv}", "profile_num", g_variant_new_int32(resp_read->data.mb.mb[i].profile_number));
2191 g_variant_builder_add(&b, "{sv}", "mb_type", g_variant_new_int32(resp_read->data.mb.mb[i].mb_type));
2192 g_variant_builder_add(&b, "{sv}", "alpha_id_max_len", g_variant_new_int32(resp_read->data.mb.mb[i].number_info.alpha_id_max_len));
2193 g_variant_builder_add(&b, "{sv}", "alpha_id", g_variant_new_string(resp_read->data.mb.mb[i].number_info.alpha_id));
2194 g_variant_builder_add(&b, "{sv}", "ton", g_variant_new_int32(resp_read->data.mb.mb[i].number_info.ton));
2195 g_variant_builder_add(&b, "{sv}", "npi", g_variant_new_int32(resp_read->data.mb.mb[i].number_info.npi));
2196 g_variant_builder_add(&b, "{sv}", "num", g_variant_new_string(resp_read->data.mb.mb[i].number_info.num));
2197 g_variant_builder_add(&b, "{sv}", "cc_id", g_variant_new_byte(resp_read->data.mb.mb[i].number_info.cc_id));
2198 g_variant_builder_add(&b, "{sv}", "ext1_id", g_variant_new_byte(resp_read->data.mb.mb[i].number_info.ext1_id));
2199 g_variant_builder_close(&b);
2202 gv = g_variant_builder_end(&b);
2204 telephony_sim_complete_get_mailbox (dbus_info->interface_object, dbus_info->invocation,
2206 resp_read->data.mb.b_cphs,
2211 case TRESP_SIM_SET_MAILBOX: {
2212 const struct tresp_sim_set_data *resp_set_data = data;
2214 dbg("TRESP_SIM_SET_MAILBOX - Result: [%s]",
2215 (resp_set_data->result == SIM_ACCESS_SUCCESS ? "Success" : "Fail"));
2217 telephony_sim_complete_set_mailbox(dbus_info->interface_object, dbus_info->invocation,
2218 resp_set_data->result);
2222 case TRESP_SIM_GET_CPHS_INFO: {
2223 const struct tresp_sim_read *resp_read = data;
2225 dbg("TRESP_SIM_GET_CPHS_INFO - Result: [%s]",
2226 (resp_read->result == SIM_ACCESS_SUCCESS ? "Success" : "Fail"));
2228 telephony_sim_complete_get_cphsinfo (dbus_info->interface_object, dbus_info->invocation,
2230 resp_read->data.cphs.CphsPhase,
2231 resp_read->data.cphs.CphsServiceTable.bOperatorNameShortForm,
2232 resp_read->data.cphs.CphsServiceTable.bMailBoxNumbers,
2233 resp_read->data.cphs.CphsServiceTable.bServiceStringTable,
2234 resp_read->data.cphs.CphsServiceTable.bCustomerServiceProfile,
2235 resp_read->data.cphs.CphsServiceTable.bInformationNumbers);
2239 case TRESP_SIM_GET_SERVICE_TABLE: {
2240 const struct tresp_sim_read *resp_read = data;
2241 CoreObject *co_sim = NULL;
2242 GVariantBuilder builder;
2243 GVariant * inner_gv = NULL;
2244 GVariant *svct_gv = NULL;
2247 dbg("TRESP_SIM_GET_SERVICE_TABLE - Result: [%s]",
2248 (resp_read->result == SIM_ACCESS_SUCCESS ? "Success" : "Fail"));
2250 co_sim = __get_sim_co_from_ur(ctx->server, ur);
2252 err("SIM Core object is NULL");
2256 if (resp_read->result == SIM_ACCESS_SUCCESS) {
2257 tcore_sim_set_service_table(co_sim, &resp_read->data.svct);
2258 } else if (resp_read->result == SIM_ACCESS_FILE_NOT_FOUND) {
2259 tcore_sim_set_service_table(co_sim, NULL);
2262 g_variant_builder_init (&builder, G_VARIANT_TYPE ("ay"));
2264 if (resp_read->data.svct.sim_type == SIM_TYPE_GSM) {
2265 for (i = 0; i < SIM_SST_SERVICE_CNT_MAX; i++) {
2266 g_variant_builder_add (&builder, "y", resp_read->data.svct.table.sst.service[i]);
2268 } else if (resp_read->data.svct.sim_type == SIM_TYPE_USIM) {
2269 for (i = 0; i < SIM_UST_SERVICE_CNT_MAX; i++) {
2270 g_variant_builder_add (&builder, "y", resp_read->data.svct.table.ust.service[i]);
2272 } else if(resp_read->data.svct.sim_type == SIM_TYPE_RUIM) {
2273 if(SIM_CDMA_SVC_TABLE == resp_read->data.svct.table.cst.cdma_svc_table) {
2274 for(i = 0; i < SIM_CDMA_ST_SERVICE_CNT_MAX; i++) {
2275 g_variant_builder_add (&builder, "iy", resp_read->data.svct.table.cst.cdma_svc_table,
2276 resp_read->data.svct.table.cst.service.cdma_service[i]);
2278 } else if(SIM_CSIM_SVC_TABLE == resp_read->data.svct.table.cst.cdma_svc_table) {
2279 for(i = 0; i < SIM_CSIM_ST_SERVICE_CNT_MAX; i++) {
2280 g_variant_builder_add (&builder, "iy", resp_read->data.svct.table.cst.cdma_svc_table,
2281 resp_read->data.svct.table.cst.service.csim_service[i]);
2284 err("Invalid cdma_svc_table:[%d]", resp_read->data.svct.table.cst.cdma_svc_table);
2287 dbg("unknown sim type.");
2289 inner_gv = g_variant_builder_end(&builder);
2290 svct_gv = g_variant_new("v", inner_gv);
2292 telephony_sim_complete_get_service_table (dbus_info->interface_object, dbus_info->invocation,
2294 resp_read->data.svct.sim_type,
2298 case TRESP_SIM_GET_SPN: {
2299 const struct tresp_sim_read *resp_read = data;
2300 CoreObject *co_sim = NULL;
2302 dbg("TRESP_SIM_GET_SPN - Result: [%s] Display condition: [%d] SPN: [%s]",
2303 (resp_read->result == SIM_ACCESS_SUCCESS ? "Success" : "Fail"),
2304 resp_read->data.spn.display_condition, (const gchar *)resp_read->data.spn.spn);
2306 co_sim = __get_sim_co_from_ur(ctx->server, ur);
2308 err("SIM Core object is NULL");
2312 if (resp_read->result == SIM_ACCESS_SUCCESS) {
2313 tcore_sim_set_spn(co_sim, &resp_read->data.spn);
2314 } else if (resp_read->result == SIM_ACCESS_FILE_NOT_FOUND) {
2315 tcore_sim_set_spn(co_sim, NULL);
2318 telephony_sim_complete_get_spn (dbus_info->interface_object, dbus_info->invocation,
2320 resp_read->data.spn.display_condition, (const gchar *)resp_read->data.spn.spn);
2324 case TRESP_SIM_GET_CPHS_NETNAME: {
2325 const struct tresp_sim_read *resp_read = data;
2326 CoreObject *co_sim = NULL;
2328 dbg("TRESP_SIM_GET_CPHS_NETNAME - Result: [%s]",
2329 (resp_read->result == SIM_ACCESS_SUCCESS ? "Success" : "Fail"));
2331 co_sim = __get_sim_co_from_ur(ctx->server, ur);
2333 err("SIM Core object is NULL");
2337 if (resp_read->result == SIM_ACCESS_SUCCESS) {
2338 tcore_sim_set_cphs_netname(co_sim, &resp_read->data.cphs_net);
2339 } else if (resp_read->result == SIM_ACCESS_FILE_NOT_FOUND) {
2340 tcore_sim_set_cphs_netname(co_sim, NULL);
2343 telephony_sim_complete_get_cphs_net_name (dbus_info->interface_object, dbus_info->invocation,
2345 (const gchar *)resp_read->data.cphs_net.full_name, (const gchar *)resp_read->data.cphs_net.short_name);
2349 case TRESP_SIM_GET_GID: {
2350 const struct tresp_sim_read *resp_read = data;
2351 GVariantBuilder *builder = NULL;
2352 GVariant * inner_gv = NULL;
2353 GVariant *gid_gv = NULL;
2356 dbg("TRESP_SIM_GET_GID - Result: [%s]",
2357 (resp_read->result == SIM_ACCESS_SUCCESS ? "Success" : "Fail"));
2359 builder = g_variant_builder_new (G_VARIANT_TYPE ("ay"));
2361 for(i = 0; i < resp_read->data.gid.GroupIdentifierLen; i++) {
2362 g_variant_builder_add (builder, "y", resp_read->data.gid.szGroupIdentifier[i]);
2364 inner_gv = g_variant_builder_end(builder);
2365 gid_gv = g_variant_new("v", inner_gv);
2367 telephony_sim_complete_get_gid (dbus_info->interface_object, dbus_info->invocation,
2369 resp_read->data.gid.GroupIdentifierLen,
2374 case TRESP_SIM_GET_MSISDN:{
2375 const struct tresp_sim_read *resp_read = data;
2376 CoreObject *co_sim = NULL;
2377 GVariant *gv = NULL;
2381 dbg("TRESP_SIM_GET_MSISDN - Result: [%s]",
2382 (resp_read->result == SIM_ACCESS_SUCCESS ? "Success" : "Fail"));
2384 co_sim = __get_sim_co_from_ur(ctx->server, ur);
2386 err("SIM Core object is NULL");
2390 g_variant_builder_init(&b, G_VARIANT_TYPE("aa{sv}"));
2391 if (resp_read->result == SIM_ACCESS_SUCCESS) {
2392 tcore_sim_set_msisdn_list(co_sim, &resp_read->data.msisdn_list);
2393 } else if (resp_read->result == SIM_ACCESS_FILE_NOT_FOUND) {
2394 tcore_sim_set_msisdn_list(co_sim, NULL);
2397 for (i = 0; i < resp_read->data.msisdn_list.count; i++) {
2398 g_variant_builder_open(&b,G_VARIANT_TYPE("a{sv}"));
2399 g_variant_builder_add(&b, "{sv}", "name", g_variant_new_string((const gchar *)resp_read->data.msisdn_list.msisdn[i].name));
2400 if (resp_read->data.msisdn_list.msisdn[i].ton == SIM_TON_INTERNATIONAL) {
2401 unsigned char *tmp = (unsigned char *)calloc(SIM_MSISDN_NUMBER_LEN_MAX + 1, 1);
2404 strncpy((char *)tmp+1, (const char*)resp_read->data.msisdn_list.msisdn[i].num, SIM_MSISDN_NUMBER_LEN_MAX - 1);
2405 tmp[SIM_MSISDN_NUMBER_LEN_MAX] = '\0';
2406 g_variant_builder_add(&b, "{sv}", "number", g_variant_new_string((const gchar *)tmp));
2409 dbg("calloc failed.");
2410 g_variant_builder_add(&b, "{sv}", "number", g_variant_new_string((const gchar *)resp_read->data.msisdn_list.msisdn[i].num));
2413 g_variant_builder_add(&b, "{sv}", "number", g_variant_new_string((const gchar *)resp_read->data.msisdn_list.msisdn[i].num));
2415 g_variant_builder_close(&b);
2417 gv = g_variant_builder_end(&b);
2419 telephony_sim_complete_get_msisdn (dbus_info->interface_object, dbus_info->invocation,
2425 case TRESP_SIM_GET_OPLMNWACT: {
2426 const struct tresp_sim_read *resp_read = data;
2427 GVariant *gv = NULL;
2431 dbg("TRESP_SIM_GET_OPLMNWACT - Result: [%s]",
2432 (resp_read->result == SIM_ACCESS_SUCCESS ? "Success" : "Fail"));
2434 g_variant_builder_init(&b, G_VARIANT_TYPE("aa{sv}"));
2435 for (i = 0;i < resp_read->data.opwa.opwa_count; i++) {
2436 g_variant_builder_open(&b,G_VARIANT_TYPE("a{sv}"));
2437 g_variant_builder_add(&b, "{sv}", "plmn", g_variant_new_string((const gchar *)resp_read->data.opwa.opwa[i].plmn));
2438 g_variant_builder_add(&b, "{sv}", "b_umts", g_variant_new_boolean(resp_read->data.opwa.opwa[i].b_umts));
2439 g_variant_builder_add(&b, "{sv}", "b_gsm", g_variant_new_boolean(resp_read->data.opwa.opwa[i].b_gsm));
2440 g_variant_builder_close(&b);
2442 gv = g_variant_builder_end(&b);
2444 telephony_sim_complete_get_oplmnwact (dbus_info->interface_object, dbus_info->invocation,
2450 case TRESP_SIM_REQ_AUTHENTICATION: {
2451 const struct tresp_sim_req_authentication *resp_auth = data;
2452 GVariantBuilder builder;
2453 GVariant *ak = NULL;
2454 GVariant *cp = NULL;
2455 GVariant *it = NULL;
2456 GVariant *resp = NULL;
2457 GVariant *ak_gv = NULL;
2458 GVariant *cp_gv = NULL;
2459 GVariant *it_gv = NULL;
2460 GVariant *resp_gv = NULL;
2463 dbg("TRESP_SIM_REQ_AUTHENTICATION - Result: [%s]",
2464 (resp_auth->result == SIM_ACCESS_SUCCESS ? "Success" : "Fail"));
2466 tcore_util_hex_dump("[AUTH_KEY] ", resp_auth->authentication_key_length, resp_auth->authentication_key);
2467 g_variant_builder_init (&builder, G_VARIANT_TYPE ("ay"));
2468 for (i = 0; i < (int)resp_auth->authentication_key_length; i++) {
2469 g_variant_builder_add (&builder, "y", resp_auth->authentication_key[i]);
2471 ak = g_variant_builder_end(&builder);
2472 ak_gv = g_variant_new("v", ak);
2474 tcore_util_hex_dump("[CIPHER_DATA] ", resp_auth->cipher_length, resp_auth->cipher_data);
2475 g_variant_builder_init (&builder, G_VARIANT_TYPE ("ay"));
2476 for (i = 0; i < (int)resp_auth->cipher_length; i++) {
2477 g_variant_builder_add (&builder, "y", resp_auth->cipher_data[i]);
2479 cp = g_variant_builder_end(&builder);
2480 cp_gv = g_variant_new("v", cp);
2482 tcore_util_hex_dump("[INTEGRITY_DATA] ", resp_auth->integrity_length, resp_auth->integrity_data);
2483 g_variant_builder_init (&builder, G_VARIANT_TYPE ("ay"));
2484 for (i = 0; i < (int)resp_auth->integrity_length; i++) {
2485 g_variant_builder_add (&builder, "y", resp_auth->integrity_data[i]);
2487 it = g_variant_builder_end(&builder);
2488 it_gv = g_variant_new("v", it);
2490 tcore_util_hex_dump("[RESP_DATA] ", resp_auth->resp_length, resp_auth->resp_data);
2491 g_variant_builder_init (&builder, G_VARIANT_TYPE ("ay"));
2492 for (i = 0; i < (int)resp_auth->resp_length; i++) {
2493 g_variant_builder_add (&builder, "y", resp_auth->resp_data[i]);
2495 resp = g_variant_builder_end(&builder);
2496 resp_gv = g_variant_new("v", resp);
2498 telephony_sim_complete_authentication (dbus_info->interface_object, dbus_info->invocation,
2500 resp_auth->auth_type,
2501 resp_auth->auth_result,
2509 case TRESP_SIM_VERIFY_PINS: {
2510 const struct tresp_sim_verify_pins *resp_verify_pins = data;
2512 dbg("TRESP_SIM_VERIFY_PINS - Result: [%s] PIN Type: [%d] Re-try count: [%d]",
2513 (resp_verify_pins->result == SIM_PIN_OPERATION_SUCCESS ? "Success" : "Fail"),
2514 resp_verify_pins->pin_type, resp_verify_pins->retry_count);
2516 telephony_sim_complete_verify_sec(dbus_info->interface_object, dbus_info->invocation,
2517 resp_verify_pins->result,
2518 resp_verify_pins->pin_type,
2519 resp_verify_pins->retry_count);
2523 case TRESP_SIM_VERIFY_PUKS: {
2524 const struct tresp_sim_verify_puks *resp_verify_puks = data;
2526 dbg("TRESP_SIM_VERIFY_PUKS - Result: [%s] PIN Type: [%d] Re-try count: [%d]",
2527 (resp_verify_puks->result == SIM_PIN_OPERATION_SUCCESS ? "Success" : "Fail"),
2528 resp_verify_puks->pin_type, resp_verify_puks->retry_count);
2530 telephony_sim_complete_verify_puk (dbus_info->interface_object, dbus_info->invocation,
2531 resp_verify_puks->result,
2532 resp_verify_puks->pin_type,
2533 resp_verify_puks->retry_count);
2537 case TRESP_SIM_CHANGE_PINS: {
2538 const struct tresp_sim_change_pins *resp_change_pins = data;
2540 dbg("TRESP_SIM_CHANGE_PINS - Result: [%s] PIN Type: [%d] Re-try count: [%d]",
2541 (resp_change_pins->result == SIM_PIN_OPERATION_SUCCESS ? "Success" : "Fail"),
2542 resp_change_pins->pin_type, resp_change_pins->retry_count);
2544 telephony_sim_complete_change_pin(dbus_info->interface_object, dbus_info->invocation,
2545 resp_change_pins->result,
2546 resp_change_pins->pin_type,
2547 resp_change_pins->retry_count);
2551 case TRESP_SIM_DISABLE_FACILITY: {
2552 const struct tresp_sim_disable_facility *resp_dis_facility = data;
2555 dbg("TRESP_SIM_DISABLE_FACILITY - Result: [%s] Type: [%d] Re-try count: [%d]",
2556 (resp_dis_facility->result == SIM_PIN_OPERATION_SUCCESS ? "Success" : "Fail"),
2557 resp_dis_facility->type, resp_dis_facility->retry_count);
2559 switch (resp_dis_facility->type) {
2560 case SIM_FACILITY_PS:
2563 case SIM_FACILITY_SC:
2566 case SIM_FACILITY_FD:
2569 case SIM_FACILITY_PN:
2572 case SIM_FACILITY_PU:
2575 case SIM_FACILITY_PP:
2578 case SIM_FACILITY_PC:
2582 err("Unhandled/Unknown type[0x%x]", resp_dis_facility->type);
2586 telephony_sim_complete_disable_facility(dbus_info->interface_object, dbus_info->invocation,
2587 resp_dis_facility->result,
2589 resp_dis_facility->retry_count);
2593 case TRESP_SIM_ENABLE_FACILITY: {
2594 const struct tresp_sim_enable_facility *resp_en_facility = data;
2597 dbg("TRESP_SIM_ENABLE_FACILITY - Result: [%s] Type: [%d] Re-try count: [%d]",
2598 (resp_en_facility->result == SIM_PIN_OPERATION_SUCCESS ? "Success" : "Fail"),
2599 resp_en_facility->type, resp_en_facility->retry_count);
2601 switch (resp_en_facility->type) {
2602 case SIM_FACILITY_PS:
2605 case SIM_FACILITY_SC:
2608 case SIM_FACILITY_FD:
2611 case SIM_FACILITY_PN:
2614 case SIM_FACILITY_PU:
2617 case SIM_FACILITY_PP:
2620 case SIM_FACILITY_PC:
2624 err("Unhandled/Unknown type[0x%x]", resp_en_facility->type);
2628 telephony_sim_complete_enable_facility(dbus_info->interface_object, dbus_info->invocation,
2629 resp_en_facility->result,
2631 resp_en_facility->retry_count);
2635 case TRESP_SIM_GET_FACILITY_STATUS: {
2636 const struct tresp_sim_get_facility_status *resp_get_facility = data;
2639 dbg("TRESP_SIM_GET_FACILITY_STATUS - Result: [%s] Type: [%d] Enable: [%s]",
2640 (resp_get_facility->result == SIM_PIN_OPERATION_SUCCESS ? "Success" : "Fail"),
2641 resp_get_facility->type,
2642 (resp_get_facility->b_enable ? "Yes" : "No"));
2644 switch (resp_get_facility->type) {
2645 case SIM_FACILITY_PS:
2648 case SIM_FACILITY_SC:
2651 case SIM_FACILITY_FD:
2654 case SIM_FACILITY_PN:
2657 case SIM_FACILITY_PU:
2660 case SIM_FACILITY_PP:
2663 case SIM_FACILITY_PC:
2667 err("Unhandled/Unknown type[0x%x]", resp_get_facility->type);
2671 telephony_sim_complete_get_facility(dbus_info->interface_object, dbus_info->invocation,
2672 resp_get_facility->result,
2674 resp_get_facility->b_enable);
2678 case TRESP_SIM_GET_LOCK_INFO: {
2679 const struct tresp_sim_get_lock_info *resp_lock = data;
2682 dbg("TRESP_SIM_GET_LOCK_INFO - Result: [%s] Type: [%d] Re-try count: [%d]",
2683 (resp_lock->result == SIM_PIN_OPERATION_SUCCESS ? "Success" : "Fail"),
2684 resp_lock->type, resp_lock->retry_count);
2686 switch (resp_lock->type) {
2687 case SIM_FACILITY_PS:
2690 case SIM_FACILITY_SC:
2693 case SIM_FACILITY_FD:
2696 case SIM_FACILITY_PN:
2699 case SIM_FACILITY_PU:
2702 case SIM_FACILITY_PP:
2705 case SIM_FACILITY_PC:
2709 err("Unhandled/Unknown type[0x%x]", resp_lock->type);
2713 telephony_sim_complete_get_lock_info(dbus_info->interface_object, dbus_info->invocation,
2716 resp_lock->lock_status,
2717 resp_lock->retry_count);
2721 case TRESP_SIM_TRANSMIT_APDU: {
2722 const struct tresp_sim_transmit_apdu *resp_apdu = data;
2723 GVariantBuilder builder;
2724 GVariant * apdu_gv = NULL;
2725 GVariant *inner_gv = NULL;
2728 dbg("TRESP_SIM_TRANSMIT_APDU - Result: [%s]",
2729 (resp_apdu->result == SIM_ACCESS_SUCCESS ? "Success" : "Fail"));
2730 tcore_util_hex_dump("[APDU_RESP] ",
2731 resp_apdu->apdu_resp_length, resp_apdu->apdu_resp);
2733 g_variant_builder_init (&builder, G_VARIANT_TYPE ("ay"));
2734 for (i = 0; i < (int)resp_apdu->apdu_resp_length; i++) {
2735 g_variant_builder_add (&builder, "y", resp_apdu->apdu_resp[i]);
2737 inner_gv = g_variant_builder_end(&builder);
2738 apdu_gv = g_variant_new("v", inner_gv);
2740 telephony_sim_complete_transfer_apdu(dbus_info->interface_object, dbus_info->invocation,
2746 case TRESP_SIM_GET_ATR:{
2747 const struct tresp_sim_get_atr *resp_get_atr = data;
2748 GVariantBuilder builder;
2749 GVariant * atr_gv = NULL;
2750 GVariant *inner_gv = NULL;
2753 dbg("TRESP_SIM_GET_ATR - Result: [%s]",
2754 (resp_get_atr->result == SIM_ACCESS_SUCCESS ? "Success" : "Fail"));
2755 tcore_util_hex_dump("[ATR_RESP] ",
2756 resp_get_atr->atr_length, resp_get_atr->atr);
2758 g_variant_builder_init (&builder, G_VARIANT_TYPE ("ay"));
2759 for (i = 0; i < (int)resp_get_atr->atr_length; i++) {
2760 g_variant_builder_add (&builder, "y", resp_get_atr->atr[i]);
2762 inner_gv = g_variant_builder_end(&builder);
2763 atr_gv = g_variant_new("v", inner_gv);
2765 telephony_sim_complete_get_atr(dbus_info->interface_object, dbus_info->invocation,
2766 resp_get_atr->result,
2771 case TRESP_SIM_SET_POWERSTATE: {
2772 const struct tresp_sim_set_powerstate *resp_power = data;
2774 dbg("TRESP_SIM_SET_POWERSTATE - Result: [%s]",
2775 (resp_power->result == SIM_POWER_SET_SUCCESS ? "Success" : "Fail"));
2777 telephony_sim_complete_set_powerstate(dbus_info->interface_object, dbus_info->invocation,
2778 resp_power->result);
2783 err("Unhandled/Unknown Response!!!");
2790 gboolean dbus_plugin_sim_notification(struct custom_data *ctx, CoreObject *source,
2791 TelephonyObjectSkeleton *object, enum tcore_notification_command command,
2792 unsigned int data_len, const void *data)
2795 const char *cp_name;
2797 cp_name = tcore_server_get_cp_name_by_plugin(tcore_object_ref_plugin(source));
2799 sim = telephony_object_peek_sim(TELEPHONY_OBJECT(object));
2800 dbg("sim: [%p]", sim);
2803 case TNOTI_SIM_STATUS: {
2804 const struct tnoti_sim_status *n_sim_status = data;
2806 info("[DBUSINFO][%s] SIM_STATUS : [%d]", cp_name, n_sim_status->sim_status);
2808 #ifdef ENABLE_KPI_LOGS
2809 if (n_sim_status->sim_status == SIM_STATUS_INIT_COMPLETED)
2810 TIME_CHECK("[%s] SIM Initialized", cp_name);
2813 telephony_sim_emit_status(sim, n_sim_status->sim_status);
2817 case TNOTI_SIM_REFRESHED: {
2818 const struct tnoti_sim_refreshed *n_sim_refreshed = data;
2819 info("[DBUSINFO][%s] SIM_REFRESHED : b_full_file_changed: [%s] changed_file_count: [%d]",
2820 cp_name, (n_sim_refreshed->b_full_file_changed ? "Yes" : "No"), n_sim_refreshed->file_list.file_count);
2822 telephony_sim_emit_refreshed(sim, n_sim_refreshed->cmd_type);
2826 case TNOTI_SIM_CALL_FORWARD_STATE: {
2827 const struct tnoti_sim_call_forward_state *info = data;
2828 info("[DBUSINFO][%s] SIM_CALL_FORWARD_STATE : [%s]",
2829 cp_name, info->b_forward ? "ON" : "OFF");
2831 telephony_sim_set_cf_state(sim, info->b_forward);
2836 err("Unhandled/Unknown Notification!!!");