1 /* 2 * Copyright (c) 2023 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 #ifndef INTERFACES_KITS_NETWORK_MANAGER_INCLUDE_NETWORK_MANAGER_ADDON_H 17 #define INTERFACES_KITS_NETWORK_MANAGER_INCLUDE_NETWORK_MANAGER_ADDON_H 18 19 #include "napi/native_api.h" 20 #include "napi/native_common.h" 21 #include "napi/native_node_api.h" 22 #include "napi_edm_common.h" 23 #include "napi_edm_error.h" 24 #include "network_manager_proxy.h" 25 #include "want.h" 26 27 #include "domain_filter_rule.h" 28 #include "firewall_rule.h" 29 #include "iptables_utils.h" 30 31 namespace OHOS { 32 namespace EDM { 33 struct AsyncNetworkInfoCallbackInfo : AsyncCallbackInfo { 34 OHOS::AppExecFwk::ElementName elementName; 35 std::string networkInterface; 36 int policyCode = 0; 37 }; 38 39 struct AsyncNetworkInterfacesCallbackInfo : AsyncCallbackInfo { 40 OHOS::AppExecFwk::ElementName elementName; 41 }; 42 43 struct AsyncSetNetworkInterfaceCallbackInfo : AsyncCallbackInfo { 44 OHOS::AppExecFwk::ElementName elementName; 45 std::string networkInterface; 46 bool isDisabled = false; 47 }; 48 49 struct AsyncIptablesCallbackInfo : AsyncCallbackInfo { 50 OHOS::AppExecFwk::ElementName elementName; 51 IPTABLES::AddFilter addFilter; 52 IPTABLES::RemoveFilter removeFilter; 53 }; 54 55 struct AsyncHttpProxyCallbackInfo : AsyncCallbackInfo { 56 OHOS::AppExecFwk::ElementName elementName; 57 OHOS::NetManagerStandard::HttpProxy httpProxy; 58 bool hasAdmin = false; 59 }; 60 61 class NetworkManagerAddon { 62 public: 63 static napi_value Init(napi_env env, napi_value exports); 64 65 private: 66 static napi_value GetAllNetworkInterfaces(napi_env env, napi_callback_info info); 67 static napi_value GetIpAddress(napi_env env, napi_callback_info info); 68 static napi_value GetMac(napi_env env, napi_callback_info info); 69 static napi_value GetIpOrMacAddress(napi_env env, napi_callback_info info, int policyCode); 70 static napi_value SetNetworkInterfaceDisabled(napi_env env, napi_callback_info info); 71 static napi_value IsNetworkInterfaceDisabled(napi_env env, napi_callback_info info); 72 static napi_value AddIptablesFilterRule(napi_env env, napi_callback_info info); 73 static napi_value RemoveIptablesFilterRule(napi_env env, napi_callback_info info); 74 static napi_value ListIptablesFilterRules(napi_env env, napi_callback_info info); 75 static napi_value AddFirewallRule(napi_env env, napi_callback_info info); 76 static napi_value RemoveFirewallRule(napi_env env, napi_callback_info info); 77 static napi_value GetFirewallRules(napi_env env, napi_callback_info info); 78 static napi_value AddDomainFilterRule(napi_env env, napi_callback_info info); 79 static napi_value RemoveDomainFilterRule(napi_env env, napi_callback_info info); 80 static napi_value GetDomainFilterRules(napi_env env, napi_callback_info info); 81 static void NativeGetAllNetworkInterfaces(napi_env env, void *data); 82 static void NativeGetIpOrMacAddress(napi_env env, void *data); 83 static void NativeSetNetworkInterfaceDisabled(napi_env env, void *data); 84 static void NativeIsNetworkInterfaceDisabled(napi_env env, void *data); 85 static void NativeAddIptalbsFilterRule(napi_env env, void *data); 86 static void NativeRemoveIptalbsFilterRule(napi_env env, void *data); 87 static void NativeListIptablesFilterRules(napi_env env, void *data); 88 static void CreateFirewallActionObject(napi_env env, napi_value value); 89 static void CreateFirewallProtocolObject(napi_env env, napi_value value); 90 static void CreateFirewallDirectionObject(napi_env env, napi_value value); 91 static void CreateFirewallAddMethodObject(napi_env env, napi_value value); 92 static bool JsObjToAddFirewallObject(napi_env env, napi_value object, IPTABLES::AddFilter &addFilter); 93 static bool JsObjToRemoveFirewallObject(napi_env env, napi_value object, IPTABLES::RemoveFilter &removeFilter); 94 static bool JsObjToFirewallRule(napi_env env, napi_value object, IPTABLES::FirewallRule &rule); 95 static napi_value FirewallRuleToJsObj(napi_env env, const IPTABLES::FirewallRule &rule); 96 static bool JsObjToDomainFilterRule(napi_env env, napi_value object, IPTABLES::DomainFilterRule &rule); 97 static napi_value DomainFilterRuleToJsObj(napi_env env, const IPTABLES::DomainFilterRule &rule); 98 99 static napi_value SetGlobalHttpProxy(napi_env env, napi_callback_info info); 100 static napi_value GetGlobalHttpProxy(napi_env env, napi_callback_info info); 101 static bool ParseHttpProxyParam(napi_env env, napi_value argv, 102 AsyncHttpProxyCallbackInfo *asyncHttpProxyCallbackInfo); 103 static napi_value ConvertHttpProxyToJS(napi_env env, const OHOS::NetManagerStandard::HttpProxy &httpProxy); 104 static void NativeSetGlobalHttpProxy(napi_env env, void *data); 105 static void NativeGetGlobalHttpProxy(napi_env env, void *data); 106 static void NativeHttpProxyCallbackComplete(napi_env env, napi_status status, void *data); 107 }; 108 } // namespace EDM 109 } // namespace OHOS 110 111 #endif // INTERFACES_KITS_NETWORK_MANAGER_INCLUDE_NETWORK_MANAGER_ADDON_H 112