11e934351Sopenharmony_ci/*
21e934351Sopenharmony_ci * Copyright (c) 2021-2022 Huawei Device Co., Ltd.
31e934351Sopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License");
41e934351Sopenharmony_ci * you may not use this file except in compliance with the License.
51e934351Sopenharmony_ci * You may obtain a copy of the License at
61e934351Sopenharmony_ci *
71e934351Sopenharmony_ci *     http://www.apache.org/licenses/LICENSE-2.0
81e934351Sopenharmony_ci *
91e934351Sopenharmony_ci * Unless required by applicable law or agreed to in writing, software
101e934351Sopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS,
111e934351Sopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
121e934351Sopenharmony_ci * See the License for the specific language governing permissions and
131e934351Sopenharmony_ci * limitations under the License.
141e934351Sopenharmony_ci */
151e934351Sopenharmony_ci
161e934351Sopenharmony_ci#ifndef COMMUNICATIONNETSTACK_NETSTACK_NAPI_UTILS_H
171e934351Sopenharmony_ci#define COMMUNICATIONNETSTACK_NETSTACK_NAPI_UTILS_H
181e934351Sopenharmony_ci
191e934351Sopenharmony_ci#include <cstddef>
201e934351Sopenharmony_ci#include <cstdint>
211e934351Sopenharmony_ci#include <iosfwd>
221e934351Sopenharmony_ci#include <vector>
231e934351Sopenharmony_ci#include <functional>
241e934351Sopenharmony_ci#include <queue>
251e934351Sopenharmony_ci#include <mutex>
261e934351Sopenharmony_ci
271e934351Sopenharmony_ci#include "initializer_list"
281e934351Sopenharmony_ci#include "napi/native_api.h"
291e934351Sopenharmony_ci#include "uv.h"
301e934351Sopenharmony_ci
311e934351Sopenharmony_cinamespace OHOS::NetStack::NapiUtils {
321e934351Sopenharmony_cistatic constexpr int NETSTACK_NAPI_INTERNAL_ERROR = 2300002;
331e934351Sopenharmony_ciusing UvHandler = std::function<void()>;
341e934351Sopenharmony_cistruct UvHandlerQueue : public std::queue<UvHandler> {
351e934351Sopenharmony_ci    UvHandler Pop();
361e934351Sopenharmony_ci    void Push(const UvHandler &handler);
371e934351Sopenharmony_ciprivate:
381e934351Sopenharmony_ci    std::mutex mutex;
391e934351Sopenharmony_ci};
401e934351Sopenharmony_ci
411e934351Sopenharmony_cinapi_valuetype GetValueType(napi_env env, napi_value value);
421e934351Sopenharmony_ci
431e934351Sopenharmony_cibool IsInstanceOf(napi_env env, napi_value object, const std::string &name);
441e934351Sopenharmony_ci
451e934351Sopenharmony_ci/* named property */
461e934351Sopenharmony_cibool HasNamedProperty(napi_env env, napi_value object, const std::string &propertyName);
471e934351Sopenharmony_ci
481e934351Sopenharmony_cinapi_value GetNamedProperty(napi_env env, napi_value object, const std::string &propertyName);
491e934351Sopenharmony_ci
501e934351Sopenharmony_civoid SetNamedProperty(napi_env env, napi_value object, const std::string &name, napi_value value);
511e934351Sopenharmony_ci
521e934351Sopenharmony_cistd::vector<std::string> GetPropertyNames(napi_env env, napi_value object);
531e934351Sopenharmony_ci
541e934351Sopenharmony_ci/* UINT32 */
551e934351Sopenharmony_cinapi_value CreateUint32(napi_env env, uint32_t code);
561e934351Sopenharmony_ci
571e934351Sopenharmony_cinapi_value CreateUint64(napi_env env, uint64_t code);
581e934351Sopenharmony_ci
591e934351Sopenharmony_ciint64_t GetInt64FromValue(napi_env env, napi_value value);
601e934351Sopenharmony_ci
611e934351Sopenharmony_ciint64_t GetInt64Property(napi_env env, napi_value object, const std::string &propertyName);
621e934351Sopenharmony_ci
631e934351Sopenharmony_ciuint32_t GetUint32FromValue(napi_env env, napi_value value);
641e934351Sopenharmony_ci
651e934351Sopenharmony_ciuint32_t GetUint32Property(napi_env env, napi_value object, const std::string &propertyName);
661e934351Sopenharmony_ci
671e934351Sopenharmony_civoid SetUint32Property(napi_env env, napi_value object, const std::string &name, uint32_t value);
681e934351Sopenharmony_ci
691e934351Sopenharmony_civoid SetUint64Property(napi_env env, napi_value object, const std::string &name, uint64_t value);
701e934351Sopenharmony_ci
711e934351Sopenharmony_ci/* INT32 */
721e934351Sopenharmony_cinapi_value CreateInt32(napi_env env, int32_t code);
731e934351Sopenharmony_ci
741e934351Sopenharmony_ciint32_t GetInt32FromValue(napi_env env, napi_value value);
751e934351Sopenharmony_ci
761e934351Sopenharmony_ciint32_t GetInt32Property(napi_env env, napi_value object, const std::string &propertyName);
771e934351Sopenharmony_ci
781e934351Sopenharmony_civoid SetInt32Property(napi_env env, napi_value object, const std::string &name, int32_t value);
791e934351Sopenharmony_ci
801e934351Sopenharmony_civoid SetDoubleProperty(napi_env env, napi_value object, const std::string &name, double value);
811e934351Sopenharmony_ci
821e934351Sopenharmony_ci/* String UTF8 */
831e934351Sopenharmony_cinapi_value CreateStringUtf8(napi_env env, const std::string &str);
841e934351Sopenharmony_ci
851e934351Sopenharmony_cistd::string GetStringFromValueUtf8(napi_env env, napi_value value);
861e934351Sopenharmony_ci
871e934351Sopenharmony_cistd::string GetStringPropertyUtf8(napi_env env, napi_value object, const std::string &propertyName);
881e934351Sopenharmony_ci
891e934351Sopenharmony_cistd::string NapiValueToString(napi_env env, napi_value value);
901e934351Sopenharmony_ci
911e934351Sopenharmony_civoid SetStringPropertyUtf8(napi_env env, napi_value object, const std::string &name, const std::string &value);
921e934351Sopenharmony_ci
931e934351Sopenharmony_cistd::vector<std::string> GetDnsServers(napi_env env, napi_value object, const std::string &propertyName);
941e934351Sopenharmony_ci
951e934351Sopenharmony_ci/* array buffer */
961e934351Sopenharmony_cibool ValueIsArrayBuffer(napi_env env, napi_value value);
971e934351Sopenharmony_ci
981e934351Sopenharmony_civoid *GetInfoFromArrayBufferValue(napi_env env, napi_value value, size_t *length);
991e934351Sopenharmony_ci
1001e934351Sopenharmony_cinapi_value CreateArrayBuffer(napi_env env, size_t length, void **data);
1011e934351Sopenharmony_ci
1021e934351Sopenharmony_ci/* object */
1031e934351Sopenharmony_cinapi_value CreateObject(napi_env env);
1041e934351Sopenharmony_ci
1051e934351Sopenharmony_ci/* undefined */
1061e934351Sopenharmony_cinapi_value GetUndefined(napi_env env);
1071e934351Sopenharmony_ci
1081e934351Sopenharmony_ci/* function */
1091e934351Sopenharmony_cinapi_value CallFunction(napi_env env, napi_value recv, napi_value func, size_t argc, const napi_value *argv);
1101e934351Sopenharmony_ci
1111e934351Sopenharmony_cinapi_value CreateFunction(napi_env env, const std::string &name, napi_callback func, void *arg);
1121e934351Sopenharmony_ci
1131e934351Sopenharmony_ci/* reference */
1141e934351Sopenharmony_cinapi_ref CreateReference(napi_env env, napi_value callback);
1151e934351Sopenharmony_ci
1161e934351Sopenharmony_cinapi_value GetReference(napi_env env, napi_ref callbackRef);
1171e934351Sopenharmony_ci
1181e934351Sopenharmony_civoid DeleteReference(napi_env env, napi_ref callbackRef);
1191e934351Sopenharmony_ci
1201e934351Sopenharmony_ci/* boolean */
1211e934351Sopenharmony_cibool GetBooleanProperty(napi_env env, napi_value object, const std::string &propertyName);
1221e934351Sopenharmony_ci
1231e934351Sopenharmony_civoid SetBooleanProperty(napi_env env, napi_value object, const std::string &name, bool value);
1241e934351Sopenharmony_ci
1251e934351Sopenharmony_cinapi_value GetBoolean(napi_env env, bool value);
1261e934351Sopenharmony_ci
1271e934351Sopenharmony_cibool GetBooleanFromValue(napi_env env, napi_value value);
1281e934351Sopenharmony_ci
1291e934351Sopenharmony_ci/* define properties */
1301e934351Sopenharmony_civoid DefineProperties(napi_env env, napi_value object,
1311e934351Sopenharmony_ci                      const std::initializer_list<napi_property_descriptor> &properties);
1321e934351Sopenharmony_ci
1331e934351Sopenharmony_ci/* array */
1341e934351Sopenharmony_cinapi_value CreateArray(napi_env env, size_t length);
1351e934351Sopenharmony_civoid SetArrayElement(napi_env env, napi_value array, uint32_t index, napi_value value);
1361e934351Sopenharmony_cibool IsArray(napi_env env, napi_value value);
1371e934351Sopenharmony_civoid SetArrayProperty(napi_env env, napi_value object, const std::string &name, napi_value value);
1381e934351Sopenharmony_ciuint32_t GetArrayLength(napi_env env, napi_value arr);
1391e934351Sopenharmony_cinapi_value GetArrayElement(napi_env env, napi_value arr, uint32_t index);
1401e934351Sopenharmony_ci
1411e934351Sopenharmony_ci/* JSON */
1421e934351Sopenharmony_cinapi_value JsonStringify(napi_env env, napi_value object);
1431e934351Sopenharmony_ci
1441e934351Sopenharmony_cinapi_value JsonParse(napi_env env, const std::string &inStr);
1451e934351Sopenharmony_ci
1461e934351Sopenharmony_ci/* libuv */
1471e934351Sopenharmony_civoid CreateUvQueueWork(napi_env env, void *data, void(handler)(uv_work_t *, int status));
1481e934351Sopenharmony_ci
1491e934351Sopenharmony_civoid CreateUvQueueWorkEnhanced(napi_env env, void *data, void (*handler)(napi_env env, napi_status status, void *data));
1501e934351Sopenharmony_ci
1511e934351Sopenharmony_ci/* scope */
1521e934351Sopenharmony_cinapi_handle_scope OpenScope(napi_env env);
1531e934351Sopenharmony_ci
1541e934351Sopenharmony_civoid CloseScope(napi_env env, napi_handle_scope scope);
1551e934351Sopenharmony_ci
1561e934351Sopenharmony_ci/* error */
1571e934351Sopenharmony_cinapi_value CreateErrorMessage(napi_env env, int32_t errorCodeconst, const std::string &errorMessage);
1581e934351Sopenharmony_ci
1591e934351Sopenharmony_cinapi_value GetGlobal(napi_env env);
1601e934351Sopenharmony_ci
1611e934351Sopenharmony_cinapi_value GetValueFromGlobal(napi_env env, const std::string &className);
1621e934351Sopenharmony_ci
1631e934351Sopenharmony_civoid CreateUvQueueWorkByModuleId(napi_env env, const UvHandler &handler, uint64_t id);
1641e934351Sopenharmony_ci
1651e934351Sopenharmony_ciuint64_t CreateUvHandlerQueue(napi_env env);
1661e934351Sopenharmony_ci
1671e934351Sopenharmony_civoid HookForEnvCleanup(void *data);
1681e934351Sopenharmony_civoid SetEnvValid(napi_env env);
1691e934351Sopenharmony_cibool IsEnvValid(napi_env env);
1701e934351Sopenharmony_ci} // namespace OHOS::NetStack::NapiUtils
1711e934351Sopenharmony_ci
1721e934351Sopenharmony_ci#endif /* COMMUNICATIONNETSTACK_NETSTACK_NAPI_UTILS_H */
173