1cc290419Sopenharmony_ci/*
2cc290419Sopenharmony_ci * Copyright (C) 2021 Huawei Device Co., Ltd.
3cc290419Sopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License");
4cc290419Sopenharmony_ci * you may not use this file except in compliance with the License.
5cc290419Sopenharmony_ci * You may obtain a copy of the License at
6cc290419Sopenharmony_ci *
7cc290419Sopenharmony_ci *     http://www.apache.org/licenses/LICENSE-2.0
8cc290419Sopenharmony_ci *
9cc290419Sopenharmony_ci * Unless required by applicable law or agreed to in writing, software
10cc290419Sopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS,
11cc290419Sopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12cc290419Sopenharmony_ci * See the License for the specific language governing permissions and
13cc290419Sopenharmony_ci * limitations under the License.
14cc290419Sopenharmony_ci */
15cc290419Sopenharmony_ci#ifndef HDC_TCP_H
16cc290419Sopenharmony_ci#define HDC_TCP_H
17cc290419Sopenharmony_ci#include "common.h"
18cc290419Sopenharmony_ci
19cc290419Sopenharmony_cinamespace Hdc {
20cc290419Sopenharmony_ciclass HdcTCPBase {
21cc290419Sopenharmony_cipublic:
22cc290419Sopenharmony_ci    HdcTCPBase(const bool serverOrDaemonIn, void *ptrMainBase);
23cc290419Sopenharmony_ci    virtual ~HdcTCPBase();
24cc290419Sopenharmony_ci    static void ReadStream(uv_stream_t *tcp, ssize_t nread, const uv_buf_t *buf);
25cc290419Sopenharmony_ci    int WriteUvTcpFd(uv_tcp_t *tcp, uint8_t *buf, int size);
26cc290419Sopenharmony_ci
27cc290419Sopenharmony_ciprotected:
28cc290419Sopenharmony_ci    virtual void RecvUDPEntry(const sockaddr *addrSrc, uv_udp_t *handle, const uv_buf_t *rcvbuf)
29cc290419Sopenharmony_ci    {
30cc290419Sopenharmony_ci    }
31cc290419Sopenharmony_ci    static void RecvUDP(
32cc290419Sopenharmony_ci        uv_udp_t *handle, ssize_t nread, const uv_buf_t *rcvbuf, const struct sockaddr *addr, unsigned flags);
33cc290419Sopenharmony_ci    static void SendUDPFinish(uv_udp_send_t *req, int status);
34cc290419Sopenharmony_ci    static void AllocStreamUDP(uv_handle_t *handle, size_t sizeWanted, uv_buf_t *buf);
35cc290419Sopenharmony_ci
36cc290419Sopenharmony_ci    void *clsMainBase;
37cc290419Sopenharmony_ci    bool serverOrDaemon;
38cc290419Sopenharmony_ci    std::mutex writeTCPMutex;
39cc290419Sopenharmony_ci
40cc290419Sopenharmony_ciprivate:
41cc290419Sopenharmony_ci    void InitialChildClass(const bool serverOrDaemonIn, void *ptrMainBase);
42cc290419Sopenharmony_ci};
43cc290419Sopenharmony_ci}  // namespace Hdc
44cc290419Sopenharmony_ci
45cc290419Sopenharmony_ci#endif
46