• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 2022 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_DM_NATIVE_DEVICEMANAGER_JS_H
17 #define OHOS_DM_NATIVE_DEVICEMANAGER_JS_H
18 
19 #include <memory>
20 #include <string>
21 
22 #include "device_manager_callback.h"
23 #include "dm_app_image_info.h"
24 #include "dm_device_info.h"
25 #include "dm_native_event.h"
26 #include "dm_subscribe_info.h"
27 #include "dm_publish_info.h"
28 #include "dm_anonymous.h"
29 #include "dm_error_message.h"
30 #include "napi/native_api.h"
31 #include "napi/native_node_api.h"
32 #include "nlohmann/json.hpp"
33 #define DM_NAPI_BUF_LENGTH (256)
34 
35 struct AsyncCallbackInfo {
36     napi_env env = nullptr;
37     napi_async_work asyncWork = nullptr;
38 
39     char bundleName[DM_NAPI_BUF_LENGTH] = {0};
40     size_t bundleNameLen = 0;
41 
42     napi_ref callback = nullptr;
43     int32_t status = -1;
44     int32_t ret = 0;
45 };
46 
47 struct DeviceInfoAsyncCallbackInfo {
48     napi_env env = nullptr;
49     napi_async_work asyncWork = nullptr;
50 
51     std::string bundleName;
52     size_t bundleNameLen = 0;
53     OHOS::DistributedHardware::DmDeviceInfo deviceInfo;
54     std::string extra;
55     // OHOS::DistributedHardware::DmFilterOptions filter;
56     napi_ref callback = nullptr;
57     napi_value thisVar = nullptr;
58     napi_deferred deferred = nullptr;
59     int32_t status = -1;
60     int32_t ret = 0;
61 };
62 
63 struct DeviceInfoListAsyncCallbackInfo {
64     napi_env env = nullptr;
65     napi_async_work asyncWork = nullptr;
66 
67     std::string bundleName;
68     size_t bundleNameLen = 0;
69     std::vector<OHOS::DistributedHardware::DmDeviceInfo> devList;
70     std::string extra;
71     // OHOS::DistributedHardware::DmFilterOptions filter;
72     napi_ref callback = nullptr;
73     napi_value thisVar = nullptr;
74     napi_deferred deferred = nullptr;
75     int32_t status = -1;
76     int32_t ret = 0;
77 };
78 
79 struct AuthAsyncCallbackInfo {
80     napi_env env = nullptr;
81 
82     char bundleName[DM_NAPI_BUF_LENGTH] = {0};
83     size_t bundleNameLen = 0;
84 
85     napi_ref callback = nullptr;
86     int32_t authType = -1;
87 };
88 
89 struct DmNapiStateJsCallback {
90     std::string bundleName_;
91     uint16_t subscribeId_;
92     int32_t reason_;
93     OHOS::DistributedHardware::DmDeviceInfo deviceInfo_;
94 
DmNapiStateJsCallbackDmNapiStateJsCallback95     DmNapiStateJsCallback(std::string bundleName, uint16_t subscribeId, int32_t reason,
96         OHOS::DistributedHardware::DmDeviceInfo deviceInfo)
97         : bundleName_(bundleName), subscribeId_(subscribeId), reason_(reason), deviceInfo_(deviceInfo) {}
98 };
99 
100 struct DmNapiPublishJsCallback {
101     std::string bundleName_;
102     int32_t publishId_;
103     int32_t reason_;
104 
DmNapiPublishJsCallbackDmNapiPublishJsCallback105     DmNapiPublishJsCallback(std::string bundleName, int32_t publishId, int32_t reason)
106         : bundleName_(bundleName), publishId_(publishId), reason_(reason) {}
107 };
108 
109 struct DmNapiAuthJsCallback {
110     std::string bundleName_;
111     std::string deviceId_;
112     std::string token_;
113     int32_t status_;
114     int32_t reason_;
115 
DmNapiAuthJsCallbackDmNapiAuthJsCallback116     DmNapiAuthJsCallback(std::string bundleName, std::string deviceId, std::string token, int32_t status,
117         int32_t reason)
118         : bundleName_(bundleName), deviceId_(deviceId), token_(token), status_(status), reason_(reason) {}
119 };
120 
121 struct DmNapiVerifyJsCallback {
122     std::string bundleName_;
123     std::string deviceId_;
124     int32_t resultCode_;
125     int32_t flag_;
126 
DmNapiVerifyJsCallbackDmNapiVerifyJsCallback127     DmNapiVerifyJsCallback(std::string bundleName, std::string deviceId, int32_t resultCode, int32_t flag)
128         : bundleName_(bundleName), deviceId_(deviceId), resultCode_(resultCode), flag_(flag) {}
129 };
130 
131 enum DmNapiDevStateChangeAction { ONLINE = 0, READY = 1, OFFLINE = 2, CHANGE = 3 };
132 
133 class DmNapiInitCallback : public OHOS::DistributedHardware::DmInitCallback {
134 public:
DmNapiInitCallback(napi_env env,std::string & bundleName)135     explicit DmNapiInitCallback(napi_env env, std::string &bundleName) : env_(env), bundleName_(bundleName)
136     {
137     }
~DmNapiInitCallback()138     virtual ~DmNapiInitCallback()
139     {
140     }
141     void OnRemoteDied() override;
142 
143 private:
144     napi_env env_;
145     std::string bundleName_;
146 };
147 
148 class DmNapiDeviceStateCallback : public OHOS::DistributedHardware::DeviceStateCallback {
149 public:
DmNapiDeviceStateCallback(napi_env env,std::string & bundleName)150     explicit DmNapiDeviceStateCallback(napi_env env, std::string &bundleName) : env_(env), bundleName_(bundleName)
151     {
152     }
~DmNapiDeviceStateCallback()153     virtual ~DmNapiDeviceStateCallback() {};
154     void OnDeviceOnline(const OHOS::DistributedHardware::DmDeviceInfo &deviceInfo) override;
155     void OnDeviceReady(const OHOS::DistributedHardware::DmDeviceInfo &deviceInfo) override;
156     void OnDeviceOffline(const OHOS::DistributedHardware::DmDeviceInfo &deviceInfo) override;
157     void OnDeviceChanged(const OHOS::DistributedHardware::DmDeviceInfo &deviceInfo) override;
158 
159 private:
160     napi_env env_;
161     std::string bundleName_;
162 };
163 
164 class DmNapiDiscoveryCallback : public OHOS::DistributedHardware::DiscoveryCallback {
165 public:
DmNapiDiscoveryCallback(napi_env env,std::string & bundleName)166     explicit DmNapiDiscoveryCallback(napi_env env, std::string &bundleName)
167         : env_(env), refCount_(0), bundleName_(bundleName)
168     {
169     }
~DmNapiDiscoveryCallback()170     virtual ~DmNapiDiscoveryCallback() {};
171     void OnDeviceFound(uint16_t subscribeId, const OHOS::DistributedHardware::DmDeviceInfo &deviceInfo) override;
172     void OnDiscoveryFailed(uint16_t subscribeId, int32_t failedReason) override;
173     void OnDiscoverySuccess(uint16_t subscribeId) override;
174     void IncreaseRefCount();
175     void DecreaseRefCount();
176     int32_t GetRefCount();
177 
178 private:
179     napi_env env_;
180     std::atomic<int32_t> refCount_;
181     std::string bundleName_;
182 };
183 
184 class DmNapiPublishCallback : public OHOS::DistributedHardware::PublishCallback {
185 public:
DmNapiPublishCallback(napi_env env,std::string & bundleName)186     explicit DmNapiPublishCallback(napi_env env, std::string &bundleName)
187         : env_(env), refCount_(0), bundleName_(bundleName)
188     {
189     }
~DmNapiPublishCallback()190     virtual ~DmNapiPublishCallback() {};
191     void OnPublishResult(int32_t publishId, int32_t publishResult) override;
192     void IncreaseRefCount();
193     void DecreaseRefCount();
194     int32_t GetRefCount();
195 
196 private:
197     napi_env env_;
198     std::atomic<int32_t> refCount_;
199     std::string bundleName_;
200 };
201 
202 class DmNapiDeviceManagerUiCallback : public OHOS::DistributedHardware::DeviceManagerUiCallback {
203 public:
DmNapiDeviceManagerUiCallback(napi_env env,std::string & bundleName)204     explicit DmNapiDeviceManagerUiCallback(napi_env env, std::string &bundleName) : env_(env), bundleName_(bundleName)
205     {
206     }
~DmNapiDeviceManagerUiCallback()207     virtual ~DmNapiDeviceManagerUiCallback() {};
208     void OnCall(const std::string &paramJson) override;
209 
210 private:
211     napi_env env_;
212     std::string bundleName_;
213 };
214 
215 class DmNapiAuthenticateCallback : public OHOS::DistributedHardware::AuthenticateCallback {
216 public:
DmNapiAuthenticateCallback(napi_env env,std::string & bundleName)217     explicit DmNapiAuthenticateCallback(napi_env env, std::string &bundleName) : env_(env), bundleName_(bundleName)
218     {
219     }
~DmNapiAuthenticateCallback()220     virtual ~DmNapiAuthenticateCallback() {};
221     void OnAuthResult(const std::string &deviceId, const std::string &token, int32_t status, int32_t reason) override;
222 
223 private:
224     napi_env env_;
225     std::string bundleName_;
226 };
227 
228 class DmNapiVerifyAuthCallback : public OHOS::DistributedHardware::VerifyAuthCallback {
229 public:
DmNapiVerifyAuthCallback(napi_env env,std::string & bundleName)230     explicit DmNapiVerifyAuthCallback(napi_env env, std::string &bundleName) : env_(env), bundleName_(bundleName)
231     {
232     }
~DmNapiVerifyAuthCallback()233     virtual ~DmNapiVerifyAuthCallback() {};
234     void OnVerifyAuthResult(const std::string &deviceId, int32_t resultCode, int32_t flag) override;
235 
236 private:
237     napi_env env_;
238     std::string bundleName_;
239 };
240 
241 class DeviceManagerNapi : public DmNativeEvent {
242 public:
243     explicit DeviceManagerNapi(napi_env env, napi_value thisVar);
244     virtual ~DeviceManagerNapi();
245     static napi_value Init(napi_env env, napi_value exports);
246     static napi_value Constructor(napi_env env, napi_callback_info info);
247     static napi_value EnumTypeConstructor(napi_env env, napi_callback_info info);
248     static napi_value InitDeviceTypeEnum(napi_env env, napi_value exports);
249     static napi_value InitDeviceStateChangeActionEnum(napi_env env, napi_value exports);
250     static napi_value InitDiscoverModeEnum(napi_env env, napi_value exports);
251     static napi_value InitExchangeMediumEnum(napi_env env, napi_value exports);
252     static napi_value InitExchangeFreqEnum(napi_env env, napi_value exports);
253     static napi_value InitSubscribeCapEnum(napi_env env, napi_value exports);
254     static napi_value CreateDeviceManager(napi_env env, napi_callback_info info);
255     static napi_value ReleaseDeviceManager(napi_env env, napi_callback_info info);
256     static napi_value SetUserOperationSync(napi_env env, napi_callback_info info);
257     static napi_value GetTrustedDeviceListSync(napi_env env, napi_callback_info info);
258     static napi_value GetTrustedDeviceList(napi_env env, napi_callback_info info);
259     static napi_value GetLocalDeviceInfoSync(napi_env env, napi_callback_info info);
260     static napi_value GetLocalDeviceInfo(napi_env env, napi_callback_info info);
261     static napi_value UnAuthenticateDevice(napi_env env, napi_callback_info info);
262     static napi_value StartDeviceDiscoverSync(napi_env env, napi_callback_info info);
263     static napi_value StopDeviceDiscoverSync(napi_env env, napi_callback_info info);
264     static napi_value PublishDeviceDiscoverySync(napi_env env, napi_callback_info info);
265     static napi_value UnPublishDeviceDiscoverySync(napi_env env, napi_callback_info info);
266     static napi_value AuthenticateDevice(napi_env env, napi_callback_info info);
267     static napi_value VerifyAuthInfo(napi_env env, napi_callback_info info);
268     static napi_value JsOn(napi_env env, napi_callback_info info);
269     static napi_value JsOff(napi_env env, napi_callback_info info);
270     static napi_value GetAuthenticationParamSync(napi_env env, napi_callback_info info);
271     static void HandleCreateDmCallBack(const napi_env &env, AsyncCallbackInfo *asCallbackInfo);
272     static DeviceManagerNapi *GetDeviceManagerNapi(std::string &bundleName);
273     static void CreateDmCallback(napi_env env, std::string &bundleName, std::string &eventType);
274     static void CreateDmCallback(napi_env env, std::string &bundleName, std::string &eventType, std::string &extra);
275     static void ReleaseDmCallback(std::string &bundleName, std::string &eventType);
276     static void DeviceInfoToJsArray(const napi_env &env,
277                                     const std::vector<OHOS::DistributedHardware::DmDeviceInfo> &vecDevInfo,
278                                     const int32_t idx, napi_value &arrayResult);
279     static bool DmAuthParamDetection(const OHOS::DistributedHardware::DmAuthParam &authParam);
280     static void DmAuthParamToJsAuthParam(const napi_env &env, const OHOS::DistributedHardware::DmAuthParam &authParam,
281                                          napi_value &paramResult);
282     static void SetValueInt32(const napi_env &env, const std::string &fieldStr, const int32_t intValue,
283                               napi_value &result);
284     static void SetValueUtf8String(const napi_env &env, const std::string &fieldStr, const std::string &str,
285                                    napi_value &result);
286     static void JsObjectToString(const napi_env &env, const napi_value &object, const std::string &fieldStr, char *dest,
287                                  const int32_t destLen);
288     static void JsObjectToBool(const napi_env &env, const napi_value &object, const std::string &fieldStr,
289                                bool &fieldRef);
290     static void JsObjectToInt(const napi_env &env, const napi_value &object, const std::string &fieldStr,
291                               int &fieldRef);
292     static std::string JsObjectToString(const napi_env &env, const napi_value &object);
293     static int32_t JsToDmSubscribeInfo(const napi_env &env, const napi_value &object,
294                                        OHOS::DistributedHardware::DmSubscribeInfo &info);
295     static void JsToDmPublishInfo(const napi_env &env, const napi_value &object,
296                                   OHOS::DistributedHardware::DmPublishInfo &info);
297     static void JsToDmDeviceInfo(const napi_env &env, const napi_value &object,
298                                  OHOS::DistributedHardware::DmDeviceInfo &info);
299     static void JsToDmExtra(const napi_env &env, const napi_value &object, std::string &extra, int32_t &authType);
300     static void JsToDmAuthInfo(const napi_env &env, const napi_value &object, std::string &extra);
301     static void JsToDmBuffer(const napi_env &env, const napi_value &object, const std::string &fieldStr,
302                              uint8_t **bufferPtr, int32_t &bufferLen);
303     static void JsToJsonObject(const napi_env &env, const napi_value &object, const std::string &fieldStr,
304                                nlohmann::json &jsonObj);
305     static void JsToDmTokenInfo(const napi_env &env, const napi_value &object, const std::string &fieldStr,
306                                 nlohmann::json &jsonObj);
307     static void JsToDmAuthExtra(const napi_env &env, const napi_value &param, nlohmann::json &jsonObj);
308     static void JsToDmDiscoveryExtra(const napi_env &env, const napi_value &object, std::string &extra);
309     static void DmDeviceInfotoJsDeviceInfo(const napi_env &env,
310                                            const OHOS::DistributedHardware::DmDeviceInfo &vecDevInfo,
311                                            napi_value &result);
312     void OnDeviceStateChange(DmNapiDevStateChangeAction action,
313                              const OHOS::DistributedHardware::DmDeviceInfo &deviceInfo);
314     void OnDeviceFound(uint16_t subscribeId, const OHOS::DistributedHardware::DmDeviceInfo &deviceInfo);
315     void OnDiscoveryFailed(uint16_t subscribeId, int32_t failedReason);
316     void OnPublishResult(int32_t publishId, int32_t publishResult);
317     void OnAuthResult(const std::string &deviceId, const std::string &token, int32_t status, int32_t reason);
318     void OnVerifyResult(const std::string &deviceId, int32_t resultCode, int32_t flag);
319     void OnDmUiCall(const std::string &paramJson);
320 
321 private:
322     static void ReleasePublishCallback(std::string &bundleName);
323     static napi_value JsOffFrench(napi_env env, int32_t num, napi_value thisVar, napi_value argv[]);
324     static napi_value JsOnFrench(napi_env env, int32_t num, napi_value thisVar, napi_value argv[]);
325     static void CallAsyncWorkSync(napi_env env, DeviceInfoAsyncCallbackInfo *deviceInfoAsyncCallbackInfo);
326     static void CallAsyncWork(napi_env env, DeviceInfoAsyncCallbackInfo *deviceInfoAsyncCallbackInfo);
327     static void CallAsyncWorkSync(napi_env env, DeviceInfoListAsyncCallbackInfo *deviceInfoListAsyncCallbackInfo);
328     static void CallAsyncWork(napi_env env, DeviceInfoListAsyncCallbackInfo *deviceInfoListAsyncCallbackInfo);
329     static void CallGetTrustedDeviceListStatusSync(napi_env env, napi_status &status,
330                                                    DeviceInfoListAsyncCallbackInfo *deviceInfoListAsyncCallbackInfo);
331     static void CallGetTrustedDeviceListStatus(napi_env env, napi_status &status,
332                                                DeviceInfoListAsyncCallbackInfo *deviceInfoListAsyncCallbackInfo);
333     static napi_value CallDeviceList(napi_env env, napi_callback_info info,
334                                      DeviceInfoListAsyncCallbackInfo *deviceInfoListAsyncCallbackInfo);
335     static void CallGetLocalDeviceInfoSync(napi_env env, napi_status &status,
336                                            DeviceInfoAsyncCallbackInfo *deviceInfoAsyncCallbackInfo);
337     static void CallGetLocalDeviceInfo(napi_env env, napi_status &status,
338                                        DeviceInfoAsyncCallbackInfo *deviceInfoAsyncCallbackInfo);
339     static napi_value GetTrustedDeviceListPromise(napi_env env,
340                                                   DeviceInfoListAsyncCallbackInfo *deviceInfoListAsyncCallbackInfo);
341     static bool StartArgCheck(napi_env env, napi_value &argv, OHOS::DistributedHardware::DmSubscribeInfo &subInfo);
342     static void HandleCreateDmCallBackCompletedCB(napi_env env, napi_status status, void *data);
343 private:
344     napi_env env_;
345     static thread_local napi_ref sConstructor_;
346     std::string bundleName_;
347     static AuthAsyncCallbackInfo authAsyncCallbackInfo_;
348     static AuthAsyncCallbackInfo verifyAsyncCallbackInfo_;
349 };
350 #endif // OHOS_DM_NATIVE_DEVICEMANAGER_JS_H
351