• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 2025 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 "eap_module.h"
17 
18 #include "eth_eap_profile.h"
19 #include "netmanager_ext_log.h"
20 
21 static constexpr const char *EAP_MODULE_NAME = "net.eap";
22 static constexpr const char *INTERFACE_ETH_METHOD = "EapMethod";
23 static constexpr const char *INTERFACE_PHASE_2_METHOD = "Phase2Method";
24 static constexpr const char *FUNCTION_START_ETH_EAP = "startEthEap";
25 static constexpr const char *FUNCTION_LOGOFF_ETH_EAP = "logOffEthEap";
26 
27 namespace OHOS::NetManagerStandard {
28 
AddCleanupHook(napi_env env)29 static void AddCleanupHook(napi_env env)
30 {
31     NapiUtils::SetEnvValid(env);
32     auto envWrapper = new (std::nothrow) napi_env;
33     if (envWrapper == nullptr) {
34         NETMANAGER_EXT_LOGE("EnvWrapper create fail!");
35         return;
36     }
37     *envWrapper = env;
38     napi_add_env_cleanup_hook(env, NapiUtils::HookForEnvCleanup, envWrapper);
39 }
40 
DeclareEapMethod(napi_env env,napi_value exports)41 void EapModule::DeclareEapMethod(napi_env env, napi_value exports)
42 {
43     napi_value result = NapiUtils::CreateObject(env);
44     NapiUtils::DefineProperties(env, result, {
45         DECLARE_NAPI_STATIC_PROPERTY("EAP_NONE",
46             NapiUtils::CreateInt32(env, static_cast<int32_t>(EapMethod::EAP_NONE))),
47         DECLARE_NAPI_STATIC_PROPERTY("EAP_PEAP",
48             NapiUtils::CreateInt32(env, static_cast<int32_t>(EapMethod::EAP_PEAP))),
49         DECLARE_NAPI_STATIC_PROPERTY("EAP_TLS",
50             NapiUtils::CreateInt32(env, static_cast<int32_t>(EapMethod::EAP_TLS))),
51         DECLARE_NAPI_STATIC_PROPERTY("EAP_TTLS",
52             NapiUtils::CreateInt32(env, static_cast<int32_t>(EapMethod::EAP_TTLS))),
53         DECLARE_NAPI_STATIC_PROPERTY("EAP_PWD",
54             NapiUtils::CreateInt32(env, static_cast<int32_t>(EapMethod::EAP_PWD))),
55         DECLARE_NAPI_STATIC_PROPERTY("EAP_SIM",
56             NapiUtils::CreateInt32(env, static_cast<int32_t>(EapMethod::EAP_SIM))),
57         DECLARE_NAPI_STATIC_PROPERTY("EAP_AKA",
58             NapiUtils::CreateInt32(env, static_cast<int32_t>(EapMethod::EAP_AKA))),
59         DECLARE_NAPI_STATIC_PROPERTY("EAP_AKA_PRIME",
60             NapiUtils::CreateInt32(env, static_cast<int32_t>(EapMethod::EAP_AKA_PRIME))),
61         DECLARE_NAPI_STATIC_PROPERTY("EAP_UNAUTH_TLS",
62             NapiUtils::CreateInt32(env, static_cast<int32_t>(EapMethod::EAP_UNAUTH_TLS))),
63     });
64     NapiUtils::SetNamedProperty(env, exports, INTERFACE_ETH_METHOD, result);
65 }
66 
DeclarePhase2Method(napi_env env,napi_value exports)67 void EapModule::DeclarePhase2Method(napi_env env, napi_value exports)
68 {
69     napi_value result = NapiUtils::CreateObject(env);
70     NapiUtils::DefineProperties(env, result, {
71         DECLARE_NAPI_STATIC_PROPERTY("PHASE2_NONE",
72             NapiUtils::CreateInt32(env, static_cast<int32_t>(Phase2Method::PHASE2_NONE))),
73         DECLARE_NAPI_STATIC_PROPERTY("PHASE2_PAP",
74             NapiUtils::CreateInt32(env, static_cast<int32_t>(Phase2Method::PHASE2_PAP))),
75         DECLARE_NAPI_STATIC_PROPERTY("PHASE2_MSCHAP",
76             NapiUtils::CreateInt32(env, static_cast<int32_t>(Phase2Method::PHASE2_MSCHAP))),
77         DECLARE_NAPI_STATIC_PROPERTY("PHASE2_MSCHAPV2",
78             NapiUtils::CreateInt32(env, static_cast<int32_t>(Phase2Method::PHASE2_MSCHAPV2))),
79         DECLARE_NAPI_STATIC_PROPERTY("PHASE2_GTC",
80             NapiUtils::CreateInt32(env, static_cast<int32_t>(Phase2Method::PHASE2_GTC))),
81         DECLARE_NAPI_STATIC_PROPERTY("PHASE2_SIM",
82             NapiUtils::CreateInt32(env, static_cast<int32_t>(Phase2Method::PHASE2_SIM))),
83         DECLARE_NAPI_STATIC_PROPERTY("PHASE2_AKA",
84             NapiUtils::CreateInt32(env, static_cast<int32_t>(Phase2Method::PHASE2_AKA))),
85         DECLARE_NAPI_STATIC_PROPERTY("PHASE2_AKA_PRIME",
86             NapiUtils::CreateInt32(env, static_cast<int32_t>(Phase2Method::PHASE2_AKA_PRIME))),
87     });
88     NapiUtils::SetNamedProperty(env, exports, INTERFACE_PHASE_2_METHOD, result);
89 }
90 
InitEapModule(napi_env env,napi_value exports)91 napi_value EapModule::InitEapModule(napi_env env, napi_value exports)
92 {
93     std::initializer_list<napi_property_descriptor> functions = {
94         DECLARE_NAPI_FUNCTION(functionRegCustomEapHandler, RegCustomEapHandler),
95         DECLARE_NAPI_FUNCTION(functionUnregCustomEapHandler, UnRegCustomEapHandler),
96         DECLARE_NAPI_FUNCTION(functionReplyCustomEapData, ReplyCustomEapData),
97         DECLARE_NAPI_FUNCTION(FUNCTION_START_ETH_EAP, StartEthEap),
98         DECLARE_NAPI_FUNCTION(FUNCTION_LOGOFF_ETH_EAP, LogOffEthEap),
99     };
100     NapiUtils::DefineProperties(env, exports, functions);
101     InitProperties(env, exports);
102     DeclareEapMethod(env, exports);
103     DeclarePhase2Method(env, exports);
104     AddCleanupHook(env);
105     return exports;
106 }
107 
InitProperties(napi_env env,napi_value exports)108 void EapModule::InitProperties(napi_env env, napi_value exports)
109 {
110     std::initializer_list<napi_property_descriptor> results = {
111         DECLARE_NAPI_STATIC_PROPERTY("RESULT_FAIL",
112             NapiUtils::CreateUint32(env, static_cast<uint32_t>(CustomResult::RESULT_FAIL))),
113         DECLARE_NAPI_STATIC_PROPERTY("RESULT_NEXT",
114             NapiUtils::CreateUint32(env, static_cast<uint32_t>(CustomResult::RESULT_NEXT))),
115         DECLARE_NAPI_STATIC_PROPERTY("RESULT_FINISH",
116             NapiUtils::CreateUint32(env, static_cast<uint32_t>(CustomResult::RESULT_FINISH))),
117     };
118     napi_value customResult = NapiUtils::CreateObject(env);
119     NapiUtils::DefineProperties(env, customResult, results);
120     NapiUtils::SetNamedProperty(env, exports, interfaceNetEapCustomResult, customResult);
121 }
122 
123 static napi_module g_eapModule = {
124     .nm_version = 1,
125     .nm_flags = 0,
126     .nm_filename = nullptr,
127     .nm_register_func = EapModule::InitEapModule,
128     .nm_modname = EAP_MODULE_NAME,
129     .nm_priv = nullptr,
130     .reserved = {nullptr},
131 };
132 
RegisterEapModule(void)133 extern "C" __attribute__((constructor)) void RegisterEapModule(void)
134 {
135     NETMANAGER_EXT_LOGI("RegisterEapModule success!");
136     napi_module_register(&g_eapModule);
137 }
138 } // namespace OHOS::NetManagerStandard