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 LOCAL_SOCKET_CONTEXT_H 17 #define LOCAL_SOCKET_CONTEXT_H 18 19 #include <condition_variable> 20 #include <cstddef> 21 22 #include "base_context.h" 23 #include "local_socket_options.h" 24 #include "napi/native_api.h" 25 #include "nocopyable.h" 26 #include "socket_state_base.h" 27 28 namespace OHOS::NetStack::Socket { 29 struct SocketBaseManager { SocketBaseManagerSocketBaseManager30 explicit SocketBaseManager(int sockfd) : sockfd_(sockfd) {} 31 int sockfd_ = 0; 32 }; 33 34 struct LocalSocketManager : public SocketBaseManager { LocalSocketManagerLocalSocketManager35 explicit LocalSocketManager(int sockfd) : SocketBaseManager(sockfd) {} 36 bool isConnected_ = false; 37 }__attribute__((packed)); 38 39 class LocalSocketBaseContext : public BaseContext { 40 public: 41 DISALLOW_COPY_AND_MOVE(LocalSocketBaseContext); ~LocalSocketBaseContext()42 virtual ~LocalSocketBaseContext() {} LocalSocketBaseContext(napi_env env,EventManager * manager)43 LocalSocketBaseContext(napi_env env, EventManager *manager) : BaseContext(env, manager) {} 44 [[nodiscard]] virtual int GetSocketFd() const; 45 virtual void SetSocketFd(int sock); 46 [[nodiscard]] int32_t GetErrorCode() const override; 47 [[nodiscard]] std::string GetErrorMessage() const override; 48 49 protected: 50 bool CheckParamsWithOptions(napi_value *params, size_t paramsCount); 51 bool CheckParamsWithoutOptions(napi_value *params, size_t paramsCount); 52 }; 53 54 class LocalSocketBindContext final : public LocalSocketBaseContext { 55 public: LocalSocketBindContext(napi_env env,EventManager * manager)56 LocalSocketBindContext(napi_env env, EventManager *manager) : LocalSocketBaseContext(env, manager) {} 57 void ParseParams(napi_value *params, size_t paramsCount) override; 58 const std::string &GetSocketPath() const; 59 60 private: 61 std::string socketPath_; 62 }; 63 64 class LocalSocketConnectContext final : public LocalSocketBaseContext { 65 public: LocalSocketConnectContext(napi_env env,EventManager * manager)66 LocalSocketConnectContext(napi_env env, EventManager *manager) : LocalSocketBaseContext(env, manager) {} 67 void ParseParams(napi_value *params, size_t paramsCount) override; 68 const std::string &GetSocketPath() const; 69 int GetTimeoutMs() const; 70 71 private: 72 std::string socketPath_; 73 int timeout_ = 0; 74 }; 75 76 class LocalSocketSendContext final : public LocalSocketBaseContext { 77 public: LocalSocketSendContext(napi_env env,EventManager * manager)78 LocalSocketSendContext(napi_env env, EventManager *manager) : LocalSocketBaseContext(env, manager) {} 79 void ParseParams(napi_value *params, size_t paramsCount) override; 80 LocalSocketOptions &GetOptionsRef(); 81 82 private: 83 bool GetData(napi_value sendOptions); 84 LocalSocketOptions options_; 85 }; 86 87 class LocalSocketCloseContext final : public LocalSocketBaseContext { 88 public: LocalSocketCloseContext(napi_env env,EventManager * manager)89 LocalSocketCloseContext(napi_env env, EventManager *manager) : LocalSocketBaseContext(env, manager) {} 90 void ParseParams(napi_value *params, size_t paramsCount) override; 91 }; 92 93 class LocalSocketGetStateContext final : public LocalSocketBaseContext { 94 public: LocalSocketGetStateContext(napi_env env,EventManager * manager)95 LocalSocketGetStateContext(napi_env env, EventManager *manager) : LocalSocketBaseContext(env, manager) {} 96 void ParseParams(napi_value *params, size_t paramsCount) override; 97 SocketStateBase &GetStateRef(); 98 99 private: 100 SocketStateBase state_; 101 }; 102 103 class LocalSocketGetSocketFdContext final : public LocalSocketBaseContext { 104 public: LocalSocketGetSocketFdContext(napi_env env,EventManager * manager)105 LocalSocketGetSocketFdContext(napi_env env, EventManager *manager) : LocalSocketBaseContext(env, manager) {} 106 void ParseParams(napi_value *params, size_t paramsCount) override; 107 }; 108 109 class LocalSocketSetExtraOptionsContext final : public LocalSocketBaseContext { 110 public: LocalSocketSetExtraOptionsContext(napi_env env,EventManager * manager)111 LocalSocketSetExtraOptionsContext(napi_env env, EventManager *manager) : LocalSocketBaseContext(env, manager) {} 112 void ParseParams(napi_value *params, size_t paramsCount) override; 113 LocalExtraOptions &GetOptionsRef(); 114 115 private: 116 LocalExtraOptions options_; 117 }; 118 119 class LocalSocketGetExtraOptionsContext final : public LocalSocketBaseContext { 120 public: LocalSocketGetExtraOptionsContext(napi_env env,EventManager * manager)121 LocalSocketGetExtraOptionsContext(napi_env env, EventManager *manager) : LocalSocketBaseContext(env, manager) {} 122 void ParseParams(napi_value *params, size_t paramsCount) override; 123 LocalExtraOptions &GetOptionsRef(); 124 125 private: 126 LocalExtraOptions options_; 127 }; 128 } // namespace OHOS::NetStack::Socket 129 #endif /* LOCAL_SOCKET_CONTEXT_H */