• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 2023-2024 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 "disallow_mobile_data_plugin.h"
17 
18 #include "cellular_data_client.h"
19 #include "edm_constants.h"
20 #include "edm_ipc_interface_code.h"
21 #include "func_code_utils.h"
22 #include "iplugin_manager.h"
23 #include "parameters.h"
24 #include "telephony_errors.h"
25 
26 namespace OHOS {
27 namespace EDM {
28 const bool REGISTER_RESULT = IPluginManager::GetInstance()->AddPlugin(std::make_shared<DisallowMobileDataPlugin>());
29 constexpr const char *PARAM_MOBILE_DATA_POLICY = "persist.edm.mobile_data_policy";
30 constexpr const char *MOBILE_DATA_NONE = "none";
31 constexpr const char *MOBILE_DATA_DISALLOW = "disallow";
32 constexpr const char *MOBILE_DATA_FORCE_OPEN = "force_open";
33 
DisallowMobileDataPlugin()34 DisallowMobileDataPlugin::DisallowMobileDataPlugin()
35 {
36     policyCode_ = EdmInterfaceCode::DISALLOWED_MOBILE_DATA;
37     policyName_ = PolicyName::POLICY_DISALLOW_MOBILE_DATA;
38     permissionConfig_.typePermissions.emplace(IPlugin::PermissionType::SUPER_DEVICE_ADMIN,
39         EdmPermission::PERMISSION_ENTERPRISE_MANAGE_NETWORK);
40     permissionConfig_.apiType = IPlugin::ApiType::PUBLIC;
41     needSave_ = true;
42 }
43 
OnHandlePolicy(std::uint32_t funcCode,MessageParcel & data,MessageParcel & reply,HandlePolicyData & policyData,int32_t userId)44 ErrCode DisallowMobileDataPlugin::OnHandlePolicy(std::uint32_t funcCode, MessageParcel &data, MessageParcel &reply,
45     HandlePolicyData &policyData, int32_t userId)
46 {
47     EDMLOGI("DisallowMobileDataPlugin::OnHandlePolicy start");
48     uint32_t typeCode = FUNC_TO_OPERATE(funcCode);
49     FuncOperateType type = FuncCodeUtils::ConvertOperateType(typeCode);
50     if (type != FuncOperateType::SET) {
51         return EdmReturnErrCode::SYSTEM_ABNORMALLY;
52     }
53     const std::string flag = data.ReadString();
54     if (flag.empty() || flag == EdmConstants::MobileData::DISALLOW_FLAG) {
55         const bool isDisallow = data.ReadBool();
56         EDMLOGI("DisallowMobileDataPlugin:ReadBool isDisallow:%{public}d", isDisallow);
57         if (isDisallow) {
58             if (!system::SetParameter(PARAM_MOBILE_DATA_POLICY, MOBILE_DATA_DISALLOW)) {
59                 EDMLOGE("DisallowMobileDataPlugin:OnSetPolicy SetParameter fail");
60                 return EdmReturnErrCode::SYSTEM_ABNORMALLY;
61             }
62             int32_t ret = Telephony::CellularDataClient::GetInstance().EnableCellularData(false);
63             EDMLOGI("DisallowMobileDataPlugin:OnSetPolicy send request result:%{public}d", ret);
64             if (ret != Telephony::TELEPHONY_ERR_SUCCESS) {
65                 EDMLOGE("DisallowMobileDataPlugin:OnSetPolicy send request fail. %{public}d", ret);
66                 return EdmReturnErrCode::SYSTEM_ABNORMALLY;
67             }
68             policyData.isChanged = true;
69             policyData.mergePolicyData = "true";
70             policyData.policyData = "true";
71             return ERR_OK;
72         }
73         if (!system::SetParameter(PARAM_MOBILE_DATA_POLICY, MOBILE_DATA_NONE)) {
74             EDMLOGE("DisallowMobileDataPlugin:OnSetPolicy SetParameter fail");
75             return EdmReturnErrCode::SYSTEM_ABNORMALLY;
76         }
77         policyData.isChanged = true;
78         policyData.mergePolicyData = "false";
79         policyData.policyData = "false";
80         return ERR_OK;
81     }
82     if (flag == EdmConstants::MobileData::FORCE_FLAG) {
83         return OnHandleForceOpen(data);
84     }
85     return EdmReturnErrCode::SYSTEM_ABNORMALLY;
86 }
87 
OnHandleForceOpen(MessageParcel & data)88 ErrCode DisallowMobileDataPlugin::OnHandleForceOpen(MessageParcel &data)
89 {
90     const int32_t foceOpen = data.ReadInt32();
91     EDMLOGI("DisallowMobileDataPlugin:ReadInt32 foceOpen:%{public}d", foceOpen);
92     if (foceOpen != EdmConstants::MobileData::FORCE_OPEN) {
93         return EdmReturnErrCode::SYSTEM_ABNORMALLY;
94     }
95     std::string dataPolicy = system::GetParameter(PARAM_MOBILE_DATA_POLICY, "");
96     if (dataPolicy == MOBILE_DATA_DISALLOW) {
97         EDMLOGE("DisallowMobileDataPlugin::OnSetPolicy failed, because mobile data disallow");
98         return EdmReturnErrCode::ENTERPRISE_POLICES_DENIED;
99     }
100     if (!system::SetParameter(PARAM_MOBILE_DATA_POLICY, MOBILE_DATA_FORCE_OPEN)) {
101         EDMLOGE("DisallowMobileDataPlugin:OnSetPolicy SetParameter fail");
102         return EdmReturnErrCode::SYSTEM_ABNORMALLY;
103     }
104     int32_t ret = Telephony::CellularDataClient::GetInstance().EnableCellularData(true);
105     EDMLOGI("DisallowMobileDataPlugin:OnSetPolicy send request result:%{public}d", ret);
106     if (ret != Telephony::TELEPHONY_ERR_SUCCESS) {
107         EDMLOGE("DisallowMobileDataPlugin:OnSetPolicy send request fail. %{public}d", ret);
108         return EdmReturnErrCode::SYSTEM_ABNORMALLY;
109     }
110     return ERR_OK;
111 }
112 
OnAdminRemove(const std::string & adminName,const std::string & policyData,const std::string & mergeData,int32_t userId)113 ErrCode DisallowMobileDataPlugin::OnAdminRemove(const std::string &adminName, const std::string &policyData,
114     const std::string &mergeData, int32_t userId)
115 {
116     EDMLOGI("TurnOnOffMobileDataPlugin OnAdminRemove adminName : %{public}s, policyData : %{public}s",
117             adminName.c_str(), policyData.c_str());
118     if (!system::SetParameter(PARAM_MOBILE_DATA_POLICY, MOBILE_DATA_NONE)) {
119         EDMLOGE("DisallowMobileDataPlugin:OnSetPolicy SetParameter fail");
120         return EdmReturnErrCode::SYSTEM_ABNORMALLY;
121     }
122     return ERR_OK;
123 }
124 } // namespace EDM
125 } // namespace OHOS
126