1d9f0492fSopenharmony_ci/*
2d9f0492fSopenharmony_ci * Copyright (c) 2024 Huawei Device Co., Ltd.
3d9f0492fSopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License");
4d9f0492fSopenharmony_ci * you may not use this file except in compliance with the License.
5d9f0492fSopenharmony_ci * You may obtain a copy of the License at
6d9f0492fSopenharmony_ci *
7d9f0492fSopenharmony_ci * http://www.apache.org/licenses/LICENSE-2.0
8d9f0492fSopenharmony_ci *
9d9f0492fSopenharmony_ci * Unless required by applicable law or agreed to in writing, software
10d9f0492fSopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS,
11d9f0492fSopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12d9f0492fSopenharmony_ci * See the License for the specific language governing permissions and
13d9f0492fSopenharmony_ci * limitations under the License.
14d9f0492fSopenharmony_ci */
15d9f0492fSopenharmony_ci
16d9f0492fSopenharmony_ci#ifndef LOOP_SYSTEST_H
17d9f0492fSopenharmony_ci#define LOOP_SYSTEST_H
18d9f0492fSopenharmony_ci
19d9f0492fSopenharmony_ci#include <stdlib.h>
20d9f0492fSopenharmony_ci#include <string.h>
21d9f0492fSopenharmony_ci#include <fcntl.h>
22d9f0492fSopenharmony_ci
23d9f0492fSopenharmony_ci#include "loop_event.h"
24d9f0492fSopenharmony_ci#include "le_socket.h"
25d9f0492fSopenharmony_ci#include "le_task.h"
26d9f0492fSopenharmony_ci#include "list.h"
27d9f0492fSopenharmony_ci
28d9f0492fSopenharmony_ci#ifndef BASE_DIR
29d9f0492fSopenharmony_ci#define BASE_DIR ""
30d9f0492fSopenharmony_ci#endif
31d9f0492fSopenharmony_ci
32d9f0492fSopenharmony_ci#define SOCKET_NAME "looptest"
33d9f0492fSopenharmony_ci#if defined(__MUSL__)
34d9f0492fSopenharmony_ci    #define SOCKET_DIR BASEDIR "/dev/unix/socket"
35d9f0492fSopenharmony_ci#else
36d9f0492fSopenharmony_ci    #define SOCKET_DIR BASEDIR "/dev/socket"
37d9f0492fSopenharmony_ci#endif
38d9f0492fSopenharmony_ci
39d9f0492fSopenharmony_ci#define MIN_TIME 0
40d9f0492fSopenharmony_ci#define MAX_TIME INT_MAX
41d9f0492fSopenharmony_ci#define INVALID_OFFSET 0xffffffff
42d9f0492fSopenharmony_ci#define MAX_MSG_LEN 128
43d9f0492fSopenharmony_ci#define MAX_FD_COUNT 16
44d9f0492fSopenharmony_ci#define DIR_MODE 0711
45d9f0492fSopenharmony_ci
46d9f0492fSopenharmony_ci#define TLV_NAME_LEN 32
47d9f0492fSopenharmony_ci#define MAX_MSG_BLOCK_LEN (4 * 1024)
48d9f0492fSopenharmony_ci#define RECV_BLOCK_LEN 1024
49d9f0492fSopenharmony_ci#define MAX_MSG_TOTAL_LENGTH (64 * 1024)
50d9f0492fSopenharmony_ci#define EXTRAINFO_TOTAL_LENGTH_MAX (32 * 1024)
51d9f0492fSopenharmony_ci#define MAX_TLV_COUNT 128
52d9f0492fSopenharmony_ci#define MSG_MAGIC 0xEF201234
53d9f0492fSopenharmony_ci
54d9f0492fSopenharmony_citypedef enum {
55d9f0492fSopenharmony_ci    OK = 0,
56d9f0492fSopenharmony_ci    SYSTEM_ERROR = 0xD000000,
57d9f0492fSopenharmony_ci    ARG_INVALID,
58d9f0492fSopenharmony_ci    MSG_INVALID,
59d9f0492fSopenharmony_ci    MSG_TOO_LONG,
60d9f0492fSopenharmony_ci    TLV_NOT_SUPPORT,
61d9f0492fSopenharmony_ci    TLV_NONE,
62d9f0492fSopenharmony_ci    SANDBOX_NONE,
63d9f0492fSopenharmony_ci    SANDBOX_LOAD_FAIL,
64d9f0492fSopenharmony_ci    SANDBOX_INVALID,
65d9f0492fSopenharmony_ci    SANDBOX_MOUNT_FAIL,
66d9f0492fSopenharmony_ci    TIMEOUT,
67d9f0492fSopenharmony_ci    CHILD_CRASH,
68d9f0492fSopenharmony_ci    NATIVE_NOT_SUPPORT,
69d9f0492fSopenharmony_ci    ACCESS_TOKEN_INVALID,
70d9f0492fSopenharmony_ci    PERMISSION_NOT_SUPPORT,
71d9f0492fSopenharmony_ci    BUFFER_NOT_ENOUGH,
72d9f0492fSopenharmony_ci    FORK_FAIL,
73d9f0492fSopenharmony_ci    DEBUG_MODE_NOT_SUPPORT,
74d9f0492fSopenharmony_ci    ERROR_UTILS_MEM_FAIL,
75d9f0492fSopenharmony_ci    ERROR_FILE_RMDIR_FAIL,
76d9f0492fSopenharmony_ci    NODE_EXIST,
77d9f0492fSopenharmony_ci} ErrorCode;
78d9f0492fSopenharmony_ci
79d9f0492fSopenharmony_citypedef enum {
80d9f0492fSopenharmony_ci    TLV_BUNDLE_INFO = 0,
81d9f0492fSopenharmony_ci    TLV_MSG_FLAGS,
82d9f0492fSopenharmony_ci    TLV_DAC_INFO,
83d9f0492fSopenharmony_ci    TLV_DOMAIN_INFO,
84d9f0492fSopenharmony_ci    TLV_OWNER_INFO,
85d9f0492fSopenharmony_ci    TLV_ACCESS_TOKEN_INFO,
86d9f0492fSopenharmony_ci    TLV_PERMISSION,
87d9f0492fSopenharmony_ci    TLV_INTERNET_INFO,
88d9f0492fSopenharmony_ci    TLV_RENDER_TERMINATION_INFO,
89d9f0492fSopenharmony_ci    TLV_MAX
90d9f0492fSopenharmony_ci} MsgTlvType;
91d9f0492fSopenharmony_ci
92d9f0492fSopenharmony_citypedef enum {
93d9f0492fSopenharmony_ci    MSG_NORMAL = 0,
94d9f0492fSopenharmony_ci    MSG_GET_RENDER_TERMINATION_STATUS,
95d9f0492fSopenharmony_ci    MSG_NATIVE_PROCESS,
96d9f0492fSopenharmony_ci    MSG_DUMP,
97d9f0492fSopenharmony_ci    MSG_BEGET,
98d9f0492fSopenharmony_ci    MSG_BEGET_TIME,
99d9f0492fSopenharmony_ci    MSG_UPDATE_MOUNT_POINTS,
100d9f0492fSopenharmony_ci    MSG_RESTART,
101d9f0492fSopenharmony_ci    MAX_TYPE_INVALID
102d9f0492fSopenharmony_ci} MsgType;
103d9f0492fSopenharmony_ci
104d9f0492fSopenharmony_citypedef Result_ {
105d9f0492fSopenharmony_ci    int result;
106d9f0492fSopenharmony_ci    pid_t pid;
107d9f0492fSopenharmony_ci} Result;
108d9f0492fSopenharmony_ci
109d9f0492fSopenharmony_citypedef struct Message_ {
110d9f0492fSopenharmony_ci    uint32_t magic;
111d9f0492fSopenharmony_ci    uint32_t msgType;
112d9f0492fSopenharmony_ci    uint32_t msgLen;
113d9f0492fSopenharmony_ci    uint32_t msgId;
114d9f0492fSopenharmony_ci    uint32_t tlvCount;
115d9f0492fSopenharmony_ci    char buffer[MAX_MSG_LEN];
116d9f0492fSopenharmony_ci} Message;
117d9f0492fSopenharmony_ci
118d9f0492fSopenharmony_citypedef struct {
119d9f0492fSopenharmony_ci    Message msgHdr;
120d9f0492fSopenharmony_ci    Result result;
121d9f0492fSopenharmony_ci} ResponseMsg;
122d9f0492fSopenharmony_ci
123d9f0492fSopenharmony_citypedef struct {
124d9f0492fSopenharmony_ci    uint32_t count;
125d9f0492fSopenharmony_ci    uint32_t flags[0];
126d9f0492fSopenharmony_ci} MsgFlags;
127d9f0492fSopenharmony_ci
128d9f0492fSopenharmony_citypedef struct {
129d9f0492fSopenharmony_ci    struct ListNode node;
130d9f0492fSopenharmony_ci    uint32_t reqId;
131d9f0492fSopenharmony_ci    uint32_t retryCount;
132d9f0492fSopenharmony_ci    int fdCount;
133d9f0492fSopenharmony_ci    int fds[MAX_FD_COUNT];
134d9f0492fSopenharmony_ci    MsgFlags *msgFlags;
135d9f0492fSopenharmony_ci    MsgFlags *permissionFlags;
136d9f0492fSopenharmony_ci    Message *msg;
137d9f0492fSopenharmony_ci    struct ListNode msgBlocks;  // 保存实际的消息数据
138d9f0492fSopenharmony_ci} ReqMsgNode;
139d9f0492fSopenharmony_ci
140d9f0492fSopenharmony_ci#endif