18e745fdaSopenharmony_ci/* 28e745fdaSopenharmony_ci * Copyright (c) 2024 Huawei Device Co., Ltd. 38e745fdaSopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License"); 48e745fdaSopenharmony_ci * you may not use this file except in compliance with the License. 58e745fdaSopenharmony_ci * You may obtain a copy of the License at 68e745fdaSopenharmony_ci * 78e745fdaSopenharmony_ci * http://www.apache.org/licenses/LICENSE-2.0 88e745fdaSopenharmony_ci * 98e745fdaSopenharmony_ci * Unless required by applicable law or agreed to in writing, software 108e745fdaSopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS, 118e745fdaSopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 128e745fdaSopenharmony_ci * See the License for the specific language governing permissions and 138e745fdaSopenharmony_ci * limitations under the License. 148e745fdaSopenharmony_ci */ 158e745fdaSopenharmony_ci 168e745fdaSopenharmony_ci#include <arpa/inet.h> 178e745fdaSopenharmony_ci#include <sys/socket.h> 188e745fdaSopenharmony_ci 198e745fdaSopenharmony_ci#include "errors.h" 208e745fdaSopenharmony_ci#include "hilog/log.h" 218e745fdaSopenharmony_ci#include "ipc_object_stub.h" 228e745fdaSopenharmony_ci#include "ipc_types.h" 238e745fdaSopenharmony_ci#include "message_parcel.h" 248e745fdaSopenharmony_ci#include "netfirewall_hisysevent.h" 258e745fdaSopenharmony_ci#include "netmanager_base_common_utils.h" 268e745fdaSopenharmony_ci#include "netmanager_base_permission.h" 278e745fdaSopenharmony_ci#include "netmgr_ext_log_wrapper.h" 288e745fdaSopenharmony_ci#include "netfirewall_stub.h" 298e745fdaSopenharmony_ci 308e745fdaSopenharmony_cinamespace OHOS { 318e745fdaSopenharmony_cinamespace NetManagerStandard { 328e745fdaSopenharmony_cinamespace { 338e745fdaSopenharmony_ciconst std::string PERMISSION_MANAGE_NET_FIREWALL = "ohos.permission.MANAGE_NET_FIREWALL"; 348e745fdaSopenharmony_ciconst std::string PERMISSION_GET_NET_FIREWALL = "ohos.permission.GET_NET_FIREWALL"; 358e745fdaSopenharmony_ci} 368e745fdaSopenharmony_ciNetFirewallStub::NetFirewallStub() 378e745fdaSopenharmony_ci{ 388e745fdaSopenharmony_ci memberFuncMap_[static_cast<uint32_t>(SET_NET_FIREWALL_STATUS)] = {PERMISSION_MANAGE_NET_FIREWALL, 398e745fdaSopenharmony_ci &NetFirewallStub::OnSetNetFirewallPolicy}; 408e745fdaSopenharmony_ci memberFuncMap_[static_cast<uint32_t>(GET_NET_FIREWALL_STATUS)] = {PERMISSION_GET_NET_FIREWALL, 418e745fdaSopenharmony_ci &NetFirewallStub::OnGetNetFirewallPolicy}; 428e745fdaSopenharmony_ci memberFuncMap_[static_cast<uint32_t>(ADD_NET_FIREWALL_RULE)] = {PERMISSION_MANAGE_NET_FIREWALL, 438e745fdaSopenharmony_ci &NetFirewallStub::OnAddNetFirewallRule}; 448e745fdaSopenharmony_ci memberFuncMap_[static_cast<uint32_t>(UPDATE_NET_FIREWALL_RULE)] = {PERMISSION_MANAGE_NET_FIREWALL, 458e745fdaSopenharmony_ci &NetFirewallStub::OnUpdateNetFirewallRule}; 468e745fdaSopenharmony_ci memberFuncMap_[static_cast<uint32_t>(DELETE_NET_FIREWALL_RULE)] = {PERMISSION_MANAGE_NET_FIREWALL, 478e745fdaSopenharmony_ci &NetFirewallStub::OnDeleteNetFirewallRule}; 488e745fdaSopenharmony_ci memberFuncMap_[static_cast<uint32_t>(GET_ALL_NET_FIREWALL_RULES)] = {PERMISSION_GET_NET_FIREWALL, 498e745fdaSopenharmony_ci &NetFirewallStub::OnGetNetFirewallRules}; 508e745fdaSopenharmony_ci memberFuncMap_[static_cast<uint32_t>(GET_NET_FIREWALL_RULE)] = {PERMISSION_GET_NET_FIREWALL, 518e745fdaSopenharmony_ci &NetFirewallStub::OnGetNetFirewallRule}; 528e745fdaSopenharmony_ci memberFuncMap_[static_cast<uint32_t>(GET_ALL_INTERCEPT_RECORDS)] = {PERMISSION_GET_NET_FIREWALL, 538e745fdaSopenharmony_ci &NetFirewallStub::OnGetInterceptRecords}; 548e745fdaSopenharmony_ci} 558e745fdaSopenharmony_ci 568e745fdaSopenharmony_ciint32_t NetFirewallStub::CheckFirewallPermission(std::string &strPermission) 578e745fdaSopenharmony_ci{ 588e745fdaSopenharmony_ci if (!strPermission.empty() && !NetManagerPermission::CheckPermission(strPermission)) { 598e745fdaSopenharmony_ci NETMGR_EXT_LOG_E("Permission denied permission: %{public}s", strPermission.c_str()); 608e745fdaSopenharmony_ci return FIREWALL_ERR_PERMISSION_DENIED; 618e745fdaSopenharmony_ci } 628e745fdaSopenharmony_ci return FIREWALL_SUCCESS; 638e745fdaSopenharmony_ci} 648e745fdaSopenharmony_ci 658e745fdaSopenharmony_ciint32_t NetFirewallStub::OnRemoteRequest(uint32_t code, MessageParcel &data, MessageParcel &reply, 668e745fdaSopenharmony_ci MessageOption &option) 678e745fdaSopenharmony_ci{ 688e745fdaSopenharmony_ci std::u16string myDescripter = NetFirewallStub::GetDescriptor(); 698e745fdaSopenharmony_ci std::u16string remoteDescripter = data.ReadInterfaceToken(); 708e745fdaSopenharmony_ci if (myDescripter != remoteDescripter) { 718e745fdaSopenharmony_ci NETMGR_EXT_LOG_E("descriptor checked fail"); 728e745fdaSopenharmony_ci return NETMANAGER_EXT_ERR_DESCRIPTOR_MISMATCH; 738e745fdaSopenharmony_ci } 748e745fdaSopenharmony_ci auto itFunc = memberFuncMap_.find(code); 758e745fdaSopenharmony_ci if (itFunc != memberFuncMap_.end()) { 768e745fdaSopenharmony_ci NETMGR_EXT_LOG_I("enter OnRemoteRequest code %{public}d:", code); 778e745fdaSopenharmony_ci int32_t checkResult = CheckFirewallPermission(itFunc->second.strPermission); 788e745fdaSopenharmony_ci if (checkResult != FIREWALL_SUCCESS) { 798e745fdaSopenharmony_ci return checkResult; 808e745fdaSopenharmony_ci } 818e745fdaSopenharmony_ci auto serviceFunc = itFunc->second.serviceFunc; 828e745fdaSopenharmony_ci if (serviceFunc != nullptr) { 838e745fdaSopenharmony_ci return (this->*serviceFunc)(data, reply); 848e745fdaSopenharmony_ci } 858e745fdaSopenharmony_ci } 868e745fdaSopenharmony_ci return IPCObjectStub::OnRemoteRequest(code, data, reply, option); 878e745fdaSopenharmony_ci} 888e745fdaSopenharmony_ci 898e745fdaSopenharmony_ciint32_t NetFirewallStub::OnSetNetFirewallPolicy(MessageParcel &data, MessageParcel &reply) 908e745fdaSopenharmony_ci{ 918e745fdaSopenharmony_ci int32_t userId; 928e745fdaSopenharmony_ci if (!data.ReadInt32(userId)) { 938e745fdaSopenharmony_ci return NETMANAGER_EXT_ERR_READ_DATA_FAIL; 948e745fdaSopenharmony_ci } 958e745fdaSopenharmony_ci if (userId <= 0) { 968e745fdaSopenharmony_ci NETMGR_EXT_LOG_E("Parameter error."); 978e745fdaSopenharmony_ci return FIREWALL_ERR_INVALID_PARAMETER; 988e745fdaSopenharmony_ci } 998e745fdaSopenharmony_ci sptr<NetFirewallPolicy> status = NetFirewallPolicy::Unmarshalling(data); 1008e745fdaSopenharmony_ci if (status == nullptr) { 1018e745fdaSopenharmony_ci NETMGR_EXT_LOG_E("status is nullptr."); 1028e745fdaSopenharmony_ci return FIREWALL_ERR_INTERNAL; 1038e745fdaSopenharmony_ci } 1048e745fdaSopenharmony_ci 1058e745fdaSopenharmony_ci return SetNetFirewallPolicy(userId, status); 1068e745fdaSopenharmony_ci} 1078e745fdaSopenharmony_ci 1088e745fdaSopenharmony_ciint32_t NetFirewallStub::OnGetNetFirewallPolicy(MessageParcel &data, MessageParcel &reply) 1098e745fdaSopenharmony_ci{ 1108e745fdaSopenharmony_ci int32_t userId; 1118e745fdaSopenharmony_ci if (!data.ReadInt32(userId)) { 1128e745fdaSopenharmony_ci return NETMANAGER_EXT_ERR_READ_DATA_FAIL; 1138e745fdaSopenharmony_ci } 1148e745fdaSopenharmony_ci if (userId <= 0) { 1158e745fdaSopenharmony_ci NETMGR_EXT_LOG_E("Parameter error."); 1168e745fdaSopenharmony_ci return FIREWALL_ERR_INVALID_PARAMETER; 1178e745fdaSopenharmony_ci } 1188e745fdaSopenharmony_ci sptr<NetFirewallPolicy> status = new (std::nothrow) NetFirewallPolicy(); 1198e745fdaSopenharmony_ci int32_t ret = GetNetFirewallPolicy(userId, status); 1208e745fdaSopenharmony_ci if (ret == FIREWALL_SUCCESS) { 1218e745fdaSopenharmony_ci if (!status->Marshalling(reply)) { 1228e745fdaSopenharmony_ci return NETMANAGER_EXT_ERR_WRITE_REPLY_FAIL; 1238e745fdaSopenharmony_ci } 1248e745fdaSopenharmony_ci } 1258e745fdaSopenharmony_ci return ret; 1268e745fdaSopenharmony_ci} 1278e745fdaSopenharmony_ci 1288e745fdaSopenharmony_ciint32_t NetFirewallStub::OnAddNetFirewallRule(MessageParcel &data, MessageParcel &reply) 1298e745fdaSopenharmony_ci{ 1308e745fdaSopenharmony_ci sptr<NetFirewallRule> rule = NetFirewallRule::Unmarshalling(data); 1318e745fdaSopenharmony_ci if (rule == nullptr) { 1328e745fdaSopenharmony_ci NETMGR_EXT_LOG_E("rule is nullptr."); 1338e745fdaSopenharmony_ci return FIREWALL_ERR_INTERNAL; 1348e745fdaSopenharmony_ci } 1358e745fdaSopenharmony_ci if (rule->userId <= 0) { 1368e745fdaSopenharmony_ci NETMGR_EXT_LOG_E("Parameter error."); 1378e745fdaSopenharmony_ci return FIREWALL_ERR_INVALID_PARAMETER; 1388e745fdaSopenharmony_ci } 1398e745fdaSopenharmony_ci if (rule->ruleName.empty() || rule->ruleName.size() > MAX_RULE_NAME_LEN || 1408e745fdaSopenharmony_ci rule->ruleDescription.size() > MAX_RULE_DESCRIPTION_LEN) { 1418e745fdaSopenharmony_ci NETMANAGER_EXT_LOGE("rule name or description is too long"); 1428e745fdaSopenharmony_ci return FIREWALL_ERR_INVALID_PARAMETER; 1438e745fdaSopenharmony_ci } 1448e745fdaSopenharmony_ci if (rule->localIps.size() > MAX_RULE_IP_COUNT || rule->remoteIps.size() > MAX_RULE_IP_COUNT) { 1458e745fdaSopenharmony_ci NETMGR_EXT_LOG_E("ip invalid, size is too long."); 1468e745fdaSopenharmony_ci return FIREWALL_ERR_EXCEED_MAX_IP; 1478e745fdaSopenharmony_ci } 1488e745fdaSopenharmony_ci 1498e745fdaSopenharmony_ci if (rule->localPorts.size() > MAX_RULE_PORT_COUNT || rule->remotePorts.size() > MAX_RULE_PORT_COUNT) { 1508e745fdaSopenharmony_ci NETMGR_EXT_LOG_E("port invalid, size is too long."); 1518e745fdaSopenharmony_ci return FIREWALL_ERR_EXCEED_MAX_PORT; 1528e745fdaSopenharmony_ci } 1538e745fdaSopenharmony_ci 1548e745fdaSopenharmony_ci if (rule->domains.size() > MAX_RULE_DOMAIN_COUNT) { 1558e745fdaSopenharmony_ci NETMGR_EXT_LOG_E("domain invalid, size is too long."); 1568e745fdaSopenharmony_ci return FIREWALL_ERR_EXCEED_MAX_DOMAIN; 1578e745fdaSopenharmony_ci } 1588e745fdaSopenharmony_ci 1598e745fdaSopenharmony_ci int32_t result = 0; 1608e745fdaSopenharmony_ci int32_t ret = AddNetFirewallRule(rule, result); 1618e745fdaSopenharmony_ci if (ret == FIREWALL_SUCCESS) { 1628e745fdaSopenharmony_ci if (!reply.WriteUint32(result)) { 1638e745fdaSopenharmony_ci ret = NETMANAGER_EXT_ERR_WRITE_REPLY_FAIL; 1648e745fdaSopenharmony_ci } 1658e745fdaSopenharmony_ci } 1668e745fdaSopenharmony_ci NetFirewallHisysEvent::SendFirewallConfigReport(rule->userId, ret); 1678e745fdaSopenharmony_ci return ret; 1688e745fdaSopenharmony_ci} 1698e745fdaSopenharmony_ci 1708e745fdaSopenharmony_ciint32_t NetFirewallStub::OnUpdateNetFirewallRule(MessageParcel &data, MessageParcel &reply) 1718e745fdaSopenharmony_ci{ 1728e745fdaSopenharmony_ci sptr<NetFirewallRule> rule = NetFirewallRule::Unmarshalling(data); 1738e745fdaSopenharmony_ci if (rule == nullptr) { 1748e745fdaSopenharmony_ci NETMGR_EXT_LOG_E("rule is nullptr."); 1758e745fdaSopenharmony_ci return FIREWALL_ERR_INTERNAL; 1768e745fdaSopenharmony_ci } 1778e745fdaSopenharmony_ci if (rule->userId <= 0) { 1788e745fdaSopenharmony_ci NETMGR_EXT_LOG_E("Parameter error."); 1798e745fdaSopenharmony_ci return FIREWALL_ERR_INVALID_PARAMETER; 1808e745fdaSopenharmony_ci } 1818e745fdaSopenharmony_ci if (rule->ruleName.empty() || rule->ruleName.size() > MAX_RULE_NAME_LEN || 1828e745fdaSopenharmony_ci rule->ruleDescription.size() > MAX_RULE_DESCRIPTION_LEN) { 1838e745fdaSopenharmony_ci NETMANAGER_EXT_LOGE("rule name or description is too long"); 1848e745fdaSopenharmony_ci return FIREWALL_ERR_INVALID_PARAMETER; 1858e745fdaSopenharmony_ci } 1868e745fdaSopenharmony_ci if (rule->localIps.size() > MAX_RULE_IP_COUNT || rule->remoteIps.size() > MAX_RULE_IP_COUNT) { 1878e745fdaSopenharmony_ci NETMGR_EXT_LOG_E("ip invalid, size is too long."); 1888e745fdaSopenharmony_ci return FIREWALL_ERR_EXCEED_MAX_IP; 1898e745fdaSopenharmony_ci } 1908e745fdaSopenharmony_ci 1918e745fdaSopenharmony_ci if (rule->localPorts.size() > MAX_RULE_PORT_COUNT || rule->remotePorts.size() > MAX_RULE_PORT_COUNT) { 1928e745fdaSopenharmony_ci NETMGR_EXT_LOG_E("port invalid, size is too long."); 1938e745fdaSopenharmony_ci return FIREWALL_ERR_EXCEED_MAX_PORT; 1948e745fdaSopenharmony_ci } 1958e745fdaSopenharmony_ci 1968e745fdaSopenharmony_ci if (rule->domains.size() > MAX_RULE_DOMAIN_COUNT) { 1978e745fdaSopenharmony_ci NETMGR_EXT_LOG_E("domain invalid, size is too long."); 1988e745fdaSopenharmony_ci return FIREWALL_ERR_EXCEED_MAX_DOMAIN; 1998e745fdaSopenharmony_ci } 2008e745fdaSopenharmony_ci 2018e745fdaSopenharmony_ci int32_t ret = UpdateNetFirewallRule(rule); 2028e745fdaSopenharmony_ci NetFirewallHisysEvent::SendFirewallConfigReport(rule->userId, ret); 2038e745fdaSopenharmony_ci return ret; 2048e745fdaSopenharmony_ci} 2058e745fdaSopenharmony_ci 2068e745fdaSopenharmony_ciint32_t NetFirewallStub::OnDeleteNetFirewallRule(MessageParcel &data, MessageParcel &reply) 2078e745fdaSopenharmony_ci{ 2088e745fdaSopenharmony_ci int32_t userId; 2098e745fdaSopenharmony_ci if (!data.ReadInt32(userId)) { 2108e745fdaSopenharmony_ci return NETMANAGER_EXT_ERR_READ_DATA_FAIL; 2118e745fdaSopenharmony_ci } 2128e745fdaSopenharmony_ci if (userId <= 0) { 2138e745fdaSopenharmony_ci NETMGR_EXT_LOG_E("Parameter error."); 2148e745fdaSopenharmony_ci return FIREWALL_ERR_INVALID_PARAMETER; 2158e745fdaSopenharmony_ci } 2168e745fdaSopenharmony_ci int32_t ruleId; 2178e745fdaSopenharmony_ci if (!data.ReadInt32(ruleId)) { 2188e745fdaSopenharmony_ci return NETMANAGER_EXT_ERR_READ_DATA_FAIL; 2198e745fdaSopenharmony_ci } 2208e745fdaSopenharmony_ci if (ruleId <= 0) { 2218e745fdaSopenharmony_ci NETMGR_EXT_LOG_E("Parameter error."); 2228e745fdaSopenharmony_ci return FIREWALL_ERR_INVALID_PARAMETER; 2238e745fdaSopenharmony_ci } 2248e745fdaSopenharmony_ci int32_t ret = DeleteNetFirewallRule(userId, ruleId); 2258e745fdaSopenharmony_ci NetFirewallHisysEvent::SendFirewallRequestReport(userId, ret); 2268e745fdaSopenharmony_ci return ret; 2278e745fdaSopenharmony_ci} 2288e745fdaSopenharmony_ci 2298e745fdaSopenharmony_ciint32_t NetFirewallStub::OnGetNetFirewallRules(MessageParcel &data, MessageParcel &reply) 2308e745fdaSopenharmony_ci{ 2318e745fdaSopenharmony_ci int32_t userId; 2328e745fdaSopenharmony_ci if (!data.ReadInt32(userId)) { 2338e745fdaSopenharmony_ci return NETMANAGER_EXT_ERR_READ_DATA_FAIL; 2348e745fdaSopenharmony_ci } 2358e745fdaSopenharmony_ci if (userId <= 0) { 2368e745fdaSopenharmony_ci NETMGR_EXT_LOG_E("Parameter error."); 2378e745fdaSopenharmony_ci return FIREWALL_ERR_INVALID_PARAMETER; 2388e745fdaSopenharmony_ci } 2398e745fdaSopenharmony_ci sptr<RequestParam> param = RequestParam::Unmarshalling(data); 2408e745fdaSopenharmony_ci if (param == nullptr) { 2418e745fdaSopenharmony_ci NETMGR_EXT_LOG_E("param is nullptr."); 2428e745fdaSopenharmony_ci return FIREWALL_ERR_INTERNAL; 2438e745fdaSopenharmony_ci } 2448e745fdaSopenharmony_ci if (param->page < 1 || param->page > FIREWALL_USER_MAX_RULE || param->pageSize < 1 || 2458e745fdaSopenharmony_ci param->pageSize > static_cast<int32_t>(MAX_PAGE_SIZE)) { 2468e745fdaSopenharmony_ci NETMANAGER_EXT_LOGE("ParsePageParam page or pageSize is error"); 2478e745fdaSopenharmony_ci return FIREWALL_ERR_INVALID_PARAMETER; 2488e745fdaSopenharmony_ci } 2498e745fdaSopenharmony_ci sptr<FirewallRulePage> info = new (std::nothrow) FirewallRulePage(); 2508e745fdaSopenharmony_ci int32_t ret = GetNetFirewallRules(userId, param, info); 2518e745fdaSopenharmony_ci if (ret == FIREWALL_SUCCESS) { 2528e745fdaSopenharmony_ci if (!info->Marshalling(reply)) { 2538e745fdaSopenharmony_ci return NETMANAGER_EXT_ERR_WRITE_REPLY_FAIL; 2548e745fdaSopenharmony_ci } 2558e745fdaSopenharmony_ci } 2568e745fdaSopenharmony_ci NetFirewallHisysEvent::SendFirewallRequestReport(userId, ret); 2578e745fdaSopenharmony_ci return ret; 2588e745fdaSopenharmony_ci} 2598e745fdaSopenharmony_ci 2608e745fdaSopenharmony_ciint32_t NetFirewallStub::OnGetNetFirewallRule(MessageParcel &data, MessageParcel &reply) 2618e745fdaSopenharmony_ci{ 2628e745fdaSopenharmony_ci int32_t userId; 2638e745fdaSopenharmony_ci if (!data.ReadInt32(userId)) { 2648e745fdaSopenharmony_ci return NETMANAGER_EXT_ERR_READ_DATA_FAIL; 2658e745fdaSopenharmony_ci } 2668e745fdaSopenharmony_ci int32_t ruleId; 2678e745fdaSopenharmony_ci if (!data.ReadInt32(ruleId)) { 2688e745fdaSopenharmony_ci return NETMANAGER_EXT_ERR_READ_DATA_FAIL; 2698e745fdaSopenharmony_ci } 2708e745fdaSopenharmony_ci if (userId <= 0 || ruleId <= 0) { 2718e745fdaSopenharmony_ci NETMGR_EXT_LOG_E("Parameter error."); 2728e745fdaSopenharmony_ci return FIREWALL_ERR_INVALID_PARAMETER; 2738e745fdaSopenharmony_ci } 2748e745fdaSopenharmony_ci sptr<NetFirewallRule> rule = new (std::nothrow) NetFirewallRule(); 2758e745fdaSopenharmony_ci int32_t ret = GetNetFirewallRule(userId, ruleId, rule); 2768e745fdaSopenharmony_ci if (ret == FIREWALL_SUCCESS) { 2778e745fdaSopenharmony_ci if (!rule->Marshalling(reply)) { 2788e745fdaSopenharmony_ci return NETMANAGER_EXT_ERR_WRITE_REPLY_FAIL; 2798e745fdaSopenharmony_ci } 2808e745fdaSopenharmony_ci } 2818e745fdaSopenharmony_ci NetFirewallHisysEvent::SendFirewallRequestReport(userId, ret); 2828e745fdaSopenharmony_ci return ret; 2838e745fdaSopenharmony_ci} 2848e745fdaSopenharmony_ci 2858e745fdaSopenharmony_ciint32_t NetFirewallStub::OnGetInterceptRecords(MessageParcel &data, MessageParcel &reply) 2868e745fdaSopenharmony_ci{ 2878e745fdaSopenharmony_ci int32_t userId; 2888e745fdaSopenharmony_ci if (!data.ReadInt32(userId)) { 2898e745fdaSopenharmony_ci return NETMANAGER_EXT_ERR_READ_DATA_FAIL; 2908e745fdaSopenharmony_ci } 2918e745fdaSopenharmony_ci if (userId <= 0) { 2928e745fdaSopenharmony_ci NETMGR_EXT_LOG_E("Parameter error."); 2938e745fdaSopenharmony_ci return FIREWALL_ERR_INVALID_PARAMETER; 2948e745fdaSopenharmony_ci } 2958e745fdaSopenharmony_ci sptr<RequestParam> param = RequestParam::Unmarshalling(data); 2968e745fdaSopenharmony_ci if (param == nullptr) { 2978e745fdaSopenharmony_ci NETMGR_EXT_LOG_E("param is nullptr."); 2988e745fdaSopenharmony_ci return FIREWALL_ERR_INTERNAL; 2998e745fdaSopenharmony_ci } 3008e745fdaSopenharmony_ci if (param->page < 1 || param->page > FIREWALL_USER_MAX_RULE || param->pageSize < 1 || 3018e745fdaSopenharmony_ci param->pageSize > static_cast<int32_t>(MAX_PAGE_SIZE)) { 3028e745fdaSopenharmony_ci NETMANAGER_EXT_LOGE("ParsePageParam page or pageSize is error"); 3038e745fdaSopenharmony_ci return FIREWALL_ERR_INVALID_PARAMETER; 3048e745fdaSopenharmony_ci } 3058e745fdaSopenharmony_ci sptr<InterceptRecordPage> info = new (std::nothrow) InterceptRecordPage(); 3068e745fdaSopenharmony_ci int32_t ret = GetInterceptRecords(userId, param, info); 3078e745fdaSopenharmony_ci if (ret == FIREWALL_SUCCESS) { 3088e745fdaSopenharmony_ci if (!info->Marshalling(reply)) { 3098e745fdaSopenharmony_ci return NETMANAGER_EXT_ERR_WRITE_REPLY_FAIL; 3108e745fdaSopenharmony_ci } 3118e745fdaSopenharmony_ci } 3128e745fdaSopenharmony_ci NetFirewallHisysEvent::SendRecordRequestReport(userId, ret); 3138e745fdaSopenharmony_ci return ret; 3148e745fdaSopenharmony_ci} 3158e745fdaSopenharmony_ci} // namespace NetManagerStandard 3168e745fdaSopenharmony_ci} // namespace OHOS 317