1/* 2 * Copyright (c) 2024 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 APPSPAWN_CLIENT_H 17#define APPSPAWN_CLIENT_H 18#include <pthread.h> 19#include <stdint.h> 20#include <stdlib.h> 21 22#include "appspawn_msg.h" 23#include "list.h" 24 25#ifdef __cplusplus 26extern "C" { 27#endif 28 29#ifdef ASAN_DETECTOR 30#define TIMEOUT_DEF 60 31#define ASAN_TIMEOUT 60 32#else 33#define TIMEOUT_DEF 2 34#define ASAN_TIMEOUT 5 35#endif 36 37#define RETRY_TIME (200 * 1000) // 200 * 1000 wait 200ms CONNECT_RETRY_DELAY = 200 * 1000 38#define MAX_RETRY_SEND_COUNT 2 // 2 max retry count CONNECT_RETRY_MAX_TIMES = 2; 39 40// only used for ExternalFileManager.hap 41#define GID_FILE_ACCESS 1006 42#define GID_USER_DATA_RW 1008 43 44#define MAX_DATA_IN_TLV 2 45 46struct TagAppSpawnReqMsgNode; 47typedef enum { 48 CLIENT_FOR_APPSPAWN, 49 CLIENT_FOR_NWEBSPAWN, 50 CLIENT_FOR_CJAPPSPAWN, 51 CLIENT_FOR_NATIVESPAWN, 52 CLIENT_MAX 53} AppSpawnClientType; 54 55typedef struct { 56 struct ListNode node; 57 uint32_t blockSize; // block 的大小 58 uint32_t currentIndex; // 当前已经填充的位置 59 uint8_t buffer[0]; 60} AppSpawnMsgBlock; 61 62typedef struct TagAppSpawnReqMsgMgr { 63 AppSpawnClientType type; 64 uint32_t maxRetryCount; 65 uint32_t timeout; 66 uint32_t msgNextId; 67 int socketId; 68 pthread_mutex_t mutex; 69 AppSpawnMsgBlock recvBlock; // 消息接收缓存 70} AppSpawnReqMsgMgr; 71 72typedef struct TagAppSpawnReqMsgNode { 73 struct ListNode node; 74 uint32_t reqId; 75 uint32_t retryCount; 76 int fdCount; 77 int fds[APP_MAX_FD_COUNT]; 78 int isAsan; 79 AppSpawnMsgFlags *msgFlags; 80 AppSpawnMsgFlags *permissionFlags; 81 AppSpawnMsg *msg; 82 struct ListNode msgBlocks; // 保存实际的消息数据 83} AppSpawnReqMsgNode; 84 85typedef struct { 86 uint8_t *data; 87 uint16_t dataLen; 88 uint16_t dataType; 89} AppSpawnAppData; 90 91int32_t GetPermissionMaxCount(); 92 93#ifdef __cplusplus 94} 95#endif 96#endif 97