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.
26 #include "tapi_common.h"
27 #include "TapiUtility.h"
32 #include "ITapiPhonebook.h"
34 static void move_str (char *dest, unsigned int len, gchar *src)
39 if (strlen (src) == 0)
42 snprintf (dest, len, "%s", src);
46 static void on_response_get_sim_pb_count(GObject *source_object, GAsyncResult *res, gpointer user_data)
49 GDBusConnection *conn = NULL;
50 GVariant *dbus_result;
52 struct tapi_resp_data *evt_cb_data = user_data;
53 TelSimPbAccessResult_t result = TAPI_SIM_PB_SUCCESS;
54 TelSimPbStorageInfo_t pb_cnt ;
55 gint used = 0, total = 0;
57 memset(&pb_cnt, 0, sizeof(TelSimPbStorageInfo_t));
59 conn = G_DBUS_CONNECTION (source_object);
60 dbus_result = g_dbus_connection_call_finish(conn, res, &error);
64 if (evt_cb_data->cb_fn) {
65 evt_cb_data->cb_fn(evt_cb_data->handle, -1, NULL, evt_cb_data->user_data);
75 g_variant_get (dbus_result, "(iiii)",
77 &pb_cnt.StorageFileType,
81 pb_cnt.UsedRecordCount = used;
82 pb_cnt.TotalRecordCount = total;
84 if (evt_cb_data->cb_fn) {
85 evt_cb_data->cb_fn(evt_cb_data->handle, result, &pb_cnt, evt_cb_data->user_data);
91 static void on_response_get_sim_pb_meta_info(GObject *source_object, GAsyncResult *res, gpointer user_data)
94 GDBusConnection *conn = NULL;
95 GVariant *dbus_result;
97 struct tapi_resp_data *evt_cb_data = user_data;
98 TelSimPbAccessResult_t result = TAPI_SIM_PB_SUCCESS;
99 TelSimPbEntryInfo_t pb_entry ;
101 gint imin = 0, imax = 0, nmax = 0, tmax = 0, used = 0;
103 memset(&pb_entry, 0, sizeof(TelSimPbEntryInfo_t));
105 conn = G_DBUS_CONNECTION (source_object);
106 dbus_result = g_dbus_connection_call_finish(conn, res, &error);
110 if (evt_cb_data->cb_fn) {
111 evt_cb_data->cb_fn(evt_cb_data->handle, -1, NULL, evt_cb_data->user_data);
121 g_variant_get (dbus_result, "(iiiiiii)",
123 &pb_entry.StorageFileType,
130 pb_entry.PbIndexMin = imin;
131 pb_entry.PbIndexMax = imax;
132 pb_entry.PbNumLenMax =nmax;
133 pb_entry.PbTextLenMax = tmax;
134 pb_entry.PbUsedCount = used;
136 if (evt_cb_data->cb_fn) {
137 evt_cb_data->cb_fn(evt_cb_data->handle, result, &pb_entry, evt_cb_data->user_data);
143 static void on_response_get_sim_pb_usim_meta_info(GObject *source_object, GAsyncResult *res, gpointer user_data)
145 GError *error = NULL;
146 GDBusConnection *conn = NULL;
147 GVariant *dbus_result;
148 GVariant *value = NULL;
149 GVariantIter *iter = NULL;
150 GVariantIter *iter_row = NULL;
151 const gchar *key = NULL;
152 struct tapi_resp_data *evt_cb_data = user_data;
153 TelSimPbAccessResult_t result = TAPI_SIM_PB_SUCCESS;
154 TelSimPbCapabilityInfo_t list ;
157 dbg("Func Entrance");
158 memset(&list, 0, sizeof(TelSimPbCapabilityInfo_t));
160 conn = G_DBUS_CONNECTION (source_object);
161 dbus_result = g_dbus_connection_call_finish(conn, res, &error);
165 if (evt_cb_data->cb_fn) {
166 evt_cb_data->cb_fn(evt_cb_data->handle, -1, NULL, evt_cb_data->user_data);
176 g_variant_get(dbus_result, "(iaa{sv})", &result, &iter);
177 list.FileTypeCount = g_variant_iter_n_children(iter);
180 while (g_variant_iter_next(iter, "a{sv}", &iter_row)) {
181 while (g_variant_iter_loop(iter_row, "{sv}", &key, &value)) {
182 if (!g_strcmp0(key, "field_type")) {
183 list.FileTypeInfo[i].field_type = g_variant_get_int32(value);
185 if (!g_strcmp0(key, "index_max")) {
186 list.FileTypeInfo[i].index_max = g_variant_get_int32(value);
188 if (!g_strcmp0(key, "text_max")) {
189 list.FileTypeInfo[i].text_max = g_variant_get_int32(value);
191 if (!g_strcmp0(key, "used_count")) {
192 list.FileTypeInfo[i].used_count = g_variant_get_int32(value);
196 g_variant_iter_free(iter_row);
198 g_variant_iter_free(iter);
200 if (evt_cb_data->cb_fn) {
201 evt_cb_data->cb_fn(evt_cb_data->handle, result, &list, evt_cb_data->user_data);
207 static void on_response_read_sim_pb_record(GObject *source_object, GAsyncResult *res, gpointer user_data)
209 GError *error = NULL;
210 GDBusConnection *conn = NULL;
211 GVariant *dbus_result;
213 struct tapi_resp_data *evt_cb_data = user_data;
214 TelSimPbAccessResult_t result = TAPI_SIM_PB_SUCCESS;
215 TelSimPbRecord_t pb_rec ;
219 gchar *number = NULL;
224 gchar *email1 = NULL;
225 gchar *email2 = NULL;
226 gchar *email3 = NULL;
227 gchar *email4 = NULL;
229 memset(&pb_rec, 0, sizeof(TelSimPbRecord_t));
231 conn = G_DBUS_CONNECTION (source_object);
232 dbus_result = g_dbus_connection_call_finish(conn, res, &error);
236 if (evt_cb_data->cb_fn) {
237 evt_cb_data->cb_fn(evt_cb_data->handle, -1, NULL, evt_cb_data->user_data);
247 g_variant_get (dbus_result, "(iiiisisisisisisissssi)",
249 &pb_rec.phonebook_type,
268 &pb_rec.group_index);
271 pb_rec.next_index = ni;
273 move_str ((char *)pb_rec.name, TAPI_SIM_PB_RECORD_NAME_MAX_LEN, name);
274 move_str ((char *)pb_rec.number, TAPI_SIM_PB_RECORD_NUMBER_MAX_LEN, number);
275 move_str ((char *)pb_rec.sne, TAPI_SIM_PB_RECORD_NAME_MAX_LEN, sne);
276 move_str ((char *)pb_rec.anr1, TAPI_SIM_PB_RECORD_NUMBER_MAX_LEN, anr1);
277 move_str ((char *)pb_rec.anr2, TAPI_SIM_PB_RECORD_NUMBER_MAX_LEN, anr2);
278 move_str ((char *)pb_rec.anr3, TAPI_SIM_PB_RECORD_NUMBER_MAX_LEN, anr3);
279 move_str ((char *)pb_rec.email1, TAPI_SIM_PB_RECORD_EMAIL_MAX_LEN, email1);
280 move_str ((char *)pb_rec.email2, TAPI_SIM_PB_RECORD_EMAIL_MAX_LEN, email2);
281 move_str ((char *)pb_rec.email3, TAPI_SIM_PB_RECORD_EMAIL_MAX_LEN, email3);
283 dbg("type[%d], index[%d], next_index[%d]", pb_rec.phonebook_type,
284 pb_rec.index, pb_rec.next_index);
285 dbg("name[%s], dcs[%d]", pb_rec.name, pb_rec.dcs);
286 dbg("number[%s], ton[%d]", pb_rec.number, pb_rec.ton);
288 if (pb_rec.phonebook_type==TAPI_SIM_PB_3GSIM) {
289 dbg("sne[%s], sne_dcs[%d]", pb_rec.sne, pb_rec.sne_dcs);
290 dbg("anr1([%d][%s]),anr2([%d][%s]),anr3([%d][%s])",
291 pb_rec.anr1_ton, pb_rec.anr1, pb_rec.anr2_ton, pb_rec.anr2,
292 pb_rec.anr3_ton, pb_rec.anr3);
293 dbg("email[%s] [%s][%s][%s]", pb_rec.email1, pb_rec.email2,
294 pb_rec.email3, pb_rec.email4);
295 dbg("group_index[%d], pb_control[%d]", pb_rec.group_index,
299 if (evt_cb_data->cb_fn) {
300 evt_cb_data->cb_fn(evt_cb_data->handle, result, &pb_rec, evt_cb_data->user_data);
306 static void on_response_update_sim_pb_record(GObject *source_object, GAsyncResult *res, gpointer user_data)
308 GError *error = NULL;
309 GDBusConnection *conn = NULL;
310 GVariant *dbus_result;
312 struct tapi_resp_data *evt_cb_data = user_data;
313 TelSimPbAccessResult_t result = TAPI_SIM_PB_SUCCESS;
315 conn = G_DBUS_CONNECTION (source_object);
316 dbus_result = g_dbus_connection_call_finish(conn, res, &error);
320 if (evt_cb_data->cb_fn) {
321 evt_cb_data->cb_fn(evt_cb_data->handle, -1, NULL, evt_cb_data->user_data);
331 g_variant_get (dbus_result, "(i)", &result);
333 if (evt_cb_data->cb_fn) {
334 evt_cb_data->cb_fn(evt_cb_data->handle, result, NULL, evt_cb_data->user_data);
340 static void on_response_delete_sim_pb_record(GObject *source_object, GAsyncResult *res, gpointer user_data)
342 GError *error = NULL;
343 GDBusConnection *conn = NULL;
344 GVariant *dbus_result;
346 struct tapi_resp_data *evt_cb_data = user_data;
347 TelSimPbAccessResult_t result = TAPI_SIM_PB_SUCCESS;
349 conn = G_DBUS_CONNECTION (source_object);
350 dbus_result = g_dbus_connection_call_finish(conn, res, &error);
354 if (evt_cb_data->cb_fn) {
355 evt_cb_data->cb_fn(evt_cb_data->handle, -1, NULL, evt_cb_data->user_data);
365 g_variant_get (dbus_result, "(i)", &result);
367 if (evt_cb_data->cb_fn) {
368 evt_cb_data->cb_fn(evt_cb_data->handle, result, NULL, evt_cb_data->user_data);
374 EXPORT_API int tel_get_sim_pb_init_info(TapiHandle *handle, int *init_completed, TelSimPbList_t *pb_list)
377 GVariant *sync_gv = NULL;
380 TAPI_RET_ERR_NUM_IF_FAIL(handle, TAPI_API_INVALID_PTR);
381 TAPI_RET_ERR_NUM_IF_FAIL(init_completed, TAPI_API_INVALID_PTR);
382 TAPI_RET_ERR_NUM_IF_FAIL(pb_list, TAPI_API_INVALID_PTR);
384 sync_gv = g_dbus_connection_call_sync(handle->dbus_connection, DBUS_TELEPHONY_SERVICE,
385 handle->path, DBUS_TELEPHONY_PB_INTERFACE, "GetInitStatus", NULL, NULL,
386 G_DBUS_CALL_FLAGS_NONE, TAPI_DEFAULT_TIMEOUT, handle->ca, &gerr);
389 g_variant_get(sync_gv, "(ibbbbbb)",
397 *init_completed = init_status;
400 err("Operation Failed - Error: (%s)", gerr->message);
402 return TAPI_API_OPERATION_FAILED;
405 dbg("b_(fdn[%d] adn[%d] sdn[%d] 3g[%d] aas[%d] gas[%d])",
406 pb_list->b_fdn,pb_list->b_adn,pb_list->b_sdn,pb_list->b_3g,pb_list->b_aas,pb_list->b_gas);
408 return TAPI_API_SUCCESS;
411 EXPORT_API int tel_get_sim_pb_count(TapiHandle *handle, TelSimPbType_t pb_type, tapi_response_cb callback, void *user_data)
413 struct tapi_resp_data *evt_cb_data = NULL;
414 GVariant *param = NULL;
416 dbg("Func Entrance");
418 TAPI_RET_ERR_NUM_IF_FAIL(handle, TAPI_API_INVALID_PTR);
419 TAPI_RET_ERR_NUM_IF_FAIL(callback, TAPI_API_INVALID_PTR);
421 if ( (pb_type != TAPI_SIM_PB_FDN) && (pb_type != TAPI_SIM_PB_ADN) && (pb_type != TAPI_SIM_PB_SDN)
422 && (pb_type != TAPI_SIM_PB_3GSIM) && (pb_type != TAPI_SIM_PB_AAS) && (pb_type != TAPI_SIM_PB_GAS))
423 return TAPI_API_INVALID_INPUT;
425 MAKE_RESP_CB_DATA(evt_cb_data, handle, callback, user_data);
427 param = g_variant_new("(i)", pb_type);
429 g_dbus_connection_call(handle->dbus_connection,
430 DBUS_TELEPHONY_SERVICE , handle->path, DBUS_TELEPHONY_PB_INTERFACE,
431 "GetCount", param, NULL,
432 G_DBUS_CALL_FLAGS_NONE, TAPI_DEFAULT_TIMEOUT, handle->ca,
433 on_response_get_sim_pb_count, evt_cb_data);
435 return TAPI_API_SUCCESS;
438 EXPORT_API int tel_get_sim_pb_meta_info(TapiHandle *handle, TelSimPbType_t pb_type, tapi_response_cb callback, void *user_data)
440 struct tapi_resp_data *evt_cb_data = NULL;
441 GVariant *param = NULL;
443 dbg("Func Entrance");
445 TAPI_RET_ERR_NUM_IF_FAIL(handle, TAPI_API_INVALID_PTR);
446 TAPI_RET_ERR_NUM_IF_FAIL(callback, TAPI_API_INVALID_PTR);
448 if ( (pb_type != TAPI_SIM_PB_FDN) && (pb_type != TAPI_SIM_PB_ADN) && (pb_type != TAPI_SIM_PB_SDN)
449 && (pb_type != TAPI_SIM_PB_3GSIM) && (pb_type != TAPI_SIM_PB_AAS) && (pb_type != TAPI_SIM_PB_GAS))
450 return TAPI_API_INVALID_INPUT;
452 MAKE_RESP_CB_DATA(evt_cb_data, handle, callback, user_data);
454 param = g_variant_new("(i)", pb_type);
456 g_dbus_connection_call(handle->dbus_connection,
457 DBUS_TELEPHONY_SERVICE , handle->path, DBUS_TELEPHONY_PB_INTERFACE,
458 "GetInfo", param, NULL,
459 G_DBUS_CALL_FLAGS_NONE, TAPI_DEFAULT_TIMEOUT, handle->ca,
460 on_response_get_sim_pb_meta_info, evt_cb_data);
462 return TAPI_API_SUCCESS;
465 EXPORT_API int tel_get_sim_pb_usim_meta_info(TapiHandle *handle, tapi_response_cb callback, void *user_data)
467 struct tapi_resp_data *evt_cb_data = NULL;
468 GVariant *param = NULL;
470 dbg("Func Entrance");
472 TAPI_RET_ERR_NUM_IF_FAIL(handle, TAPI_API_INVALID_PTR);
473 TAPI_RET_ERR_NUM_IF_FAIL(callback, TAPI_API_INVALID_PTR);
475 MAKE_RESP_CB_DATA(evt_cb_data, handle, callback, user_data);
477 g_dbus_connection_call(handle->dbus_connection,
478 DBUS_TELEPHONY_SERVICE , handle->path, DBUS_TELEPHONY_PB_INTERFACE,
479 "GetUsimMetaInfo", param, NULL,
480 G_DBUS_CALL_FLAGS_NONE, TAPI_DEFAULT_TIMEOUT, handle->ca,
481 on_response_get_sim_pb_usim_meta_info, evt_cb_data);
483 return TAPI_API_SUCCESS;
486 EXPORT_API int tel_read_sim_pb_record(TapiHandle *handle, TelSimPbType_t pb_type, unsigned short index, tapi_response_cb callback, void *user_data)
488 struct tapi_resp_data *evt_cb_data = NULL;
489 GVariant *param = NULL;
491 dbg("Func Entrance");
493 TAPI_RET_ERR_NUM_IF_FAIL(handle, TAPI_API_INVALID_PTR);
494 TAPI_RET_ERR_NUM_IF_FAIL(callback, TAPI_API_INVALID_PTR);
497 return TAPI_API_INVALID_INPUT;
499 if ( (pb_type != TAPI_SIM_PB_FDN) && (pb_type != TAPI_SIM_PB_ADN) && (pb_type != TAPI_SIM_PB_SDN)
500 && (pb_type != TAPI_SIM_PB_3GSIM) && (pb_type != TAPI_SIM_PB_AAS) && (pb_type != TAPI_SIM_PB_GAS))
501 return TAPI_API_INVALID_INPUT;
503 MAKE_RESP_CB_DATA(evt_cb_data, handle, callback, user_data);
505 param = g_variant_new("(ii)", pb_type, index);
507 g_dbus_connection_call(handle->dbus_connection,
508 DBUS_TELEPHONY_SERVICE , handle->path, DBUS_TELEPHONY_PB_INTERFACE,
509 "ReadRecord", param, NULL,
510 G_DBUS_CALL_FLAGS_NONE, TAPI_DEFAULT_TIMEOUT, handle->ca,
511 on_response_read_sim_pb_record, evt_cb_data);
513 return TAPI_API_SUCCESS;
516 EXPORT_API int tel_update_sim_pb_record(TapiHandle *handle, const TelSimPbRecord_t *req_data, tapi_response_cb callback, void *user_data)
518 struct tapi_resp_data *evt_cb_data = NULL;
519 GVariant *param = NULL;
521 dbg("Func Entrance");
523 TAPI_RET_ERR_NUM_IF_FAIL(handle, TAPI_API_INVALID_PTR);
524 TAPI_RET_ERR_NUM_IF_FAIL((req_data != NULL) , TAPI_API_INVALID_PTR);
526 if (req_data->index == 0) {
527 return TAPI_API_INVALID_INPUT;
530 if ((req_data->phonebook_type != TAPI_SIM_PB_FDN)
531 && (req_data->phonebook_type != TAPI_SIM_PB_ADN) && (req_data->phonebook_type != TAPI_SIM_PB_SDN)
532 && (req_data->phonebook_type != TAPI_SIM_PB_3GSIM) && (req_data->phonebook_type != TAPI_SIM_PB_AAS)
533 && (req_data->phonebook_type != TAPI_SIM_PB_GAS)) {
534 return TAPI_API_INVALID_INPUT;
537 MAKE_RESP_CB_DATA(evt_cb_data, handle, callback, user_data);
539 dbg("type[%d], index[%d], next_index[%d]",req_data->phonebook_type, req_data->index, req_data->next_index);
540 dbg("name[%s], dcs[%d]",req_data->name, req_data->dcs);
541 dbg("number[%s], ton[%d]",req_data->number, req_data->ton);
543 if(req_data->phonebook_type == TAPI_SIM_PB_3GSIM) {
544 dbg("sne[%s] sne_dcs[%d]",req_data->sne, req_data->sne_dcs);
545 dbg("anr1([%d][%s]),anr2([%d][%s]),anr3([%d][%s])",
546 req_data->anr1_ton,req_data->anr1,req_data->anr2_ton,req_data->anr2,req_data->anr3_ton,req_data->anr3);
547 dbg("email[%s] [%s][%s][%s]",req_data->email1,req_data->email2,req_data->email3,req_data->email4);
548 dbg("group_index[%d], pb_control[%d]",req_data->group_index,req_data->pb_control);
551 param = g_variant_new("(iisisisisisisissssi)",
552 req_data->phonebook_type,
570 req_data->group_index);
572 g_dbus_connection_call(handle->dbus_connection,
573 DBUS_TELEPHONY_SERVICE , handle->path, DBUS_TELEPHONY_PB_INTERFACE,
574 "UpdateRecord", param, NULL,
575 G_DBUS_CALL_FLAGS_NONE, TAPI_DEFAULT_TIMEOUT, handle->ca,
576 on_response_update_sim_pb_record, evt_cb_data);
578 return TAPI_API_SUCCESS;
582 EXPORT_API int tel_delete_sim_pb_record(TapiHandle *handle, TelSimPbType_t pb_type, unsigned short index, tapi_response_cb callback, void *user_data)
584 struct tapi_resp_data *evt_cb_data = NULL;
585 GVariant *param = NULL;
587 dbg("Func Entrance");
589 TAPI_RET_ERR_NUM_IF_FAIL(handle, TAPI_API_INVALID_PTR);
593 return TAPI_API_INVALID_INPUT;
595 if ( (pb_type != TAPI_SIM_PB_FDN) && (pb_type != TAPI_SIM_PB_ADN) && (pb_type != TAPI_SIM_PB_SDN)
596 && (pb_type != TAPI_SIM_PB_3GSIM) && (pb_type != TAPI_SIM_PB_AAS) && (pb_type != TAPI_SIM_PB_GAS))
597 return TAPI_API_INVALID_INPUT;
599 MAKE_RESP_CB_DATA(evt_cb_data, handle, callback, user_data);
601 param = g_variant_new("(ii)", pb_type, index);
603 g_dbus_connection_call(handle->dbus_connection,
604 DBUS_TELEPHONY_SERVICE , handle->path, DBUS_TELEPHONY_PB_INTERFACE,
605 "DeleteRecord", param, NULL,
606 G_DBUS_CALL_FLAGS_NONE, TAPI_DEFAULT_TIMEOUT, handle->ca,
607 on_response_delete_sim_pb_record, evt_cb_data);
609 return TAPI_API_SUCCESS;