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