• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 2021 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 "hril_sim.h"
17 
18 #include "hril_notification.h"
19 #include "hril_request.h"
20 namespace OHOS {
21 namespace Telephony {
HRilSim(int32_t slotId)22 HRilSim::HRilSim(int32_t slotId) : HRilBase(slotId)
23 {
24     AddNotificationHandlerToMap();
25     AddHandlerToMap();
26 }
27 
IsSimRespOrNotify(uint32_t code)28 bool HRilSim::IsSimRespOrNotify(uint32_t code)
29 {
30     return IsSimResponse(code) || IsSimNotification(code);
31 }
32 
RegisterSimFuncs(const HRilSimReq * simFuncs)33 void HRilSim::RegisterSimFuncs(const HRilSimReq *simFuncs)
34 {
35     simFuncs_ = simFuncs;
36 }
37 
AddHandlerToMap()38 void HRilSim::AddHandlerToMap()
39 {
40     // response
41     respMemberFuncMap_[HREQ_SIM_GET_SIM_IO] = &HRilSim::GetSimIOResponse;
42     respMemberFuncMap_[HREQ_SIM_GET_SIM_STATUS] = &HRilSim::GetSimStatusResponse;
43     respMemberFuncMap_[HREQ_SIM_GET_IMSI] = &HRilSim::GetImsiResponse;
44     respMemberFuncMap_[HREQ_SIM_GET_SIM_LOCK_STATUS] = &HRilSim::GetSimLockStatusResponse;
45     respMemberFuncMap_[HREQ_SIM_SET_SIM_LOCK] = &HRilSim::SetSimLockResponse;
46     respMemberFuncMap_[HREQ_SIM_CHANGE_SIM_PASSWORD] = &HRilSim::ChangeSimPasswordResponse;
47     respMemberFuncMap_[HREQ_SIM_UNLOCK_PIN] = &HRilSim::UnlockPinResponse;
48     respMemberFuncMap_[HREQ_SIM_UNLOCK_PUK] = &HRilSim::UnlockPukResponse;
49     respMemberFuncMap_[HREQ_SIM_UNLOCK_PIN2] = &HRilSim::UnlockPin2Response;
50     respMemberFuncMap_[HREQ_SIM_UNLOCK_PUK2] = &HRilSim::UnlockPuk2Response;
51     respMemberFuncMap_[HREQ_SIM_SET_ACTIVE_SIM] = &HRilSim::SetActiveSimResponse;
52     respMemberFuncMap_[HREQ_SIM_STK_SEND_TERMINAL_RESPONSE] = &HRilSim::SimStkSendTerminalResponseResponse;
53     respMemberFuncMap_[HREQ_SIM_STK_SEND_ENVELOPE] = &HRilSim::SimStkSendEnvelopeResponse;
54     respMemberFuncMap_[HREQ_SIM_STK_SEND_CALL_SETUP_REQUEST_RESULT] =
55         &HRilSim::SimStkSendCallSetupRequestResultResponse;
56     respMemberFuncMap_[HREQ_SIM_STK_IS_READY] = &HRilSim::SimStkIsReadyResponse;
57     respMemberFuncMap_[HREQ_SIM_GET_RADIO_PROTOCOL] = &HRilSim::GetRadioProtocolResponse;
58     respMemberFuncMap_[HREQ_SIM_SET_RADIO_PROTOCOL] = &HRilSim::SetRadioProtocolResponse;
59     respMemberFuncMap_[HREQ_SIM_OPEN_LOGICAL_CHANNEL] = &HRilSim::SimOpenLogicalChannelResponse;
60     respMemberFuncMap_[HREQ_SIM_CLOSE_LOGICAL_CHANNEL] = &HRilSim::SimCloseLogicalChannelResponse;
61     respMemberFuncMap_[HREQ_SIM_TRANSMIT_APDU_LOGICAL_CHANNEL] = &HRilSim::SimTransmitApduLogicalChannelResponse;
62     respMemberFuncMap_[HREQ_SIM_TRANSMIT_APDU_BASIC_CHANNEL] = &HRilSim::SimTransmitApduBasicChannelResponse;
63     respMemberFuncMap_[HREQ_SIM_AUTHENTICATION] = &HRilSim::SimAuthenticationResponse;
64     respMemberFuncMap_[HREQ_SIM_UNLOCK_SIM_LOCK] = &HRilSim::UnlockSimLockResponse;
65     respMemberFuncMap_[HREQ_SIM_SEND_NCFG_OPER_INFO] = &HRilSim::SendSimMatchedOperatorInfoResponse;
66 }
67 
AddNotificationHandlerToMap()68 void HRilSim::AddNotificationHandlerToMap()
69 {
70     // Notification
71     notiMemberFuncMap_[HNOTI_SIM_STATUS_CHANGED] = &HRilSim::SimStateUpdated;
72     notiMemberFuncMap_[HNOTI_SIM_STK_SESSION_END_NOTIFY] = &HRilSim::SimStkSessionEndNotify;
73     notiMemberFuncMap_[HNOTI_SIM_STK_PROACTIVE_NOTIFY] = &HRilSim::SimStkProactiveNotify;
74     notiMemberFuncMap_[HNOTI_SIM_STK_ALPHA_NOTIFY] = &HRilSim::SimStkAlphaNotify;
75     notiMemberFuncMap_[HNOTI_SIM_STK_EVENT_NOTIFY] = &HRilSim::SimStkEventNotify;
76     notiMemberFuncMap_[HNOTI_SIM_STK_CALL_SETUP_NOTIFY] = &HRilSim::SimStkCallSetupNotify;
77     notiMemberFuncMap_[HNOTI_SIM_REFRESH_NOTIFY] = &HRilSim::SimRefreshNotify;
78     notiMemberFuncMap_[HNOTI_SIM_RADIO_PROTOCOL_UPDATED] = &HRilSim::SimRadioProtocolUpdated;
79 }
80 
GetSimIO(int32_t serialId,const OHOS::HDI::Ril::V1_1::SimIoRequestInfo & simIO)81 int32_t HRilSim::GetSimIO(int32_t serialId, const OHOS::HDI::Ril::V1_1::SimIoRequestInfo &simIO)
82 {
83     std::unique_ptr<HRilSimIO> rilSimIO = std::make_unique<HRilSimIO>();
84     CopyToHRilSimIO(rilSimIO, simIO);
85     int32_t ret = RequestVendor(
86         serialId, HREQ_SIM_GET_SIM_IO, simFuncs_, &HRilSimReq::GetSimIO, rilSimIO.get(), sizeof(*rilSimIO));
87     SafeFrees(rilSimIO->data, rilSimIO->pathid, rilSimIO->pin2);
88     return ret;
89 }
90 
GetSimStatus(int32_t serialId)91 int32_t HRilSim::GetSimStatus(int32_t serialId)
92 {
93     return RequestVendor(serialId, HREQ_SIM_GET_SIM_STATUS, simFuncs_, &HRilSimReq::GetSimStatus);
94 }
95 
GetImsi(int32_t serialId)96 int32_t HRilSim::GetImsi(int32_t serialId)
97 {
98     return RequestVendor(serialId, HREQ_SIM_GET_IMSI, simFuncs_, &HRilSimReq::GetSimImsi);
99 }
100 
GetSimLockStatus(int32_t serialId,const OHOS::HDI::Ril::V1_1::SimLockInfo & simLockInfo)101 int32_t HRilSim::GetSimLockStatus(int32_t serialId, const OHOS::HDI::Ril::V1_1::SimLockInfo &simLockInfo)
102 {
103     std::unique_ptr<HRilSimClock> rilSimLock = std::make_unique<HRilSimClock>();
104     CopyToHRilSimLock(rilSimLock, simLockInfo);
105     int32_t ret = RequestVendor(serialId, HREQ_SIM_GET_SIM_LOCK_STATUS, simFuncs_, &HRilSimReq::GetSimLockStatus,
106         rilSimLock.get(), sizeof(*rilSimLock));
107     SafeFrees(rilSimLock->fac, rilSimLock->passwd);
108     return ret;
109 }
110 
SetSimLock(int32_t serialId,const OHOS::HDI::Ril::V1_1::SimLockInfo & simLockInfo)111 int32_t HRilSim::SetSimLock(int32_t serialId, const OHOS::HDI::Ril::V1_1::SimLockInfo &simLockInfo)
112 {
113     std::unique_ptr<HRilSimClock> rilSimLock = std::make_unique<HRilSimClock>();
114     CopyToHRilSimLock(rilSimLock, simLockInfo);
115     int32_t ret = RequestVendor(
116         serialId, HREQ_SIM_SET_SIM_LOCK, simFuncs_, &HRilSimReq::SetSimLock, rilSimLock.get(), sizeof(*rilSimLock));
117     SafeFrees(rilSimLock->fac, rilSimLock->passwd);
118     return ret;
119 }
120 
ChangeSimPassword(int32_t serialId,const OHOS::HDI::Ril::V1_1::SimPasswordInfo & simPassword)121 int32_t HRilSim::ChangeSimPassword(int32_t serialId, const OHOS::HDI::Ril::V1_1::SimPasswordInfo &simPassword)
122 {
123     std::unique_ptr<HRilSimPassword> rilSimPassword = std::make_unique<HRilSimPassword>();
124     CopyToHRilSimPassword(rilSimPassword, simPassword);
125     int32_t ret = RequestVendor(serialId, HREQ_SIM_CHANGE_SIM_PASSWORD, simFuncs_, &HRilSimReq::ChangeSimPassword,
126         rilSimPassword.get(), sizeof(*rilSimPassword));
127     SafeFrees(rilSimPassword->fac, rilSimPassword->oldPassword, rilSimPassword->newPassword);
128     return ret;
129 }
130 
UnlockPin(int32_t serialId,const std::string & pin)131 int32_t HRilSim::UnlockPin(int32_t serialId, const std::string &pin)
132 {
133     char *pinPoint = nullptr;
134     CopyToCharPoint(&pinPoint, pin);
135     int32_t ret = RequestVendor(serialId, HREQ_SIM_UNLOCK_PIN, simFuncs_, &HRilSimReq::UnlockPin, pinPoint);
136     SafeFrees(pinPoint);
137     return ret;
138 }
139 
UnlockPuk(int32_t serialId,const std::string & puk,const std::string & pin)140 int32_t HRilSim::UnlockPuk(int32_t serialId, const std::string &puk, const std::string &pin)
141 {
142     char *pukPoint = nullptr;
143     CopyToCharPoint(&pukPoint, puk);
144     char *pinPoint = nullptr;
145     CopyToCharPoint(&pinPoint, pin);
146     int32_t ret = RequestVendor(serialId, HREQ_SIM_UNLOCK_PUK, simFuncs_, &HRilSimReq::UnlockPuk, pukPoint, pinPoint);
147     SafeFrees(pukPoint, pinPoint);
148     return ret;
149 }
150 
UnlockPin2(int32_t serialId,const std::string & pin2)151 int32_t HRilSim::UnlockPin2(int32_t serialId, const std::string &pin2)
152 {
153     char *pin2Point = nullptr;
154     CopyToCharPoint(&pin2Point, pin2);
155     int32_t ret = RequestVendor(serialId, HREQ_SIM_UNLOCK_PIN2, simFuncs_, &HRilSimReq::UnlockPin2, pin2Point);
156     SafeFrees(pin2Point);
157     return ret;
158 }
159 
UnlockPuk2(int32_t serialId,const std::string & puk2,const std::string & pin2)160 int32_t HRilSim::UnlockPuk2(int32_t serialId, const std::string &puk2, const std::string &pin2)
161 {
162     char *puk2Point = nullptr;
163     CopyToCharPoint(&puk2Point, puk2);
164     char *pin2Point = nullptr;
165     CopyToCharPoint(&pin2Point, pin2);
166     int32_t ret =
167         RequestVendor(serialId, HREQ_SIM_UNLOCK_PUK2, simFuncs_, &HRilSimReq::UnlockPuk2, puk2Point, pin2Point);
168     SafeFrees(puk2Point, pin2Point);
169     return ret;
170 }
171 
SetActiveSim(int32_t serialId,int32_t index,int32_t enable)172 int32_t HRilSim::SetActiveSim(int32_t serialId, int32_t index, int32_t enable)
173 {
174     return RequestVendor(serialId, HREQ_SIM_SET_ACTIVE_SIM, simFuncs_, &HRilSimReq::SetActiveSim, index, enable);
175 }
176 
SimStkSendTerminalResponse(int32_t serialId,const std::string & strCmd)177 int32_t HRilSim::SimStkSendTerminalResponse(int32_t serialId, const std::string &strCmd)
178 {
179     char *strCmdPoint = nullptr;
180     CopyToCharPoint(&strCmdPoint, strCmd);
181     int32_t ret = RequestVendor(
182         serialId, HREQ_SIM_STK_SEND_TERMINAL_RESPONSE, simFuncs_, &HRilSimReq::SimStkSendTerminalResponse, strCmdPoint);
183     SafeFrees(strCmdPoint);
184     return ret;
185 }
186 
SimStkSendEnvelope(int32_t serialId,const std::string & strCmd)187 int32_t HRilSim::SimStkSendEnvelope(int32_t serialId, const std::string &strCmd)
188 {
189     char *strCmdPoint = nullptr;
190     CopyToCharPoint(&strCmdPoint, strCmd);
191     int32_t ret =
192         RequestVendor(serialId, HREQ_SIM_STK_SEND_ENVELOPE, simFuncs_, &HRilSimReq::SimStkSendEnvelope, strCmdPoint);
193     SafeFrees(strCmdPoint);
194     return ret;
195 }
196 
SimStkSendCallSetupRequestResult(int32_t serialId,int32_t accept)197 int32_t HRilSim::SimStkSendCallSetupRequestResult(int32_t serialId, int32_t accept)
198 {
199     return RequestVendor(serialId, HREQ_SIM_STK_SEND_CALL_SETUP_REQUEST_RESULT, simFuncs_,
200         &HRilSimReq::SimStkSendCallSetupRequestResult, accept);
201 }
202 
SimStkIsReady(int32_t serialId)203 int32_t HRilSim::SimStkIsReady(int32_t serialId)
204 {
205     return RequestVendor(serialId, HREQ_SIM_STK_IS_READY, simFuncs_, &HRilSimReq::SimStkIsReady);
206 }
207 
GetRadioProtocol(int32_t serialId)208 int32_t HRilSim::GetRadioProtocol(int32_t serialId)
209 {
210     TELEPHONY_LOGI("HRilSim::GetRadioProtocol slotId:%{public}d", GetSlotId());
211     return RequestVendor(serialId, HREQ_SIM_GET_RADIO_PROTOCOL, simFuncs_, &HRilSimReq::GetRadioProtocol);
212 }
213 
SetRadioProtocol(int32_t serialId,const HDI::Ril::V1_1::RadioProtocol & radioProtocol)214 int32_t HRilSim::SetRadioProtocol(int32_t serialId, const HDI::Ril::V1_1::RadioProtocol &radioProtocol)
215 {
216     HRilRadioProtocol hrilRadioProtocol = {};
217     hrilRadioProtocol.sessionId = radioProtocol.sessionId;
218     hrilRadioProtocol.phase = static_cast<HRilRadioProtocolPhase>(radioProtocol.phase);
219     hrilRadioProtocol.technology = radioProtocol.technology;
220     hrilRadioProtocol.modemId = radioProtocol.modemId;
221     hrilRadioProtocol.status = static_cast<HRilRadioProtocolStatus>(radioProtocol.status);
222     TELEPHONY_LOGI("HRilSim::SetRadioProtocol slotId:%{public}d, serialId:%{public}d"
223         "sessionId:%{public}d, phase:%{public}d, technology:%{public}d, modemId:%{public}d, status:%{public}d",
224         GetSlotId(), serialId, hrilRadioProtocol.sessionId, hrilRadioProtocol.phase, hrilRadioProtocol.technology,
225         hrilRadioProtocol.modemId, hrilRadioProtocol.status);
226     return RequestVendor(serialId, HREQ_SIM_SET_RADIO_PROTOCOL, simFuncs_,
227         &HRilSimReq::SetRadioProtocol, &hrilRadioProtocol);
228 }
229 
SimOpenLogicalChannel(int32_t serialId,const std::string & appID,int32_t p2)230 int32_t HRilSim::SimOpenLogicalChannel(int32_t serialId, const std::string &appID, int32_t p2)
231 {
232     char *appIDPoint = nullptr;
233     CopyToCharPoint(&appIDPoint, appID);
234     int32_t ret = RequestVendor(
235         serialId, HREQ_SIM_OPEN_LOGICAL_CHANNEL, simFuncs_, &HRilSimReq::SimOpenLogicalChannel, appIDPoint, p2);
236     SafeFrees(appIDPoint);
237     return ret;
238 }
239 
SimCloseLogicalChannel(int32_t serialId,int32_t channelId)240 int32_t HRilSim::SimCloseLogicalChannel(int32_t serialId, int32_t channelId)
241 {
242     return RequestVendor(
243         serialId, HREQ_SIM_CLOSE_LOGICAL_CHANNEL, simFuncs_, &HRilSimReq::SimCloseLogicalChannel, channelId);
244 }
245 
SimTransmitApduLogicalChannel(int32_t serialId,const OHOS::HDI::Ril::V1_1::ApduSimIORequestInfo & apduSimIO)246 int32_t HRilSim::SimTransmitApduLogicalChannel(
247     int32_t serialId, const OHOS::HDI::Ril::V1_1::ApduSimIORequestInfo &apduSimIO)
248 {
249     std::unique_ptr<HRilApduSimIO> rilApduSimIO = std::make_unique<HRilApduSimIO>();
250     CopyToHRilApduSimIO(rilApduSimIO, apduSimIO);
251     int32_t ret = RequestVendor(serialId, HREQ_SIM_TRANSMIT_APDU_LOGICAL_CHANNEL, simFuncs_,
252         &HRilSimReq::SimTransmitApduLogicalChannel, rilApduSimIO.get(), sizeof(*rilApduSimIO));
253     SafeFrees(rilApduSimIO->data);
254     return ret;
255 }
256 
SimTransmitApduBasicChannel(int32_t serialId,const OHOS::HDI::Ril::V1_1::ApduSimIORequestInfo & apduSimIO)257 int32_t HRilSim::SimTransmitApduBasicChannel(
258     int32_t serialId, const OHOS::HDI::Ril::V1_1::ApduSimIORequestInfo &apduSimIO)
259 {
260     std::unique_ptr<HRilApduSimIO> rilApduSimIO = std::make_unique<HRilApduSimIO>();
261     CopyToHRilApduSimIO(rilApduSimIO, apduSimIO);
262     int32_t ret = RequestVendor(serialId, HREQ_SIM_TRANSMIT_APDU_BASIC_CHANNEL, simFuncs_,
263         &HRilSimReq::SimTransmitApduBasicChannel, rilApduSimIO.get(), sizeof(*rilApduSimIO));
264     SafeFrees(rilApduSimIO->data);
265     return ret;
266 }
267 
SimAuthentication(int32_t serialId,const OHOS::HDI::Ril::V1_1::SimAuthenticationRequestInfo & simAuthInfo)268 int32_t HRilSim::SimAuthentication(
269     int32_t serialId, const OHOS::HDI::Ril::V1_1::SimAuthenticationRequestInfo &simAuthInfo)
270 {
271     std::unique_ptr<HRilSimAuthenticationRequestInfo> rilSimAuthInfo =
272         std::make_unique<HRilSimAuthenticationRequestInfo>();
273     CopyToHRilSimAuthentication(rilSimAuthInfo, simAuthInfo);
274     int32_t ret = RequestVendor(serialId, HREQ_SIM_AUTHENTICATION, simFuncs_, &HRilSimReq::SimAuthentication,
275         rilSimAuthInfo.get(), sizeof(*rilSimAuthInfo));
276     SafeFrees(rilSimAuthInfo->aid, rilSimAuthInfo->data);
277     return ret;
278 }
279 
UnlockSimLock(int32_t serialId,int32_t lockType,const std::string & key)280 int32_t HRilSim::UnlockSimLock(int32_t serialId, int32_t lockType, const std::string &key)
281 {
282     char *keyPoint = nullptr;
283     CopyToCharPoint(&keyPoint, key);
284     int32_t ret =
285         RequestVendor(serialId, HREQ_SIM_UNLOCK_SIM_LOCK, simFuncs_, &HRilSimReq::UnlockSimLock, lockType, keyPoint);
286     SafeFrees(keyPoint);
287     return ret;
288 }
289 
SendSimMatchedOperatorInfo(int32_t serialId,const OHOS::HDI::Ril::V1_2::NcfgOperatorInfo & ncfgOperatorInfo)290 int32_t HRilSim::SendSimMatchedOperatorInfo(
291     int32_t serialId, const OHOS::HDI::Ril::V1_2::NcfgOperatorInfo &ncfgOperatorInfo)
292 {
293     std::unique_ptr<HRilNcfgOperatorInfo> rilNcfgOperatorInfo =
294         std::make_unique<HRilNcfgOperatorInfo>();
295     CopyToHRilNcfgOperatorInfo(rilNcfgOperatorInfo, ncfgOperatorInfo);
296     int32_t ret = RequestVendor(serialId, HREQ_SIM_SEND_NCFG_OPER_INFO, simFuncs_,
297         &HRilSimReq::SendSimMatchedOperatorInfo, rilNcfgOperatorInfo.get(), sizeof(*rilNcfgOperatorInfo));
298     SafeFrees(rilNcfgOperatorInfo->operName, rilNcfgOperatorInfo->operKey, rilNcfgOperatorInfo->reserve);
299     return ret;
300 }
301 
GetSimIOResponse(int32_t requestNum,HRilRadioResponseInfo & responseInfo,const void * response,size_t responseLen)302 int32_t HRilSim::GetSimIOResponse(
303     int32_t requestNum, HRilRadioResponseInfo &responseInfo, const void *response, size_t responseLen)
304 {
305     HDI::Ril::V1_1::IccIoResultInfo result = {};
306     int32_t ret = BuildSimIOResp(result, responseInfo, response, responseLen);
307     if (ret != HRIL_ERR_SUCCESS) {
308         return ret;
309     }
310     return Response(responseInfo, &HDI::Ril::V1_1::IRilCallback::GetSimIOResponse, result);
311 }
312 
GetSimStatusResponse(int32_t requestNum,HRilRadioResponseInfo & responseInfo,const void * response,size_t responseLen)313 int32_t HRilSim::GetSimStatusResponse(
314     int32_t requestNum, HRilRadioResponseInfo &responseInfo, const void *response, size_t responseLen)
315 {
316     HDI::Ril::V1_1::CardStatusInfo rilCardStatus = {};
317     if ((response == nullptr && responseLen != 0) ||
318         (response != nullptr && responseLen != sizeof(HRilCardState))) {
319         TELEPHONY_LOGE("Invalid response: Vendor exception!");
320         return HRIL_ERR_INVALID_PARAMETER;
321     }
322     if (response == nullptr && responseLen == 0) {
323         TELEPHONY_LOGE("response is null");
324         if (responseInfo.error == HRilErrType::NONE) {
325             responseInfo.error = HRilErrType::HRIL_ERR_INVALID_RESPONSE;
326         }
327         return Response(responseInfo, &HDI::Ril::V1_1::IRilCallback::GetSimStatusResponse, rilCardStatus);
328     }
329     const HRilCardState *curPtr = static_cast<const HRilCardState *>(response);
330     rilCardStatus.index = curPtr->index;
331     rilCardStatus.simType = curPtr->simType;
332     rilCardStatus.simState = curPtr->simState;
333     return Response(responseInfo, &HDI::Ril::V1_1::IRilCallback::GetSimStatusResponse, rilCardStatus);
334 }
335 
GetImsiResponse(int32_t requestNum,HRilRadioResponseInfo & responseInfo,const void * response,size_t responseLen)336 int32_t HRilSim::GetImsiResponse(
337     int32_t requestNum, HRilRadioResponseInfo &responseInfo, const void *response, size_t responseLen)
338 {
339     int32_t ret = CheckCharData(response, responseLen);
340     if (ret != HRIL_ERR_SUCCESS) {
341         return ret;
342     }
343     return Response(responseInfo, &HDI::Ril::V1_1::IRilCallback::GetImsiResponse, (const char *)response);
344 }
345 
GetSimLockStatusResponse(int32_t requestNum,HRilRadioResponseInfo & responseInfo,const void * response,size_t responseLen)346 int32_t HRilSim::GetSimLockStatusResponse(
347     int32_t requestNum, HRilRadioResponseInfo &responseInfo, const void *response, size_t responseLen)
348 {
349     int32_t simLockStatus = 0;
350     if (response == nullptr || responseLen != sizeof(int32_t)) {
351         TELEPHONY_LOGE("GetSimStatusResponse: Invalid response");
352         if (responseInfo.error == HRilErrType::NONE) {
353             responseInfo.error = HRilErrType::HRIL_ERR_INVALID_RESPONSE;
354         }
355         return Response(responseInfo, &HDI::Ril::V1_1::IRilCallback::GetSimLockStatusResponse, simLockStatus);
356     }
357     simLockStatus = *(static_cast<const int32_t *>(response));
358     return Response(responseInfo, &HDI::Ril::V1_1::IRilCallback::GetSimLockStatusResponse, simLockStatus);
359 }
360 
SetSimLockResponse(int32_t requestNum,HRilRadioResponseInfo & responseInfo,const void * response,size_t responseLen)361 int32_t HRilSim::SetSimLockResponse(
362     int32_t requestNum, HRilRadioResponseInfo &responseInfo, const void *response, size_t responseLen)
363 {
364     HDI::Ril::V1_1::LockStatusResp result = {};
365     ResponseLockStatus(result, responseInfo, response, responseLen);
366     return Response(responseInfo, &HDI::Ril::V1_1::IRilCallback::SetSimLockResponse, result);
367 }
368 
ChangeSimPasswordResponse(int32_t requestNum,HRilRadioResponseInfo & responseInfo,const void * response,size_t responseLen)369 int32_t HRilSim::ChangeSimPasswordResponse(
370     int32_t requestNum, HRilRadioResponseInfo &responseInfo, const void *response, size_t responseLen)
371 {
372     HDI::Ril::V1_1::LockStatusResp result = {};
373     ResponseLockStatus(result, responseInfo, response, responseLen);
374     return Response(responseInfo, &HDI::Ril::V1_1::IRilCallback::ChangeSimPasswordResponse, result);
375 }
376 
UnlockPinResponse(int32_t requestNum,HRilRadioResponseInfo & responseInfo,const void * response,size_t responseLen)377 int32_t HRilSim::UnlockPinResponse(
378     int32_t requestNum, HRilRadioResponseInfo &responseInfo, const void *response, size_t responseLen)
379 {
380     HDI::Ril::V1_1::LockStatusResp result = {};
381     ResponseLockStatus(result, responseInfo, response, responseLen);
382     return Response(responseInfo, &HDI::Ril::V1_1::IRilCallback::UnlockPinResponse, result);
383 }
384 
UnlockPukResponse(int32_t requestNum,HRilRadioResponseInfo & responseInfo,const void * response,size_t responseLen)385 int32_t HRilSim::UnlockPukResponse(
386     int32_t requestNum, HRilRadioResponseInfo &responseInfo, const void *response, size_t responseLen)
387 {
388     HDI::Ril::V1_1::LockStatusResp result = {};
389     ResponseLockStatus(result, responseInfo, response, responseLen);
390     return Response(responseInfo, &HDI::Ril::V1_1::IRilCallback::UnlockPukResponse, result);
391 }
392 
UnlockPin2Response(int32_t requestNum,HRilRadioResponseInfo & responseInfo,const void * response,size_t responseLen)393 int32_t HRilSim::UnlockPin2Response(
394     int32_t requestNum, HRilRadioResponseInfo &responseInfo, const void *response, size_t responseLen)
395 {
396     HDI::Ril::V1_1::LockStatusResp result = {};
397     ResponseLockStatus(result, responseInfo, response, responseLen);
398     return Response(responseInfo, &HDI::Ril::V1_1::IRilCallback::UnlockPin2Response, result);
399 }
400 
UnlockPuk2Response(int32_t requestNum,HRilRadioResponseInfo & responseInfo,const void * response,size_t responseLen)401 int32_t HRilSim::UnlockPuk2Response(
402     int32_t requestNum, HRilRadioResponseInfo &responseInfo, const void *response, size_t responseLen)
403 {
404     HDI::Ril::V1_1::LockStatusResp result = {};
405     ResponseLockStatus(result, responseInfo, response, responseLen);
406     return Response(responseInfo, &HDI::Ril::V1_1::IRilCallback::UnlockPuk2Response, result);
407 }
408 
SetActiveSimResponse(int32_t requestNum,HRilRadioResponseInfo & responseInfo,const void * response,size_t responseLen)409 int32_t HRilSim::SetActiveSimResponse(
410     int32_t requestNum, HRilRadioResponseInfo &responseInfo, const void *response, size_t responseLen)
411 {
412     return Response(responseInfo, &HDI::Ril::V1_1::IRilCallback::SetActiveSimResponse);
413 }
414 
SimStkSendTerminalResponseResponse(int32_t requestNum,HRilRadioResponseInfo & responseInfo,const void * response,size_t responseLen)415 int32_t HRilSim::SimStkSendTerminalResponseResponse(
416     int32_t requestNum, HRilRadioResponseInfo &responseInfo, const void *response, size_t responseLen)
417 {
418     return Response(responseInfo, &HDI::Ril::V1_1::IRilCallback::SimStkSendTerminalResponseResponse);
419 }
420 
SimStkSendEnvelopeResponse(int32_t requestNum,HRilRadioResponseInfo & responseInfo,const void * response,size_t responseLen)421 int32_t HRilSim::SimStkSendEnvelopeResponse(
422     int32_t requestNum, HRilRadioResponseInfo &responseInfo, const void *response, size_t responseLen)
423 {
424     return Response(responseInfo, &HDI::Ril::V1_1::IRilCallback::SimStkSendEnvelopeResponse);
425 }
426 
SimStkSendCallSetupRequestResultResponse(int32_t requestNum,HRilRadioResponseInfo & responseInfo,const void * response,size_t responseLen)427 int32_t HRilSim::SimStkSendCallSetupRequestResultResponse(
428     int32_t requestNum, HRilRadioResponseInfo &responseInfo, const void *response, size_t responseLen)
429 {
430     return Response(responseInfo, &HDI::Ril::V1_1::IRilCallback::SimStkSendCallSetupRequestResultResponse);
431 }
432 
SimStkIsReadyResponse(int32_t requestNum,HRilRadioResponseInfo & responseInfo,const void * response,size_t responseLen)433 int32_t HRilSim::SimStkIsReadyResponse(
434     int32_t requestNum, HRilRadioResponseInfo &responseInfo, const void *response, size_t responseLen)
435 {
436     return Response(responseInfo, &HDI::Ril::V1_1::IRilCallback::SimStkIsReadyResponse);
437 }
438 
GetRadioProtocolResponse(int32_t requestNum,HRilRadioResponseInfo & responseInfo,const void * response,size_t responseLen)439 int32_t HRilSim::GetRadioProtocolResponse(
440     int32_t requestNum, HRilRadioResponseInfo &responseInfo, const void *response, size_t responseLen)
441 {
442     HDI::Ril::V1_1::RadioProtocol radioProtocol = {};
443     if (response == nullptr || responseLen != sizeof(HRilRadioProtocol)) {
444         TELEPHONY_LOGE("GetRadioProtocolResponse response is invalid");
445         if (responseInfo.error == HRilErrType::NONE) {
446             responseInfo.error = HRilErrType::HRIL_ERR_INVALID_RESPONSE;
447         }
448     } else {
449         BuildRadioProtocol(radioProtocol, response);
450         TELEPHONY_LOGI("HRilSim::GetRadioProtocolResponse slotId:%{public}d, serial:%{public}d"
451             "sessionId:%{public}d, phase:%{public}d, technology:%{public}d, modemId:%{public}d, status:%{public}d",
452             GetSlotId(), responseInfo.serial, radioProtocol.sessionId, radioProtocol.phase, radioProtocol.technology,
453             radioProtocol.modemId, radioProtocol.status);
454     }
455     return Response(responseInfo, &HDI::Ril::V1_1::IRilCallback::GetRadioProtocolResponse, radioProtocol);
456 }
457 
SetRadioProtocolResponse(int32_t requestNum,HRilRadioResponseInfo & responseInfo,const void * response,size_t responseLen)458 int32_t HRilSim::SetRadioProtocolResponse(
459     int32_t requestNum, HRilRadioResponseInfo &responseInfo, const void *response, size_t responseLen)
460 {
461     HDI::Ril::V1_1::RadioProtocol radioProtocol = {};
462     if (response == nullptr || responseLen != sizeof(HRilRadioProtocol)) {
463         TELEPHONY_LOGE("SetRadioProtocolResponse response is invalid");
464         if (responseInfo.error == HRilErrType::NONE) {
465             responseInfo.error = HRilErrType::HRIL_ERR_INVALID_RESPONSE;
466         }
467     } else {
468         BuildRadioProtocol(radioProtocol, response);
469         TELEPHONY_LOGI("HRilSim::SetRadioProtocolResponse slotId:%{public}d, serial:%{public}d"
470             "sessionId:%{public}d, phase:%{public}d, technology:%{public}d, modemId:%{public}d, status:%{public}d",
471             GetSlotId(), responseInfo.serial, radioProtocol.sessionId, radioProtocol.phase, radioProtocol.technology,
472             radioProtocol.modemId, radioProtocol.status);
473     }
474     return Response(responseInfo, &HDI::Ril::V1_1::IRilCallback::SetRadioProtocolResponse, radioProtocol);
475 }
476 
SimOpenLogicalChannelResponse(int32_t requestNum,HRilRadioResponseInfo & responseInfo,const void * response,size_t responseLen)477 int32_t HRilSim::SimOpenLogicalChannelResponse(
478     int32_t requestNum, HRilRadioResponseInfo &responseInfo, const void *response, size_t responseLen)
479 {
480     HDI::Ril::V1_1::OpenLogicalChannelResponse pOpenLogicalChannelResponse = {};
481     if (response == nullptr || responseLen != sizeof(HRilOpenLogicalChannelResponse)) {
482         TELEPHONY_LOGE("Invalid response: response is nullptr");
483         return HRIL_ERR_INVALID_PARAMETER;
484     }
485     const HRilOpenLogicalChannelResponse *pRilResponse = static_cast<const HRilOpenLogicalChannelResponse *>(response);
486     pOpenLogicalChannelResponse.sw1 = pRilResponse->sw1;
487     pOpenLogicalChannelResponse.sw2 = pRilResponse->sw2;
488     pOpenLogicalChannelResponse.channelId = pRilResponse->channelId;
489     pOpenLogicalChannelResponse.response = (pRilResponse->response == nullptr) ? "" :  pRilResponse->response;
490     return Response(
491         responseInfo, &HDI::Ril::V1_1::IRilCallback::SimOpenLogicalChannelResponse, pOpenLogicalChannelResponse);
492 }
493 
SimCloseLogicalChannelResponse(int32_t requestNum,HRilRadioResponseInfo & responseInfo,const void * response,size_t responseLen)494 int32_t HRilSim::SimCloseLogicalChannelResponse(
495     int32_t requestNum, HRilRadioResponseInfo &responseInfo, const void *response, size_t responseLen)
496 {
497     return Response(responseInfo, &HDI::Ril::V1_1::IRilCallback::SimCloseLogicalChannelResponse);
498 }
499 
SimTransmitApduLogicalChannelResponse(int32_t requestNum,HRilRadioResponseInfo & responseInfo,const void * response,size_t responseLen)500 int32_t HRilSim::SimTransmitApduLogicalChannelResponse(
501     int32_t requestNum, HRilRadioResponseInfo &responseInfo, const void *response, size_t responseLen)
502 {
503     HDI::Ril::V1_1::IccIoResultInfo result = {};
504     int32_t ret = BuildSimIOResp(result, responseInfo, response, responseLen);
505     if (ret != HRIL_ERR_SUCCESS) {
506         return ret;
507     }
508     return Response(responseInfo, &HDI::Ril::V1_1::IRilCallback::SimTransmitApduLogicalChannelResponse, result);
509 }
510 
SimTransmitApduBasicChannelResponse(int32_t requestNum,HRilRadioResponseInfo & responseInfo,const void * response,size_t responseLen)511 int32_t HRilSim::SimTransmitApduBasicChannelResponse(
512     int32_t requestNum, HRilRadioResponseInfo &responseInfo, const void *response, size_t responseLen)
513 {
514     HDI::Ril::V1_1::IccIoResultInfo result = {};
515     int32_t ret = BuildSimIOResp(result, responseInfo, response, responseLen);
516     if (ret != HRIL_ERR_SUCCESS) {
517         return ret;
518     }
519     return Response(responseInfo, &HDI::Ril::V1_1::IRilCallback::SimTransmitApduBasicChannelResponse, result);
520 }
521 
SimAuthenticationResponse(int32_t requestNum,HRilRadioResponseInfo & responseInfo,const void * response,size_t responseLen)522 int32_t HRilSim::SimAuthenticationResponse(
523     int32_t requestNum, HRilRadioResponseInfo &responseInfo, const void *response, size_t responseLen)
524 {
525     HDI::Ril::V1_1::IccIoResultInfo result = {};
526     int32_t ret = BuildSimIOResp(result, responseInfo, response, responseLen);
527     if (ret != HRIL_ERR_SUCCESS) {
528         return ret;
529     }
530     return Response(responseInfo, &HDI::Ril::V1_1::IRilCallback::SimAuthenticationResponse, result);
531 }
532 
UnlockSimLockResponse(int32_t requestNum,HRilRadioResponseInfo & responseInfo,const void * response,size_t responseLen)533 int32_t HRilSim::UnlockSimLockResponse(
534     int32_t requestNum, HRilRadioResponseInfo &responseInfo, const void *response, size_t responseLen)
535 {
536     HDI::Ril::V1_1::LockStatusResp result = {};
537     ResponseLockStatus(result, responseInfo, response, responseLen);
538     return Response(responseInfo, &HDI::Ril::V1_1::IRilCallback::UnlockSimLockResponse, result);
539 }
540 
ProcessIccIoResponse(HRilRadioResponseInfo & responseInfo,const void * response,size_t responseLen)541 HDI::Ril::V1_1::IccIoResultInfo HRilSim::ProcessIccIoResponse(
542     HRilRadioResponseInfo &responseInfo, const void *response, size_t responseLen)
543 {
544     HDI::Ril::V1_1::IccIoResultInfo result = {};
545     if (response == nullptr || responseLen != sizeof(HRilSimIOResponse)) {
546         TELEPHONY_LOGI("Invalid response: response is nullptr");
547         if (responseInfo.error == HRilErrType::NONE) {
548             responseInfo.error = HRilErrType::HRIL_ERR_INVALID_RESPONSE;
549         }
550         result.response = std::string("");
551         return result;
552     }
553     const HRilSimIOResponse *resp = static_cast<const HRilSimIOResponse *>(response);
554     result.sw1 = resp->sw1;
555     result.sw2 = resp->sw2;
556     result.response = (resp->response == nullptr) ? "" : std::string(resp->response);
557     return result;
558 }
559 
SendSimMatchedOperatorInfoResponse(int32_t requestNum,HRilRadioResponseInfo & responseInfo,const void * response,size_t responseLen)560 int32_t HRilSim::SendSimMatchedOperatorInfoResponse(
561     int32_t requestNum, HRilRadioResponseInfo &responseInfo, const void *response, size_t responseLen)
562 {
563     return Response(responseInfo, &HDI::Ril::V1_2::IRilCallback::SendSimMatchedOperatorInfoResponse);
564 }
565 
SimStateUpdated(int32_t notifyType,const HRilErrNumber error,const void * response,size_t responseLen)566 int32_t HRilSim::SimStateUpdated(
567     int32_t notifyType, const HRilErrNumber error, const void *response, size_t responseLen)
568 {
569     return Notify(notifyType, error, &HDI::Ril::V1_1::IRilCallback::SimStateUpdated);
570 }
571 
SimStkSessionEndNotify(int32_t notifyType,const HRilErrNumber error,const void * response,size_t responseLen)572 int32_t HRilSim::SimStkSessionEndNotify(
573     int32_t notifyType, const HRilErrNumber error, const void *response, size_t responseLen)
574 {
575     return Notify(notifyType, error, &HDI::Ril::V1_1::IRilCallback::SimStkSessionEndNotify);
576 }
577 
SimStkProactiveNotify(int32_t notifyType,const HRilErrNumber error,const void * response,size_t responseLen)578 int32_t HRilSim::SimStkProactiveNotify(
579     int32_t notifyType, const HRilErrNumber error, const void *response, size_t responseLen)
580 {
581     int32_t ret = CheckCharData(response, responseLen);
582     if (ret != HRIL_ERR_SUCCESS) {
583         return ret;
584     }
585     return Notify(notifyType, error, &HDI::Ril::V1_1::IRilCallback::SimStkProactiveNotify, (const char *)response);
586 }
587 
SimStkAlphaNotify(int32_t notifyType,const HRilErrNumber error,const void * response,size_t responseLen)588 int32_t HRilSim::SimStkAlphaNotify(
589     int32_t notifyType, const HRilErrNumber error, const void *response, size_t responseLen)
590 {
591     int32_t ret = CheckCharData(response, responseLen);
592     if (ret != HRIL_ERR_SUCCESS) {
593         return ret;
594     }
595     return Notify(notifyType, error, &HDI::Ril::V1_1::IRilCallback::SimStkAlphaNotify, (const char *)response);
596 }
597 
SimStkEventNotify(int32_t notifyType,const HRilErrNumber error,const void * response,size_t responseLen)598 int32_t HRilSim::SimStkEventNotify(
599     int32_t notifyType, const HRilErrNumber error, const void *response, size_t responseLen)
600 {
601     int32_t ret = CheckCharData(response, responseLen);
602     if (ret != HRIL_ERR_SUCCESS) {
603         return ret;
604     }
605     return Notify(notifyType, error, &HDI::Ril::V1_1::IRilCallback::SimStkEventNotify, (const char *)response);
606 }
607 
SimStkCallSetupNotify(int32_t notifyType,const HRilErrNumber error,const void * response,size_t responseLen)608 int32_t HRilSim::SimStkCallSetupNotify(
609     int32_t notifyType, const HRilErrNumber error, const void *response, size_t responseLen)
610 {
611     return Notify(notifyType, error, &HDI::Ril::V1_1::IRilCallback::SimStkCallSetupNotify);
612 }
613 
SimRefreshNotify(int32_t notifyType,const HRilErrNumber error,const void * response,size_t responseLen)614 int32_t HRilSim::SimRefreshNotify(
615     int32_t notifyType, const HRilErrNumber error, const void *response, size_t responseLen)
616 {
617     return Notify(notifyType, error, &HDI::Ril::V1_1::IRilCallback::SimRefreshNotify);
618 }
619 
SimRadioProtocolUpdated(int32_t notifyType,const HRilErrNumber error,const void * response,size_t responseLen)620 int32_t HRilSim::SimRadioProtocolUpdated(
621     int32_t notifyType, const HRilErrNumber error, const void *response, size_t responseLen)
622 {
623     if (response == nullptr || responseLen != sizeof(HRilRadioProtocol)) {
624         TELEPHONY_LOGE("SimRadioProtocolUpdated response is invalid");
625         return HRIL_ERR_INVALID_PARAMETER;
626     }
627     HDI::Ril::V1_1::RadioProtocol radioProtocol = {};
628     BuildRadioProtocol(radioProtocol, response);
629     TELEPHONY_LOGI("SimRadioProtocolUpdated slotId:%{public}d, sessionId:%{public}d, phase:%{public}d, "
630         "technology:%{public}d, modemId:%{public}d, status:%{public}d",
631         radioProtocol.slotId, radioProtocol.sessionId, static_cast<int32_t>(radioProtocol.phase),
632         radioProtocol.technology, radioProtocol.modemId, static_cast<int32_t>(radioProtocol.status));
633     return Notify(notifyType, error, &HDI::Ril::V1_1::IRilCallback::SimRadioProtocolUpdated, radioProtocol);
634 }
635 
IsSimResponse(uint32_t code)636 bool HRilSim::IsSimResponse(uint32_t code)
637 {
638     return ((code >= HREQ_SIM_BASE) && (code < HREQ_DATA_BASE));
639 }
640 
IsSimNotification(uint32_t code)641 bool HRilSim::IsSimNotification(uint32_t code)
642 {
643     return ((code >= HNOTI_SIM_BASE) && (code < HNOTI_DATA_BASE));
644 }
645 
CopyToHRilSimIO(std::unique_ptr<HRilSimIO> & rilSimIO,const OHOS::HDI::Ril::V1_1::SimIoRequestInfo & simIO)646 void HRilSim::CopyToHRilSimIO(std::unique_ptr<HRilSimIO> &rilSimIO, const OHOS::HDI::Ril::V1_1::SimIoRequestInfo &simIO)
647 {
648     rilSimIO->command = simIO.command;
649     rilSimIO->fileid = simIO.fileId;
650     rilSimIO->p1 = simIO.p1;
651     rilSimIO->p2 = simIO.p2;
652     rilSimIO->p3 = simIO.p3;
653     TELEPHONY_LOGD("CopyToHRilSimIO.data: %{public}s, path: %{public}s, pin2: %{public}s", simIO.data.c_str(),
654         simIO.path.c_str(), simIO.pin2.c_str());
655     CopyToCharPoint(&(rilSimIO->data), simIO.data);
656     CopyToCharPoint(&(rilSimIO->pathid), simIO.path);
657     CopyToCharPoint(&(rilSimIO->pin2), simIO.pin2);
658     TELEPHONY_LOGD("CopyToHRilSimIO.result: %{public}s, pathid: %{public}s, pin2: %{public}s", rilSimIO->data,
659         rilSimIO->pathid, rilSimIO->pin2);
660 }
661 
CopyToHRilSimLock(std::unique_ptr<HRilSimClock> & rilSimLock,const OHOS::HDI::Ril::V1_1::SimLockInfo & simLockInfo)662 void HRilSim::CopyToHRilSimLock(
663     std::unique_ptr<HRilSimClock> &rilSimLock, const OHOS::HDI::Ril::V1_1::SimLockInfo &simLockInfo)
664 {
665     rilSimLock->mode = simLockInfo.mode;
666     rilSimLock->status = simLockInfo.status;
667     rilSimLock->classx = simLockInfo.classx;
668     CopyToCharPoint(&(rilSimLock->fac), simLockInfo.fac);
669     CopyToCharPoint(&(rilSimLock->passwd), simLockInfo.passwd);
670 }
671 
CopyToHRilSimPassword(std::unique_ptr<HRilSimPassword> & rilSimPassword,const OHOS::HDI::Ril::V1_1::SimPasswordInfo & simPassword)672 void HRilSim::CopyToHRilSimPassword(
673     std::unique_ptr<HRilSimPassword> &rilSimPassword, const OHOS::HDI::Ril::V1_1::SimPasswordInfo &simPassword)
674 {
675     CopyToCharPoint(&(rilSimPassword->fac), simPassword.fac);
676     CopyToCharPoint(&(rilSimPassword->oldPassword), simPassword.oldPassword);
677     CopyToCharPoint(&(rilSimPassword->newPassword), simPassword.newPassword);
678     rilSimPassword->passwordLength = simPassword.passwordLength;
679 }
680 
CopyToHRilApduSimIO(std::unique_ptr<HRilApduSimIO> & rilApduSimIO,const OHOS::HDI::Ril::V1_1::ApduSimIORequestInfo & apduSimIO)681 void HRilSim::CopyToHRilApduSimIO(
682     std::unique_ptr<HRilApduSimIO> &rilApduSimIO, const OHOS::HDI::Ril::V1_1::ApduSimIORequestInfo &apduSimIO)
683 {
684     rilApduSimIO->channelId = apduSimIO.channelId;
685     rilApduSimIO->type = apduSimIO.type;
686     rilApduSimIO->instruction = apduSimIO.instruction;
687     rilApduSimIO->p1 = apduSimIO.p1;
688     rilApduSimIO->p2 = apduSimIO.p2;
689     rilApduSimIO->p3 = apduSimIO.p3;
690     CopyToCharPoint(&(rilApduSimIO->data), apduSimIO.data);
691 }
692 
CopyToHRilSimAuthentication(std::unique_ptr<HRilSimAuthenticationRequestInfo> & rilSimAuthInfo,const OHOS::HDI::Ril::V1_1::SimAuthenticationRequestInfo & simAuthInfo)693 void HRilSim::CopyToHRilSimAuthentication(std::unique_ptr<HRilSimAuthenticationRequestInfo> &rilSimAuthInfo,
694     const OHOS::HDI::Ril::V1_1::SimAuthenticationRequestInfo &simAuthInfo)
695 {
696     rilSimAuthInfo->serial = simAuthInfo.serial;
697     CopyToCharPoint(&(rilSimAuthInfo->aid), simAuthInfo.aid);
698     CopyToCharPoint(&(rilSimAuthInfo->data), simAuthInfo.authData);
699 }
700 
CopyToHRilNcfgOperatorInfo(std::unique_ptr<HRilNcfgOperatorInfo> & rilNcfgOperatorInfo,const OHOS::HDI::Ril::V1_2::NcfgOperatorInfo & ncfgOperatorInfo)701 void HRilSim::CopyToHRilNcfgOperatorInfo(std::unique_ptr<HRilNcfgOperatorInfo> &rilNcfgOperatorInfo,
702     const OHOS::HDI::Ril::V1_2::NcfgOperatorInfo &ncfgOperatorInfo)
703 {
704     CopyToCharPoint(&(rilNcfgOperatorInfo->operName), ncfgOperatorInfo.operName);
705     CopyToCharPoint(&(rilNcfgOperatorInfo->operKey), ncfgOperatorInfo.operKey);
706     rilNcfgOperatorInfo->state = ncfgOperatorInfo.state;
707     CopyToCharPoint(&(rilNcfgOperatorInfo->reserve), ncfgOperatorInfo.reserve);
708 }
709 
BuildLockStatusResp(const void * response,size_t responseLen,HDI::Ril::V1_1::LockStatusResp & lockStatus)710 bool HRilSim::BuildLockStatusResp(const void *response, size_t responseLen, HDI::Ril::V1_1::LockStatusResp &lockStatus)
711 {
712     if (response == nullptr || responseLen != sizeof(HRilLockStatus)) {
713         return false;
714     }
715     const HRilLockStatus *resp = static_cast<const HRilLockStatus *>(response);
716     lockStatus.result = resp->result;
717     lockStatus.remain = resp->remain;
718     return true;
719 }
720 
ResponseLockStatus(HDI::Ril::V1_1::LockStatusResp & lockStatus,HRilRadioResponseInfo & responseInfo,const void * response,size_t responseLen)721 void HRilSim::ResponseLockStatus(HDI::Ril::V1_1::LockStatusResp &lockStatus, HRilRadioResponseInfo &responseInfo,
722     const void *response, size_t responseLen)
723 {
724     if (!BuildLockStatusResp(response, responseLen, lockStatus)) {
725         TELEPHONY_LOGE("Invalid ResponseLockStatus: response is error");
726         if (responseInfo.error == HRilErrType::NONE) {
727             responseInfo.error = HRilErrType::HRIL_ERR_INVALID_RESPONSE;
728         }
729     }
730 }
731 
BuildSimIOResp(HDI::Ril::V1_1::IccIoResultInfo & result,HRilRadioResponseInfo & responseInfo,const void * response,size_t responseLen)732 int32_t HRilSim::BuildSimIOResp(HDI::Ril::V1_1::IccIoResultInfo &result, HRilRadioResponseInfo &responseInfo,
733     const void *response, size_t responseLen)
734 {
735     if ((response == nullptr && responseLen != 0) ||
736         (response != nullptr && responseLen != sizeof(HRilSimIOResponse))) {
737         TELEPHONY_LOGE("Invalid BuildSimIOResp: Vendor exception!");
738         return HRIL_ERR_INVALID_PARAMETER;
739     }
740     if (response == nullptr && responseLen == 0) {
741         TELEPHONY_LOGE("BuildSimIOResp response is null");
742         if (responseInfo.error == HRilErrType::NONE) {
743             responseInfo.error = HRilErrType::HRIL_ERR_INVALID_RESPONSE;
744         }
745     }
746     result = ProcessIccIoResponse(responseInfo, response, responseLen);
747     return HRIL_ERR_SUCCESS;
748 }
749 
CheckCharData(const void * response,size_t responseLen)750 int32_t HRilSim::CheckCharData(const void *response, size_t responseLen)
751 {
752     if ((response == nullptr && responseLen != 0) || (responseLen % sizeof(char)) != 0) {
753         TELEPHONY_LOGE("Invalid parameter, responseLen:%{public}zu", responseLen);
754         return HRIL_ERR_INVALID_PARAMETER;
755     }
756     if (response == nullptr && responseLen == 0) {
757         TELEPHONY_LOGE("response is null");
758         return HRIL_ERR_NULL_POINT;
759     }
760     return HRIL_ERR_SUCCESS;
761 }
762 
BuildRadioProtocol(HDI::Ril::V1_1::RadioProtocol & radioProtocol,const void * response)763 void HRilSim::BuildRadioProtocol(HDI::Ril::V1_1::RadioProtocol &radioProtocol, const void *response)
764 {
765     const HRilRadioProtocol *hrilRadioProtocol = static_cast<const HRilRadioProtocol *>(response);
766     radioProtocol.slotId = GetSlotId();
767     radioProtocol.sessionId = hrilRadioProtocol->sessionId;
768     radioProtocol.phase = static_cast<HDI::Ril::V1_1::RadioProtocolPhase>(hrilRadioProtocol->phase);
769     radioProtocol.technology = ConvertRadioProtocolTech(hrilRadioProtocol->technology);
770     radioProtocol.modemId = hrilRadioProtocol->modemId;
771     radioProtocol.status = static_cast<HDI::Ril::V1_1::RadioProtocolStatus>(hrilRadioProtocol->status);
772 }
773 
ConvertRadioProtocolTech(int32_t tech)774 int32_t HRilSim::ConvertRadioProtocolTech(int32_t tech)
775 {
776     uint32_t radioProtocolTech = HRIL_RADIO_PROTOCOL_TECH_UNKNOWN;
777     for (uint32_t radioTech = RADIO_TECHNOLOGY_GSM; radioTech <= RADIO_TECHNOLOGY_NR; radioTech++) {
778         uint32_t protocolTech = 1 << radioTech;
779         if ((static_cast<uint32_t>(tech) & protocolTech) != 0) {
780             radioProtocolTech |= protocolTech;
781         }
782     }
783     return static_cast<int32_t>(radioProtocolTech);
784 }
785 } // namespace Telephony
786 } // namespace OHOS
787