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 OHOS_NETMANAGER_EXT_JS_VPN_EXTENSION_CONTEXT_H
17 #define OHOS_NETMANAGER_EXT_JS_VPN_EXTENSION_CONTEXT_H
18 
19 #include <memory>
20 
21 #include "ability_connect_callback.h"
22 #include "vpn_extension_context.h"
23 #include "event_handler.h"
24 #include "js_free_install_observer.h"
25 #include "native_engine/native_engine.h"
26 
27 namespace OHOS {
28 namespace NetManagerStandard {
29 using namespace AbilityRuntime;
30 napi_value CreateJsVpnExtensionContext(napi_env env, std::shared_ptr<VpnExtensionContext> context);
31 
32 class JSVpnExtensionContext : public AbilityConnectCallback {
33 public:
34     explicit JSVpnExtensionContext(napi_env env);
35     ~JSVpnExtensionContext();
36 private:
37     napi_env env_;
38     std::unique_ptr<NativeReference> jsConnectionObject_ = nullptr;
39 };
40 
41 struct ConnectionKey {
42     AAFwk::Want want;
43     int64_t id;
44 };
45 
46 struct key_compare {
operatorkey_compare47     bool operator()(const ConnectionKey &key1, const ConnectionKey &key2) const
48     {
49         if (key1.id < key2.id) {
50             return true;
51         }
52         return false;
53     }
54 };
55 
56 static std::map<ConnectionKey, sptr<JSVpnExtensionContext>, key_compare> connects_;
57 static int64_t serialNumber_ = 0;
58 static std::shared_ptr<AppExecFwk::EventHandler> handler_ = nullptr;
59 }  // namespace NetManagerStandard
60 }  // namespace OHOS
61 #endif  // OHOS_NETMANAGER_EXT_JS_VPN_EXTENSION_CONTEXT_H
62