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