4 * Copyright (c) 2014 Samsung Electronics Co., Ltd. All rights reserved.
6 * Contact: Ja-young Gu <jygu@samsung.com>
8 * Licensed under the Apache License, Version 2.0 (the "License");
9 * you may not use this file except in compliance with the License.
10 * You may obtain a copy of the License at
12 * http://www.apache.org/licenses/LICENSE-2.0
14 * Unless required by applicable law or agreed to in writing, software
15 * distributed under the License is distributed on an "AS IS" BASIS,
16 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
17 * See the License for the specific language governing permissions and
18 * limitations under the License.
26 #include "tapi_common.h"
27 #include "TapiUtility.h"
32 #include "ITapiPhonebook.h"
33 #include "tapi_private.h"
35 static void move_str(char *dest, unsigned int len, gchar *src)
43 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);
61 TAPI_RESP_CHECK_ERROR(error, evt_cb_data);
63 g_variant_get(dbus_result, "(iiii)",
65 &pb_cnt.StorageFileType,
69 pb_cnt.UsedRecordCount = used;
70 pb_cnt.TotalRecordCount = total;
72 TAPI_INVOKE_RESP_CALLBACK(evt_cb_data, result, &pb_cnt);
75 g_variant_unref(dbus_result);
78 static void on_response_get_sim_pb_meta_info(GObject *source_object, GAsyncResult *res, gpointer user_data)
81 GDBusConnection *conn = NULL;
82 GVariant *dbus_result;
84 struct tapi_resp_data *evt_cb_data = user_data;
85 TelSimPbAccessResult_t result = TAPI_SIM_PB_SUCCESS;
86 TelSimPbEntryInfo_t pb_entry ;
88 gint imin = 0, imax = 0, nmax = 0, tmax = 0, used = 0;
90 memset(&pb_entry, 0, sizeof(TelSimPbEntryInfo_t));
92 conn = G_DBUS_CONNECTION(source_object);
93 dbus_result = g_dbus_connection_call_finish(conn, res, &error);
94 TAPI_RESP_CHECK_ERROR(error, evt_cb_data);
96 g_variant_get(dbus_result, "(iiiiiii)",
98 &pb_entry.StorageFileType,
105 pb_entry.PbIndexMin = imin;
106 pb_entry.PbIndexMax = imax;
107 pb_entry.PbNumLenMax = nmax;
108 pb_entry.PbTextLenMax = tmax;
109 pb_entry.PbUsedCount = used;
111 TAPI_INVOKE_RESP_CALLBACK(evt_cb_data, result, &pb_entry);
114 g_variant_unref(dbus_result);
117 static void on_response_get_sim_pb_usim_meta_info(GObject *source_object, GAsyncResult *res, gpointer user_data)
119 GError *error = NULL;
120 GDBusConnection *conn = NULL;
121 GVariant *dbus_result;
122 GVariant *value = NULL;
123 GVariantIter *iter = NULL;
124 GVariantIter *iter_row = NULL;
125 const gchar *key = NULL;
126 struct tapi_resp_data *evt_cb_data = user_data;
127 TelSimPbAccessResult_t result = TAPI_SIM_PB_SUCCESS;
128 TelSimPbCapabilityInfo_t list ;
131 dbg("Func Entrance");
132 memset(&list, 0, sizeof(TelSimPbCapabilityInfo_t));
134 conn = G_DBUS_CONNECTION(source_object);
135 dbus_result = g_dbus_connection_call_finish(conn, res, &error);
136 TAPI_RESP_CHECK_ERROR(error, evt_cb_data);
138 g_variant_get(dbus_result, "(iaa{sv})", &result, &iter);
139 list.FileTypeCount = g_variant_iter_n_children(iter);
142 while (g_variant_iter_next(iter, "a{sv}", &iter_row)) {
143 while (g_variant_iter_loop(iter_row, "{sv}", &key, &value)) {
144 if (!g_strcmp0(key, "field_type"))
145 list.FileTypeInfo[i].field_type = g_variant_get_int32(value);
146 else if (!g_strcmp0(key, "index_max"))
147 list.FileTypeInfo[i].index_max = g_variant_get_int32(value);
148 else if (!g_strcmp0(key, "text_max"))
149 list.FileTypeInfo[i].text_max = g_variant_get_int32(value);
150 else if (!g_strcmp0(key, "used_count"))
151 list.FileTypeInfo[i].used_count = g_variant_get_int32(value);
154 g_variant_iter_free(iter_row);
156 g_variant_iter_free(iter);
158 TAPI_INVOKE_RESP_CALLBACK(evt_cb_data, result, &list);
161 g_variant_unref(dbus_result);
164 static void on_response_read_sim_pb_record(GObject *source_object, GAsyncResult *res, gpointer user_data)
166 GError *error = NULL;
167 GDBusConnection *conn = NULL;
168 GVariant *dbus_result;
170 struct tapi_resp_data *evt_cb_data = user_data;
171 TelSimPbAccessResult_t result = TAPI_SIM_PB_SUCCESS;
172 TelSimPbRecord_t pb_rec ;
176 gchar *number = NULL;
181 gchar *email1 = NULL;
182 gchar *email2 = NULL;
183 gchar *email3 = NULL;
184 gchar *email4 = NULL;
186 memset(&pb_rec, 0, sizeof(TelSimPbRecord_t));
188 conn = G_DBUS_CONNECTION(source_object);
189 dbus_result = g_dbus_connection_call_finish(conn, res, &error);
190 TAPI_RESP_CHECK_ERROR(error, evt_cb_data);
192 g_variant_get(dbus_result, "(iiiisisisisisisissssi)",
194 &pb_rec.phonebook_type,
213 &pb_rec.group_index);
216 pb_rec.next_index = ni;
218 move_str((char *)pb_rec.name, TAPI_SIM_PB_RECORD_NAME_MAX_LEN, name);
219 move_str((char *)pb_rec.number, TAPI_SIM_PB_RECORD_NUMBER_MAX_LEN, number);
220 move_str((char *)pb_rec.sne, TAPI_SIM_PB_RECORD_NAME_MAX_LEN, sne);
221 move_str((char *)pb_rec.anr1, TAPI_SIM_PB_RECORD_NUMBER_MAX_LEN, anr1);
222 move_str((char *)pb_rec.anr2, TAPI_SIM_PB_RECORD_NUMBER_MAX_LEN, anr2);
223 move_str((char *)pb_rec.anr3, TAPI_SIM_PB_RECORD_NUMBER_MAX_LEN, anr3);
224 move_str((char *)pb_rec.email1, TAPI_SIM_PB_RECORD_EMAIL_MAX_LEN, email1);
225 move_str((char *)pb_rec.email2, TAPI_SIM_PB_RECORD_EMAIL_MAX_LEN, email2);
226 move_str((char *)pb_rec.email3, TAPI_SIM_PB_RECORD_EMAIL_MAX_LEN, email3);
228 msg("type[%d], index[%d], next_index[%d]", pb_rec.phonebook_type,
229 pb_rec.index, pb_rec.next_index);
230 dbg("name[%s], dcs[%d]", pb_rec.name, pb_rec.dcs);
231 dbg("number[%s], ton[%d]", pb_rec.number, pb_rec.ton);
233 if (pb_rec.phonebook_type == TAPI_SIM_PB_3GSIM) {
234 dbg("sne[%s], sne_dcs[%d]", pb_rec.sne, pb_rec.sne_dcs);
235 dbg("anr1([%d][%s]), anr2([%d][%s]), anr3([%d][%s])",
236 pb_rec.anr1_ton, pb_rec.anr1, pb_rec.anr2_ton, pb_rec.anr2,
237 pb_rec.anr3_ton, pb_rec.anr3);
238 dbg("email[%s] [%s][%s][%s]", pb_rec.email1, pb_rec.email2,
239 pb_rec.email3, pb_rec.email4);
240 dbg("group_index[%d], pb_control[%d]", pb_rec.group_index,
244 TAPI_INVOKE_RESP_CALLBACK(evt_cb_data, result, &pb_rec);
258 g_variant_unref(dbus_result);
261 static void on_response_update_sim_pb_record(GObject *source_object, GAsyncResult *res, gpointer user_data)
263 GError *error = NULL;
264 GDBusConnection *conn = NULL;
265 GVariant *dbus_result;
267 struct tapi_resp_data *evt_cb_data = user_data;
268 TelSimPbAccessResult_t result = TAPI_SIM_PB_SUCCESS;
270 conn = G_DBUS_CONNECTION(source_object);
271 dbus_result = g_dbus_connection_call_finish(conn, res, &error);
272 TAPI_RESP_CHECK_ERROR(error, evt_cb_data);
274 g_variant_get(dbus_result, "(i)", &result);
276 TAPI_INVOKE_RESP_CALLBACK(evt_cb_data, result, NULL);
279 g_variant_unref(dbus_result);
282 static void on_response_delete_sim_pb_record(GObject *source_object, GAsyncResult *res, gpointer user_data)
284 GError *error = NULL;
285 GDBusConnection *conn = NULL;
286 GVariant *dbus_result;
288 struct tapi_resp_data *evt_cb_data = user_data;
289 TelSimPbAccessResult_t result = TAPI_SIM_PB_SUCCESS;
291 conn = G_DBUS_CONNECTION(source_object);
292 dbus_result = g_dbus_connection_call_finish(conn, res, &error);
293 TAPI_RESP_CHECK_ERROR(error, evt_cb_data);
295 g_variant_get(dbus_result, "(i)", &result);
297 TAPI_INVOKE_RESP_CALLBACK(evt_cb_data, result, NULL);
300 g_variant_unref(dbus_result);
303 EXPORT_API int tel_get_sim_pb_init_info(TapiHandle *handle, int *init_completed, TelSimPbList_t *pb_list)
306 GVariant *sync_gv = NULL;
309 TAPI_RET_ERR_NUM_IF_NOT_SUPPORTED(TELEPHONY_FEATURE);
310 TAPI_RET_ERR_NUM_IF_FAIL(handle, TAPI_API_INVALID_PTR);
311 TAPI_RET_ERR_NUM_IF_FAIL(init_completed, TAPI_API_INVALID_PTR);
312 TAPI_RET_ERR_NUM_IF_FAIL(pb_list, TAPI_API_INVALID_PTR);
314 sync_gv = g_dbus_connection_call_sync(handle->dbus_connection, DBUS_TELEPHONY_SERVICE,
315 handle->path, DBUS_TELEPHONY_PB_INTERFACE, "GetInitStatus", NULL, NULL,
316 G_DBUS_CALL_FLAGS_NONE, TAPI_DEFAULT_TIMEOUT, handle->ca, &gerr);
319 g_variant_get(sync_gv, "(ibbbbbb)",
327 *init_completed = init_status;
328 g_variant_unref(sync_gv);
331 err("Operation Failed - Error: (%s)", gerr->message);
334 return TAPI_API_OPERATION_FAILED;
337 dbg("b_(fdn[%d] adn[%d] sdn[%d] 3g[%d] aas[%d] gas[%d])",
338 pb_list->b_fdn, pb_list->b_adn, pb_list->b_sdn, pb_list->b_3g, pb_list->b_aas, pb_list->b_gas);
340 return TAPI_API_SUCCESS;
343 EXPORT_API int tel_get_sim_pb_count(TapiHandle *handle, TelSimPbType_t pb_type, tapi_response_cb callback, void *user_data)
345 struct tapi_resp_data *evt_cb_data = NULL;
346 GVariant *param = NULL;
348 dbg("Func Entrance");
350 TAPI_RET_ERR_NUM_IF_NOT_SUPPORTED(TELEPHONY_FEATURE);
351 TAPI_RET_ERR_NUM_IF_FAIL(handle, TAPI_API_INVALID_PTR);
352 TAPI_RET_ERR_NUM_IF_FAIL(callback, TAPI_API_INVALID_PTR);
354 if ((pb_type != TAPI_SIM_PB_FDN) && (pb_type != TAPI_SIM_PB_ADN) && (pb_type != TAPI_SIM_PB_SDN)
355 && (pb_type != TAPI_SIM_PB_3GSIM) && (pb_type != TAPI_SIM_PB_AAS) && (pb_type != TAPI_SIM_PB_GAS))
356 return TAPI_API_INVALID_INPUT;
358 TAPI_MAKE_RESP_CB_DATA(evt_cb_data, handle, callback, user_data);
360 param = g_variant_new("(i)", pb_type);
362 g_dbus_connection_call(handle->dbus_connection,
363 DBUS_TELEPHONY_SERVICE , handle->path, DBUS_TELEPHONY_PB_INTERFACE,
364 "GetCount", param, NULL,
365 G_DBUS_CALL_FLAGS_NONE, TAPI_DEFAULT_TIMEOUT, handle->ca,
366 on_response_get_sim_pb_count, evt_cb_data);
368 return TAPI_API_SUCCESS;
371 EXPORT_API int tel_get_sim_pb_meta_info(TapiHandle *handle, TelSimPbType_t pb_type, tapi_response_cb callback, void *user_data)
373 struct tapi_resp_data *evt_cb_data = NULL;
374 GVariant *param = NULL;
376 dbg("Func Entrance");
378 TAPI_RET_ERR_NUM_IF_NOT_SUPPORTED(TELEPHONY_FEATURE);
379 TAPI_RET_ERR_NUM_IF_FAIL(handle, TAPI_API_INVALID_PTR);
380 TAPI_RET_ERR_NUM_IF_FAIL(callback, TAPI_API_INVALID_PTR);
382 if ((pb_type != TAPI_SIM_PB_FDN) && (pb_type != TAPI_SIM_PB_ADN) && (pb_type != TAPI_SIM_PB_SDN)
383 && (pb_type != TAPI_SIM_PB_3GSIM) && (pb_type != TAPI_SIM_PB_AAS) && (pb_type != TAPI_SIM_PB_GAS))
384 return TAPI_API_INVALID_INPUT;
386 TAPI_MAKE_RESP_CB_DATA(evt_cb_data, handle, callback, user_data);
388 param = g_variant_new("(i)", pb_type);
390 g_dbus_connection_call(handle->dbus_connection,
391 DBUS_TELEPHONY_SERVICE , handle->path, DBUS_TELEPHONY_PB_INTERFACE,
392 "GetInfo", param, NULL,
393 G_DBUS_CALL_FLAGS_NONE, TAPI_DEFAULT_TIMEOUT, handle->ca,
394 on_response_get_sim_pb_meta_info, evt_cb_data);
396 return TAPI_API_SUCCESS;
399 EXPORT_API int tel_get_sim_pb_usim_meta_info(TapiHandle *handle, tapi_response_cb callback, void *user_data)
401 struct tapi_resp_data *evt_cb_data = NULL;
402 GVariant *param = NULL;
404 dbg("Func Entrance");
406 TAPI_RET_ERR_NUM_IF_NOT_SUPPORTED(TELEPHONY_FEATURE);
407 TAPI_RET_ERR_NUM_IF_FAIL(handle, TAPI_API_INVALID_PTR);
408 TAPI_RET_ERR_NUM_IF_FAIL(callback, TAPI_API_INVALID_PTR);
410 TAPI_MAKE_RESP_CB_DATA(evt_cb_data, handle, callback, user_data);
412 g_dbus_connection_call(handle->dbus_connection,
413 DBUS_TELEPHONY_SERVICE , handle->path, DBUS_TELEPHONY_PB_INTERFACE,
414 "GetUsimMetaInfo", param, NULL,
415 G_DBUS_CALL_FLAGS_NONE, TAPI_DEFAULT_TIMEOUT, handle->ca,
416 on_response_get_sim_pb_usim_meta_info, evt_cb_data);
418 return TAPI_API_SUCCESS;
421 EXPORT_API int tel_read_sim_pb_record(TapiHandle *handle, TelSimPbType_t pb_type, unsigned short pb_index, tapi_response_cb callback, void *user_data)
423 struct tapi_resp_data *evt_cb_data = NULL;
424 GVariant *param = NULL;
426 msg("read type:[%d] index:[%d]", pb_type, pb_index);
428 TAPI_RET_ERR_NUM_IF_NOT_SUPPORTED(TELEPHONY_FEATURE);
429 TAPI_RET_ERR_NUM_IF_FAIL(handle, TAPI_API_INVALID_PTR);
430 TAPI_RET_ERR_NUM_IF_FAIL(callback, TAPI_API_INVALID_PTR);
433 return TAPI_API_INVALID_INPUT;
435 if ((pb_type != TAPI_SIM_PB_FDN) && (pb_type != TAPI_SIM_PB_ADN) && (pb_type != TAPI_SIM_PB_SDN)
436 && (pb_type != TAPI_SIM_PB_3GSIM) && (pb_type != TAPI_SIM_PB_AAS) && (pb_type != TAPI_SIM_PB_GAS))
437 return TAPI_API_INVALID_INPUT;
439 TAPI_MAKE_RESP_CB_DATA(evt_cb_data, handle, callback, user_data);
441 param = g_variant_new("(ii)", pb_type, pb_index);
443 g_dbus_connection_call(handle->dbus_connection,
444 DBUS_TELEPHONY_SERVICE , handle->path, DBUS_TELEPHONY_PB_INTERFACE,
445 "ReadRecord", param, NULL,
446 G_DBUS_CALL_FLAGS_NONE, TAPI_DEFAULT_TIMEOUT, handle->ca,
447 on_response_read_sim_pb_record, evt_cb_data);
449 return TAPI_API_SUCCESS;
452 EXPORT_API int tel_update_sim_pb_record(TapiHandle *handle, const TelSimPbRecord_t *req_data, tapi_response_cb callback, void *user_data)
454 struct tapi_resp_data *evt_cb_data = NULL;
455 GVariant *param = NULL;
457 dbg("Func Entrance");
459 TAPI_RET_ERR_NUM_IF_NOT_SUPPORTED(TELEPHONY_FEATURE);
460 TAPI_RET_ERR_NUM_IF_FAIL(handle, TAPI_API_INVALID_PTR);
461 TAPI_RET_ERR_NUM_IF_FAIL((req_data != NULL) , TAPI_API_INVALID_PTR);
463 if (req_data->index == 0)
464 return TAPI_API_INVALID_INPUT;
466 if ((req_data->phonebook_type != TAPI_SIM_PB_FDN)
467 && (req_data->phonebook_type != TAPI_SIM_PB_ADN) && (req_data->phonebook_type != TAPI_SIM_PB_SDN)
468 && (req_data->phonebook_type != TAPI_SIM_PB_3GSIM) && (req_data->phonebook_type != TAPI_SIM_PB_AAS)
469 && (req_data->phonebook_type != TAPI_SIM_PB_GAS)) {
470 return TAPI_API_INVALID_INPUT;
473 TAPI_MAKE_RESP_CB_DATA(evt_cb_data, handle, callback, user_data);
475 msg("type[%d], index[%d], next_index[%d]", req_data->phonebook_type, req_data->index, req_data->next_index);
476 dbg("name[%s], dcs[%d]", req_data->name, req_data->dcs);
477 dbg("number[%s], ton[%d]", req_data->number, req_data->ton);
479 if (req_data->phonebook_type == TAPI_SIM_PB_3GSIM) {
480 dbg("sne[%s] sne_dcs[%d]", req_data->sne, req_data->sne_dcs);
481 dbg("anr1([%d][%s]), anr2([%d][%s]), anr3([%d][%s])",
482 req_data->anr1_ton, req_data->anr1, req_data->anr2_ton, req_data->anr2, req_data->anr3_ton, req_data->anr3);
483 dbg("email[%s] [%s][%s][%s]", req_data->email1, req_data->email2, req_data->email3, req_data->email4);
484 dbg("group_index[%d], pb_control[%d]", req_data->group_index, req_data->pb_control);
487 param = g_variant_new("(iisisisisisisissssi)",
488 req_data->phonebook_type,
506 req_data->group_index);
508 g_dbus_connection_call(handle->dbus_connection,
509 DBUS_TELEPHONY_SERVICE , handle->path, DBUS_TELEPHONY_PB_INTERFACE,
510 "UpdateRecord", param, NULL,
511 G_DBUS_CALL_FLAGS_NONE, TAPI_DEFAULT_TIMEOUT, handle->ca,
512 on_response_update_sim_pb_record, evt_cb_data);
514 return TAPI_API_SUCCESS;
518 EXPORT_API int tel_delete_sim_pb_record(TapiHandle *handle, TelSimPbType_t pb_type, unsigned short pb_index, tapi_response_cb callback, void *user_data)
520 struct tapi_resp_data *evt_cb_data = NULL;
521 GVariant *param = NULL;
523 msg("delete type:[%d] index:[%d]", pb_type, pb_index);
525 TAPI_RET_ERR_NUM_IF_NOT_SUPPORTED(TELEPHONY_FEATURE);
526 TAPI_RET_ERR_NUM_IF_FAIL(handle, TAPI_API_INVALID_PTR);
529 return TAPI_API_INVALID_INPUT;
531 if ((pb_type != TAPI_SIM_PB_FDN) && (pb_type != TAPI_SIM_PB_ADN) && (pb_type != TAPI_SIM_PB_SDN)
532 && (pb_type != TAPI_SIM_PB_3GSIM) && (pb_type != TAPI_SIM_PB_AAS) && (pb_type != TAPI_SIM_PB_GAS))
533 return TAPI_API_INVALID_INPUT;
535 TAPI_MAKE_RESP_CB_DATA(evt_cb_data, handle, callback, user_data);
537 param = g_variant_new("(ii)", pb_type, pb_index);
539 g_dbus_connection_call(handle->dbus_connection,
540 DBUS_TELEPHONY_SERVICE , handle->path, DBUS_TELEPHONY_PB_INTERFACE,
541 "DeleteRecord", param, NULL,
542 G_DBUS_CALL_FLAGS_NONE, TAPI_DEFAULT_TIMEOUT, handle->ca,
543 on_response_delete_sim_pb_record, evt_cb_data);
545 return TAPI_API_SUCCESS;