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