1d95e75fdSopenharmony_ci/*
2d95e75fdSopenharmony_ci * Copyright (C) 2023 Huawei Device Co., Ltd.
3d95e75fdSopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License");
4d95e75fdSopenharmony_ci * you may not use this file except in compliance with the License.
5d95e75fdSopenharmony_ci * You may obtain a copy of the License at
6d95e75fdSopenharmony_ci *
7d95e75fdSopenharmony_ci *     http://www.apache.org/licenses/LICENSE-2.0
8d95e75fdSopenharmony_ci *
9d95e75fdSopenharmony_ci * Unless required by applicable law or agreed to in writing, software
10d95e75fdSopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS,
11d95e75fdSopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12d95e75fdSopenharmony_ci * See the License for the specific language governing permissions and
13d95e75fdSopenharmony_ci * limitations under the License.
14d95e75fdSopenharmony_ci */
15d95e75fdSopenharmony_ci
16d95e75fdSopenharmony_ci#include "mmi_code_message.h"
17d95e75fdSopenharmony_ci
18d95e75fdSopenharmony_ci#include "cellular_call_data_struct.h"
19d95e75fdSopenharmony_ci#include "ims_error.h"
20d95e75fdSopenharmony_ci#include "securec.h"
21d95e75fdSopenharmony_ci#include "telephony_types.h"
22d95e75fdSopenharmony_ci
23d95e75fdSopenharmony_cinamespace OHOS {
24d95e75fdSopenharmony_cinamespace Telephony {
25d95e75fdSopenharmony_civoid CreateGetCallWaitingResultMessage(std::string &resultMessage, CallWaitResponse response)
26d95e75fdSopenharmony_ci{
27d95e75fdSopenharmony_ci    if (response.result == TELEPHONY_SUCCESS) {
28d95e75fdSopenharmony_ci        resultMessage.append("\n");
29d95e75fdSopenharmony_ci        if (response.status == 1) {
30d95e75fdSopenharmony_ci            resultMessage.append(SERVICE_ENABLE_FOR);
31d95e75fdSopenharmony_ci            CreateServiceClassMessage(resultMessage, response.classCw);
32d95e75fdSopenharmony_ci        } else {
33d95e75fdSopenharmony_ci            resultMessage.append(SERVICE_DISABLE);
34d95e75fdSopenharmony_ci        }
35d95e75fdSopenharmony_ci    }
36d95e75fdSopenharmony_ci}
37d95e75fdSopenharmony_ci
38d95e75fdSopenharmony_civoid CreateSuppSvcQueryResultMessage(std::string &resultMessage, int32_t result, int32_t status)
39d95e75fdSopenharmony_ci{
40d95e75fdSopenharmony_ci    if (result == TELEPHONY_SUCCESS) {
41d95e75fdSopenharmony_ci        resultMessage.append("\n");
42d95e75fdSopenharmony_ci        if (status == SS_ENABLED) {
43d95e75fdSopenharmony_ci            resultMessage.append(SERVICE_ENABLE);
44d95e75fdSopenharmony_ci        } else if (status == SS_DISABLED) {
45d95e75fdSopenharmony_ci            resultMessage.append(SERVICE_DISABLE);
46d95e75fdSopenharmony_ci        }
47d95e75fdSopenharmony_ci    }
48d95e75fdSopenharmony_ci}
49d95e75fdSopenharmony_ci
50d95e75fdSopenharmony_civoid CreateGetCallTransferResultMessage(std::string &resultMessage, CallTransferResponse response)
51d95e75fdSopenharmony_ci{
52d95e75fdSopenharmony_ci    if (response.result == TELEPHONY_SUCCESS) {
53d95e75fdSopenharmony_ci        resultMessage.append("\n");
54d95e75fdSopenharmony_ci        for (uint32_t classMask = 1; classMask <= ServiceClassType::DEDICATED_PAD_ACCESS; classMask <<= 1) {
55d95e75fdSopenharmony_ci            if (response.classx > 0 && (static_cast<uint32_t>(response.classx) & classMask) != 0) {
56d95e75fdSopenharmony_ci                MakeCallTransferMessageEx(resultMessage, response, static_cast<uint32_t>(response.classx) & classMask);
57d95e75fdSopenharmony_ci            }
58d95e75fdSopenharmony_ci        }
59d95e75fdSopenharmony_ci    }
60d95e75fdSopenharmony_ci}
61d95e75fdSopenharmony_ci
62d95e75fdSopenharmony_civoid MakeCallTransferMessageEx(std::string &resultMessage, CallTransferResponse response, int32_t classex)
63d95e75fdSopenharmony_ci{
64d95e75fdSopenharmony_ci    char tempMessage[MAX_MESSAGE_NUMBER] = {0};
65d95e75fdSopenharmony_ci    bool needTime = response.reason == TRANSFER_REASON_TYPE_NO_REPLY;
66d95e75fdSopenharmony_ci    std::string className = GetServiceClassName(classex);
67d95e75fdSopenharmony_ci    if (response.status == SS_ENABLED) {
68d95e75fdSopenharmony_ci        if (needTime) {
69d95e75fdSopenharmony_ci            if (sprintf_s(tempMessage, sizeof(tempMessage), CF_FORWARDED_TIME.c_str(), className.c_str(),
70d95e75fdSopenharmony_ci                    response.number, response.time) != -1) {
71d95e75fdSopenharmony_ci                resultMessage.append(tempMessage);
72d95e75fdSopenharmony_ci            }
73d95e75fdSopenharmony_ci        } else {
74d95e75fdSopenharmony_ci            if (sprintf_s(tempMessage, sizeof(tempMessage), CF_FORWARDED.c_str(), className.c_str(),
75d95e75fdSopenharmony_ci                    response.number) != -1) {
76d95e75fdSopenharmony_ci                resultMessage.append(tempMessage);
77d95e75fdSopenharmony_ci            }
78d95e75fdSopenharmony_ci        }
79d95e75fdSopenharmony_ci    } else {
80d95e75fdSopenharmony_ci        if (sprintf_s(tempMessage, sizeof(tempMessage), CF_NOT_FORWARDED.c_str(), className.c_str()) != -1) {
81d95e75fdSopenharmony_ci            resultMessage.append(tempMessage);
82d95e75fdSopenharmony_ci        }
83d95e75fdSopenharmony_ci    }
84d95e75fdSopenharmony_ci}
85d95e75fdSopenharmony_ci
86d95e75fdSopenharmony_civoid CreateGetClirResultMessage(std::string &resultMessage, ClirResponse response)
87d95e75fdSopenharmony_ci{
88d95e75fdSopenharmony_ci    if (response.result == TELEPHONY_SUCCESS) {
89d95e75fdSopenharmony_ci        resultMessage.append("\n");
90d95e75fdSopenharmony_ci        int32_t clirInfoN = response.action;
91d95e75fdSopenharmony_ci        int32_t clirInfoM = response.clirStat;
92d95e75fdSopenharmony_ci        switch (clirInfoM) {
93d95e75fdSopenharmony_ci            case CLIR_STATUS_NOT_PROVISIONED:
94d95e75fdSopenharmony_ci                resultMessage.append(SERVICE_NOT_PROVISIONED);
95d95e75fdSopenharmony_ci                break;
96d95e75fdSopenharmony_ci            case CLIR_STATUS_PROVISIONED_PERMANENT:
97d95e75fdSopenharmony_ci                resultMessage.append(CLIR_PERMANENT);
98d95e75fdSopenharmony_ci                break;
99d95e75fdSopenharmony_ci            case CLIR_STATUS_TEMPORARILY_RESTRICTED:
100d95e75fdSopenharmony_ci                // 'n' parameter.
101d95e75fdSopenharmony_ci                switch (clirInfoN) {
102d95e75fdSopenharmony_ci                    case CLIR_OUTGOING_DEFAULT:
103d95e75fdSopenharmony_ci                    case CLIR_OUTGOING_INVOCATION:
104d95e75fdSopenharmony_ci                        resultMessage.append(CLIR_DEFAULT_ON_NEXT_ON);
105d95e75fdSopenharmony_ci                        break;
106d95e75fdSopenharmony_ci                    case CLIR_OUTGOING_SUPPRESSION:
107d95e75fdSopenharmony_ci                        resultMessage.append(CLIR_DEFAULT_ON_NEXT_OFF);
108d95e75fdSopenharmony_ci                        break;
109d95e75fdSopenharmony_ci                    default:
110d95e75fdSopenharmony_ci                        resultMessage.append(SERVICE_NOT_PROVISIONED);
111d95e75fdSopenharmony_ci                }
112d95e75fdSopenharmony_ci                break;
113d95e75fdSopenharmony_ci            case CLIR_STATUS_TEMPORARILY_ALLOWED:
114d95e75fdSopenharmony_ci                // 'n' parameter.
115d95e75fdSopenharmony_ci                switch (clirInfoN) {
116d95e75fdSopenharmony_ci                    case CLIR_OUTGOING_SUPPRESSION:
117d95e75fdSopenharmony_ci                    case CLIR_OUTGOING_DEFAULT:
118d95e75fdSopenharmony_ci                        resultMessage.append(CLIR_DEFAULT_OFF_NEXT_OFF);
119d95e75fdSopenharmony_ci                        break;
120d95e75fdSopenharmony_ci                    case CLIR_OUTGOING_INVOCATION:
121d95e75fdSopenharmony_ci                        resultMessage.append(CLIR_DEFAULT_OFF_NEXT_ON);
122d95e75fdSopenharmony_ci                        break;
123d95e75fdSopenharmony_ci                    default:
124d95e75fdSopenharmony_ci                        resultMessage.append(SERVICE_NOT_PROVISIONED);
125d95e75fdSopenharmony_ci                }
126d95e75fdSopenharmony_ci                break;
127d95e75fdSopenharmony_ci            default:
128d95e75fdSopenharmony_ci                resultMessage.append(SERVICE_NOT_PROVISIONED);
129d95e75fdSopenharmony_ci        }
130d95e75fdSopenharmony_ci    }
131d95e75fdSopenharmony_ci}
132d95e75fdSopenharmony_ci
133d95e75fdSopenharmony_civoid CreateServiceClassMessage(std::string &resultMessage, int32_t classex)
134d95e75fdSopenharmony_ci{
135d95e75fdSopenharmony_ci    for (uint32_t classMask = 1; classMask <= ServiceClassType::DEDICATED_PAD_ACCESS; classMask <<= 1) {
136d95e75fdSopenharmony_ci        if (classex > 0 && (static_cast<uint32_t>(classex) & classMask) != 0) {
137d95e75fdSopenharmony_ci            resultMessage.append("\n");
138d95e75fdSopenharmony_ci            resultMessage.append(GetServiceClassName(static_cast<uint32_t>(classex) & classMask));
139d95e75fdSopenharmony_ci        }
140d95e75fdSopenharmony_ci    }
141d95e75fdSopenharmony_ci}
142d95e75fdSopenharmony_ci
143d95e75fdSopenharmony_cistd::string GetServiceClassName(int32_t classex)
144d95e75fdSopenharmony_ci{
145d95e75fdSopenharmony_ci    switch (classex) {
146d95e75fdSopenharmony_ci        case ServiceClassType::VOICE:
147d95e75fdSopenharmony_ci            return "Voice";
148d95e75fdSopenharmony_ci        case ServiceClassType::FAX:
149d95e75fdSopenharmony_ci            return "Fax";
150d95e75fdSopenharmony_ci        case ServiceClassType::SHORT_MESSAGE_SERVICE:
151d95e75fdSopenharmony_ci            return "Message";
152d95e75fdSopenharmony_ci        case ServiceClassType::DATA_CIRCUIT_SYNC:
153d95e75fdSopenharmony_ci            return "Sync";
154d95e75fdSopenharmony_ci        case ServiceClassType::DATA_CIRCUIT_ASYNC:
155d95e75fdSopenharmony_ci            return "Async";
156d95e75fdSopenharmony_ci        case ServiceClassType::DEDICATED_PACKET_ACCESS:
157d95e75fdSopenharmony_ci            return "Package";
158d95e75fdSopenharmony_ci        case ServiceClassType::DEDICATED_PAD_ACCESS:
159d95e75fdSopenharmony_ci            return "Pad";
160d95e75fdSopenharmony_ci        default:
161d95e75fdSopenharmony_ci            return "Unknow";
162d95e75fdSopenharmony_ci    }
163d95e75fdSopenharmony_ci}
164d95e75fdSopenharmony_ci
165d95e75fdSopenharmony_ci} // namespace Telephony
166d95e75fdSopenharmony_ci} // namespace OHOS