1 /* 2 * Copyright (c) 2021-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 #ifndef DFX_FAULTLOGGERD_H 16 #define DFX_FAULTLOGGERD_H 17 18 #include <cinttypes> 19 #include <map> 20 #include <string> 21 22 #include "faultloggerd_client.h" 23 #include "fault_logger_pipe.h" 24 25 namespace OHOS { 26 namespace HiviewDFX { 27 class DumpStats { 28 public: 29 int32_t pid = 0; 30 uint64_t requestTime = 0; 31 uint64_t signalTime = 0; 32 uint64_t processdumpStartTime = 0; 33 uint64_t processdumpFinishTime = 0; 34 uint64_t dumpCatcherFinishTime = 0; 35 int32_t result = 0; 36 std::string summary; 37 std::string callerProcessName; 38 std::string callerElfName; 39 std::string targetProcessName; 40 }; 41 class FaultLoggerDaemon { 42 public: 43 FaultLoggerDaemon(); ~FaultLoggerDaemon()44 ~FaultLoggerDaemon() {}; 45 int32_t StartServer(); 46 bool InitEnvironment(); 47 void RecordFileCreation(int32_t type, int32_t pid); 48 void ClearTimeOutRecords(); 49 bool IsCrashed(int32_t pid); 50 51 int32_t CreateFileForRequest(int32_t type, int32_t pid, int32_t tid, uint64_t time, bool debugFlag) const; 52 #ifdef FAULTLOGGERD_FUZZER 53 void HandleStaticForFuzzer(int32_t type, uint32_t callerUid); 54 void HandleRequestForFuzzer(int32_t epollFd, int32_t connectionFd, 55 const FaultLoggerdRequest *requestConst, FaultLoggerdRequest *request); 56 #endif 57 58 private: 59 void AddEvent(int32_t epollFd, int32_t addFd, uint32_t event); 60 void DelEvent(int32_t epollFd, int32_t delFd, uint32_t event); 61 void HandleAccept(int32_t epollFd, int32_t socketFd); 62 void HandleRequest(int32_t epollFd, int32_t connectionFd); 63 64 void RemoveTempFileIfNeed() const; 65 void HandleDefaultClientRequest(int32_t connectionFd, const FaultLoggerdRequest* request); 66 void HandleLogFileDesClientRequest(int32_t connectionFd, const FaultLoggerdRequest* request); 67 void HandlePrintTHilogClientRequest(int32_t const connectionFd, FaultLoggerdRequest* request); 68 FaultLoggerCheckPermissionResp SecurityCheck(int32_t connectionFd, FaultLoggerdRequest* request); 69 void HandlePermissionRequest(int32_t connectionFd, FaultLoggerdRequest* request); 70 void HandleSdkDumpRequest(int32_t connectionFd, FaultLoggerdRequest* request); 71 void HandlePipeFdClientRequest(int32_t connectionFd, FaultLoggerdRequest* request); 72 void HandleReadBuf(int& fd, int32_t connectionFd, FaultLoggerdRequest* request, 73 FaultLoggerPipe2* faultLoggerPipe); 74 void HandleWriteBuf(int& fd, FaultLoggerPipe2* faultLoggerPipe); 75 void HandleReadRes(int& fd, int32_t connectionFd, FaultLoggerdRequest* request, 76 FaultLoggerPipe2* faultLoggerPipe); 77 void HandleWriteRes(int& fd, FaultLoggerPipe2* faultLoggerPipe); 78 void HandleJsonReadBuf(int& fd, int32_t connectionFd, FaultLoggerdRequest* request, 79 FaultLoggerPipe2* faultLoggerPipe); 80 void HandleJsonWriteBuf(int& fd, FaultLoggerPipe2* faultLoggerPipe); 81 void HandleJsonReadRes(int& fd, int32_t connectionFd, FaultLoggerdRequest* request, 82 FaultLoggerPipe2* faultLoggerPipe); 83 void HandleJsonWriteRes(int& fd, FaultLoggerPipe2* faultLoggerPipe); 84 void HandleDelete(FaultLoggerdRequest* request); 85 void HandleRequestByPipeType(int& fd, int32_t connectionFd, FaultLoggerdRequest* request, 86 FaultLoggerPipe2* faultLoggerPipe); 87 void HandleExceptionRequest(int32_t connectionFd, FaultLoggerdRequest* request); 88 void HandleRequestByClientType(int32_t connectionFd, FaultLoggerdRequest* request); 89 bool CheckRequestCredential(int32_t connectionFd, FaultLoggerdRequest* request); 90 bool CreateSockets(); 91 bool CreateEventFd(); 92 void CleanupSockets(); 93 void WaitForRequest(); 94 void CleanupEventFd(); 95 void HandleDumpStats(int32_t connectionFd, FaultLoggerdStatsRequest* request); 96 void RemoveTimeoutDumpStats(); 97 void ReportDumpStats(const DumpStats& stat); 98 99 private: 100 int32_t defaultSocketFd_ = -1; 101 int32_t crashSocketFd_ = -1; 102 int32_t sdkdumpSocketFd_ = -1; 103 int32_t eventFd_ = -1; 104 bool isBeta_ = false; 105 std::map<int32_t, int32_t> connectionMap_; 106 std::map<int32_t, int64_t> crashTimeMap_; 107 std::vector<DumpStats> stats_; 108 }; 109 } // namespace HiviewDFX 110 } // namespace OHOS 111 #endif 112