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_data.h"
17 
18 #include "hril_notification.h"
19 #include "hril_request.h"
20 
21 namespace OHOS {
22 namespace Telephony {
23 namespace {
24 const int32_t HRILOPS_ACTIVE_VERSION = 13;
25 }
26 
HRilData(int32_t slotId)27 HRilData::HRilData(int32_t slotId) : HRilBase(slotId)
28 {
29     AddHandlerToMap();
30 }
31 
~HRilData()32 HRilData::~HRilData()
33 {
34     dataFuncs_ = nullptr;
35 }
36 
IsDataResponse(uint32_t code)37 bool HRilData::IsDataResponse(uint32_t code)
38 {
39     return ((code >= HREQ_DATA_BASE) && (code < HREQ_NETWORK_BASE));
40 }
41 
IsDataNotification(uint32_t code)42 bool HRilData::IsDataNotification(uint32_t code)
43 {
44     return ((code >= HNOTI_DATA_BASE) && (code < HNOTI_NETWORK_BASE));
45 }
46 
IsDataRespOrNotify(uint32_t code)47 bool HRilData::IsDataRespOrNotify(uint32_t code)
48 {
49     return IsDataResponse(code) || IsDataNotification(code);
50 }
51 
AddHandlerToMap()52 void HRilData::AddHandlerToMap()
53 {
54     // Notification
55     notiMemberFuncMap_[HNOTI_DATA_PDP_CONTEXT_LIST_UPDATED] =
56         [this](int32_t notifyType, HRilErrNumber error, const void *response,
57         size_t responseLen) { return PdpContextListUpdated(notifyType, error, response, responseLen); };
58     notiMemberFuncMap_[HNOTI_DATA_LINK_CAPABILITY_UPDATED] =
59         [this](int32_t notifyType, HRilErrNumber error, const void *response,
60         size_t responseLen) { return DataLinkCapabilityUpdated(notifyType, error, response, responseLen); };
61     // response
62     respMemberFuncMap_[HREQ_DATA_SET_INIT_APN_INFO] =
63         [this](int32_t requestNum, HDI::Ril::V1_1::RilRadioResponseInfo &responseInfo, const void *response,
64         size_t responseLen) { return SetInitApnInfoResponse(requestNum, responseInfo, response, responseLen); };
65     respMemberFuncMap_[HREQ_DATA_SET_DATA_PROFILE_INFO] =
66         [this](int32_t requestNum, HDI::Ril::V1_1::RilRadioResponseInfo &responseInfo, const void *response,
67         size_t responseLen) { return SetDataProfileInfoResponse(requestNum, responseInfo, response, responseLen); };
68     respMemberFuncMap_[HREQ_DATA_ACTIVATE_PDP_CONTEXT] =
69         [this](int32_t requestNum, HDI::Ril::V1_1::RilRadioResponseInfo &responseInfo, const void *response,
70         size_t responseLen) { return ActivatePdpContextResponse(requestNum, responseInfo, response, responseLen); };
71     respMemberFuncMap_[HREQ_DATA_DEACTIVATE_PDP_CONTEXT] =
72         [this](int32_t requestNum, HDI::Ril::V1_1::RilRadioResponseInfo &responseInfo, const void *response,
73         size_t responseLen) { return DeactivatePdpContextResponse(requestNum, responseInfo, response, responseLen); };
74     respMemberFuncMap_[HREQ_DATA_GET_PDP_CONTEXT_LIST] =
75         [this](int32_t requestNum, HDI::Ril::V1_1::RilRadioResponseInfo &responseInfo, const void *response,
76         size_t responseLen) { return GetPdpContextListResponse(requestNum, responseInfo, response, responseLen); };
77     respMemberFuncMap_[HREQ_DATA_GET_LINK_BANDWIDTH_INFO] =
78         [this](int32_t requestNum, HDI::Ril::V1_1::RilRadioResponseInfo &responseInfo, const void *response,
79         size_t responseLen) { return GetLinkBandwidthInfoResponse(requestNum, responseInfo, response, responseLen); };
80     respMemberFuncMap_[HREQ_DATA_SET_LINK_BANDWIDTH_REPORTING_RULE] = [this](int32_t requestNum,
81         HDI::Ril::V1_1::RilRadioResponseInfo &responseInfo, const void *response, size_t responseLen) {
82         return SetLinkBandwidthReportingRuleResponse(requestNum, responseInfo, response, responseLen);
83     };
84     respMemberFuncMap_[HREQ_DATA_SET_DATA_PERMITTED] =
85         [this](int32_t requestNum, HDI::Ril::V1_1::RilRadioResponseInfo &responseInfo, const void *response,
86         size_t responseLen) { return SetDataPermittedResponse(requestNum, responseInfo, response, responseLen); };
87     respMemberFuncMap_[HREQ_DATA_GET_LINK_CAPABILITY] =
88         [this](int32_t requestNum, HDI::Ril::V1_1::RilRadioResponseInfo &responseInfo, const void *response,
89         size_t responseLen) { return GetLinkCapabilityResponse(requestNum, responseInfo, response, responseLen); };
90     respMemberFuncMap_[HREQ_DATA_CLEAN_ALL_CONNECTIONS] =
91         [this](int32_t requestNum, HDI::Ril::V1_1::RilRadioResponseInfo &responseInfo, const void *response,
92         size_t responseLen) { return CleanAllConnectionsResponse(requestNum, responseInfo, response, responseLen); };
93 }
94 
SwitchRilDataToHal(const HRilDataCallResponse *response, HDI::Ril::V1_1::SetupDataCallResultInfo &result)95 void HRilData::SwitchRilDataToHal(const HRilDataCallResponse *response, HDI::Ril::V1_1::SetupDataCallResultInfo &result)
96 {
97     if (response == nullptr) {
98         TELEPHONY_LOGE("SwitchRilDataToHal response is null!!!");
99         return;
100     }
101     result.active = response->active;
102     result.reason = response->reason;
103     result.retryTime = response->retryTime;
104     result.cid = response->cid;
105     result.pduSessionId = response->pduSessionId;
106     result.maxTransferUnit = response->maxTransferUnit;
107     result.address = (response->address == nullptr) ? "" : response->address;
108     result.type = (response->type == nullptr) ? "" : response->type;
109     result.dns = (response->dns == nullptr) ? "" : response->dns;
110     result.dnsSec = (response->dnsSec == nullptr) ? "" : response->dnsSec;
111     result.netPortName = (response->netPortName == nullptr) ? "" : response->netPortName;
112     result.gateway = (response->gateway == nullptr) ? "" : response->gateway;
113     result.pCscfPrimAddr = (response->pCscfPrimAddr == nullptr) ? "" : response->pCscfPrimAddr;
114     result.pCscfSecAddr = (response->pCscfSecAddr == nullptr) ? "" : response->pCscfSecAddr;
115 }
116 
SwitchHRilDataListToHal( const void *response, size_t responseLen, std::vector<HDI::Ril::V1_1::SetupDataCallResultInfo> &dcResultList)117 void HRilData::SwitchHRilDataListToHal(
118     const void *response, size_t responseLen, std::vector<HDI::Ril::V1_1::SetupDataCallResultInfo> &dcResultList)
119 {
120     if (response == nullptr) {
121         TELEPHONY_LOGE("SwitchHRilDataListToHal response is null!!!");
122         return;
123     }
124     size_t dataNum = responseLen / sizeof(HRilDataCallResponse);
125     const HRilDataCallResponse *dataCallResponse = (const HRilDataCallResponse *)response;
126     dcResultList.resize(dataNum);
127 
128     size_t i = 0;
129     while (i < dataNum) {
130         SwitchRilDataToHal(&dataCallResponse[i], dcResultList[i]);
131         i++;
132     }
133 }
134 
DeactivatePdpContext(int32_t serialId, const OHOS::HDI::Ril::V1_1::UniInfo &uniInfo)135 int32_t HRilData::DeactivatePdpContext(int32_t serialId, const OHOS::HDI::Ril::V1_1::UniInfo &uniInfo)
136 {
137     HRilDataInfo dataInfo = {};
138     dataInfo.cid = uniInfo.gsmIndex;
139     dataInfo.reason = uniInfo.arg1;
140     return RequestVendor(
141         serialId, HREQ_DATA_DEACTIVATE_PDP_CONTEXT, dataFuncs_, &HRilDataReq::DeactivatePdpContext, &dataInfo);
142 }
143 
ActivatePdpContext(int32_t serialId, const OHOS::HDI::Ril::V1_1::DataCallInfo &dataCallInfo)144 int32_t HRilData::ActivatePdpContext(int32_t serialId, const OHOS::HDI::Ril::V1_1::DataCallInfo &dataCallInfo)
145 {
146     HRilDataInfo dataInfo;
147     dataInfo.apn = StringToCString(dataCallInfo.dataProfileInfo.apn);
148     dataInfo.type = StringToCString(dataCallInfo.dataProfileInfo.protocol);
149     dataInfo.roamingType = StringToCString(dataCallInfo.dataProfileInfo.roamingProtocol);
150     dataInfo.userName = StringToCString(dataCallInfo.dataProfileInfo.userName);
151     dataInfo.password = StringToCString(dataCallInfo.dataProfileInfo.password);
152     dataInfo.verType = dataCallInfo.dataProfileInfo.authenticationType;
153     dataInfo.rat = dataCallInfo.radioTechnology;
154     dataInfo.roamingEnable = dataCallInfo.roamingAllowed ? 1 : 0;
155     return RequestVendor(
156         serialId, HREQ_DATA_ACTIVATE_PDP_CONTEXT, dataFuncs_, &HRilDataReq::ActivatePdpContext, &dataInfo);
157 }
158 
ActivatePdpContextWithApnTypes(int32_t serialId, const OHOS::HDI::Ril::V1_3::DataCallInfoWithApnTypes &dataCallInfoWithApnTypes, const int32_t version)159 int32_t HRilData::ActivatePdpContextWithApnTypes(int32_t serialId,
160     const OHOS::HDI::Ril::V1_3::DataCallInfoWithApnTypes &dataCallInfoWithApnTypes, const int32_t version)
161 {
162     if (version < HRILOPS_ACTIVE_VERSION) {
163         TELEPHONY_LOGI("Call V1_1 ActivatePdpContext");
164         OHOS::HDI::Ril::V1_1::DataCallInfo dataCallInfo;
165         dataCallInfo.dataProfileInfo.apn = dataCallInfoWithApnTypes.dataProfileInfo.apn;
166         dataCallInfo.dataProfileInfo.protocol = dataCallInfoWithApnTypes.dataProfileInfo.protocol;
167         dataCallInfo.dataProfileInfo.roamingProtocol = dataCallInfoWithApnTypes.dataProfileInfo.roamingProtocol;
168         dataCallInfo.dataProfileInfo.userName = dataCallInfoWithApnTypes.dataProfileInfo.userName;
169         dataCallInfo.dataProfileInfo.password = dataCallInfoWithApnTypes.dataProfileInfo.password;
170         dataCallInfo.dataProfileInfo.authenticationType = dataCallInfoWithApnTypes.dataProfileInfo.authenticationType;
171         dataCallInfo.isRoaming = dataCallInfoWithApnTypes.isRoaming;
172         dataCallInfo.roamingAllowed = dataCallInfoWithApnTypes.roamingAllowed;
173         dataCallInfo.radioTechnology = dataCallInfoWithApnTypes.radioTechnology;
174         return ActivatePdpContext(serialId, dataCallInfo);
175     }
176     TELEPHONY_LOGI("Call V1_3 ActivatePdpContextWithApnTypes");
177     HRilDataInfoWithApnTypes dataInfoWithApnTypes;
178     dataInfoWithApnTypes.apn = StringToCString(dataCallInfoWithApnTypes.dataProfileInfo.apn);
179     dataInfoWithApnTypes.type = StringToCString(dataCallInfoWithApnTypes.dataProfileInfo.protocol);
180     dataInfoWithApnTypes.roamingType = StringToCString(dataCallInfoWithApnTypes.dataProfileInfo.roamingProtocol);
181     dataInfoWithApnTypes.userName = StringToCString(dataCallInfoWithApnTypes.dataProfileInfo.userName);
182     dataInfoWithApnTypes.password = StringToCString(dataCallInfoWithApnTypes.dataProfileInfo.password);
183     dataInfoWithApnTypes.verType = dataCallInfoWithApnTypes.dataProfileInfo.authenticationType;
184     dataInfoWithApnTypes.rat = dataCallInfoWithApnTypes.radioTechnology;
185     dataInfoWithApnTypes.roamingEnable = dataCallInfoWithApnTypes.roamingAllowed ? 1 : 0;
186     dataInfoWithApnTypes.supportedApnTypesBitmap = dataCallInfoWithApnTypes.dataProfileInfo.supportedApnTypesBitmap;
187     return RequestVendor(serialId, HREQ_DATA_ACTIVATE_PDP_CONTEXT, dataFuncs_,
188         &HRilDataReq::ActivatePdpContextWithApnTypes, &dataInfoWithApnTypes);
189 }
190 
GetPdpContextList(int32_t serialId, const OHOS::HDI::Ril::V1_1::UniInfo &uniInfo)191 int32_t HRilData::GetPdpContextList(int32_t serialId, const OHOS::HDI::Ril::V1_1::UniInfo &uniInfo)
192 {
193     TELEPHONY_LOGD("serial %{public}d on %{public}d", uniInfo.serial, uniInfo.flag);
194     return RequestVendor(serialId, HREQ_DATA_GET_PDP_CONTEXT_LIST, dataFuncs_, &HRilDataReq::GetPdpContextList);
195 }
196 
SetInitApnInfo(int32_t serialId, const OHOS::HDI::Ril::V1_1::DataProfileDataInfo &dataProfileDataInfo)197 int32_t HRilData::SetInitApnInfo(int32_t serialId, const OHOS::HDI::Ril::V1_1::DataProfileDataInfo &dataProfileDataInfo)
198 {
199     HRilDataInfo dataInfo = BuildDataInfo(dataProfileDataInfo);
200     return RequestVendor(serialId, HREQ_DATA_SET_INIT_APN_INFO, dataFuncs_, &HRilDataReq::SetInitApnInfo, &dataInfo);
201 }
202 
SendDataPerformanceMode( int32_t serialId, const OHOS::HDI::Ril::V1_1::DataPerformanceInfo &dataPerformanceInfo)203 int32_t HRilData::SendDataPerformanceMode(
204     int32_t serialId, const OHOS::HDI::Ril::V1_1::DataPerformanceInfo &dataPerformanceInfo)
205 {
206     HRilDataPerformanceInfo hrilDataPerformanceInfo;
207     hrilDataPerformanceInfo.performanceEnable = dataPerformanceInfo.performanceEnable;
208     hrilDataPerformanceInfo.enforce = dataPerformanceInfo.enforce;
209     TELEPHONY_LOGI("SendDataPerformanceMode: performanceEnable=%{public}d enforce=%{public}d",
210         hrilDataPerformanceInfo.performanceEnable, hrilDataPerformanceInfo.enforce);
211     return RequestVendor(serialId, HREQ_DATA_SEND_DATA_PERFORMANCE_MODE, dataFuncs_,
212         &HRilDataReq::SendDataPerformanceMode, &hrilDataPerformanceInfo);
213 }
214 
SendDataSleepMode(int32_t serialId, const OHOS::HDI::Ril::V1_1::DataSleepInfo &dataSleepInfo)215 int32_t HRilData::SendDataSleepMode(int32_t serialId, const OHOS::HDI::Ril::V1_1::DataSleepInfo &dataSleepInfo)
216 {
217     HRilDataSleepInfo hrilDataSleepInfo;
218     hrilDataSleepInfo.sleepEnable = dataSleepInfo.sleepEnable;
219     TELEPHONY_LOGI("SendDataSleepMode: sleepEnable=%{public}d", hrilDataSleepInfo.sleepEnable);
220     return RequestVendor(
221         serialId, HREQ_DATA_SEND_DATA_SLEEP_MODE, dataFuncs_, &HRilDataReq::SendDataSleepMode, &hrilDataSleepInfo);
222 }
223 
SetDataProfileInfo(int32_t serialId, const OHOS::HDI::Ril::V1_1::DataProfilesInfo &dataProfilesInfo)224 int32_t HRilData::SetDataProfileInfo(int32_t serialId, const OHOS::HDI::Ril::V1_1::DataProfilesInfo &dataProfilesInfo)
225 {
226     int32_t size = dataProfilesInfo.profilesSize;
227     if (size <= 0 || size != static_cast<int32_t>(dataProfilesInfo.profiles.size())) {
228         TELEPHONY_LOGE("RilAdapter failed to do ReadFromParcel!");
229         return HRIL_ERR_INVALID_PARAMETER;
230     }
231     std::unique_ptr<HRilDataInfo[]> dataInfos = std::make_unique<HRilDataInfo[]>(size);
232     for (int32_t i = 0; i < size; i++) {
233         dataInfos[i] = BuildDataInfo(dataProfilesInfo.profiles[i]);
234     }
235     return RequestVendor(
236         serialId, HREQ_DATA_SET_DATA_PROFILE_INFO, dataFuncs_, &HRilDataReq::SetDataProfileInfo, dataInfos.get(), size);
237 }
238 
BuildDataInfo(const OHOS::HDI::Ril::V1_1::DataProfileDataInfo &dataProfileInfo)239 HRilDataInfo HRilData::BuildDataInfo(const OHOS::HDI::Ril::V1_1::DataProfileDataInfo &dataProfileInfo)
240 {
241     HRilDataInfo dataInfo;
242     dataInfo.cid = dataProfileInfo.profileId;
243     dataInfo.apn = StringToCString(dataProfileInfo.apn);
244     dataInfo.type = StringToCString(dataProfileInfo.protocol);
245     dataInfo.roamingType = StringToCString(dataProfileInfo.roamingProtocol);
246     dataInfo.userName = StringToCString(dataProfileInfo.userName);
247     dataInfo.password = StringToCString(dataProfileInfo.password);
248     dataInfo.verType = dataProfileInfo.authenticationType;
249     return dataInfo;
250 }
251 
GetLinkCapability(int32_t serialId)252 int32_t HRilData::GetLinkCapability(int32_t serialId)
253 {
254     return RequestVendor(serialId, HREQ_DATA_GET_LINK_CAPABILITY, dataFuncs_, &HRilDataReq::GetLinkCapability);
255 }
256 
GetLinkBandwidthInfo(int32_t serialId, int32_t cid)257 int32_t HRilData::GetLinkBandwidthInfo(int32_t serialId, int32_t cid)
258 {
259     return RequestVendor(
260         serialId, HREQ_DATA_GET_LINK_BANDWIDTH_INFO, dataFuncs_, &HRilDataReq::GetLinkBandwidthInfo, cid);
261 }
262 
SetLinkBandwidthReportingRule( int32_t serialId, const OHOS::HDI::Ril::V1_1::DataLinkBandwidthReportingRule &linkBandwidthRule)263 int32_t HRilData::SetLinkBandwidthReportingRule(
264     int32_t serialId, const OHOS::HDI::Ril::V1_1::DataLinkBandwidthReportingRule &linkBandwidthRule)
265 {
266     HRilLinkBandwidthReportingRule hLinkBandwidthRule;
267     hLinkBandwidthRule.rat = (RatType)linkBandwidthRule.rat;
268     hLinkBandwidthRule.delayMs = linkBandwidthRule.delayMs;
269     hLinkBandwidthRule.delayUplinkKbps = linkBandwidthRule.delayUplinkKbps;
270     hLinkBandwidthRule.delayDownlinkKbps = linkBandwidthRule.delayDownlinkKbps;
271     hLinkBandwidthRule.maximumUplinkKbpsSize = linkBandwidthRule.maximumUplinkKbpsSize;
272     hLinkBandwidthRule.maximumDownlinkKbpsSize = linkBandwidthRule.maximumDownlinkKbpsSize;
273     hLinkBandwidthRule.maximumUplinkKbps = new int32_t[linkBandwidthRule.maximumUplinkKbpsSize];
274     hLinkBandwidthRule.maximumDownlinkKbps = new int32_t[linkBandwidthRule.maximumDownlinkKbpsSize];
275     TELEPHONY_LOGI("maximumUplinkKbpsSize:%{public}d, maximumDownlinkKbpsSize:%{public}d",
276         linkBandwidthRule.maximumUplinkKbpsSize, linkBandwidthRule.maximumDownlinkKbpsSize);
277     for (int32_t i = 0; i < hLinkBandwidthRule.maximumUplinkKbpsSize; i++) {
278         hLinkBandwidthRule.maximumUplinkKbps[i] = linkBandwidthRule.maximumUplinkKbps[i];
279     }
280     for (int32_t i = 0; i < hLinkBandwidthRule.maximumDownlinkKbpsSize; i++) {
281         hLinkBandwidthRule.maximumDownlinkKbps[i] = linkBandwidthRule.maximumDownlinkKbps[i];
282     }
283     int32_t resutlt = RequestVendor(serialId, HREQ_DATA_SET_LINK_BANDWIDTH_REPORTING_RULE, dataFuncs_,
284         &HRilDataReq::SetLinkBandwidthReportingRule, &hLinkBandwidthRule);
285     delete[] hLinkBandwidthRule.maximumUplinkKbps;
286     delete[] hLinkBandwidthRule.maximumDownlinkKbps;
287     return resutlt;
288 }
289 
SetDataPermitted(int32_t serialId, int32_t dataPermitted)290 int32_t HRilData::SetDataPermitted(int32_t serialId, int32_t dataPermitted)
291 {
292     return RequestVendor(
293         serialId, HREQ_DATA_SET_DATA_PERMITTED, dataFuncs_, &HRilDataReq::SetDataPermitted, dataPermitted);
294 }
295 
CleanAllConnections(int32_t serialId)296 int32_t HRilData::CleanAllConnections(int32_t serialId)
297 {
298     return RequestVendor(serialId, HREQ_DATA_CLEAN_ALL_CONNECTIONS, dataFuncs_, &HRilDataReq::CleanAllConnections);
299 }
300 
CleanAllConnectionsResponse( int32_t requestNum, HDI::Ril::V1_1::RilRadioResponseInfo &responseInfo, const void *response, size_t responseLen)301 int32_t HRilData::CleanAllConnectionsResponse(
302     int32_t requestNum, HDI::Ril::V1_1::RilRadioResponseInfo &responseInfo, const void *response, size_t responseLen)
303 {
304     return Response(responseInfo, &HDI::Ril::V1_2::IRilCallback::CleanAllConnectionsResponse);
305 }
306 
DeactivatePdpContextResponse( int32_t requestNum, HDI::Ril::V1_1::RilRadioResponseInfo &responseInfo, const void *response, size_t responseLen)307 int32_t HRilData::DeactivatePdpContextResponse(
308     int32_t requestNum, HDI::Ril::V1_1::RilRadioResponseInfo &responseInfo, const void *response, size_t responseLen)
309 {
310     return Response(responseInfo, &HDI::Ril::V1_1::IRilCallback::DeactivatePdpContextResponse);
311 }
312 
ActivatePdpContextResponse( int32_t requestNum, HDI::Ril::V1_1::RilRadioResponseInfo &responseInfo, const void *response, size_t responseLen)313 int32_t HRilData::ActivatePdpContextResponse(
314     int32_t requestNum, HDI::Ril::V1_1::RilRadioResponseInfo &responseInfo, const void *response, size_t responseLen)
315 {
316     if ((response == nullptr && responseLen != 0) || (responseLen % sizeof(HRilDataCallResponse)) != 0) {
317         TELEPHONY_LOGE("Invalid parameter, responseLen:%{public}zu", responseLen);
318         return HRIL_ERR_INVALID_PARAMETER;
319     }
320     HDI::Ril::V1_1::SetupDataCallResultInfo result = {};
321     result.reason = HRIL_ERROR_UNSPECIFIED_RSN;
322     result.cid = -1;
323     if (response != nullptr) {
324         SwitchRilDataToHal((HRilDataCallResponse *)response, result);
325     }
326     return Response(responseInfo, &HDI::Ril::V1_1::IRilCallback::ActivatePdpContextResponse, result);
327 }
328 
GetPdpContextListResponse( int32_t requestNum, HDI::Ril::V1_1::RilRadioResponseInfo &responseInfo, const void *response, size_t responseLen)329 int32_t HRilData::GetPdpContextListResponse(
330     int32_t requestNum, HDI::Ril::V1_1::RilRadioResponseInfo &responseInfo, const void *response, size_t responseLen)
331 {
332     if ((response == nullptr && responseLen != 0) || (responseLen % sizeof(HRilDataCallResponse)) != 0) {
333         TELEPHONY_LOGE("Invalid parameter, responseLen:%{public}zu", responseLen);
334         return HRIL_ERR_INVALID_PARAMETER;
335     }
336     HDI::Ril::V1_1::DataCallResultList dataCallResultList = {};
337     if (response != nullptr) {
338         SwitchHRilDataListToHal(response, responseLen, dataCallResultList.dcList);
339     }
340     dataCallResultList.size = dataCallResultList.dcList.size();
341     return Response(responseInfo, &HDI::Ril::V1_1::IRilCallback::GetPdpContextListResponse, dataCallResultList);
342 }
343 
SetInitApnInfoResponse( int32_t requestNum, HDI::Ril::V1_1::RilRadioResponseInfo &responseInfo, const void *response, size_t responseLen)344 int32_t HRilData::SetInitApnInfoResponse(
345     int32_t requestNum, HDI::Ril::V1_1::RilRadioResponseInfo &responseInfo, const void *response, size_t responseLen)
346 {
347     return Response(responseInfo, &HDI::Ril::V1_1::IRilCallback::SetInitApnInfoResponse);
348 }
349 
SetDataProfileInfoResponse( int32_t requestNum, HDI::Ril::V1_1::RilRadioResponseInfo &responseInfo, const void *response, size_t responseLen)350 int32_t HRilData::SetDataProfileInfoResponse(
351     int32_t requestNum, HDI::Ril::V1_1::RilRadioResponseInfo &responseInfo, const void *response, size_t responseLen)
352 {
353     return HRIL_ERR_SUCCESS;
354 }
355 
SetLinkBandwidthReportingRuleResponse( int32_t requestNum, HDI::Ril::V1_1::RilRadioResponseInfo &responseInfo, const void *response, size_t responseLen)356 int32_t HRilData::SetLinkBandwidthReportingRuleResponse(
357     int32_t requestNum, HDI::Ril::V1_1::RilRadioResponseInfo &responseInfo, const void *response, size_t responseLen)
358 {
359     return Response(responseInfo, &HDI::Ril::V1_1::IRilCallback::SetLinkBandwidthReportingRuleResponse);
360 }
361 
PdpContextListUpdated( int32_t notifyType, const HRilErrNumber error, const void *response, size_t responseLen)362 int32_t HRilData::PdpContextListUpdated(
363     int32_t notifyType, const HRilErrNumber error, const void *response, size_t responseLen)
364 {
365     if ((response == nullptr) || (responseLen % sizeof(HRilDataCallResponse)) != 0) {
366         TELEPHONY_LOGE("Invalid parameter, responseLen:%{public}zu", responseLen);
367         return HRIL_ERR_INVALID_PARAMETER;
368     }
369     HDI::Ril::V1_1::DataCallResultList dataCallResultList = {};
370     SwitchHRilDataListToHal(response, responseLen, dataCallResultList.dcList);
371     dataCallResultList.size = dataCallResultList.dcList.size();
372     return Notify(notifyType, error, &HDI::Ril::V1_1::IRilCallback::PdpContextListUpdated, dataCallResultList);
373 }
374 
DataLinkCapabilityUpdated( int32_t notifyType, const HRilErrNumber error, const void *response, size_t responseLen)375 int32_t HRilData::DataLinkCapabilityUpdated(
376     int32_t notifyType, const HRilErrNumber error, const void *response, size_t responseLen)
377 {
378     if ((response == nullptr) || (responseLen % sizeof(HRilDataLinkCapability)) != 0) {
379         TELEPHONY_LOGE("Invalid parameter, responseLen:%{public}zu", responseLen);
380         return HRIL_ERR_INVALID_PARAMETER;
381     }
382     HDI::Ril::V1_1::DataLinkCapability dataLinkCapability = { 0 };
383     const HRilDataLinkCapability *result = static_cast<const HRilDataLinkCapability *>(response);
384     dataLinkCapability.primaryDownlinkKbps = result->primaryDownlinkKbps;
385     dataLinkCapability.primaryUplinkKbps = result->primaryUplinkKbps;
386     dataLinkCapability.secondaryDownlinkKbps = result->secondaryDownlinkKbps;
387     dataLinkCapability.secondaryUplinkKbps = result->secondaryUplinkKbps;
388     return Notify(notifyType, error, &HDI::Ril::V1_1::IRilCallback::DataLinkCapabilityUpdated, dataLinkCapability);
389 }
390 
GetLinkCapabilityResponse( int32_t requestNum, HDI::Ril::V1_1::RilRadioResponseInfo &responseInfo, const void *response, size_t responseLen)391 int32_t HRilData::GetLinkCapabilityResponse(
392     int32_t requestNum, HDI::Ril::V1_1::RilRadioResponseInfo &responseInfo, const void *response, size_t responseLen)
393 {
394     if ((response == nullptr && responseLen != 0) || (responseLen % sizeof(HRilDataLinkCapability)) != 0) {
395         TELEPHONY_LOGE("Invalid parameter, responseLen:%{public}zu", responseLen);
396         return HRIL_ERR_INVALID_PARAMETER;
397     }
398     HDI::Ril::V1_1::DataLinkCapability dataLinkCapability = { 0 };
399     if (response != nullptr) {
400         const HRilDataLinkCapability *result = static_cast<const HRilDataLinkCapability *>(response);
401         dataLinkCapability.primaryDownlinkKbps = result->primaryDownlinkKbps;
402         dataLinkCapability.primaryUplinkKbps = result->primaryUplinkKbps;
403         dataLinkCapability.secondaryDownlinkKbps = result->secondaryDownlinkKbps;
404         dataLinkCapability.secondaryUplinkKbps = result->secondaryUplinkKbps;
405     }
406     return Response(responseInfo, &HDI::Ril::V1_1::IRilCallback::GetLinkCapabilityResponse, dataLinkCapability);
407 }
408 
GetLinkBandwidthInfoResponse( int32_t requestNum, HDI::Ril::V1_1::RilRadioResponseInfo &responseInfo, const void *response, size_t responseLen)409 int32_t HRilData::GetLinkBandwidthInfoResponse(
410     int32_t requestNum, HDI::Ril::V1_1::RilRadioResponseInfo &responseInfo, const void *response, size_t responseLen)
411 {
412     if ((response == nullptr && responseLen != 0) || (responseLen % sizeof(HRilLinkBandwidthInfo)) != 0) {
413         TELEPHONY_LOGE("Invalid parameter, responseLen:%{public}zu", responseLen);
414         return HRIL_ERR_INVALID_PARAMETER;
415     }
416     HDI::Ril::V1_1::DataLinkBandwidthInfo uplinkAndDownlinkBandwidthInfo = {};
417     if (response != nullptr) {
418         const HRilLinkBandwidthInfo *result = static_cast<const HRilLinkBandwidthInfo *>(response);
419         uplinkAndDownlinkBandwidthInfo.cid = result->cid;
420         uplinkAndDownlinkBandwidthInfo.qi = result->qi;
421         uplinkAndDownlinkBandwidthInfo.dlGfbr = result->dlGfbr;
422         uplinkAndDownlinkBandwidthInfo.ulGfbr = result->ulGfbr;
423         uplinkAndDownlinkBandwidthInfo.dlMfbr = result->dlMfbr;
424         uplinkAndDownlinkBandwidthInfo.ulMfbr = result->ulMfbr;
425         uplinkAndDownlinkBandwidthInfo.ulSambr = result->ulSambr;
426         uplinkAndDownlinkBandwidthInfo.dlSambr = result->dlSambr;
427         uplinkAndDownlinkBandwidthInfo.averagingWindow = result->averagingWindow;
428     }
429     return Response(
430         responseInfo, &HDI::Ril::V1_1::IRilCallback::GetLinkBandwidthInfoResponse, uplinkAndDownlinkBandwidthInfo);
431 }
432 
SetDataPermittedResponse( int32_t requestNum, HDI::Ril::V1_1::RilRadioResponseInfo &responseInfo, const void *response, size_t responseLen)433 int32_t HRilData::SetDataPermittedResponse(
434     int32_t requestNum, HDI::Ril::V1_1::RilRadioResponseInfo &responseInfo, const void *response, size_t responseLen)
435 {
436     return Response(responseInfo, &HDI::Ril::V1_1::IRilCallback::SetDataPermittedResponse);
437 }
438 
RegisterDataFuncs(const HRilDataReq *dataFuncs)439 void HRilData::RegisterDataFuncs(const HRilDataReq *dataFuncs)
440 {
441     dataFuncs_ = dataFuncs;
442 }
443 } // namespace Telephony
444 } // namespace OHOS
445