• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 2021-2022 Huawei Device Co., Ltd.
3  * Licensed under the Apache License, Version 2.0 (the "License");
4  * you may not use this file except in compliance with the License.
5  * You may obtain a copy of the License at
6  *
7  *     http://www.apache.org/licenses/LICENSE-2.0
8  *
9  * Unless required by applicable law or agreed to in writing, software
10  * distributed under the License is distributed on an "AS IS" BASIS,
11  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12  * See the License for the specific language governing permissions and
13  * limitations under the License.
14  */
15 
16 #include "resource_utils.h"
17 
18 #include <sys/stat.h>
19 
20 #include "bundle_mgr_proxy.h"
21 #include "if_system_ability_manager.h"
22 #include "iservice_registry.h"
23 #include "singleton.h"
24 #include "system_ability_definition.h"
25 #include "telephony_log_wrapper.h"
26 
27 namespace OHOS {
28 namespace Telephony {
29 constexpr int32_t HAP_USER_ID = 100;
30 const std::string ResourceUtils::RESOURCE_HAP_BUNDLE_NAME = "ohos.telephony.resources";
31 const std::string ResourceUtils::IS_NOTIFY_USER_RESTRICTIED_CHANGE = "is_notify_user_restrictied_change";
32 const std::string ResourceUtils::IS_CS_CAPABLE = "is_cs_capable";
33 const std::string ResourceUtils::IS_SWITCH_PHONE_REG_CHANGE = "is_switch_phone_reg_change";
34 const std::string ResourceUtils::SPN_FORMATS = "spn_formats";
35 const std::string ResourceUtils::EMERGENCY_CALLS_ONLY = "emergency_calls_only";
36 const std::string ResourceUtils::OUT_OF_SERIVCE = "out_of_serivce";
37 const std::string ResourceUtils::CMCC = "cmcc";
38 const std::string ResourceUtils::CUCC = "cucc";
39 const std::string ResourceUtils::CTCC = "ctcc";
40 const std::string ResourceUtils::CALL_FAILED_UNASSIGNED_NUMBER = "call_failed_unassigned_number";
41 const std::string ResourceUtils::CALL_FAILED_NO_ROUTE_TO_DESTINATION = "call_failed_no_route_to_destination";
42 const std::string ResourceUtils::CALL_FAILED_CHANNEL_UNACCEPTABLE = "call_failed_channel_unacceptable";
43 const std::string ResourceUtils::CALL_FAILED_OPERATOR_DETERMINED_BARRING = "call_failed_operator_determined_barring";
44 const std::string ResourceUtils::CALL_FAILED_NORMAL_CALL_CLEARING = "call_failed_normal_call_clearing";
45 const std::string ResourceUtils::CALL_FAILED_USER_BUSY = "call_failed_user_busy";
46 const std::string ResourceUtils::CALL_FAILED_NO_USER_RESPONDING = "call_failed_no_user_responding";
47 const std::string ResourceUtils::CALL_FAILED_USER_ALERTING_NO_ANSWER = "call_failed_user_no_answer";
48 const std::string ResourceUtils::CALL_FAILED_CALL_REJECTED = "call_failed_call_rejected";
49 const std::string ResourceUtils::CALL_FAILED_NUMBER_CHANGED = "call_failed_number_changed";
50 const std::string ResourceUtils::CALL_FAILED_CALL_REJECTED_DESTINATION = "call_failed_call_rejected_destination";
51 const std::string ResourceUtils::CALL_FAILED_FAILED_PRE_EMPTION = "call_failed_pre_emption";
52 const std::string ResourceUtils::CALL_FAILED_NON_SELECTED_USER_CLEARING = "call_failed_non_selected_user_clearing";
53 const std::string ResourceUtils::CALL_FAILED_DESTINATION_OUT_OF_ORDER = "call_failed_destination_out_of_order";
54 const std::string ResourceUtils::CALL_FAILED_INVALID_NUMBER_FORMAT = "call_failed_invalid_number_format";
55 const std::string ResourceUtils::CALL_FAILED_FACILITY_REJECTED = "call_failed_facility_rejected";
56 const std::string ResourceUtils::CALL_FAILED_RESPONSE_TO_STATUS_ENQUIRY = "call_failed_response_to_status_enquiry";
57 const std::string ResourceUtils::CALL_FAILED_NORMAL_UNSPECIFIED = "call_failed_normal_unspecified";
58 const std::string ResourceUtils::CALL_FAILED_NO_CIRCUIT_CHANNEL_AVAILABLE = "call_failed_no_circuit_channel_available";
59 const std::string ResourceUtils::CALL_FAILED_NETWORK_OUT_OF_ORDER = "call_failed_network_out_of_order";
60 const std::string ResourceUtils::CALL_FAILED_TEMPORARY_FAILURE = "call_failed_temporary_failure";
61 const std::string ResourceUtils::CALL_FAILED_SWITCHING_EQUIPMENT_CONGESTION =
62     "call_failed_switching_equipment_congestion";
63 const std::string ResourceUtils::CALL_FAILED_ACCESS_INFORMATION_DISCARDED = "call_failed_access_information_discarded";
64 const std::string ResourceUtils::CALL_FAILED_REQUEST_CIRCUIT_CHANNEL_NOT_AVAILABLE =
65     "call_failed_requested_circuit_or_channel_not_available";
66 const std::string ResourceUtils::CALL_FAILED_RESOURCES_UNAVAILABLE_UNSPECIFIED =
67     "call_failed_resources_unavailable_or_unspecified";
68 const std::string ResourceUtils::CALL_FAILED_QUALITY_OF_SERVICE_UNAVAILABLE =
69     "call_failed_quality_of_service_unavailable";
70 const std::string ResourceUtils::CALL_FAILED_REQUESTED_FACILITY_NOT_SUBSCRIBED =
71     "call_failed_requested_facility_not_subscribed";
72 const std::string ResourceUtils::CALL_FAILED_INCOMING_CALLS_BARRED_WITHIN_THE_CUG =
73     "call_failed_incoming_calls_barred_within_the_CUG";
74 const std::string ResourceUtils::CALL_FAILED_BEARER_CAPABILITY_NOT_AUTHORIZED =
75     "call_failed_bearer_capability_not_authorized";
76 const std::string ResourceUtils::CALL_FAILED_BEARER_CAPABILITY_NOT_PRESENTLY_AVAILABLE =
77     "call_failed_bearer_capability_not_presently_unavailable";
78 const std::string ResourceUtils::CALL_FAILED_SERVICE_OR_OPTION_NOT_AVAILABLE_UNSPECIFIED =
79     "call_failed_service_or_option_not_available_or_unspecified";
80 const std::string ResourceUtils::CALL_FAILED_BEARER_SERVICE_NOT_IMPLEMENTED =
81     "call_failed_bearer_service_not_implemented";
82 const std::string ResourceUtils::CALL_FAILED_ACM_EQUALTO_OR_GREATE_THAN_ACMMAX =
83     "call_failed_acm_equal_to_or_greater_than_acmmax";
84 const std::string ResourceUtils::CALL_FAILED_REQUESTED_FACILITY_NOT_IMPLEMENTED =
85     "call_failed_requested_facility_not_implemented";
86 const std::string ResourceUtils::CALL_FAILED_ONLY_RESTRICTED_DIGITAL_INFO_BEARER_CAPABILITY_IS_AVAILABLE =
87     "call_failed_only_restricted_digital_info_bearer_capability_is_available";
88 const std::string ResourceUtils::CALL_FAILED_SERVICE_OR_OPTION_NOT_IMPLEMENTED_UNSPECIFIED =
89     "call_failed_service_or_option_not_implemented";
90 const std::string ResourceUtils::CALL_FAILED_INVALID_TRANSACTION_IDENTIFIER_VALUE =
91     "call_failed_invalid_transaction_identifier_value";
92 const std::string ResourceUtils::CALL_FAILED_USER_NOT_MEMBER_OF_CUG = "call_failed_user_not_member_of_CUG";
93 const std::string ResourceUtils::CALL_FAILED_INCOMPATIBLE_DESTINATION = "call_failed_incompatible_destination";
94 const std::string ResourceUtils::CALL_FAILED_INVALID_TRANSIT_NETWORK_SELECTION =
95     "call_failed_invalid_transit_network_selection";
96 const std::string ResourceUtils::CALL_FAILED_SEMANTICALLY_INCORRECT_MESSAGE =
97     "call_failed_semantically_incorrect_message";
98 const std::string ResourceUtils::CALL_FAILED_INVALID_MANDATORY_INFORMATION =
99     "call_failed_invalid_mandatory_information";
100 const std::string ResourceUtils::CALL_FAILED_MESSAGE_TYPE_NON_EXISTENT_OR_NOT_IMPLEMENTED =
101     "call_failed_message_type_non_existent_or_not_implemented";
102 const std::string ResourceUtils::CALL_FAILED_MESSAGE_TYPE_NOT_COMPATIBLE_WITH_PROTOCOL_STATE =
103     "call_failed_message_type_not_compatible_with_protocol_state";
104 const std::string ResourceUtils::CALL_FAILED_INFORMATION_ELEMENT_NON_EXISTENT_OR_NOT_IMPLEMENTED =
105     "call_failed_information_element_non_existent_or_not_implemented";
106 const std::string ResourceUtils::CALL_FAILED_CONDITIONAL_IE_ERROR = "call_failed_conditional_IE_error";
107 const std::string ResourceUtils::CALL_FAILED_MESSAGE_NOT_COMPATIBLE_WITH_PROTOCOL_STATE =
108     "call_failed_message_not_compatible_with_protocol_state";
109 const std::string ResourceUtils::CALL_FAILED_RECOVERY_ON_TIMER_EXPIRED = "call_failed_recovery_on_timer_expired";
110 const std::string ResourceUtils::CALL_FAILED_PROTOCOL_ERROR_UNSPECIFIED = "call_failed_protocol_error_unspecified";
111 const std::string ResourceUtils::CALL_FAILED_INTERWORKING_UNSPECIFIED = "call_failed_interworking_unspecified";
112 const std::string ResourceUtils::CALL_FAILED_CALL_BARRED = "call_failed_call_barred";
113 const std::string ResourceUtils::CALL_FAILED_FDN_BLOCKED = "call_failed_fdn_blocked";
114 const std::string ResourceUtils::CALL_FAILED_IMSI_UNKNOWN_IN_VLR = "call_failed_imsi_unknow";
115 const std::string ResourceUtils::CALL_FAILED_IMEI_NOT_ACCEPTED = "call_failed_imei_not_accepted";
116 const std::string ResourceUtils::CALL_FAILED_IMEISV_NOT_ACCEPTED = "call_failed_imeisv_not_accepted";
117 const std::string ResourceUtils::CALL_FAILED_DIAL_MODIFIED_TO_USSD = "call_failed_dial_modify_to_ussd";
118 const std::string ResourceUtils::CALL_FAILED_DIAL_MODIFIED_TO_SS = "call_failed_dial_modify_to_ss";
119 const std::string ResourceUtils::CALL_FAILED_DIAL_MODIFIED_TO_DIAL = "call_failed_dial_modify_to_dial";
120 const std::string ResourceUtils::CALL_FAILED_RADIO_OFF = "call_failed_radio_off";
121 const std::string ResourceUtils::CALL_FAILED_OUT_OF_SERVICE = "call_failed_out_of_service";
122 const std::string ResourceUtils::CALL_FAILED_NO_VALID_SIM = "call_failed_no_valid_sim";
123 const std::string ResourceUtils::CALL_FAILED_RADIO_INTERNAL_ERROR = "call_failed_radio_internal_error";
124 const std::string ResourceUtils::CALL_FAILED_NETWORK_RESP_TIMEOUT = "call_failed_network_response_timeout";
125 const std::string ResourceUtils::CALL_FAILED_NETWORK_REJECT = "call_failed_network_reject";
126 const std::string ResourceUtils::CALL_FAILED_RADIO_ACCESS_FAILURE = "call_failed_radio_access_failure";
127 const std::string ResourceUtils::CALL_FAILED_RADIO_LINK_FAILURE = "call_failed_radio_link_failure";
128 const std::string ResourceUtils::CALL_FAILED_RADIO_LINK_LOST = "call_failed_radio_link_lost";
129 const std::string ResourceUtils::CALL_FAILED_RADIO_UPLINK_FAILURE = "call_failed_radio_uplink_failure";
130 const std::string ResourceUtils::CALL_FAILED_RADIO_SETUP_FAILURE = "call_failed_radio_setup_failure";
131 const std::string ResourceUtils::CALL_FAILED_RADIO_RELEASE_NORMAL = "call_failed_radio_release_normal";
132 const std::string ResourceUtils::CALL_FAILED_RADIO_RELEASE_ABNORMAL = "call_failed_radio_release_abnormal";
133 const std::string ResourceUtils::CALL_FAILED_ACCESS_CLASS_BLOCKED = "call_failed_access_class_barring";
134 const std::string ResourceUtils::CALL_FAILED_NETWORK_DETACH = "call_failed_network_detach";
135 const std::string ResourceUtils::CALL_FAILED_INVALID_PARAMETER = "call_failed_invalid_parameter";
136 const std::string ResourceUtils::CALL_FAILED_SIM_NOT_EXIT = "call_failed_sim_not_exit";
137 const std::string ResourceUtils::CALL_FAILED_SIM_PIN_NEED = "call_failed_sim_pin_need";
138 const std::string ResourceUtils::CALL_FAILED_CALL_NOT_ALLOW = "call_failed_call_not_allow";
139 const std::string ResourceUtils::CALL_FAILED_SIM_INVALID = "call_failed_sim_invalid";
140 const std::string ResourceUtils::CALL_FAILED_UNKNOWN = "call_failed_unknow";
141 
142 const std::map<std::string, ResourceUtils::ResourceType> ResourceUtils::mapResourceNameType_ = {
143     { ResourceUtils::IS_NOTIFY_USER_RESTRICTIED_CHANGE, ResourceUtils::ResourceType::ResourceTypeBoolean },
144     { ResourceUtils::IS_CS_CAPABLE, ResourceUtils::ResourceType::ResourceTypeBoolean },
145     { ResourceUtils::IS_SWITCH_PHONE_REG_CHANGE, ResourceUtils::ResourceType::ResourceTypeBoolean },
146     { ResourceUtils::SPN_FORMATS, ResourceUtils::ResourceType::ResourceTypeArrayString },
147     { ResourceUtils::EMERGENCY_CALLS_ONLY, ResourceUtils::ResourceType::ResourceTypeString },
148     { ResourceUtils::OUT_OF_SERIVCE, ResourceUtils::ResourceType::ResourceTypeString },
149     { ResourceUtils::CMCC, ResourceUtils::ResourceType::ResourceTypeString },
150     { ResourceUtils::CUCC, ResourceUtils::ResourceType::ResourceTypeString },
151     { ResourceUtils::CTCC, ResourceUtils::ResourceType::ResourceTypeString },
152     { ResourceUtils::CALL_FAILED_UNASSIGNED_NUMBER, ResourceUtils::ResourceType::ResourceTypeString },
153     { ResourceUtils::CALL_FAILED_NO_ROUTE_TO_DESTINATION, ResourceUtils::ResourceType::ResourceTypeString },
154     { ResourceUtils::CALL_FAILED_CHANNEL_UNACCEPTABLE, ResourceUtils::ResourceType::ResourceTypeString },
155     { ResourceUtils::CALL_FAILED_OPERATOR_DETERMINED_BARRING, ResourceUtils::ResourceType::ResourceTypeString },
156     { ResourceUtils::CALL_FAILED_NORMAL_CALL_CLEARING, ResourceUtils::ResourceType::ResourceTypeString },
157     { ResourceUtils::CALL_FAILED_USER_BUSY, ResourceUtils::ResourceType::ResourceTypeString },
158     { ResourceUtils::CALL_FAILED_NO_USER_RESPONDING, ResourceUtils::ResourceType::ResourceTypeString },
159     { ResourceUtils::CALL_FAILED_USER_ALERTING_NO_ANSWER, ResourceUtils::ResourceType::ResourceTypeString },
160     { ResourceUtils::CALL_FAILED_CALL_REJECTED, ResourceUtils::ResourceType::ResourceTypeString },
161     { ResourceUtils::CALL_FAILED_NUMBER_CHANGED, ResourceUtils::ResourceType::ResourceTypeString },
162     { ResourceUtils::CALL_FAILED_CALL_REJECTED_DESTINATION, ResourceUtils::ResourceType::ResourceTypeString },
163     { ResourceUtils::CALL_FAILED_FAILED_PRE_EMPTION, ResourceUtils::ResourceType::ResourceTypeString },
164     { ResourceUtils::CALL_FAILED_NON_SELECTED_USER_CLEARING, ResourceUtils::ResourceType::ResourceTypeString },
165     { ResourceUtils::CALL_FAILED_DESTINATION_OUT_OF_ORDER, ResourceUtils::ResourceType::ResourceTypeString },
166     { ResourceUtils::CALL_FAILED_INVALID_NUMBER_FORMAT, ResourceUtils::ResourceType::ResourceTypeString },
167     { ResourceUtils::CALL_FAILED_FACILITY_REJECTED, ResourceUtils::ResourceType::ResourceTypeString },
168     { ResourceUtils::CALL_FAILED_RESPONSE_TO_STATUS_ENQUIRY, ResourceUtils::ResourceType::ResourceTypeString },
169     { ResourceUtils::CALL_FAILED_NORMAL_UNSPECIFIED, ResourceUtils::ResourceType::ResourceTypeString },
170     { ResourceUtils::CALL_FAILED_NO_CIRCUIT_CHANNEL_AVAILABLE, ResourceUtils::ResourceType::ResourceTypeString },
171     { ResourceUtils::CALL_FAILED_NETWORK_OUT_OF_ORDER, ResourceUtils::ResourceType::ResourceTypeString },
172     { ResourceUtils::CALL_FAILED_TEMPORARY_FAILURE, ResourceUtils::ResourceType::ResourceTypeString },
173     { ResourceUtils::CALL_FAILED_SWITCHING_EQUIPMENT_CONGESTION, ResourceUtils::ResourceType::ResourceTypeString },
174     { ResourceUtils::CALL_FAILED_ACCESS_INFORMATION_DISCARDED, ResourceUtils::ResourceType::ResourceTypeString },
175     { ResourceUtils::CALL_FAILED_REQUEST_CIRCUIT_CHANNEL_NOT_AVAILABLE,
176         ResourceUtils::ResourceType::ResourceTypeString },
177     { ResourceUtils::CALL_FAILED_RESOURCES_UNAVAILABLE_UNSPECIFIED, ResourceUtils::ResourceType::ResourceTypeString },
178     { ResourceUtils::CALL_FAILED_QUALITY_OF_SERVICE_UNAVAILABLE, ResourceUtils::ResourceType::ResourceTypeString },
179     { ResourceUtils::CALL_FAILED_REQUESTED_FACILITY_NOT_SUBSCRIBED, ResourceUtils::ResourceType::ResourceTypeString },
180     { ResourceUtils::CALL_FAILED_INCOMING_CALLS_BARRED_WITHIN_THE_CUG,
181         ResourceUtils::ResourceType::ResourceTypeString },
182     { ResourceUtils::CALL_FAILED_BEARER_CAPABILITY_NOT_AUTHORIZED, ResourceUtils::ResourceType::ResourceTypeString },
183     { ResourceUtils::CALL_FAILED_BEARER_CAPABILITY_NOT_PRESENTLY_AVAILABLE,
184         ResourceUtils::ResourceType::ResourceTypeString },
185     { ResourceUtils::CALL_FAILED_SERVICE_OR_OPTION_NOT_AVAILABLE_UNSPECIFIED,
186         ResourceUtils::ResourceType::ResourceTypeString },
187     { ResourceUtils::CALL_FAILED_BEARER_SERVICE_NOT_IMPLEMENTED, ResourceUtils::ResourceType::ResourceTypeString },
188     { ResourceUtils::CALL_FAILED_ACM_EQUALTO_OR_GREATE_THAN_ACMMAX, ResourceUtils::ResourceType::ResourceTypeString },
189     { ResourceUtils::CALL_FAILED_REQUESTED_FACILITY_NOT_IMPLEMENTED, ResourceUtils::ResourceType::ResourceTypeString },
190     { ResourceUtils::CALL_FAILED_ONLY_RESTRICTED_DIGITAL_INFO_BEARER_CAPABILITY_IS_AVAILABLE,
191         ResourceUtils::ResourceType::ResourceTypeString },
192     { ResourceUtils::CALL_FAILED_SERVICE_OR_OPTION_NOT_IMPLEMENTED_UNSPECIFIED,
193         ResourceUtils::ResourceType::ResourceTypeString },
194     { ResourceUtils::CALL_FAILED_INVALID_TRANSACTION_IDENTIFIER_VALUE,
195         ResourceUtils::ResourceType::ResourceTypeString },
196     { ResourceUtils::CALL_FAILED_USER_NOT_MEMBER_OF_CUG, ResourceUtils::ResourceType::ResourceTypeString },
197     { ResourceUtils::CALL_FAILED_INCOMPATIBLE_DESTINATION, ResourceUtils::ResourceType::ResourceTypeString },
198     { ResourceUtils::CALL_FAILED_INVALID_TRANSIT_NETWORK_SELECTION, ResourceUtils::ResourceType::ResourceTypeString },
199     { ResourceUtils::CALL_FAILED_SEMANTICALLY_INCORRECT_MESSAGE, ResourceUtils::ResourceType::ResourceTypeString },
200     { ResourceUtils::CALL_FAILED_INVALID_MANDATORY_INFORMATION, ResourceUtils::ResourceType::ResourceTypeString },
201     { ResourceUtils::CALL_FAILED_MESSAGE_TYPE_NON_EXISTENT_OR_NOT_IMPLEMENTED,
202         ResourceUtils::ResourceType::ResourceTypeString },
203     { ResourceUtils::CALL_FAILED_MESSAGE_TYPE_NOT_COMPATIBLE_WITH_PROTOCOL_STATE,
204         ResourceUtils::ResourceType::ResourceTypeString },
205     { ResourceUtils::CALL_FAILED_INFORMATION_ELEMENT_NON_EXISTENT_OR_NOT_IMPLEMENTED,
206         ResourceUtils::ResourceType::ResourceTypeString },
207     { ResourceUtils::CALL_FAILED_CONDITIONAL_IE_ERROR, ResourceUtils::ResourceType::ResourceTypeString },
208     { ResourceUtils::CALL_FAILED_MESSAGE_NOT_COMPATIBLE_WITH_PROTOCOL_STATE,
209         ResourceUtils::ResourceType::ResourceTypeString },
210     { ResourceUtils::CALL_FAILED_RECOVERY_ON_TIMER_EXPIRED, ResourceUtils::ResourceType::ResourceTypeString },
211     { ResourceUtils::CALL_FAILED_PROTOCOL_ERROR_UNSPECIFIED, ResourceUtils::ResourceType::ResourceTypeString },
212     { ResourceUtils::CALL_FAILED_INTERWORKING_UNSPECIFIED, ResourceUtils::ResourceType::ResourceTypeString },
213     { ResourceUtils::CALL_FAILED_CALL_BARRED, ResourceUtils::ResourceType::ResourceTypeString },
214     { ResourceUtils::CALL_FAILED_FDN_BLOCKED, ResourceUtils::ResourceType::ResourceTypeString },
215     { ResourceUtils::CALL_FAILED_IMSI_UNKNOWN_IN_VLR, ResourceUtils::ResourceType::ResourceTypeString },
216     { ResourceUtils::CALL_FAILED_IMEI_NOT_ACCEPTED, ResourceUtils::ResourceType::ResourceTypeString },
217     { ResourceUtils::CALL_FAILED_IMEISV_NOT_ACCEPTED, ResourceUtils::ResourceType::ResourceTypeString },
218     { ResourceUtils::CALL_FAILED_DIAL_MODIFIED_TO_USSD, ResourceUtils::ResourceType::ResourceTypeString },
219     { ResourceUtils::CALL_FAILED_DIAL_MODIFIED_TO_SS, ResourceUtils::ResourceType::ResourceTypeString },
220     { ResourceUtils::CALL_FAILED_DIAL_MODIFIED_TO_DIAL, ResourceUtils::ResourceType::ResourceTypeString },
221     { ResourceUtils::CALL_FAILED_RADIO_OFF, ResourceUtils::ResourceType::ResourceTypeString },
222     { ResourceUtils::CALL_FAILED_OUT_OF_SERVICE, ResourceUtils::ResourceType::ResourceTypeString },
223     { ResourceUtils::CALL_FAILED_NO_VALID_SIM, ResourceUtils::ResourceType::ResourceTypeString },
224     { ResourceUtils::CALL_FAILED_RADIO_INTERNAL_ERROR, ResourceUtils::ResourceType::ResourceTypeString },
225     { ResourceUtils::CALL_FAILED_NETWORK_RESP_TIMEOUT, ResourceUtils::ResourceType::ResourceTypeString },
226     { ResourceUtils::CALL_FAILED_NETWORK_REJECT, ResourceUtils::ResourceType::ResourceTypeString },
227     { ResourceUtils::CALL_FAILED_RADIO_ACCESS_FAILURE, ResourceUtils::ResourceType::ResourceTypeString },
228     { ResourceUtils::CALL_FAILED_RADIO_LINK_FAILURE, ResourceUtils::ResourceType::ResourceTypeString },
229     { ResourceUtils::CALL_FAILED_RADIO_LINK_LOST, ResourceUtils::ResourceType::ResourceTypeString },
230     { ResourceUtils::CALL_FAILED_RADIO_UPLINK_FAILURE, ResourceUtils::ResourceType::ResourceTypeString },
231     { ResourceUtils::CALL_FAILED_RADIO_SETUP_FAILURE, ResourceUtils::ResourceType::ResourceTypeString },
232     { ResourceUtils::CALL_FAILED_RADIO_RELEASE_NORMAL, ResourceUtils::ResourceType::ResourceTypeString },
233     { ResourceUtils::CALL_FAILED_RADIO_RELEASE_ABNORMAL, ResourceUtils::ResourceType::ResourceTypeString },
234     { ResourceUtils::CALL_FAILED_ACCESS_CLASS_BLOCKED, ResourceUtils::ResourceType::ResourceTypeString },
235     { ResourceUtils::CALL_FAILED_NETWORK_DETACH, ResourceUtils::ResourceType::ResourceTypeString },
236     { ResourceUtils::CALL_FAILED_INVALID_PARAMETER, ResourceUtils::ResourceType::ResourceTypeString },
237     { ResourceUtils::CALL_FAILED_SIM_NOT_EXIT, ResourceUtils::ResourceType::ResourceTypeString },
238     { ResourceUtils::CALL_FAILED_SIM_PIN_NEED, ResourceUtils::ResourceType::ResourceTypeString },
239     { ResourceUtils::CALL_FAILED_CALL_NOT_ALLOW, ResourceUtils::ResourceType::ResourceTypeString },
240     { ResourceUtils::CALL_FAILED_SIM_INVALID, ResourceUtils::ResourceType::ResourceTypeString },
241     { ResourceUtils::CALL_FAILED_UNKNOWN, ResourceUtils::ResourceType::ResourceTypeString },
242 };
243 
244 const std::map<int32_t, std::string> ResourceUtils::callFailedResourceName_ = {
245     { DisconnectedReasons::UNASSIGNED_NUMBER, ResourceUtils::CALL_FAILED_UNASSIGNED_NUMBER },
246     { DisconnectedReasons::NO_ROUTE_TO_DESTINATION, ResourceUtils::CALL_FAILED_NO_ROUTE_TO_DESTINATION },
247     { DisconnectedReasons::CHANNEL_UNACCEPTABLE, ResourceUtils::CALL_FAILED_CHANNEL_UNACCEPTABLE },
248     { DisconnectedReasons::OPERATOR_DETERMINED_BARRING, ResourceUtils::CALL_FAILED_OPERATOR_DETERMINED_BARRING },
249     { DisconnectedReasons::NORMAL_CALL_CLEARING, ResourceUtils::CALL_FAILED_NORMAL_CALL_CLEARING },
250     { DisconnectedReasons::FAILED_USER_BUSY, ResourceUtils::CALL_FAILED_USER_BUSY },
251     { DisconnectedReasons::NO_USER_RESPONDING, ResourceUtils::CALL_FAILED_NO_USER_RESPONDING },
252     { DisconnectedReasons::USER_ALERTING_NO_ANSWER, ResourceUtils::CALL_FAILED_USER_ALERTING_NO_ANSWER },
253     { DisconnectedReasons::CALL_REJECTED, ResourceUtils::CALL_FAILED_CALL_REJECTED },
254     { DisconnectedReasons::NUMBER_CHANGED, ResourceUtils::CALL_FAILED_NUMBER_CHANGED },
255     { DisconnectedReasons::CALL_REJECTED_DUE_TO_FEATURE_AT_THE_DESTINATION,
256         ResourceUtils::CALL_FAILED_CALL_REJECTED_DESTINATION },
257     { DisconnectedReasons::FAILED_PRE_EMPTION, ResourceUtils::CALL_FAILED_FAILED_PRE_EMPTION },
258     { DisconnectedReasons::NON_SELECTED_USER_CLEARING, ResourceUtils::CALL_FAILED_NON_SELECTED_USER_CLEARING },
259     { DisconnectedReasons::DESTINATION_OUT_OF_ORDER, ResourceUtils::CALL_FAILED_DESTINATION_OUT_OF_ORDER },
260     { DisconnectedReasons::INVALID_NUMBER_FORMAT, ResourceUtils::CALL_FAILED_INVALID_NUMBER_FORMAT },
261     { DisconnectedReasons::FACILITY_REJECTED, ResourceUtils::CALL_FAILED_FACILITY_REJECTED },
262     { DisconnectedReasons::RESPONSE_TO_STATUS_ENQUIRY, ResourceUtils::CALL_FAILED_RESPONSE_TO_STATUS_ENQUIRY },
263     { DisconnectedReasons::NORMAL_UNSPECIFIED, ResourceUtils::CALL_FAILED_NORMAL_UNSPECIFIED },
264     { DisconnectedReasons::NO_CIRCUIT_CHANNEL_AVAILABLE, ResourceUtils::CALL_FAILED_NO_CIRCUIT_CHANNEL_AVAILABLE },
265     { DisconnectedReasons::NETWORK_OUT_OF_ORDER, ResourceUtils::CALL_FAILED_NETWORK_OUT_OF_ORDER },
266     { DisconnectedReasons::TEMPORARY_FAILURE, ResourceUtils::CALL_FAILED_TEMPORARY_FAILURE },
267     { DisconnectedReasons::SWITCHING_EQUIPMENT_CONGESTION, ResourceUtils::CALL_FAILED_SWITCHING_EQUIPMENT_CONGESTION },
268     { DisconnectedReasons::ACCESS_INFORMATION_DISCARDED, ResourceUtils::CALL_FAILED_ACCESS_INFORMATION_DISCARDED },
269     { DisconnectedReasons::REQUEST_CIRCUIT_CHANNEL_NOT_AVAILABLE,
270         ResourceUtils::CALL_FAILED_REQUEST_CIRCUIT_CHANNEL_NOT_AVAILABLE },
271     { DisconnectedReasons::RESOURCES_UNAVAILABLE_UNSPECIFIED,
272         ResourceUtils::CALL_FAILED_RESOURCES_UNAVAILABLE_UNSPECIFIED },
273     { DisconnectedReasons::QUALITY_OF_SERVICE_UNAVAILABLE, ResourceUtils::CALL_FAILED_QUALITY_OF_SERVICE_UNAVAILABLE },
274     { DisconnectedReasons::REQUESTED_FACILITY_NOT_SUBSCRIBED,
275         ResourceUtils::CALL_FAILED_REQUESTED_FACILITY_NOT_SUBSCRIBED },
276     { DisconnectedReasons::INCOMING_CALLS_BARRED_WITHIN_THE_CUG,
277         ResourceUtils::CALL_FAILED_INCOMING_CALLS_BARRED_WITHIN_THE_CUG },
278     { DisconnectedReasons::BEARER_CAPABILITY_NOT_AUTHORIZED,
279         ResourceUtils::CALL_FAILED_BEARER_CAPABILITY_NOT_AUTHORIZED },
280     { DisconnectedReasons::BEARER_CAPABILITY_NOT_PRESENTLY_AVAILABLE,
281         ResourceUtils::CALL_FAILED_BEARER_CAPABILITY_NOT_PRESENTLY_AVAILABLE },
282     { DisconnectedReasons::SERVICE_OR_OPTION_NOT_AVAILABLE_UNSPECIFIED,
283         ResourceUtils::CALL_FAILED_SERVICE_OR_OPTION_NOT_AVAILABLE_UNSPECIFIED },
284     { DisconnectedReasons::BEARER_SERVICE_NOT_IMPLEMENTED, ResourceUtils::CALL_FAILED_BEARER_SERVICE_NOT_IMPLEMENTED },
285     { DisconnectedReasons::ACM_EQUALTO_OR_GREATE_THAN_ACMMAX,
286         ResourceUtils::CALL_FAILED_ACM_EQUALTO_OR_GREATE_THAN_ACMMAX },
287     { DisconnectedReasons::REQUESTED_FACILITY_NOT_IMPLEMENTED,
288         ResourceUtils::CALL_FAILED_REQUESTED_FACILITY_NOT_IMPLEMENTED },
289     { DisconnectedReasons::ONLY_RESTRICTED_DIGITAL_INFO_BEARER_CAPABILITY_IS_AVAILABLE,
290         ResourceUtils::CALL_FAILED_ONLY_RESTRICTED_DIGITAL_INFO_BEARER_CAPABILITY_IS_AVAILABLE },
291     { DisconnectedReasons::SERVICE_OR_OPTION_NOT_IMPLEMENTED_UNSPECIFIED,
292         ResourceUtils::CALL_FAILED_SERVICE_OR_OPTION_NOT_IMPLEMENTED_UNSPECIFIED },
293     { DisconnectedReasons::INVALID_TRANSACTION_IDENTIFIER_VALUE,
294         ResourceUtils::CALL_FAILED_INVALID_TRANSACTION_IDENTIFIER_VALUE },
295     { DisconnectedReasons::USER_NOT_MEMBER_OF_CUG, ResourceUtils::CALL_FAILED_USER_NOT_MEMBER_OF_CUG },
296     { DisconnectedReasons::INCOMPATIBLE_DESTINATION, ResourceUtils::CALL_FAILED_INCOMPATIBLE_DESTINATION },
297     { DisconnectedReasons::INVALID_TRANSIT_NETWORK_SELECTION,
298         ResourceUtils::CALL_FAILED_INVALID_TRANSIT_NETWORK_SELECTION },
299     { DisconnectedReasons::SEMANTICALLY_INCORRECT_MESSAGE, ResourceUtils::CALL_FAILED_SEMANTICALLY_INCORRECT_MESSAGE },
300     { DisconnectedReasons::INVALID_MANDATORY_INFORMATION, ResourceUtils::CALL_FAILED_INVALID_MANDATORY_INFORMATION },
301     { DisconnectedReasons::MESSAGE_TYPE_NON_EXISTENT_OR_NOT_IMPLEMENTED,
302         ResourceUtils::CALL_FAILED_MESSAGE_TYPE_NON_EXISTENT_OR_NOT_IMPLEMENTED },
303     { DisconnectedReasons::MESSAGE_TYPE_NOT_COMPATIBLE_WITH_PROTOCOL_STATE,
304         ResourceUtils::CALL_FAILED_MESSAGE_TYPE_NOT_COMPATIBLE_WITH_PROTOCOL_STATE },
305     { DisconnectedReasons::INFORMATION_ELEMENT_NON_EXISTENT_OR_NOT_IMPLEMENTED,
306         ResourceUtils::CALL_FAILED_INFORMATION_ELEMENT_NON_EXISTENT_OR_NOT_IMPLEMENTED },
307     { DisconnectedReasons::CONDITIONAL_IE_ERROR, ResourceUtils::CALL_FAILED_CONDITIONAL_IE_ERROR },
308     { DisconnectedReasons::MESSAGE_NOT_COMPATIBLE_WITH_PROTOCOL_STATE,
309         ResourceUtils::CALL_FAILED_MESSAGE_NOT_COMPATIBLE_WITH_PROTOCOL_STATE },
310     { DisconnectedReasons::RECOVERY_ON_TIMER_EXPIRED, ResourceUtils::CALL_FAILED_RECOVERY_ON_TIMER_EXPIRED },
311     { DisconnectedReasons::PROTOCOL_ERROR_UNSPECIFIED, ResourceUtils::CALL_FAILED_PROTOCOL_ERROR_UNSPECIFIED },
312     { DisconnectedReasons::INTERWORKING_UNSPECIFIED, ResourceUtils::CALL_FAILED_INTERWORKING_UNSPECIFIED },
313     { DisconnectedReasons::CALL_BARRED, ResourceUtils::CALL_FAILED_CALL_BARRED },
314     { DisconnectedReasons::FDN_BLOCKED, ResourceUtils::CALL_FAILED_FDN_BLOCKED },
315     { DisconnectedReasons::IMSI_UNKNOWN_IN_VLR, ResourceUtils::CALL_FAILED_IMSI_UNKNOWN_IN_VLR },
316     { DisconnectedReasons::IMEI_NOT_ACCEPTED, ResourceUtils::CALL_FAILED_IMEI_NOT_ACCEPTED },
317     { DisconnectedReasons::IMEISV_NOT_ACCEPTED, ResourceUtils::CALL_FAILED_IMEISV_NOT_ACCEPTED },
318     { DisconnectedReasons::DIAL_MODIFIED_TO_USSD, ResourceUtils::CALL_FAILED_DIAL_MODIFIED_TO_USSD },
319     { DisconnectedReasons::DIAL_MODIFIED_TO_SS, ResourceUtils::CALL_FAILED_DIAL_MODIFIED_TO_SS },
320     { DisconnectedReasons::DIAL_MODIFIED_TO_DIAL, ResourceUtils::CALL_FAILED_DIAL_MODIFIED_TO_DIAL },
321     { DisconnectedReasons::RADIO_OFF, ResourceUtils::CALL_FAILED_RADIO_OFF },
322     { DisconnectedReasons::OUT_OF_SERVICE, ResourceUtils::CALL_FAILED_OUT_OF_SERVICE },
323     { DisconnectedReasons::NO_VALID_SIM, ResourceUtils::CALL_FAILED_NO_VALID_SIM },
324     { DisconnectedReasons::RADIO_INTERNAL_ERROR, ResourceUtils::CALL_FAILED_RADIO_INTERNAL_ERROR },
325     { DisconnectedReasons::NETWORK_RESP_TIMEOUT, ResourceUtils::CALL_FAILED_NETWORK_RESP_TIMEOUT },
326     { DisconnectedReasons::NETWORK_REJECT, ResourceUtils::CALL_FAILED_NETWORK_REJECT },
327     { DisconnectedReasons::RADIO_ACCESS_FAILURE, ResourceUtils::CALL_FAILED_RADIO_ACCESS_FAILURE },
328     { DisconnectedReasons::RADIO_LINK_FAILURE, ResourceUtils::CALL_FAILED_RADIO_LINK_FAILURE },
329     { DisconnectedReasons::RADIO_LINK_LOST, ResourceUtils::CALL_FAILED_RADIO_LINK_LOST },
330     { DisconnectedReasons::RADIO_UPLINK_FAILURE, ResourceUtils::CALL_FAILED_RADIO_UPLINK_FAILURE },
331     { DisconnectedReasons::RADIO_SETUP_FAILURE, ResourceUtils::CALL_FAILED_RADIO_SETUP_FAILURE },
332     { DisconnectedReasons::RADIO_RELEASE_NORMAL, ResourceUtils::CALL_FAILED_RADIO_RELEASE_NORMAL },
333     { DisconnectedReasons::RADIO_RELEASE_ABNORMAL, ResourceUtils::CALL_FAILED_RADIO_RELEASE_ABNORMAL },
334     { DisconnectedReasons::ACCESS_CLASS_BLOCKED, ResourceUtils::CALL_FAILED_ACCESS_CLASS_BLOCKED },
335     { DisconnectedReasons::NETWORK_DETACH, ResourceUtils::CALL_FAILED_NETWORK_DETACH },
336     { DisconnectedReasons::FAILED_INVALID_PARAMETER, ResourceUtils::CALL_FAILED_INVALID_PARAMETER },
337     { DisconnectedReasons::SIM_NOT_EXIT, ResourceUtils::CALL_FAILED_SIM_NOT_EXIT },
338     { DisconnectedReasons::SIM_PIN_NEED, ResourceUtils::CALL_FAILED_SIM_PIN_NEED },
339     { DisconnectedReasons::CALL_NOT_ALLOW, ResourceUtils::CALL_FAILED_CALL_NOT_ALLOW },
340     { DisconnectedReasons::SIM_INVALID, ResourceUtils::CALL_FAILED_SIM_INVALID },
341     { DisconnectedReasons::FAILED_UNKNOWN, ResourceUtils::CALL_FAILED_UNKNOWN },
342 };
343 
Get()344 ResourceUtils &ResourceUtils::Get()
345 {
346     static ResourceUtils utils_;
347     if (!utils_.Init()) {
348         TELEPHONY_LOGD("ResourceUtils::Get init failed.");
349     }
350     return utils_;
351 }
352 
ResourceUtils()353 ResourceUtils::ResourceUtils()
354 {
355     resourceManager_ =
356         std::unique_ptr<Global::Resource::ResourceManager>(Global::Resource::CreateResourceManager(false));
357 }
358 
Init()359 bool ResourceUtils::Init()
360 {
361     std::lock_guard<std::mutex> locker(mutex_);
362     if (beSourceAdd_) {
363         return true;
364     }
365     if (resourceManager_ == nullptr) {
366         TELEPHONY_LOGE("ResourceUtils Init failed , resourceManager is null.");
367         beSourceAdd_ = false;
368         return false;
369     }
370 
371     OHOS::sptr<OHOS::ISystemAbilityManager> systemAbilityManager =
372         OHOS::SystemAbilityManagerClient::GetInstance().GetSystemAbilityManager();
373     if (systemAbilityManager == nullptr) {
374         TELEPHONY_LOGE("systemAbilityManager is null.");
375         return false;
376     }
377     OHOS::sptr<OHOS::IRemoteObject> remoteObject =
378         systemAbilityManager->CheckSystemAbility(BUNDLE_MGR_SERVICE_SYS_ABILITY_ID);
379 
380     sptr<AppExecFwk::IBundleMgr> iBundleMgr = OHOS::iface_cast<AppExecFwk::IBundleMgr>(remoteObject);
381     if (iBundleMgr == nullptr) {
382         TELEPHONY_LOGE("iBundleMgr is null.");
383         return false;
384     }
385     AppExecFwk::BundleInfo bundleInfo;
386     iBundleMgr->GetBundleInfo(
387         RESOURCE_HAP_BUNDLE_NAME.c_str(), AppExecFwk::BundleFlag::GET_BUNDLE_DEFAULT, bundleInfo, HAP_USER_ID);
388     std::string hapPath;
389     std::string resPath;
390     if (!bundleInfo.hapModuleInfos.empty()) {
391         hapPath = bundleInfo.hapModuleInfos[0].hapPath;
392     }
393     if (!bundleInfo.moduleResPaths.empty()) {
394         resPath = bundleInfo.moduleResPaths[0];
395     }
396 
397     if (IsFileExist(hapPath)) {
398         beSourceAdd_ = resourceManager_->AddResource(hapPath.c_str());
399         TELEPHONY_LOGI(
400             "ResourceUtils add hap path %{public}d", static_cast<int32_t>(beSourceAdd_));
401     } else if (IsFileExist(resPath)) {
402         beSourceAdd_ = resourceManager_->AddResource(resPath.c_str());
403         TELEPHONY_LOGI("ResourceUtils add resource path %{public}d", static_cast<int32_t>(beSourceAdd_));
404     } else {
405         TELEPHONY_LOGE("moduleResPath and moduleHapPath is invalid");
406     }
407 
408     if (beSourceAdd_) {
409         SaveAllValue();
410     }
411     return beSourceAdd_;
412 }
413 
SaveAllValue()414 void ResourceUtils::SaveAllValue()
415 {
416     std::string strValue;
417     int32_t intValue = 0;
418     bool boolValue = false;
419     std::vector<std::string> strVector;
420     std::vector<int32_t> intVector;
421     for (auto iter : mapResourceNameType_) {
422         switch (iter.second) {
423             case ResourceType::ResourceTypeString:
424                 if (GetStringByName(iter.first.c_str(), strValue)) {
425                     mapResourceValues_[iter.first] = strValue;
426                     TELEPHONY_LOGE("SaveAllValue strValue %{public}s", strValue.c_str());
427                 }
428                 break;
429             case ResourceType::ResourceTypeInteger:
430                 if (GetIntegerByName(iter.first.c_str(), intValue)) {
431                     mapResourceValues_[iter.first] = intValue;
432                 }
433                 break;
434             case ResourceType::ResourceTypeBoolean:
435                 if (GetBooleanByName(iter.first.c_str(), boolValue)) {
436                     mapResourceValues_[iter.first] = boolValue;
437                 }
438                 break;
439             case ResourceType::ResourceTypeArrayString:
440                 if (GetStringArrayByName(iter.first.c_str(), strVector)) {
441                     mapResourceValues_[iter.first] = strVector;
442                 }
443                 break;
444             case ResourceType::ResourceTypeArrayInteger:
445                 if (GetIntArrayByName(iter.first.c_str(), intVector)) {
446                     mapResourceValues_[iter.first] = intVector;
447                 }
448                 break;
449             default:
450                 break;
451         }
452     }
453 }
454 
GetStringByName(std::string name,std::string & value)455 bool ResourceUtils::GetStringByName(std::string name, std::string &value)
456 {
457     Global::Resource::RState state = resourceManager_->GetStringByName(name.c_str(), value);
458     TELEPHONY_LOGE("GetStringByName name %{public}s", name.c_str());
459     if (state == Global::Resource::RState::SUCCESS) {
460         return true;
461     } else {
462         TELEPHONY_LOGE("failed to get resource by name %{public}s", name.c_str());
463         return false;
464     }
465 }
466 
GetIntegerByName(std::string name,int & value)467 bool ResourceUtils::GetIntegerByName(std::string name, int &value)
468 {
469     Global::Resource::RState state = resourceManager_->GetIntegerByName(name.c_str(), value);
470     if (state == Global::Resource::RState::SUCCESS) {
471         return true;
472     } else {
473         TELEPHONY_LOGE("failed to get resource by name %{public}s", name.c_str());
474         return false;
475     }
476 }
477 
GetBooleanByName(std::string name,bool & value)478 bool ResourceUtils::GetBooleanByName(std::string name, bool &value)
479 {
480     Global::Resource::RState state = resourceManager_->GetBooleanByName(name.c_str(), value);
481     if (state == Global::Resource::RState::SUCCESS) {
482         return true;
483     } else {
484         TELEPHONY_LOGE("failed to get resource by name %{public}s", name.c_str());
485         return false;
486     }
487 }
488 
GetStringArrayByName(std::string name,std::vector<std::string> & value)489 bool ResourceUtils::GetStringArrayByName(std::string name, std::vector<std::string> &value)
490 {
491     value.clear();
492     Global::Resource::RState state = resourceManager_->GetStringArrayByName(name.c_str(), value);
493     if (state == Global::Resource::RState::SUCCESS) {
494         return true;
495     } else {
496         TELEPHONY_LOGE("failed to get resource by name %{public}s", name.c_str());
497         return false;
498     }
499 }
500 
GetIntArrayByName(std::string name,std::vector<int32_t> & value)501 bool ResourceUtils::GetIntArrayByName(std::string name, std::vector<int32_t> &value)
502 {
503     value.clear();
504     Global::Resource::RState state = resourceManager_->GetIntArrayByName(name.c_str(), value);
505     if (state == Global::Resource::RState::SUCCESS) {
506         return true;
507     } else {
508         TELEPHONY_LOGE("failed to get resource by name %{public}s", name.c_str());
509         return false;
510     }
511 }
512 
ShowAllValue()513 void ResourceUtils::ShowAllValue()
514 {
515     std::lock_guard<std::mutex> locker(mutex_);
516     for (auto iter : mapResourceNameType_) {
517         switch (iter.second) {
518             case ResourceType::ResourceTypeString:
519                 TELEPHONY_LOGI("resource[%{public}s]:\"%{public}s\"", iter.first.c_str(),
520                     std::any_cast<std::string>(mapResourceValues_[iter.first]).c_str());
521                 break;
522             case ResourceType::ResourceTypeInteger:
523                 TELEPHONY_LOGI("resource[%{public}s]:\"%{public}d\"", iter.first.c_str(),
524                     std::any_cast<int32_t>(mapResourceValues_[iter.first]));
525                 break;
526             case ResourceType::ResourceTypeBoolean:
527                 TELEPHONY_LOGI("resource[%{public}s]:\"%{public}s\"", iter.first.c_str(),
528                     std::any_cast<bool>(mapResourceValues_[iter.first]) ? "true" : "false");
529                 break;
530             case ResourceType::ResourceTypeArrayString: {
531                 std::vector<std::string> &vecString =
532                     std::any_cast<std::vector<std::string> &>(mapResourceValues_[iter.first]);
533                 for (unsigned int i = 0; i < vecString.size(); i++) {
534                     TELEPHONY_LOGI(
535                         "resource[%{public}s][%{public}d]:\"%{public}s\"", iter.first.c_str(), i, vecString[i].c_str());
536                 }
537                 break;
538             }
539             case ResourceType::ResourceTypeArrayInteger: {
540                 std::vector<int32_t> &vecInt = std::any_cast<std::vector<int32_t> &>(mapResourceValues_[iter.first]);
541                 for (unsigned int i = 0; i < vecInt.size(); i++) {
542                     TELEPHONY_LOGI("resource[%{public}s][%{public}d]:\"%{public}d\"", iter.first.c_str(), i, vecInt[i]);
543                 }
544                 break;
545             }
546             default:
547                 break;
548         }
549     }
550 }
551 
GetCallFailedMessageName(int32_t reason,std::string & name)552 bool ResourceUtils::GetCallFailedMessageName(int32_t reason, std::string &name)
553 {
554     auto itor = callFailedResourceName_.find(reason);
555     if (itor == callFailedResourceName_.end()) {
556         name = (callFailedResourceName_.find(DisconnectedReasons::FAILED_UNKNOWN))->second;
557         return true;
558     }
559     name = itor->second;
560     return true;
561 }
562 
GetStringValueByName(const std::string & name,std::string & value)563 bool ResourceUtils::GetStringValueByName(const std::string &name, std::string &value)
564 {
565     std::lock_guard<std::mutex> locker(mutex_);
566     auto itor = mapResourceValues_.find(name);
567     if (itor == mapResourceValues_.end() || !itor->second.has_value()) {
568         return false;
569     }
570     value = std::any_cast<std::string>(itor->second);
571     return true;
572 }
573 
IsFileExist(const std::string & filePath)574 bool ResourceUtils::IsFileExist(const std::string &filePath)
575 {
576     struct stat buffer;
577     return (stat(filePath.c_str(), &buffer) == 0);
578 }
579 
GetStringArrayValueByName(const std::string & name,std::vector<std::string> & value)580 bool ResourceUtils::GetStringArrayValueByName(const std::string &name, std::vector<std::string> &value)
581 {
582     std::lock_guard<std::mutex> locker(mutex_);
583     auto itor = mapResourceValues_.find(name);
584     if (itor == mapResourceValues_.end() || !itor->second.has_value()) {
585         return false;
586     }
587     value = std::any_cast<std::vector<std::string>>(itor->second);
588     return true;
589 }
590 
GetBooleanValueByName(const std::string & name,bool & value)591 bool ResourceUtils::GetBooleanValueByName(const std::string &name, bool &value)
592 {
593     std::lock_guard<std::mutex> locker(mutex_);
594     auto itor = mapResourceValues_.find(name);
595     if (itor == mapResourceValues_.end() || !itor->second.has_value()) {
596         return false;
597     }
598     value = std::any_cast<bool>(itor->second);
599     return true;
600 }
601 
GetIntegerValueByName(const std::string & name,int32_t & value)602 bool ResourceUtils::GetIntegerValueByName(const std::string &name, int32_t &value)
603 {
604     std::lock_guard<std::mutex> locker(mutex_);
605     auto itor = mapResourceValues_.find(name);
606     if (itor == mapResourceValues_.end() || !itor->second.has_value()) {
607         return false;
608     }
609     value = std::any_cast<int32_t>(itor->second);
610     return true;
611 }
612 
GetIntArrayValueByName(const std::string & name,std::vector<int32_t> & value)613 bool ResourceUtils::GetIntArrayValueByName(const std::string &name, std::vector<int32_t> &value)
614 {
615     std::lock_guard<std::mutex> locker(mutex_);
616     auto itor = mapResourceValues_.find(name);
617     if (itor == mapResourceValues_.end() || !itor->second.has_value()) {
618         return false;
619     }
620     value = std::any_cast<std::vector<int32_t>>(itor->second);
621     return true;
622 }
623 } // namespace Telephony
624 } // namespace OHOS
625