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 DFX_SOCKET_REQUEST_H
17 #define DFX_SOCKET_REQUEST_H
18 
19 #include <inttypes.h>
20 
21 #ifdef __cplusplus
22 extern "C" {
23 #endif
24 
25 /**
26  * @brief  type of request
27  *
28 */
29 enum FaultLoggerType {
30     /** C/C++ crash at runtime */
31     CPP_CRASH = 2,
32     /** js crash at runtime */
33     JS_CRASH,
34     /** application freeze */
35     APP_FREEZE,
36     /** trace native stack */
37     CPP_STACKTRACE = 101,
38     /** trace js stack */
39     JS_STACKTRACE,
40     /** js heap */
41     JS_HEAP_SNAPSHOT,
42     /** js raw heap */
43     JS_RAW_SNAPSHOT,
44     /** js heap leak list */
45     JS_HEAP_LEAK_LIST,
46     /** leak stacktrace */
47     LEAK_STACKTRACE,
48     /** ffrt crash log */
49     FFRT_CRASH_LOG,
50     /** jit code log */
51     JIT_CODE_LOG,
52 };
53 
54 /**
55  * @brief  type of faultlogger client
56  *
57 */
58 enum FaultLoggerClientType {
59     /** For original request crash info temp file */
60     DEFAULT_CLIENT = 0,
61     /** For request a debug file to record nornal unwind and process dump logs */
62     LOG_FILE_DES_CLIENT,
63     /** For request to record nornal unwind and process dump to hilog */
64     PRINT_T_HILOG_CLIENT,
65     /** For request to check permission */
66     PERMISSION_CLIENT,
67     /** For request to dump stack */
68     SDK_DUMP_CLIENT,
69     /** For request file descriptor of pipe */
70     PIPE_FD_CLIENT,
71     /** For report crash dump exception */
72     REPORT_EXCEPTION_CLIENT,
73 };
74 
75 /**
76  * @brief  type of request about pipe
77 */
78 enum FaultLoggerPipeType {
79     /** For request file descriptor of pipe to read buffer  */
80     PIPE_FD_READ_BUF = 0,
81     /** For request file descriptor of pipe to write buffer  */
82     PIPE_FD_WRITE_BUF,
83     /** For request file descriptor of pipe to read result  */
84     PIPE_FD_READ_RES,
85     /** For request file descriptor of pipe to write result  */
86     PIPE_FD_WRITE_RES,
87     /** For request file descriptor of pipe to json read buffer  */
88     PIPE_FD_JSON_READ_BUF,
89     /** For request file descriptor of pipe to json write buffer  */
90     PIPE_FD_JSON_WRITE_BUF,
91     /** For request file descriptor of pipe to json read result  */
92     PIPE_FD_JSON_READ_RES,
93     /** For request file descriptor of pipe to json write result  */
94     PIPE_FD_JSON_WRITE_RES,
95     /** For request to delete file descriptor of pipe */
96     PIPE_FD_DELETE,
97 };
98 /**
99  * @brief  type of responding check permission request
100 */
101 enum FaultLoggerCheckPermissionResp {
102     /** pass */
103     CHECK_PERMISSION_PASS = 1,
104     /** reject */
105     CHECK_PERMISSION_REJECT,
106 };
107 /**
108  * @brief  type of responding sdk dump request
109 */
110 enum FaultLoggerSdkDumpResp {
111     /** pass */
112     SDK_DUMP_PASS = 1,
113     /** reject */
114     SDK_DUMP_REJECT,
115     /** repeat request */
116     SDK_DUMP_REPEAT,
117     /** process not exist */
118     SDK_DUMP_NOPROC,
119     /** process has crashed */
120     SDK_PROCESS_CRASHED,
121 };
122 /**
123  * @brief  request information
124 */
125 struct FaultLoggerdRequest {
126     /** type of resquest */
127     int32_t type;
128     /** type of faultlogger client */
129     int32_t clientType;
130     /** type of pipe */
131     int32_t pipeType;
132     /** signal code */
133     int32_t sigCode;
134     /** process id */
135     int32_t pid;
136     /** thread id */
137     int32_t tid;
138     /** user id */
139     uint32_t uid;
140     /** process id of calling sdk dump ,only for sdk dump client */
141     int32_t callerPid;
142     /** thread id of calling sdk dump ,only for sdk dump client */
143     int32_t callerTid;
144     /** time of current request */
145     uint64_t time;
146     /** ture output json string, false output default string */
147     bool isJson;
148     /** dumpcatcher remote unwind endtime ms */
149     uint64_t endTime;
150 } __attribute__((packed));
151 
152 /**
153  * @brief  type of faultloggerd stats request
154 */
155 enum FaultLoggerdStatType {
156     /** dump catcher stats */
157     DUMP_CATCHER = 0,
158     /** processdump stats */
159     PROCESS_DUMP
160 };
161 
162 /**
163  * @brief  struct of faultloggerd stats request
164 */
165 struct FaultLoggerdStatsRequest {
166     /** type of resquest */
167     int32_t type;
168     /** target process id outside sandbox */
169     int32_t pid;
170     /** the time call dumpcatcher interface */
171     uint64_t requestTime;
172     /** the time signal arrive in targe process */
173     uint64_t signalTime;
174     /** the time enter processdump main */
175     uint64_t processdumpStartTime;
176     /** the time finish processdump */
177     uint64_t processdumpFinishTime;
178     /** the time return from dumpcatcher interface */
179     uint64_t dumpCatcherFinishTime;
180     /** dumpcatcher result */
181     int32_t result;
182     /** caller elf offset */
183     uintptr_t offset;
184     char summary[128]; // 128 : max summary size
185     /** the caller elf of dumpcatcher interface */
186     char callerElf[128]; // 128 : max function name size
187     /** the caller processName */
188     char callerProcess[128]; // 128 : max function name size
189     /** the target processName */
190     char targetProcess[128]; // 128 : max function name size
191 } __attribute__((packed));
192 #ifdef __cplusplus
193 }
194 #endif
195 #endif