4 * Copyright (c) 2014 Samsung Electronics Co., Ltd. All rights reserved.
6 * Contact: Ja-young Gu <jygu@samsung.com>
8 * Licensed under the Apache License, Version 2.0 (the "License");
9 * you may not use this file except in compliance with the License.
10 * You may obtain a copy of the License at
12 * http://www.apache.org/licenses/LICENSE-2.0
14 * Unless required by applicable law or agreed to in writing, software
15 * distributed under the License is distributed on an "AS IS" BASIS,
16 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
17 * See the License for the specific language governing permissions and
18 * limitations under the License.
25 #include "tapi_common.h"
26 #include "TapiUtility.h"
27 #include "TelNetwork.h"
31 #include "ITapiNetwork.h"
32 #include "tapi_private.h"
34 static int _convert_systemtype_to_act(int type)
37 case TAPI_NETWORK_SYSTEM_GSM:
40 case TAPI_NETWORK_SYSTEM_GPRS:
43 case TAPI_NETWORK_SYSTEM_EGPRS:
46 case TAPI_NETWORK_SYSTEM_PCS1900:
49 case TAPI_NETWORK_SYSTEM_UMTS:
52 case TAPI_NETWORK_SYSTEM_GSM_AND_UMTS:
55 case TAPI_NETWORK_SYSTEM_IS95A:
58 case TAPI_NETWORK_SYSTEM_IS95B:
61 case TAPI_NETWORK_SYSTEM_CDMA_1X:
64 case TAPI_NETWORK_SYSTEM_EVDO_REV_0:
67 case TAPI_NETWORK_SYSTEM_1X_EVDO_REV_0_HYBRID:
70 case TAPI_NETWORK_SYSTEM_EVDO_REV_A:
73 case TAPI_NETWORK_SYSTEM_1X_EVDO_REV_A_HYBRID:
76 case TAPI_NETWORK_SYSTEM_EVDO_REV_B:
79 case TAPI_NETWORK_SYSTEM_1X_EVDO_REV_B_HYBRID:
82 case TAPI_NETWORK_SYSTEM_EVDV:
85 case TAPI_NETWORK_SYSTEM_EHRPD:
88 case TAPI_NETWORK_SYSTEM_LTE:
98 static int _convert_act_to_systemtype(int act)
102 return TAPI_NETWORK_SYSTEM_GSM;
105 return TAPI_NETWORK_SYSTEM_GPRS;
108 return TAPI_NETWORK_SYSTEM_EGPRS;
111 return TAPI_NETWORK_SYSTEM_UMTS;
114 return TAPI_NETWORK_SYSTEM_GSM_AND_UMTS;
117 return TAPI_NETWORK_SYSTEM_IS95A;
120 return TAPI_NETWORK_SYSTEM_IS95B;
123 return TAPI_NETWORK_SYSTEM_CDMA_1X;
126 return TAPI_NETWORK_SYSTEM_EVDO_REV_0;
129 return TAPI_NETWORK_SYSTEM_1X_EVDO_REV_0_HYBRID;
132 return TAPI_NETWORK_SYSTEM_EVDO_REV_A;
135 return TAPI_NETWORK_SYSTEM_1X_EVDO_REV_A_HYBRID;
138 return TAPI_NETWORK_SYSTEM_EVDO_REV_B;
141 return TAPI_NETWORK_SYSTEM_1X_EVDO_REV_B_HYBRID;
144 return TAPI_NETWORK_SYSTEM_EVDV;
147 return TAPI_NETWORK_SYSTEM_EHRPD;
150 return TAPI_NETWORK_SYSTEM_LTE;
156 return TAPI_NETWORK_SYSTEM_NO_SRV;
159 /* LCOV_EXCL_START */
160 static void on_signal_registration_status(TapiHandle *handle, GVariant *param,
161 char *noti_id, struct tapi_evt_cb *evt_cb_data)
163 TelNetworkRegistrationStatus_t noti;
165 g_variant_get(param, "(iiib)", ¬i.cs, ¬i.ps, ¬i.type, ¬i.is_roaming);
167 TAPI_INVOKE_NOTI_CALLBACK(¬i);
170 static void on_signal_strength(TapiHandle *handle, GVariant *param,
171 char *noti_id, struct tapi_evt_cb *evt_cb_data)
173 struct tel_noti_network_signal_strength noti;
175 g_variant_get(param, "(i)", ¬i.dbm);
177 TAPI_INVOKE_NOTI_CALLBACK(¬i);
180 static void on_signal_cell_info(TapiHandle *handle, GVariant *param,
181 char *noti_id, struct tapi_evt_cb *evt_cb_data)
183 struct tel_noti_network_cell_info noti;
185 memset(¬i, 0, sizeof(struct tel_noti_network_cell_info));
186 g_variant_get(param, "(ii)", ¬i.lac, ¬i.cell_id);
188 TAPI_INVOKE_NOTI_CALLBACK(¬i);
191 static void on_signal_change(TapiHandle *handle, GVariant *param,
192 char *noti_id, struct tapi_evt_cb *evt_cb_data)
194 struct tel_noti_network_change noti;
197 memset(¬i, 0, sizeof(struct tel_noti_network_change));
199 g_variant_get(param, "(is)", &act, &plmn);
201 noti.act = _convert_act_to_systemtype(act);
204 snprintf(noti.plmn, 7, "%s", plmn);
208 TAPI_INVOKE_NOTI_CALLBACK(¬i);
211 static void on_signal_time_info(TapiHandle *handle, GVariant *param,
212 char *noti_id, struct tapi_evt_cb *evt_cb_data)
214 struct tel_noti_network_time_info noti;
217 memset(¬i, 0, sizeof(struct tel_noti_network_time_info));
218 g_variant_get(param, "(iiiiiiiiibs)", ¬i.year, ¬i.month, ¬i.day,
219 ¬i.hour, ¬i.minute, ¬i.second,
220 ¬i.wday, ¬i.gmtoff, ¬i.dstoff, ¬i.isdst,
224 snprintf(noti.plmn, 7, "%s", plmn);
228 TAPI_INVOKE_NOTI_CALLBACK(¬i);
231 static void on_signal_identity(TapiHandle *handle, GVariant *param,
232 char *noti_id, struct tapi_evt_cb *evt_cb_data)
234 struct tel_noti_network_identity noti;
235 char *plmn = NULL, *s_name = NULL, *f_name = NULL;
237 memset(¬i, 0, sizeof(struct tel_noti_network_identity));
239 g_variant_get(param, "(sss)", &plmn, &s_name, &f_name);
242 snprintf(noti.plmn, 7, "%s", plmn);
246 snprintf(noti.short_name, 17, "%s", s_name);
250 snprintf(noti.full_name, 33, "%s", f_name);
254 TAPI_INVOKE_NOTI_CALLBACK(¬i);
257 static void on_emergency_callback_mode(TapiHandle *handle, GVariant *param,
258 char *noti_id, struct tapi_evt_cb *evt_cb_data)
260 struct tel_noti_network_emergency_callback_mode noti;
262 memset(¬i, 0, sizeof(struct tel_noti_network_emergency_callback_mode));
264 g_variant_get(param, "(i)", ¬i.mode);
266 TAPI_INVOKE_NOTI_CALLBACK(¬i);
269 static void on_signal_default_data_subscription(TapiHandle *handle, GVariant *param,
270 char *noti_id, struct tapi_evt_cb *evt_cb_data)
272 struct tel_noti_network_default_data_subs noti;
274 memset(¬i, 0, sizeof(struct tel_noti_network_default_data_subs));
276 g_variant_get(param, "(i)", ¬i.default_subs);
278 TAPI_INVOKE_NOTI_CALLBACK(¬i);
281 static void on_signal_default_subscription(TapiHandle *handle, GVariant *param,
282 char *noti_id, struct tapi_evt_cb *evt_cb_data)
284 struct tel_noti_network_default_subs noti;
286 memset(¬i, 0, sizeof(struct tel_noti_network_default_subs));
288 g_variant_get(param, "(i)", ¬i.default_subs);
290 TAPI_INVOKE_NOTI_CALLBACK(¬i);
293 static void on_signal_cell_id(TapiHandle *handle, GVariant *param,
294 char *noti_id, struct tapi_evt_cb *evt_cb_data)
297 g_variant_get(param, "(i)", &cell_id);
298 TAPI_INVOKE_NOTI_CALLBACK(&cell_id);
301 static void on_signal_lac(TapiHandle *handle, GVariant *param,
302 char *noti_id, struct tapi_evt_cb *evt_cb_data)
305 g_variant_get(param, "(i)", &lac);
306 TAPI_INVOKE_NOTI_CALLBACK(&lac);
309 static void on_signal_tac(TapiHandle *handle, GVariant *param,
310 char *noti_id, struct tapi_evt_cb *evt_cb_data)
313 g_variant_get(param, "(i)", &tac);
314 TAPI_INVOKE_NOTI_CALLBACK(&tac);
317 static void on_signal_system_id(TapiHandle *handle, GVariant *param,
318 char *noti_id, struct tapi_evt_cb *evt_cb_data)
321 g_variant_get(param, "(i)", &system_id);
322 TAPI_INVOKE_NOTI_CALLBACK(&system_id);
325 static void on_signal_network_id(TapiHandle *handle, GVariant *param,
326 char *noti_id, struct tapi_evt_cb *evt_cb_data)
329 g_variant_get(param, "(i)", &network_id);
330 TAPI_INVOKE_NOTI_CALLBACK(&network_id);
333 static void on_signal_bs_id(TapiHandle *handle, GVariant *param,
334 char *noti_id, struct tapi_evt_cb *evt_cb_data)
337 g_variant_get(param, "(i)", &bs_id);
338 TAPI_INVOKE_NOTI_CALLBACK(&bs_id);
341 static void on_signal_bs_latitude(TapiHandle *handle, GVariant *param,
342 char *noti_id, struct tapi_evt_cb *evt_cb_data)
345 g_variant_get(param, "(i)", &bs_latitude);
346 TAPI_INVOKE_NOTI_CALLBACK(&bs_latitude);
349 static void on_signal_bs_longitude(TapiHandle *handle, GVariant *param,
350 char *noti_id, struct tapi_evt_cb *evt_cb_data)
353 g_variant_get(param, "(i)", &bs_longitude);
354 TAPI_INVOKE_NOTI_CALLBACK(&bs_longitude);
357 static void on_signal_volte_status(TapiHandle *handle, GVariant *param,
358 char *noti_id, struct tapi_evt_cb *evt_cb_data)
360 struct tel_noti_network_volte_status noti;
362 memset(¬i, 0, sizeof(struct tel_noti_network_volte_status));
364 g_variant_get(param, "(bii)",
365 &(noti.is_registered),
366 &(noti.feature_mask),
367 &(noti.network_type));
369 TAPI_INVOKE_NOTI_CALLBACK(¬i);
372 static void on_signal_epdg_status(TapiHandle *handle, GVariant *param,
373 char *noti_id, struct tapi_evt_cb *evt_cb_data)
375 struct tel_noti_network_epdg_status noti;
377 memset(¬i, 0, sizeof(struct tel_noti_network_epdg_status));
379 g_variant_get(param, "(b)",
380 &(noti.is_available));
382 TAPI_INVOKE_NOTI_CALLBACK(¬i);
386 static struct signal_map signals[] = {
387 { "RegistrationStatus", on_signal_registration_status },
388 { "SignalStrength", on_signal_strength },
389 { "CellInfo", on_signal_cell_info },
390 { "Change", on_signal_change },
391 { "TimeInfo", on_signal_time_info },
392 { "Identity", on_signal_identity },
393 { "EmergencyCallbackMode", on_emergency_callback_mode },
394 { "DefaultDataSubscription", on_signal_default_data_subscription },
395 { "DefaultSubscription", on_signal_default_subscription },
396 { "CellId", on_signal_cell_id },
397 { "Lac", on_signal_lac },
398 { "Tac", on_signal_tac },
399 { "SystemId", on_signal_system_id },
400 { "NetworkId", on_signal_network_id },
401 { "BsId", on_signal_bs_id },
402 { "BsLatitude", on_signal_bs_latitude },
403 { "BsLongitude", on_signal_bs_longitude },
404 { "VolteStatus", on_signal_volte_status },
405 { "EpdgStatus", on_signal_epdg_status },
408 void _process_network_event(const gchar *sig, GVariant *param,
409 TapiHandle *handle, char *noti_id, struct tapi_evt_cb *evt_cb_data)
412 TAPI_RETURN_IF_FAIL(evt_cb_data);
414 for (i = 0; i < sizeof(signals) / sizeof(struct signal_map); i++) {
415 dbg("Received (%s)(%s) signal from telephony", handle->cp_name, sig);
416 if (!g_strcmp0(sig, signals[i].signal_name)) {
417 signals[i].callback(handle, param, noti_id, evt_cb_data);
422 dbg("not handled NETWORK noti[%s]", sig);
425 static gboolean _check_plmn(const char *plmn)
427 unsigned int plmn_len = 0;
434 plmn_len = strlen(plmn);
435 if (plmn_len < 5 || plmn_len > 6) {
436 err("PLMN length(%d) is invalid", plmn_len);
443 static gboolean _check_operation(TelNetworkPreferredPlmnOp_t operation)
446 case TAPI_NETWORK_PREF_PLMN_ADD:
447 case TAPI_NETWORK_PREF_PLMN_EDIT:
448 case TAPI_NETWORK_PREF_PLMN_DELETE:
452 err("Default Case executed. Unknown PLMN Op");
455 err("operation %d is not supported", operation);
459 static gboolean _check_network_mode(int mode)
461 if (mode == TAPI_NETWORK_MODE_AUTO) {
464 if (mode & TAPI_NETWORK_MODE_GSM)
465 mode &= ~TAPI_NETWORK_MODE_GSM;
467 if (mode & TAPI_NETWORK_MODE_WCDMA)
468 mode &= ~TAPI_NETWORK_MODE_WCDMA;
470 if (mode & TAPI_NETWORK_MODE_1XRTT)
471 mode &= ~TAPI_NETWORK_MODE_1XRTT;
473 if (mode & TAPI_NETWORK_MODE_LTE)
474 mode &= ~TAPI_NETWORK_MODE_LTE;
476 if (mode & TAPI_NETWORK_MODE_EVDO)
477 mode &= ~TAPI_NETWORK_MODE_EVDO;
483 err("mode %d is not supported", mode);
487 static gboolean _check_emergency_callback_mode(TelNetworkEmergencyCallbackMode_t mode)
490 case TAPI_NETWORK_EMERGENCY_CALLBACK_MODE_ENTER:
491 case TAPI_NETWORK_EMERGENCY_CALLBACK_MODE_EXIT:
496 err("Default Case executed. Unknown Emergency callback mode");
499 err("emergency callback mode %d is not supported", mode);
503 static gboolean _check_roaming_preference(TelNetworkPrefNetType_t roam_pref)
506 case TAPI_NETWORK_PREF_NET_TYPE_HOME_ONLY:
507 case TAPI_NETWORK_PREF_NET_TYPE_AFFILIATED:
508 case TAPI_NETWORK_PREF_NET_TYPE_AUTOMATIC:
509 case TAPI_NETWORK_PREF_NET_TYPE_AUTOMATIC_A:
510 case TAPI_NETWORK_PREF_NET_TYPE_AUTOMATIC_B:
511 case TAPI_NETWORK_PREF_NET_TYPE_ROAM_DOMESTIC:
512 case TAPI_NETWORK_PREF_NET_TYPE_ROAM_INTERNATIONAL:
513 case TAPI_NETWORK_PREF_NET_TYPE_ROAM_DUAL:
514 case TAPI_NETWORK_PREF_NET_TYPE_BLANK:
519 err("Default Case executed. Unknown roaming preference");
523 err("roam_pref %d is not supported", roam_pref);
527 static void on_response_search_network(GObject *source_object,
528 GAsyncResult *res, gpointer user_data)
530 GError *error = NULL;
531 struct tapi_resp_data *evt_cb_data = user_data;
535 TelNetworkPlmnList_t list;
537 GVariant *dbus_result = NULL;
538 GVariant *value = NULL;
539 GVariantIter *iter = NULL;
540 GVariantIter *iter_row = NULL;
541 const gchar *key = NULL;
543 memset(&list, 0, sizeof(TelNetworkPlmnList_t));
545 dbus_result = g_dbus_connection_call_finish(G_DBUS_CONNECTION(source_object), res, &error);
546 TAPI_RESP_CHECK_ERROR(error, evt_cb_data);
548 g_variant_get(dbus_result, "(aa{sv}i)", &iter, &result);
550 list.networks_count = g_variant_iter_n_children(iter);
553 while (g_variant_iter_next(iter, "a{sv}", &iter_row)) {
554 while (g_variant_iter_loop(iter_row, "{sv}", &key, &value)) {
555 if (!g_strcmp0(key, "plmn")) {
556 strncpy(list.network_list[i].plmn, g_variant_get_string(value, NULL), TAPI_NETWORK_PLMN_LEN_MAX);
557 list.network_list[i].plmn_id = atoi(g_variant_get_string(value, NULL));
558 } else if (!g_strcmp0(key, "act")) {
559 list.network_list[i].access_technology = _convert_act_to_systemtype(g_variant_get_int32(value));
560 } else if (!g_strcmp0(key, "type")) {
561 list.network_list[i].type_of_plmn = g_variant_get_int32(value);
562 } else if (!g_strcmp0(key, "name")) {
563 strncpy(list.network_list[i].network_name, g_variant_get_string(value, NULL), 40);
567 g_variant_iter_free(iter_row);
569 g_variant_iter_free(iter);
571 TAPI_INVOKE_RESP_CALLBACK(evt_cb_data, result, &list);
574 g_variant_unref(dbus_result);
577 static void on_response_get_network_selection_mode(GObject *source_object,
578 GAsyncResult *res, gpointer user_data)
580 GError *error = NULL;
581 struct tapi_resp_data *evt_cb_data = user_data;
584 GVariant *dbus_result;
587 dbus_result = g_dbus_connection_call_finish(G_DBUS_CONNECTION(source_object), res, &error);
588 TAPI_RESP_CHECK_ERROR(error, evt_cb_data);
590 g_variant_get(dbus_result, "(ii)", &mode, &result);
592 TAPI_INVOKE_RESP_CALLBACK(evt_cb_data, result, &mode);
595 g_variant_unref(dbus_result);
598 static void on_response_default_set(GObject *source_object, GAsyncResult *res,
601 GError *error = NULL;
602 struct tapi_resp_data *evt_cb_data = user_data;
605 GVariant *dbus_result;
607 dbus_result = g_dbus_connection_call_finish(G_DBUS_CONNECTION(source_object), res, &error);
608 TAPI_RESP_CHECK_ERROR(error, evt_cb_data);
610 g_variant_get(dbus_result, "(i)", &result);
612 TAPI_INVOKE_RESP_CALLBACK(evt_cb_data, result, NULL);
615 g_variant_unref(dbus_result);
618 static void on_response_get_network_preferred_plmn(GObject *source_object,
619 GAsyncResult *res, gpointer user_data)
621 GError *error = NULL;
622 struct tapi_resp_data *evt_cb_data = user_data;
626 TelNetworkPreferredPlmnList_t list;
628 GVariant *dbus_result = NULL;
629 GVariant *value = NULL;
630 GVariantIter *iter = NULL;
631 GVariantIter *iter_row = NULL;
632 const gchar *key = NULL;
634 memset(&list, 0, sizeof(TelNetworkPreferredPlmnList_t));
636 dbus_result = g_dbus_connection_call_finish(G_DBUS_CONNECTION(source_object), res, &error);
637 TAPI_RESP_CHECK_ERROR(error, evt_cb_data);
639 g_variant_get(dbus_result, "(aa{sv}i)", &iter, &result);
641 list.NumOfPrefPlmns = g_variant_iter_n_children(iter);
643 if (list.NumOfPrefPlmns == 0) {
644 dbg("num_of_.. = 0");
645 if (evt_cb_data->cb_fn)
646 evt_cb_data->cb_fn(evt_cb_data->handle, result, &list, evt_cb_data->user_data);
653 while (g_variant_iter_next(iter, "a{sv}", &iter_row)) {
654 while (g_variant_iter_loop(iter_row, "{sv}", &key, &value)) {
655 if (!g_strcmp0(key, "plmn"))
656 strncpy(list.PrefPlmnRecord[i].Plmn, g_variant_get_string(value, NULL), 6);
657 else if (!g_strcmp0(key, "act"))
658 list.PrefPlmnRecord[i].SystemType = _convert_act_to_systemtype(g_variant_get_int32(value));
659 else if (!g_strcmp0(key, "index"))
660 list.PrefPlmnRecord[i].Index = g_variant_get_int32(value);
661 else if (!g_strcmp0(key, "name"))
662 strncpy(list.PrefPlmnRecord[i].network_name, g_variant_get_string(value, NULL), 40);
665 g_variant_iter_free(iter_row);
667 g_variant_iter_free(iter);
669 TAPI_INVOKE_RESP_CALLBACK(evt_cb_data, result, &list);
672 g_variant_unref(dbus_result);
675 static void on_response_get_network_mode(GObject *source_object,
676 GAsyncResult *res, gpointer user_data)
678 GError *error = NULL;
679 struct tapi_resp_data *evt_cb_data = user_data;
682 GVariant *dbus_result;
685 dbus_result = g_dbus_connection_call_finish(G_DBUS_CONNECTION(source_object), res, &error);
686 TAPI_RESP_CHECK_ERROR(error, evt_cb_data);
688 g_variant_get(dbus_result, "(ii)", &mode, &result);
690 TAPI_INVOKE_RESP_CALLBACK(evt_cb_data, result, &mode);
693 g_variant_unref(dbus_result);
696 static void on_response_get_network_serving(GObject *source_object,
697 GAsyncResult *res, gpointer user_data)
699 GError *error = NULL;
700 struct tapi_resp_data *evt_cb_data = user_data;
703 TelNetworkServing_t data;
706 GVariant *value = NULL;
707 const gchar *key = NULL;
708 GVariant *dbus_result;
711 guint v1, v2, v3, v6, v7;
713 memset(&data, 0, sizeof(TelNetworkServing_t));
715 dbus_result = g_dbus_connection_call_finish(G_DBUS_CONNECTION(source_object), res, &error);
716 TAPI_RESP_CHECK_ERROR(error, evt_cb_data);
718 g_variant_get(dbus_result, "(a{sv}i)", &iter, &result);
720 while (g_variant_iter_loop(iter, "{sv}", &key, &value)) {
721 if (!g_strcmp0(key, "serving")) {
722 g_variant_get(value, "(is)", &v0, &plmn);
723 data.act = _convert_act_to_systemtype(v0);
725 snprintf(data.plmn, 7, "%s", plmn);
728 } else if (!g_strcmp0(key, "g_serving")) {
729 g_variant_get(value, "(i)", &v0);
731 } else if (!g_strcmp0(key, "c_serving")) {
732 g_variant_get(value, "(iuuuiiuu)", &v0, &v1, &v2, &v3, &v4, &v5, &v6, &v7);
733 data.info.cdma_info.carrier = v0;
734 data.info.cdma_info.system_id = v1;
735 data.info.cdma_info.network_id = v2;
736 data.info.cdma_info.base_station_id = v3;
737 data.info.cdma_info.base_station_latitude = v4;
738 data.info.cdma_info.base_station_longitude = v5;
739 data.info.cdma_info.registration_zone = v6;
740 data.info.cdma_info.pilot_offset = v7;
743 g_variant_iter_free(iter);
745 TAPI_INVOKE_RESP_CALLBACK(evt_cb_data, result, &data);
748 g_variant_unref(dbus_result);
751 static void on_response_get_neighboring_cell_info(GObject *source_object,
752 GAsyncResult *res, gpointer user_data)
754 GError *error = NULL;
755 struct tapi_resp_data *evt_cb_data = user_data;
757 int geran_index = 0, umts_index = 0, lte_index = 0;
759 TelNetworkNeighboringCellInfo_t list;
761 GVariant *dbus_result = NULL;
762 GVariant *value = NULL;
763 GVariantIter *iter = NULL;
764 GVariantIter *iter_row = NULL;
765 const gchar *key = NULL;
766 gint v0, v1, v2, v3, v4, v5;
768 memset(&list, 0, sizeof(TelNetworkNeighboringCellInfo_t));
770 dbus_result = g_dbus_connection_call_finish(G_DBUS_CONNECTION(source_object), res, &error);
771 TAPI_RESP_CHECK_ERROR(error, evt_cb_data);
773 g_variant_get(dbus_result, "(aa{sv}i)", &iter, &result);
775 while (g_variant_iter_next(iter, "a{sv}", &iter_row)) {
776 while (g_variant_iter_loop(iter_row, "{sv}", &key, &value)) {
777 if (!g_strcmp0(key, "serving")) {
778 g_variant_get(value, "(iii)", &v0, &v1, &v2);
779 list.serving.act = _convert_act_to_systemtype(v0);
780 list.serving.mcc = v1;
781 list.serving.mnc = v2;
782 } else if (!g_strcmp0(key, "g_serving")) {
783 g_variant_get(value, "(iiiii)", &v0, &v1, &v2, &v3, &v4);
784 list.serving.cell.geran.cell_id = v0;
785 list.serving.cell.geran.lac = v1;
786 list.serving.cell.geran.bcch = v2;
787 list.serving.cell.geran.bsic = v3;
788 list.serving.cell.geran.rxlev = v4;
789 } else if (!g_strcmp0(key, "u_serving")) {
790 g_variant_get(value, "(iiiii)", &v0, &v1, &v2, &v3, &v4);
791 list.serving.cell.umts.cell_id = v0;
792 list.serving.cell.umts.lac = v1;
793 list.serving.cell.umts.arfcn = v2;
794 list.serving.cell.umts.psc = v3;
795 list.serving.cell.umts.rscp = v4;
796 } else if (!g_strcmp0(key, "l_serving")) {
797 g_variant_get(value, "(iiiii)", &v0, &v1, &v2, &v3, &v4);
798 list.serving.cell.lte.cell_id = v0;
799 list.serving.cell.lte.lac = v1;
800 list.serving.cell.lte.earfcn = v2;
801 list.serving.cell.lte.tac = v3;
802 list.serving.cell.lte.rssi = v4;
803 } else if (!g_strcmp0(key, "n_serving")) {
804 g_variant_get(value, "(iiiii)", &v0, &v1, &v2, &v3, &v4);
805 list.serving.cell.nr.cell_id = v0;
806 list.serving.cell.nr.lac = v1;
807 list.serving.cell.nr.nrarfcn= v2;
808 list.serving.cell.nr.tac = v3;
809 list.serving.cell.nr.rssi = v4;
810 } else if (!g_strcmp0(key, "c_serving")) {
811 g_variant_get(value, "(uuuuii)", &v0, &v1, &v2, &v3, &v4, &v5);
812 list.serving.cell.cdma.system_id = v0;
813 list.serving.cell.cdma.network_id = v1;
814 list.serving.cell.cdma.base_station_id = v2;
815 list.serving.cell.cdma.reference_pn = v3;
816 list.serving.cell.cdma.base_station_latitude = v4;
817 list.serving.cell.cdma.base_station_longitude = v5;
818 } else if (!g_strcmp0(key, "geran")) {
819 g_variant_get(value, "(iiiii)", &v0, &v1, &v2, &v3, &v4);
820 list.geran_list[geran_index].cell_id = v0;
821 list.geran_list[geran_index].lac = v1;
822 list.geran_list[geran_index].bcch = v2;
823 list.geran_list[geran_index].bsic = v3;
824 list.geran_list[geran_index].rxlev = v4;
826 } else if (!g_strcmp0(key, "umts")) {
827 g_variant_get(value, "(iiiii)", &v0, &v1, &v2, &v3, &v4);
828 list.umts_list[umts_index].cell_id = v0;
829 list.umts_list[umts_index].lac = v1;
830 list.umts_list[umts_index].arfcn = v2;
831 list.umts_list[umts_index].psc = v3;
832 list.umts_list[umts_index].rscp = v4;
834 } else if (!g_strcmp0(key, "lte")) {
835 g_variant_get(value, "(iiiii)", &v0, &v1, &v2, &v3, &v4);
836 list.lte_list[lte_index].cell_id = v0;
837 list.lte_list[lte_index].pcid = v1;
838 list.lte_list[lte_index].earfcn = v2;
839 list.lte_list[lte_index].tac = v3;
840 list.lte_list[lte_index].rssi = v4;
845 if (umts_index == TAPI_NETWORK_UMTS_NEIGHBORING_CELL_LIST_MAX)
848 if (lte_index == TAPI_NETWORK_LTE_NEIGHBORING_CELL_LIST_MAX)
851 if (geran_index == TAPI_NETWORK_GERAN_NEIGHBORING_CELL_LIST_MAX)
854 g_variant_iter_free(iter_row);
856 g_variant_iter_free(iter);
858 list.geran_list_count = geran_index;
859 list.umts_list_count = umts_index;
860 list.lte_list_count = lte_index;
861 dbg("act=%d, count(geran:%d, umts:%d, lte:%d)", list.serving.act, geran_index, umts_index, lte_index);
863 TAPI_INVOKE_RESP_CALLBACK(evt_cb_data, result, &list);
866 g_variant_unref(dbus_result);
869 static void on_response_select_network(GObject *source_object, GAsyncResult *res,
872 GError *error = NULL;
873 struct tapi_resp_data *evt_cb_data = user_data;
875 GVariant *dbus_result;
877 dbus_result = g_dbus_connection_call_finish(G_DBUS_CONNECTION(source_object), res, &error);
878 TAPI_RESP_CHECK_ERROR(error, evt_cb_data);
879 g_variant_get(dbus_result, "(i)", &result);
881 /* Map result received from libtcore to TapiResult_t */
883 result = TAPI_API_SUCCESS;
887 result = TAPI_API_NETWORK_PLMN_NOT_ALLOWED;
891 result = TAPI_API_NETWORK_ROAMING_NOT_ALLOWED;
900 TAPI_INVOKE_RESP_CALLBACK(evt_cb_data, result, NULL);
903 g_variant_unref(dbus_result);
906 static void on_response_get_network_roaming_preference(GObject *source_object,
907 GAsyncResult *res, gpointer user_data)
909 GError *error = NULL;
910 struct tapi_resp_data *evt_cb_data = user_data;
913 GVariant *dbus_result;
914 TelNetworkPrefNetType_t roam_pref;
916 dbus_result = g_dbus_connection_call_finish(G_DBUS_CONNECTION(source_object), res, &error);
917 TAPI_RESP_CHECK_ERROR(error, evt_cb_data);
919 g_variant_get(dbus_result, "(ii)", &roam_pref, &result);
921 TAPI_INVOKE_RESP_CALLBACK(evt_cb_data, result, &roam_pref);
924 g_variant_unref(dbus_result);
927 EXPORT_API int tel_search_network(TapiHandle *handle, tapi_response_cb callback, void *user_data)
929 struct tapi_resp_data *evt_cb_data = NULL;
931 TAPI_RET_ERR_NUM_IF_NOT_SUPPORTED(TELEPHONY_FEATURE);
932 TAPI_RET_ERR_NUM_IF_FAIL(handle != NULL && callback != NULL, TAPI_API_INVALID_PTR);
934 TAPI_MAKE_RESP_CB_DATA(evt_cb_data, handle, callback, user_data);
936 msg("[%s] network_search requested", handle->cp_name);
938 g_dbus_connection_call(handle->dbus_connection,
939 DBUS_TELEPHONY_SERVICE , handle->path, DBUS_TELEPHONY_NETWORK_INTERFACE,
940 "Search", NULL, NULL,
941 G_DBUS_CALL_FLAGS_NONE, TAPI_UNRESTRICTED_TIMEOUT, handle->ca,
942 on_response_search_network, evt_cb_data);
944 return TAPI_API_SUCCESS;
947 EXPORT_API int tel_get_network_selection_mode(struct tapi_handle *handle, tapi_response_cb callback, void *user_data)
949 struct tapi_resp_data *evt_cb_data = NULL;
951 dbg("Func Entrance");
953 TAPI_RET_ERR_NUM_IF_NOT_SUPPORTED(TELEPHONY_FEATURE);
954 TAPI_RET_ERR_NUM_IF_FAIL(handle != NULL && callback != NULL, TAPI_API_INVALID_PTR);
956 TAPI_MAKE_RESP_CB_DATA(evt_cb_data, handle, callback, user_data);
958 g_dbus_connection_call(handle->dbus_connection,
959 DBUS_TELEPHONY_SERVICE , handle->path, DBUS_TELEPHONY_NETWORK_INTERFACE,
960 "GetSelectionMode", NULL, NULL,
961 G_DBUS_CALL_FLAGS_NONE, TAPI_DEFAULT_TIMEOUT, handle->ca,
962 on_response_get_network_selection_mode, evt_cb_data);
964 return TAPI_API_SUCCESS;
967 EXPORT_API int tel_select_network_automatic(struct tapi_handle *handle, tapi_response_cb callback, void *user_data)
969 struct tapi_resp_data *evt_cb_data = NULL;
972 TAPI_RET_ERR_NUM_IF_NOT_SUPPORTED(TELEPHONY_FEATURE);
973 TAPI_RET_ERR_NUM_IF_FAIL(handle != NULL, TAPI_API_INVALID_PTR);
975 TAPI_MAKE_RESP_CB_DATA(evt_cb_data, handle, callback, user_data);
977 param = g_variant_new("(isi)",
982 msg("[%s] automatic selection requested", handle->cp_name);
984 g_dbus_connection_call(handle->dbus_connection,
985 DBUS_TELEPHONY_SERVICE , handle->path, DBUS_TELEPHONY_NETWORK_INTERFACE,
986 "SetSelectionMode", param, NULL,
987 G_DBUS_CALL_FLAGS_NONE, TAPI_UNRESTRICTED_TIMEOUT, handle->ca,
988 on_response_default_set, evt_cb_data);
990 return TAPI_API_SUCCESS;
993 EXPORT_API int tel_select_network_manual(struct tapi_handle *handle, const char *plmn, int type, tapi_response_cb callback, void *user_data)
995 struct tapi_resp_data *evt_cb_data = NULL;
998 TAPI_RET_ERR_NUM_IF_NOT_SUPPORTED(TELEPHONY_FEATURE);
999 TAPI_RET_ERR_NUM_IF_FAIL(handle != NULL && _check_plmn(plmn), TAPI_API_INVALID_PTR);
1001 TAPI_MAKE_RESP_CB_DATA(evt_cb_data, handle, callback, user_data);
1003 param = g_variant_new("(isi)",
1006 _convert_systemtype_to_act(type));
1008 msg("[%s] manual selection requested plmn:[%s] type:[%d]", handle->cp_name, plmn ? plmn : "", type);
1010 g_dbus_connection_call(handle->dbus_connection,
1011 DBUS_TELEPHONY_SERVICE , handle->path, DBUS_TELEPHONY_NETWORK_INTERFACE,
1012 "SetSelectionMode", param, NULL,
1013 G_DBUS_CALL_FLAGS_NONE, TAPI_UNRESTRICTED_TIMEOUT, handle->ca,
1014 on_response_select_network, evt_cb_data);
1016 return TAPI_API_SUCCESS;
1019 EXPORT_API int tel_set_network_preferred_plmn(
1021 TelNetworkPreferredPlmnOp_t operation,
1022 TelNetworkPreferredPlmnInfo_t *info,
1023 tapi_response_cb callback,
1026 struct tapi_resp_data *evt_cb_data = NULL;
1030 TAPI_RET_ERR_NUM_IF_NOT_SUPPORTED(TELEPHONY_FEATURE);
1031 TAPI_RET_ERR_NUM_IF_FAIL(handle != NULL && info != NULL &&
1032 _check_operation(operation) &&
1033 _check_plmn((const char *)&info->Plmn), TAPI_API_INVALID_PTR);
1035 dbg("Func Entrance");
1037 TAPI_MAKE_RESP_CB_DATA(evt_cb_data, handle, callback, user_data);
1039 switch (info->SystemType) {
1040 case TAPI_NETWORK_SYSTEM_GSM:
1044 case TAPI_NETWORK_SYSTEM_UMTS:
1048 case TAPI_NETWORK_SYSTEM_GPRS:
1052 case TAPI_NETWORK_SYSTEM_EGPRS:
1056 case TAPI_NETWORK_SYSTEM_GSM_AND_UMTS:
1065 param = g_variant_new("(iiis)",
1071 g_dbus_connection_call(handle->dbus_connection,
1072 DBUS_TELEPHONY_SERVICE , handle->path, DBUS_TELEPHONY_NETWORK_INTERFACE,
1073 "SetPreferredPlmn", param, NULL,
1074 G_DBUS_CALL_FLAGS_NONE, TAPI_DEFAULT_TIMEOUT, handle->ca,
1075 on_response_default_set, evt_cb_data);
1077 return TAPI_API_SUCCESS;
1080 EXPORT_API int tel_get_network_preferred_plmn(TapiHandle *handle, tapi_response_cb callback, void *user_data)
1082 struct tapi_resp_data *evt_cb_data = NULL;
1084 dbg("Func Entrance");
1086 TAPI_RET_ERR_NUM_IF_NOT_SUPPORTED(TELEPHONY_FEATURE);
1087 TAPI_RET_ERR_NUM_IF_FAIL(handle != NULL && callback != NULL, TAPI_API_INVALID_PTR);
1089 TAPI_MAKE_RESP_CB_DATA(evt_cb_data, handle, callback, user_data);
1091 g_dbus_connection_call(handle->dbus_connection,
1092 DBUS_TELEPHONY_SERVICE , handle->path, DBUS_TELEPHONY_NETWORK_INTERFACE,
1093 "GetPreferredPlmn", NULL, NULL,
1094 G_DBUS_CALL_FLAGS_NONE, TAPI_DEFAULT_TIMEOUT, handle->ca,
1095 on_response_get_network_preferred_plmn, evt_cb_data);
1097 return TAPI_API_SUCCESS;
1100 EXPORT_API int tel_set_network_mode(TapiHandle *handle, int mode, tapi_response_cb callback, void *user_data)
1102 struct tapi_resp_data *evt_cb_data = NULL;
1105 TAPI_RET_ERR_NUM_IF_NOT_SUPPORTED(TELEPHONY_FEATURE);
1106 TAPI_RET_ERR_NUM_IF_FAIL(handle != NULL &&
1107 _check_network_mode(mode), TAPI_API_INVALID_PTR);
1109 TAPI_MAKE_RESP_CB_DATA(evt_cb_data, handle, callback, user_data);
1111 param = g_variant_new("(i)",
1114 msg("[%s] requested mode:[0x%x]", handle->cp_name, mode);
1116 g_dbus_connection_call(handle->dbus_connection,
1117 DBUS_TELEPHONY_SERVICE , handle->path, DBUS_TELEPHONY_NETWORK_INTERFACE,
1118 "SetMode", param, NULL,
1119 G_DBUS_CALL_FLAGS_NONE, TAPI_UNRESTRICTED_TIMEOUT, handle->ca,
1120 on_response_default_set, evt_cb_data);
1122 return TAPI_API_SUCCESS;
1125 EXPORT_API int tel_get_network_mode(TapiHandle *handle, tapi_response_cb callback, void *user_data)
1127 struct tapi_resp_data *evt_cb_data = NULL;
1129 TAPI_RET_ERR_NUM_IF_NOT_SUPPORTED(TELEPHONY_FEATURE);
1130 TAPI_RET_ERR_NUM_IF_FAIL(handle != NULL && callback != NULL, TAPI_API_INVALID_PTR);
1132 TAPI_MAKE_RESP_CB_DATA(evt_cb_data, handle, callback, user_data);
1134 dbg("[%s] Func Entrance", handle->cp_name);
1136 g_dbus_connection_call(handle->dbus_connection,
1137 DBUS_TELEPHONY_SERVICE , handle->path, DBUS_TELEPHONY_NETWORK_INTERFACE,
1138 "GetMode", NULL, NULL,
1139 G_DBUS_CALL_FLAGS_NONE, TAPI_DEFAULT_TIMEOUT, handle->ca,
1140 on_response_get_network_mode, evt_cb_data);
1142 return TAPI_API_SUCCESS;
1145 EXPORT_API int tel_cancel_network_manual_search(TapiHandle *handle, tapi_response_cb callback, void *user_data)
1147 struct tapi_resp_data *evt_cb_data = NULL;
1149 TAPI_RET_ERR_NUM_IF_NOT_SUPPORTED(TELEPHONY_FEATURE);
1150 TAPI_RET_ERR_NUM_IF_FAIL(handle != NULL, TAPI_API_INVALID_PTR);
1152 TAPI_MAKE_RESP_CB_DATA(evt_cb_data, handle, callback, user_data);
1154 msg("[%s] network search cancel requested", handle->cp_name);
1156 g_dbus_connection_call(handle->dbus_connection,
1157 DBUS_TELEPHONY_SERVICE , handle->path, DBUS_TELEPHONY_NETWORK_INTERFACE,
1158 "SearchCancel", NULL, NULL,
1159 G_DBUS_CALL_FLAGS_NONE, TAPI_DEFAULT_TIMEOUT, handle->ca,
1160 on_response_default_set, evt_cb_data);
1162 return TAPI_API_SUCCESS;
1165 EXPORT_API int tel_get_network_serving(TapiHandle *handle, tapi_response_cb callback, void *user_data)
1167 struct tapi_resp_data *evt_cb_data = NULL;
1169 TAPI_RET_ERR_NUM_IF_NOT_SUPPORTED(TELEPHONY_FEATURE);
1170 TAPI_RET_ERR_NUM_IF_FAIL(handle != NULL && callback != NULL, TAPI_API_INVALID_PTR);
1172 TAPI_MAKE_RESP_CB_DATA(evt_cb_data, handle, callback, user_data);
1174 dbg("[%s] Func Entrance", handle->cp_name);
1176 g_dbus_connection_call(handle->dbus_connection,
1177 DBUS_TELEPHONY_SERVICE , handle->path, DBUS_TELEPHONY_NETWORK_INTERFACE,
1178 "GetServingNetwork", NULL, NULL,
1179 G_DBUS_CALL_FLAGS_NONE, TAPI_DEFAULT_TIMEOUT, handle->ca,
1180 on_response_get_network_serving, evt_cb_data);
1182 return TAPI_API_SUCCESS;
1185 EXPORT_API int tel_get_network_neighboring_cell_info(TapiHandle *handle, tapi_response_cb callback, void *user_data)
1187 struct tapi_resp_data *evt_cb_data = NULL;
1189 TAPI_RET_ERR_NUM_IF_NOT_SUPPORTED(TELEPHONY_FEATURE);
1190 TAPI_RET_ERR_NUM_IF_FAIL(handle != NULL && callback != NULL, TAPI_API_INVALID_PTR);
1192 TAPI_MAKE_RESP_CB_DATA(evt_cb_data, handle, callback, user_data);
1194 dbg("[%s] Func Entrance", handle->cp_name);
1196 g_dbus_connection_call(handle->dbus_connection,
1197 DBUS_TELEPHONY_SERVICE , handle->path, DBUS_TELEPHONY_NETWORK_INTERFACE,
1198 "GetNgbrCellInfo", NULL, NULL,
1199 G_DBUS_CALL_FLAGS_NONE, TAPI_DEFAULT_TIMEOUT, handle->ca,
1200 on_response_get_neighboring_cell_info, evt_cb_data);
1202 return TAPI_API_SUCCESS;
1205 EXPORT_API int tel_set_network_default_data_subscription(TapiHandle *handle, tapi_response_cb callback, void *user_data)
1207 struct tapi_resp_data *evt_cb_data = NULL;
1209 TAPI_RET_ERR_NUM_IF_NOT_SUPPORTED(TELEPHONY_FEATURE);
1210 TAPI_RET_ERR_NUM_IF_FAIL(handle, TAPI_API_INVALID_PTR);
1211 TAPI_RET_ERR_NUM_IF_FAIL(callback, TAPI_API_INVALID_PTR);
1213 TAPI_MAKE_RESP_CB_DATA(evt_cb_data, handle, callback, user_data);
1215 msg("[%s] Func Entrance", handle->cp_name);
1218 g_dbus_connection_call(handle->dbus_connection,
1219 DBUS_TELEPHONY_SERVICE , handle->path, DBUS_TELEPHONY_NETWORK_INTERFACE,
1220 "SetDefaultDataSubscription", NULL, NULL,
1221 G_DBUS_CALL_FLAGS_NONE, TAPI_DEFAULT_TIMEOUT, handle->ca,
1222 on_response_default_set, evt_cb_data);
1224 return TAPI_API_SUCCESS;
1227 EXPORT_API int tel_set_network_emergency_callback_mode(TapiHandle *handle, TelNetworkEmergencyCallbackMode_t mode, tapi_response_cb callback, void *user_data)
1229 struct tapi_resp_data *evt_cb_data = NULL;
1232 TAPI_RET_ERR_NUM_IF_NOT_SUPPORTED(TELEPHONY_FEATURE);
1233 TAPI_RET_ERR_NUM_IF_FAIL(handle != NULL &&
1234 _check_emergency_callback_mode(mode), TAPI_API_INVALID_PTR);
1236 TAPI_MAKE_RESP_CB_DATA(evt_cb_data, handle, callback, user_data);
1238 param = g_variant_new("(i)", mode);
1240 msg("[%s] emergency callback mode :[%d]", handle->cp_name, mode);
1242 g_dbus_connection_call(handle->dbus_connection,
1243 DBUS_TELEPHONY_SERVICE , handle->path, DBUS_TELEPHONY_NETWORK_INTERFACE,
1244 "SetEmergencyCallbackMode", param, NULL,
1245 G_DBUS_CALL_FLAGS_NONE, TAPI_DEFAULT_TIMEOUT, handle->ca,
1246 on_response_default_set, evt_cb_data);
1248 return TAPI_API_SUCCESS;
1251 EXPORT_API int tel_set_network_roaming_preference(TapiHandle *handle, TelNetworkPrefNetType_t roam_pref, tapi_response_cb callback, void *user_data)
1253 struct tapi_resp_data *evt_cb_data = NULL;
1256 TAPI_RET_ERR_NUM_IF_NOT_SUPPORTED(TELEPHONY_FEATURE);
1257 TAPI_RET_ERR_NUM_IF_FAIL(handle != NULL &&
1258 _check_roaming_preference(roam_pref), TAPI_API_INVALID_PTR);
1260 TAPI_MAKE_RESP_CB_DATA(evt_cb_data, handle, callback, user_data);
1262 param = g_variant_new("(i)", roam_pref);
1264 msg("[%s] roam_pref:[%d]", handle->cp_name, roam_pref);
1266 g_dbus_connection_call(handle->dbus_connection,
1267 DBUS_TELEPHONY_SERVICE , handle->path, DBUS_TELEPHONY_NETWORK_INTERFACE,
1268 "SetRoamingPreference", param, NULL,
1269 G_DBUS_CALL_FLAGS_NONE, TAPI_DEFAULT_TIMEOUT, handle->ca,
1270 on_response_default_set, evt_cb_data);
1272 return TAPI_API_SUCCESS;
1276 EXPORT_API int tel_get_network_roaming_preference(TapiHandle *handle, tapi_response_cb callback, void *user_data)
1278 struct tapi_resp_data *evt_cb_data = NULL;
1280 TAPI_RET_ERR_NUM_IF_NOT_SUPPORTED(TELEPHONY_FEATURE);
1281 TAPI_RET_ERR_NUM_IF_FAIL(handle != NULL && callback != NULL, TAPI_API_INVALID_PTR);
1283 TAPI_MAKE_RESP_CB_DATA(evt_cb_data, handle, callback, user_data);
1285 dbg("[%s] Func Entrance", handle->cp_name);
1287 g_dbus_connection_call(handle->dbus_connection,
1288 DBUS_TELEPHONY_SERVICE , handle->path, DBUS_TELEPHONY_NETWORK_INTERFACE,
1289 "GetRoamingPreference", NULL, NULL,
1290 G_DBUS_CALL_FLAGS_NONE, TAPI_DEFAULT_TIMEOUT, handle->ca,
1291 on_response_get_network_roaming_preference, evt_cb_data);
1293 return TAPI_API_SUCCESS;
1297 EXPORT_API int tel_get_network_default_data_subscription(TapiHandle *handle, TelNetworkDefaultDataSubs_t *default_subscription)
1299 GError *gerr = NULL;
1300 GVariant *sync_gv = NULL;
1303 TapiResult_t ret = TAPI_API_OPERATION_FAILED;
1305 TAPI_RET_ERR_NUM_IF_NOT_SUPPORTED(TELEPHONY_FEATURE);
1306 TAPI_RET_ERR_NUM_IF_FAIL(handle, TAPI_API_INVALID_PTR);
1307 TAPI_RET_ERR_NUM_IF_FAIL(default_subscription, TAPI_API_INVALID_PTR);
1309 sync_gv = g_dbus_connection_call_sync(handle->dbus_connection,
1310 DBUS_TELEPHONY_SERVICE, handle->path, DBUS_TELEPHONY_NETWORK_INTERFACE,
1311 "GetDefaultDataSubscription", NULL, NULL,
1312 G_DBUS_CALL_FLAGS_NONE, TAPI_DEFAULT_TIMEOUT, handle->ca,
1315 g_variant_get(sync_gv, "(ii)", &subs, &result);
1318 *default_subscription = subs;
1320 *default_subscription = TAPI_NETWORK_DEFAULT_DATA_SUBS_UNKNOWN;
1322 msg("'default' Data Subscription: [%d]", subs);
1324 g_variant_unref(sync_gv);
1325 ret = TAPI_API_SUCCESS;
1328 err("Get Data Subscription failed: [%s]", gerr->message);
1329 if (strstr(gerr->message, "AccessDenied"))
1330 ret = TAPI_API_ACCESS_DENIED;
1338 EXPORT_API int tel_set_network_default_subscription(TapiHandle *handle, tapi_response_cb callback, void *user_data)
1340 struct tapi_resp_data *evt_cb_data = NULL;
1342 TAPI_RET_ERR_NUM_IF_NOT_SUPPORTED(TELEPHONY_FEATURE);
1343 TAPI_RET_ERR_NUM_IF_FAIL(handle, TAPI_API_INVALID_PTR);
1344 TAPI_RET_ERR_NUM_IF_FAIL(callback, TAPI_API_INVALID_PTR);
1346 TAPI_MAKE_RESP_CB_DATA(evt_cb_data, handle, callback, user_data);
1348 dbg("[%s] Set 'default' Subscription (for CS)", handle->cp_name);
1351 g_dbus_connection_call(handle->dbus_connection,
1352 DBUS_TELEPHONY_SERVICE , handle->path, DBUS_TELEPHONY_NETWORK_INTERFACE,
1353 "SetDefaultSubscription", NULL, NULL,
1354 G_DBUS_CALL_FLAGS_NONE, TAPI_DEFAULT_TIMEOUT, handle->ca,
1355 on_response_default_set, evt_cb_data);
1357 return TAPI_API_SUCCESS;
1360 EXPORT_API int tel_get_network_default_subscription(TapiHandle *handle, TelNetworkDefaultSubs_t *default_subscription)
1362 GError *gerr = NULL;
1363 GVariant *sync_gv = NULL;
1366 TapiResult_t ret = TAPI_API_OPERATION_FAILED;
1368 TAPI_RET_ERR_NUM_IF_NOT_SUPPORTED(TELEPHONY_FEATURE);
1369 TAPI_RET_ERR_NUM_IF_FAIL(handle, TAPI_API_INVALID_PTR);
1370 TAPI_RET_ERR_NUM_IF_FAIL(default_subscription, TAPI_API_INVALID_PTR);
1372 sync_gv = g_dbus_connection_call_sync(handle->dbus_connection,
1373 DBUS_TELEPHONY_SERVICE, handle->path, DBUS_TELEPHONY_NETWORK_INTERFACE,
1374 "GetDefaultSubscription", NULL, NULL,
1375 G_DBUS_CALL_FLAGS_NONE, TAPI_DEFAULT_TIMEOUT, handle->ca,
1378 g_variant_get(sync_gv, "(ii)", &subs, &result);
1381 *default_subscription = subs;
1383 *default_subscription = TAPI_NETWORK_DEFAULT_SUBS_UNKNOWN;
1384 dbg("'default' Subscription (for CS): [%d]", subs);
1386 g_variant_unref(sync_gv);
1387 ret = TAPI_API_SUCCESS;
1390 err("Get 'default' Subscription (for CS) failed: [%s]", gerr->message);
1391 if (strstr(gerr->message, "AccessDenied"))
1392 ret = TAPI_API_ACCESS_DENIED;