2 * Copyright 2012 Samsung Electronics Co., Ltd
4 * Licensed under the Flora License, Version 1.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
8 * http://www.tizenopensource.org/license
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
17 #include "vc-core-ecc.h"
18 #include "vc-core-util.h"
21 * This function checks whether the given number is emergency number by verifying with no sim emergency numbers
23 * @return TRUE if the number is emergency number, FALSE otherwise
24 * @param[in] pNumber number to be verified
26 static gboolean __vc_core_ecc_check_emergency_number_nosim(const char *pNumber);
28 static char *gcall_vc_ecc_numbers_default[] = {
34 * This function checks whether the given number is emergency number by verifying with sim emergency numbers
36 * @return TRUE if the number is emergency number, FALSE otherwise
37 * @param[in] card_type simcard type
38 * @param[in] pNumber number to be verified
40 gboolean _vc_core_ecc_check_emergency_number(TapiHandle *tapi_handle, TelSimCardType_t card_type, char *pNumber, gboolean b_is_no_sim, int *ecc_category)
44 char **p_ecc_numbers = NULL;
45 TapiResult_t tapi_err = TAPI_API_SUCCESS;
46 unsigned long mcc = 0; /* for checking Emergency number for each country */
47 unsigned long mnc = 0; /* for checking Emergency number for each operator */
49 VOICECALL_RETURN_FALSE_IF_FAIL(pNumber != NULL);
50 VOICECALL_RETURN_FALSE_IF_FAIL(ecc_category != NULL);
52 CALL_ENG_DEBUG(ENG_DEBUG, "pNumber = %s", pNumber);
55 if (b_is_no_sim == TRUE) {
56 return __vc_core_ecc_check_emergency_number_nosim(pNumber);
59 _vc_core_util_get_mcc(&mcc);
60 _vc_core_util_get_mnc(&mnc);
63 case TAPI_SIM_CARD_TYPE_GSM:
65 TelSimEccList_t sim_ecc_list; /* used to get data for the Ecc information for 2G and 3G. */
67 CALL_ENG_DEBUG(ENG_DEBUG, "[SimCardType=SIM_CARD_TYPE_GSM]");
68 memset(&sim_ecc_list, 0x00, sizeof(TelSimEccList_t));
70 /*TAPI api Compliance */
71 /*To get Emergency data of 2G */
72 tapi_err = tel_get_sim_ecc(tapi_handle, &sim_ecc_list);
74 if (TAPI_API_SUCCESS != tapi_err) {
75 CALL_ENG_DEBUG(ENG_DEBUG, "tapi_sim_get_ecc_info failed, tapi_err=%d", tapi_err);
79 if (sim_ecc_list.ecc_count > 0) {
80 CALL_ENG_DEBUG(ENG_DEBUG, "GSM pNumber ecc1(%s) ecc2(%s) ecc3(%s) ecc4(%s) ecc5(%s)",
81 sim_ecc_list.list[0].number, sim_ecc_list.list[1].number, sim_ecc_list.list[2].number, sim_ecc_list.list[3].number, sim_ecc_list.list[4].number);
83 if ((strcmp(pNumber, sim_ecc_list.list[0].number) == 0)
84 || (strcmp(pNumber, sim_ecc_list.list[1].number) == 0)
85 || (strcmp(pNumber, sim_ecc_list.list[2].number) == 0)
86 || (strcmp(pNumber, sim_ecc_list.list[3].number) == 0)
87 || (strcmp(pNumber, sim_ecc_list.list[4].number) == 0)) {
88 CALL_ENG_DEBUG(ENG_DEBUG, "_vc_core_check_emergency_number: return TRUE");
94 case TAPI_SIM_CARD_TYPE_USIM:
96 TelSimEccList_t usim_ecc_list; /* used to get data for the Ecc information for both 2G and 3G */
98 CALL_ENG_DEBUG(ENG_DEBUG, "SimCardType=SIM_CARD_TYPE_USIM");
99 memset(&usim_ecc_list, 0x00, sizeof(TelSimEccList_t));
101 /*Synchronous function used to get ECC data */
102 tapi_err = tel_get_sim_ecc(tapi_handle, &usim_ecc_list);
104 if (TAPI_API_SUCCESS != tapi_err) {
105 CALL_ENG_DEBUG(ENG_DEBUG, "tapi_sim_get_usim_ecc_info failed, tapi_err=%d", tapi_err);
109 if (usim_ecc_list.ecc_count > 0) {
110 for (i = 0; i < usim_ecc_list.ecc_count; i++) {
111 CALL_ENG_DEBUG(ENG_DEBUG, "[ecc=%s, category:[%d]]", usim_ecc_list.list[i].number, usim_ecc_list.list[i].category);
112 if (!strcmp(pNumber, usim_ecc_list.list[i].number)) {
113 *ecc_category = usim_ecc_list.list[i].category;
114 CALL_ENG_DEBUG(ENG_DEBUG, "uecc matched!!");
121 case TAPI_SIM_CARD_TYPE_RUIM:
122 CALL_ENG_DEBUG(ENG_DEBUG, "SimCardType=TAPI_SIM_CARD_TYPE_RUIM");
124 case TAPI_SIM_CARD_TYPE_IMS:
125 CALL_ENG_DEBUG(ENG_DEBUG, "SimCardType=TAPI_SIM_CARD_TYPE_IMS");
127 case TAPI_SIM_CARD_TYPE_UNKNOWN:
128 CALL_ENG_DEBUG(ENG_DEBUG, "SimCardType=SIM_CARD_TYPE_UNKNOWN");
132 /* There is no ecc number in the SIM card. */
133 CALL_ENG_DEBUG(ENG_DEBUG, "mcc : %ld", mcc);
137 ecc_count = CALL_ECC_MAX_COUNT_DEFAULT;
138 p_ecc_numbers = gcall_vc_ecc_numbers_default; /*112, 911 */
142 VOICECALL_RETURN_FALSE_IF_FAIL(ecc_count > 0);
143 VOICECALL_RETURN_FALSE_IF_FAIL(p_ecc_numbers != NULL);
145 for (i = 0; i < ecc_count; i++) {
146 if (!strcmp(pNumber, p_ecc_numbers[i])) {
147 CALL_ENG_DEBUG(ENG_DEBUG, "pNumber (%s), p_ecc_numbers[%d] (%s)", pNumber, i, p_ecc_numbers[i]);
152 CALL_ENG_DEBUG(ENG_DEBUG, "No emegency number...");
156 /* No SIM - Default*/
157 static char *gcall_vc_ecc_numbers_nosim_default[] = {
167 static gboolean __vc_core_ecc_check_emergency_number_nosim(const char *pNumber)
171 char **p_nosim_ecc_numbers = NULL;
172 unsigned long mcc = 0; /* for checking Emergency number for each country */
173 unsigned long mnc = 0; /* for checking Emergency number for each operator */
175 VOICECALL_RETURN_FALSE_IF_FAIL(pNumber != NULL);
177 if (strlen(pNumber) == 0) {
178 CALL_ENG_DEBUG(ENG_DEBUG, "pNumber's length is ZERO so return FALSE");
182 _vc_core_util_get_mcc(&mcc);
183 _vc_core_util_get_mnc(&mnc);
185 CALL_ENG_DEBUG(ENG_DEBUG, "mcc : %ld", mcc);
189 ecc_count = CALL_ECC_MAX_COUNT_DEFAULT_NO_SIM;
190 p_nosim_ecc_numbers = gcall_vc_ecc_numbers_nosim_default; /*3GPP SPecs = 000, 08, 112, 100, 118, 119, 911 */
194 VOICECALL_RETURN_FALSE_IF_FAIL(ecc_count > 0);
195 VOICECALL_RETURN_FALSE_IF_FAIL(p_nosim_ecc_numbers != NULL);
197 for (i = 0; i < ecc_count; i++) {
198 if (!strcmp(pNumber, p_nosim_ecc_numbers[i])) {
199 CALL_ENG_DEBUG(ENG_DEBUG, "pNumber (%s), p_nosim_ecc_numbers[%d] (%s)", pNumber, i, p_nosim_ecc_numbers[i]);
204 CALL_ENG_DEBUG(ENG_DEBUG, "No emegency number...");