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