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_BASE_CONTEXT_H
171e934351Sopenharmony_ci#define COMMUNICATIONNETSTACK_BASE_CONTEXT_H
181e934351Sopenharmony_ci
191e934351Sopenharmony_ci#include <cstddef>
201e934351Sopenharmony_ci#include <cstdint>
211e934351Sopenharmony_ci#include <iosfwd>
221e934351Sopenharmony_ci#include <string>
231e934351Sopenharmony_ci#include <utility>
241e934351Sopenharmony_ci
251e934351Sopenharmony_ci#include <napi/native_api.h>
261e934351Sopenharmony_ci#include <napi/native_common.h>
271e934351Sopenharmony_ci
281e934351Sopenharmony_ci#include "event_manager.h"
291e934351Sopenharmony_ci#include "node_api_types.h"
301e934351Sopenharmony_ci
311e934351Sopenharmony_cinamespace OHOS::NetStack {
321e934351Sopenharmony_citypedef void (*AsyncWorkExecutor)(napi_env env, void *data);
331e934351Sopenharmony_citypedef void (*AsyncWorkCallback)(napi_env env, napi_status status, void *data);
341e934351Sopenharmony_cistatic constexpr size_t PERMISSION_DENIED_CODE = 201;
351e934351Sopenharmony_cistatic constexpr const char *PERMISSION_DENIED_MSG = "Permission denied";
361e934351Sopenharmony_cistatic constexpr size_t PARSE_ERROR_CODE = 401;
371e934351Sopenharmony_cistatic constexpr const char *PARSE_ERROR_MSG = "Parameter error";
381e934351Sopenharmony_ci
391e934351Sopenharmony_ciclass BaseContext {
401e934351Sopenharmony_cipublic:
411e934351Sopenharmony_ci    BaseContext() = delete;
421e934351Sopenharmony_ci
431e934351Sopenharmony_ci    BaseContext(napi_env env, EventManager *manager);
441e934351Sopenharmony_ci
451e934351Sopenharmony_ci    BaseContext(napi_env env, const std::shared_ptr<EventManager> &sharedManager);
461e934351Sopenharmony_ci
471e934351Sopenharmony_ci    virtual ~BaseContext();
481e934351Sopenharmony_ci
491e934351Sopenharmony_ci    void SetParseOK(bool parseOK);
501e934351Sopenharmony_ci
511e934351Sopenharmony_ci    void SetExecOK(bool requestOK);
521e934351Sopenharmony_ci
531e934351Sopenharmony_ci    void SetErrorCode(int32_t errorCode);
541e934351Sopenharmony_ci
551e934351Sopenharmony_ci    void SetError(int32_t errorCode, const std::string &errorMessage);
561e934351Sopenharmony_ci
571e934351Sopenharmony_ci    napi_status SetCallback(napi_value callback);
581e934351Sopenharmony_ci
591e934351Sopenharmony_ci    void DeleteCallback();
601e934351Sopenharmony_ci
611e934351Sopenharmony_ci    void CreateAsyncWork(const std::string &name, AsyncWorkExecutor executor, AsyncWorkCallback callback);
621e934351Sopenharmony_ci
631e934351Sopenharmony_ci    void DeleteAsyncWork();
641e934351Sopenharmony_ci
651e934351Sopenharmony_ci    napi_value CreatePromise();
661e934351Sopenharmony_ci
671e934351Sopenharmony_ci    void DeletePromise();
681e934351Sopenharmony_ci
691e934351Sopenharmony_ci    [[nodiscard]] bool IsParseOK() const;
701e934351Sopenharmony_ci
711e934351Sopenharmony_ci    [[nodiscard]] bool IsExecOK() const;
721e934351Sopenharmony_ci
731e934351Sopenharmony_ci    [[nodiscard]] napi_env GetEnv() const;
741e934351Sopenharmony_ci
751e934351Sopenharmony_ci    [[nodiscard]] virtual int32_t GetErrorCode() const;
761e934351Sopenharmony_ci
771e934351Sopenharmony_ci    [[nodiscard]] virtual std::string GetErrorMessage() const;
781e934351Sopenharmony_ci
791e934351Sopenharmony_ci    [[nodiscard]] napi_value GetCallback() const;
801e934351Sopenharmony_ci
811e934351Sopenharmony_ci    [[nodiscard]] napi_deferred GetDeferred() const;
821e934351Sopenharmony_ci
831e934351Sopenharmony_ci    [[nodiscard]] const std::string &GetAsyncWorkName() const;
841e934351Sopenharmony_ci
851e934351Sopenharmony_ci    void Emit(const std::string &type, const std::pair<napi_value, napi_value> &argv);
861e934351Sopenharmony_ci
871e934351Sopenharmony_ci    void EmitSharedManager(const std::string &type, const std::pair<napi_value, napi_value> &argv);
881e934351Sopenharmony_ci
891e934351Sopenharmony_ci    void SetNeedPromise(bool needPromise);
901e934351Sopenharmony_ci
911e934351Sopenharmony_ci    [[nodiscard]] bool IsNeedPromise() const;
921e934351Sopenharmony_ci
931e934351Sopenharmony_ci    void SetNeedThrowException(bool needThrowException);
941e934351Sopenharmony_ci
951e934351Sopenharmony_ci    [[nodiscard]] bool IsNeedThrowException() const;
961e934351Sopenharmony_ci
971e934351Sopenharmony_ci    void SetPermissionDenied(bool needThrowException);
981e934351Sopenharmony_ci
991e934351Sopenharmony_ci    [[nodiscard]] bool IsPermissionDenied() const;
1001e934351Sopenharmony_ci
1011e934351Sopenharmony_ci    void SetNoAllowedHost(bool needThrowException);
1021e934351Sopenharmony_ci
1031e934351Sopenharmony_ci    [[nodiscard]] bool IsNoAllowedHost() const;
1041e934351Sopenharmony_ci
1051e934351Sopenharmony_ci    [[nodiscard]] EventManager *GetManager() const;
1061e934351Sopenharmony_ci
1071e934351Sopenharmony_ci    [[nodiscard]] std::shared_ptr<EventManager> GetSharedManager() const;
1081e934351Sopenharmony_ci
1091e934351Sopenharmony_ci    void SetSharedManager(const std::shared_ptr<EventManager> &sharedManager);
1101e934351Sopenharmony_ci
1111e934351Sopenharmony_ci    void CreateReference(napi_value value);
1121e934351Sopenharmony_ci
1131e934351Sopenharmony_ci    void DeleteReference();
1141e934351Sopenharmony_ci
1151e934351Sopenharmony_ci    napi_async_work GetAsyncWork();
1161e934351Sopenharmony_ci
1171e934351Sopenharmony_ci    virtual void ParseParams(napi_value *params, size_t paramsCount);
1181e934351Sopenharmony_ci
1191e934351Sopenharmony_ci    napi_deferred deferredBack1_ = nullptr;
1201e934351Sopenharmony_ci    napi_deferred deferredBack2_ = nullptr;
1211e934351Sopenharmony_ci    napi_deferred deferredBack3_ = nullptr;
1221e934351Sopenharmony_ci    napi_deferred deferredBack4_ = nullptr;
1231e934351Sopenharmony_ci    napi_async_work asyncWorkBack1_ = nullptr;
1241e934351Sopenharmony_ci    napi_async_work asyncWorkBack2_ = nullptr;
1251e934351Sopenharmony_ci    napi_async_work asyncWorkBack3_ = nullptr;
1261e934351Sopenharmony_ci    napi_async_work asyncWorkBack4_ = nullptr;
1271e934351Sopenharmony_ci
1281e934351Sopenharmony_ciprotected:
1291e934351Sopenharmony_ci    EventManager *manager_ = nullptr;
1301e934351Sopenharmony_ci
1311e934351Sopenharmony_ciprivate:
1321e934351Sopenharmony_ci    napi_env env_ = nullptr;
1331e934351Sopenharmony_ci
1341e934351Sopenharmony_ci    napi_ref ref_ = nullptr;
1351e934351Sopenharmony_ci
1361e934351Sopenharmony_ci    bool parseOK_;
1371e934351Sopenharmony_ci
1381e934351Sopenharmony_ci    bool requestOK_;
1391e934351Sopenharmony_ci
1401e934351Sopenharmony_ci    int32_t errorCode_;
1411e934351Sopenharmony_ci
1421e934351Sopenharmony_ci    napi_ref callback_ = nullptr;
1431e934351Sopenharmony_ci
1441e934351Sopenharmony_ci    napi_ref promiseRef_ = nullptr;
1451e934351Sopenharmony_ci
1461e934351Sopenharmony_ci    napi_async_work asyncWork_ = nullptr;
1471e934351Sopenharmony_ci
1481e934351Sopenharmony_ci    napi_deferred deferred_ = nullptr;
1491e934351Sopenharmony_ci
1501e934351Sopenharmony_ci    bool needPromise_;
1511e934351Sopenharmony_ci
1521e934351Sopenharmony_ci    bool needThrowException_;
1531e934351Sopenharmony_ci
1541e934351Sopenharmony_ci    bool permissionDenied_;
1551e934351Sopenharmony_ci
1561e934351Sopenharmony_ci    bool noAllowedHost_;
1571e934351Sopenharmony_ci
1581e934351Sopenharmony_ci    std::string asyncWorkName_;
1591e934351Sopenharmony_ci
1601e934351Sopenharmony_ci    std::string errorMessage_;
1611e934351Sopenharmony_ci
1621e934351Sopenharmony_ciprotected:
1631e934351Sopenharmony_ci    std::shared_ptr<EventManager> sharedManager_;
1641e934351Sopenharmony_ci
1651e934351Sopenharmony_ciprivate:
1661e934351Sopenharmony_ci    napi_ref callbackBak1_ = nullptr;
1671e934351Sopenharmony_ci    napi_ref callbackBak2_ = nullptr;
1681e934351Sopenharmony_ci    napi_ref callbackBak3_ = nullptr;
1691e934351Sopenharmony_ci    napi_ref callbackBak4_ = nullptr;
1701e934351Sopenharmony_ci};
1711e934351Sopenharmony_ci} // namespace OHOS::NetStack
1721e934351Sopenharmony_ci
1731e934351Sopenharmony_ci#endif /* COMMUNICATIONNETSTACK_BASE_CONTEXT_H */
174