1 /*
2  * Copyright (c) 2021-2023 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 #ifndef DFX_FAULTLOGGERD_CLIENT_H
16 #define DFX_FAULTLOGGERD_CLIENT_H
17 
18 #include <inttypes.h>
19 #include "dfx_socket_request.h"
20 
21 #ifdef __cplusplus
22 extern "C" {
23 #endif
24 
25 /**
26  * @brief Check connection status of client
27  *
28  * @return if available return true, otherwise return false
29 */
30 bool CheckConnectStatus();
31 /**
32  * @brief request file descriptor
33  * @param type type of resqust
34  * @return if succeed return file descriptor, otherwise return -1
35 */
36 int32_t RequestFileDescriptor(int32_t type);
37 
38 /**
39  * @brief request log file descriptor
40  * @param request struct of request information
41  * @return if succeed return file descriptor, otherwise return -1
42 */
43 int32_t RequestLogFileDescriptor(struct FaultLoggerdRequest *request);
44 
45 /**
46  * @brief request pipe file descriptor
47  * @param pid process id of request pipe
48  * @param pipeType type of request about pipe
49  * @return if succeed return file descriptor, otherwise return -1
50 */
51 int32_t RequestPipeFd(int32_t pid, int32_t pipeType);
52 
53 /**
54  * @brief request delete file descriptor
55  * @param pid process id of request pipe
56  * @return if succeed return 0, otherwise return -1
57 */
58 int32_t RequestDelPipeFd(int32_t pid);
59 
60 /**
61  * @brief request file descriptor
62  * @param request struct of request information
63  * @return if succeed return file descriptor, otherwise return -1
64 */
65 int RequestFileDescriptorEx(const struct FaultLoggerdRequest *request);
66 
67 /**
68  * @brief request checking permission of process
69  * @param pid process id
70  * @return if pass return true , otherwise return false
71 */
72 bool RequestCheckPermission(int32_t pid);
73 /**
74  * @brief request printing message to hilog
75  * @param msg message
76  * @param length length of message
77  * @return if succeed return 0 , otherwise return -1
78 */
79 int RequestPrintTHilog(const char *msg, int length);
80 
81 /**
82  * @brief request dump stack about process
83  * @param pid process id
84  * @param tid thread id, if equal 0 means dump all the threads in a process.
85  * @return if succeed return 0 , otherwise return -1
86 */
87 int RequestSdkDump(int32_t pid, int32_t tid, int timeout = 10000); // 10000 : dump timeout ms
88 
89 /**
90  * @brief request dump stack about process
91  * @param pid process id
92  * @param tid thread id, if equal 0 means dump all the threads in a process.
93  * @return if succeed return 0 , otherwise return -1
94 */
95 int RequestSdkDumpJson(int32_t pid, int32_t tid, bool isJson, int timeout);
96 
97 /**
98  * @brief report sdk dump result to faultloggerd for stats collection
99  * @param request dump request result
100 */
101 int ReportDumpStats(const struct FaultLoggerdStatsRequest *request);
102 #ifdef __cplusplus
103 }
104 #endif
105 #endif
106