1/*
2 * Copyright (C) 2023 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#ifndef CALL_MANAGER_DISCONNECTED_REASON_H
17#define CALL_MANAGER_DISCONNECTED_REASON_H
18
19namespace OHOS {
20namespace Telephony {
21/**
22 * @brief Indicates the causes of call disconnection.
23 *
24 * 3GPP TS 24.008
25 * V17.4.0 10.5.4.11 Cause
26 * The purpose of the cause information element is to describe the reason for
27 * generating certain messages, to provide diagnostic information in the event
28 * of procedural errors and to indicate the location of the cause originator.
29 */
30enum class DisconnectedReason : int32_t {
31    /**
32     * Indicates the call disconnect due to Unassigned (unallocated) number.
33     */
34    UNASSIGNED_NUMBER = 1,
35    /**
36     * Indicates the call disconnect due to No route to destination.
37     */
38    NO_ROUTE_TO_DESTINATION = 3,
39    /**
40     * Indicates the call disconnect due to Channel unacceptable.
41     */
42    CHANNEL_UNACCEPTABLE = 6,
43    /**
44     * Indicates the call disconnect due to Operator determined barring.
45     */
46    OPERATOR_DETERMINED_BARRING = 8,
47    /**
48     * Indicates the call disconnect due to Call completed elsewhere.
49     */
50    CALL_COMPLETED_ELSEWHERE = 13,
51    /**
52     * Indicates the call disconnect due to Normal call clearing.
53     */
54    NORMAL_CALL_CLEARING = 16,
55    /**
56     * Indicates the call disconnect due to User busy.
57     */
58    USER_BUSY = 17,
59    /**
60     * Indicates the call disconnect due to No user responding.
61     */
62    NO_USER_RESPONDING = 18,
63    /**
64     * Indicates the call disconnect due to User alerting, no answer.
65     */
66    USER_ALERTING_NO_ANSWER = 19,
67    /**
68     * Indicates the call disconnect due to Call rejected.
69     */
70    CALL_REJECTED = 21,
71    /**
72     * Indicates the call disconnect due to Number changed.
73     */
74    NUMBER_CHANGED = 22,
75    /**
76     * Indicates the call disconnect cause is Call rejected due to feature
77     * at the destination.
78     */
79    CALL_REJECTED_DUE_TO_FEATURE_AT_THE_DESTINATION = 24,
80    /**
81     * Indicates the call disconnect due to Pre-emption.
82     */
83    FAILED_PRE_EMPTION = 25,
84    /**
85     * Indicates the call disconnect due to Non selected user clearing.
86     */
87    NON_SELECTED_USER_CLEARING = 26,
88    /**
89     * Indicates the call disconnect due to Destination out of order.
90     */
91    DESTINATION_OUT_OF_ORDER = 27,
92    /**
93     * Indicates the call disconnect due to Invalid number format
94     * (incomplete number).
95     */
96    INVALID_NUMBER_FORMAT = 28,
97    /**
98     * Indicates the call disconnect due to Facility rejected.
99     */
100    FACILITY_REJECTED = 29,
101    /**
102     * Indicates the call disconnect due to Response to STATUS ENQUIRY.
103     */
104    RESPONSE_TO_STATUS_ENQUIRY = 30,
105    /**
106     * Indicates the call disconnect due to Normal, unspecified.
107     */
108    NORMAL_UNSPECIFIED = 31,
109    /**
110     * Indicates the call disconnect due to No circuit/channel available.
111     */
112    NO_CIRCUIT_CHANNEL_AVAILABLE = 34,
113    /**
114     * Indicates the call disconnect due to Network out of order.
115     */
116    NETWORK_OUT_OF_ORDER = 38,
117    /**
118     * Indicates the call disconnect due to Temporary failure.
119     */
120    TEMPORARY_FAILURE = 41,
121    /**
122     * Indicates the call disconnect due to Switching equipment congestion.
123     */
124    SWITCHING_EQUIPMENT_CONGESTION = 42,
125    /**
126     * Indicates the call disconnect due to Access information discarded.
127     */
128    ACCESS_INFORMATION_DISCARDED = 43,
129    /**
130     * Indicates the call disconnect due to requested circuit/channel
131     * not available.
132     */
133    REQUEST_CIRCUIT_CHANNEL_NOT_AVAILABLE = 44,
134    /**
135     * Indicates the call disconnect due to Resources unavailable, unspecified.
136     */
137    RESOURCES_UNAVAILABLE_UNSPECIFIED = 47,
138    /**
139     * Indicates the call disconnect due to Quality of service unavailable.
140     */
141    QUALITY_OF_SERVICE_UNAVAILABLE = 49,
142    /**
143     * Indicates the call disconnect due to Requested facility not subscribed.
144     */
145    REQUESTED_FACILITY_NOT_SUBSCRIBED = 50,
146    /**
147     * Indicates the call disconnect due to Incoming calls barred within the CUG.
148     */
149    INCOMING_CALLS_BARRED_WITHIN_THE_CUG = 55,
150    /**
151     * Indicates the call disconnect due to Bearer capability not authorized.
152     */
153    BEARER_CAPABILITY_NOT_AUTHORIZED = 57,
154    /**
155     * Indicates the call disconnect due to Bearer capability not presently
156     * available.
157     */
158    BEARER_CAPABILITY_NOT_PRESENTLY_AVAILABLE = 58,
159    /**
160     * Indicates the call disconnect due to Service or option not available,
161     * unspecified.
162     */
163    SERVICE_OR_OPTION_NOT_AVAILABLE_UNSPECIFIED = 63,
164    /**
165     * Indicates the call disconnect due to Bearer service not implemented.
166     */
167    BEARER_SERVICE_NOT_IMPLEMENTED = 65,
168    /**
169     * Indicates the call disconnect due to ACM equal to or greater than ACMmax.
170     */
171    ACM_EQUALTO_OR_GREATE_THAN_ACMMAX = 68,
172    /**
173     * Indicates the call disconnect due to Requested facility not implemented.
174     */
175    REQUESTED_FACILITY_NOT_IMPLEMENTED = 69,
176    /**
177     * Indicates the call disconnect due to Only restricted digital information
178     * bearer capability is available.
179     */
180    ONLY_RESTRICTED_DIGITAL_INFO_BEARER_CAPABILITY_IS_AVAILABLE = 70,
181    /**
182     * Indicates the call disconnect due to Service or option not implemented,
183     * unspecified.
184     */
185    SERVICE_OR_OPTION_NOT_IMPLEMENTED_UNSPECIFIED = 79,
186    /**
187     * Indicates the call disconnect due to Invalid transaction identifier
188     * value.
189     */
190    INVALID_TRANSACTION_IDENTIFIER_VALUE = 81,
191    /**
192     * Indicates the call disconnect due to User not member of CUG.
193     */
194    USER_NOT_MEMBER_OF_CUG = 87,
195    /**
196     * Indicates the call disconnect due to Incompatible destination.
197     */
198    INCOMPATIBLE_DESTINATION = 88,
199    /**
200     * Indicates the call disconnect due to Invalid transit network selection.
201     */
202    INVALID_TRANSIT_NETWORK_SELECTION = 91,
203    /**
204     * Indicates the call disconnect due to Semantically incorrect message.
205     */
206    SEMANTICALLY_INCORRECT_MESSAGE = 95,
207    /**
208     * Indicates the call disconnect due to Invalid mandatory information.
209     */
210    INVALID_MANDATORY_INFORMATION = 96,
211    /**
212     * Indicates the call disconnect due to Message type non-existent or not
213     * implemented.
214     */
215    MESSAGE_TYPE_NON_EXISTENT_OR_NOT_IMPLEMENTED = 97,
216    /**
217     * Indicates the call disconnect due to Message type not compatible with
218     * protocol state.
219     */
220    MESSAGE_TYPE_NOT_COMPATIBLE_WITH_PROTOCOL_STATE = 98,
221    /**
222     * Indicates the call disconnect due to Information element non-existent or
223     * not implemented.
224     */
225    INFORMATION_ELEMENT_NON_EXISTENT_OR_NOT_IMPLEMENTED = 99,
226    /**
227     * Indicates the call disconnect due to Conditional IE error.
228     */
229    CONDITIONAL_IE_ERROR = 100,
230    /**
231     * Indicates the call disconnect due to Message not compatible with
232     * protocol state.
233     */
234    MESSAGE_NOT_COMPATIBLE_WITH_PROTOCOL_STATE = 101,
235    /**
236     * Indicates the call disconnect due to Recovery on timer expiry.
237     */
238    RECOVERY_ON_TIMER_EXPIRED = 102,
239    /**
240     * Indicates the call disconnect due to Protocol error, unspecified.
241     */
242    PROTOCOL_ERROR_UNSPECIFIED = 111,
243    /**
244     * Indicates the call disconnect due to Interworking, unspecified.
245     */
246    INTERWORKING_UNSPECIFIED = 127,
247    /**
248     * Indicates the call disconnect due to Call barred.
249     */
250    CALL_BARRED = 240,
251    /**
252     * Indicates the call disconnect due to FDN blocked.
253     */
254    FDN_BLOCKED = 241,
255    /**
256     * Indicates the call disconnect due to IMSI in VLR is unknown.
257     */
258    IMSI_UNKNOWN_IN_VLR = 242,
259    /**
260     * Indicates the call disconnect due to IMEI not accepted.
261     */
262    IMEI_NOT_ACCEPTED = 243,
263    /**
264     * Indicates the call disconnect due to dial modified to USSD.
265     */
266    DIAL_MODIFIED_TO_USSD = 244,
267    /**
268     * Indicates the call disconnect due to dial modified to SS.
269     */
270    DIAL_MODIFIED_TO_SS = 245,
271    /**
272     * Indicates the call disconnect due to dial modified to dial.
273     */
274    DIAL_MODIFIED_TO_DIAL = 246,
275    /**
276     * Indicates the call disconnect due to Radio off.
277     */
278    RADIO_OFF = 247,
279    /**
280     * Indicates the call disconnect due to out of service.
281     */
282    OUT_OF_SERVICE = 248,
283    /**
284     * Indicates the call disconnect due to invalid SIM.
285     */
286    NO_VALID_SIM = 249,
287    /**
288     * Indicates the call disconnect due to radio internal error in modem.
289     */
290    RADIO_INTERNAL_ERROR = 250,
291    /**
292     * Indicates the call disconnect due to network response timeout.
293     */
294    NETWORK_RESP_TIMEOUT = 251,
295    /**
296     * Indicates the call disconnect due to network reject.
297     */
298    NETWORK_REJECT = 252,
299    /**
300     * Indicates the call disconnect due to RRC connection failure. Eg.RACH
301     */
302    RADIO_ACCESS_FAILURE = 253,
303    /**
304     * Indicates the call disconnect due to radio link failure.
305     */
306    RADIO_LINK_FAILURE = 254,
307    /**
308     * Indicates the call disconnect due to poor coverage.
309     */
310    RADIO_LINK_LOST = 255,
311    /**
312     * Indicates the call disconnect due to Radio uplink failure.
313     */
314    RADIO_UPLINK_FAILURE = 256,
315    /**
316     * Indicates the call disconnect due to RRC connection setup failure.
317     */
318    RADIO_SETUP_FAILURE = 257,
319    /**
320     * Indicates the call disconnect due to RRC connection release, normal.
321     */
322    RADIO_RELEASE_NORMAL = 258,
323    /**
324     * Indicates the call disconnect due to RRC connection release, abnormal.
325     */
326    RADIO_RELEASE_ABNORMAL = 259,
327    /**
328     * Indicates the call disconnect due to Access class barring.
329     */
330    ACCESS_CLASS_BLOCKED = 260,
331    /**
332     * Indicates the call disconnect due to Explicit network detach.
333     */
334    NETWORK_DETACH = 261,
335    /**
336     * Indicates the call disconnect due to invalid parameter.
337     */
338    INVALID_PARAMETER = 1025,
339    /**
340     * Indicates the call disconnect due to sim not exit.
341     */
342    SIM_NOT_EXIT = 1026,
343    /**
344     * Indicates the call disconnect due to sim pin need.
345     */
346    SIM_PIN_NEED = 1027,
347    /**
348     * Indicates the call disconnect due to call not allow.
349     */
350    CALL_NOT_ALLOW = 1029,
351    /**
352     * Indicates the call disconnect due to sim invalid.
353     */
354    SIM_INVALID = 1045,
355    /**
356     * Indicates the call disconnect due to unknown error.
357     */
358    FAILED_UNKNOWN = 1279,
359};
360
361/**
362 * @brief Indicates the ril causes of call disconnection.
363 */
364enum class RilDisconnectedReason : int32_t {
365    /**
366     * Indicates the call disconnect due to normal of ril.
367     */
368    DISCONNECTED_REASON_NORMAL = 0,
369};
370
371/**
372 * @brief Indicates the cause detail of a call disconnection.
373 */
374struct DisconnectedDetails {
375    /**
376     * Indicates the reason for ending the call.
377     */
378    DisconnectedReason reason = DisconnectedReason::FAILED_UNKNOWN;
379    /**
380     * Indicates the detail message for the ending call reason.
381     */
382    std::string message = "";
383
384    DisconnectedDetails() {}
385
386    DisconnectedDetails(const DisconnectedDetails &temp)
387    {
388        *this = temp;
389    }
390
391    DisconnectedDetails &operator=(const DisconnectedDetails &temp)
392    {
393        reason = temp.reason;
394        message = temp.message;
395        return *this;
396    }
397};
398} // namespace Telephony
399} // namespace OHOS
400#endif // CALL_MANAGER_DISCONNECTED_REASON_H