Section.h revision 1754d744a7a34731ffc07af1bc3dbfcb06864ab0
1/* 2 * Copyright (C) 2016 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17#ifndef SECTIONS_H 18#define SECTIONS_H 19 20#include "FdBuffer.h" 21 22#include <utils/String8.h> 23#include <utils/String16.h> 24#include <utils/Vector.h> 25 26using namespace android; 27 28/** 29 * Base class for sections 30 */ 31class Section 32{ 33public: 34 int id; 35 String8 name; 36 37 Section(int id); 38 virtual ~Section(); 39 40 virtual status_t Execute(ReportRequestSet* requests) const = 0; 41 42 status_t WriteHeader(ReportRequestSet* requests, size_t size) const; 43}; 44 45/** 46 * Section that reads in a file. 47 */ 48class FileSection : public Section 49{ 50public: 51 FileSection(int id, const char* filename); 52 virtual ~FileSection(); 53 54 virtual status_t Execute(ReportRequestSet* requests) const; 55 56private: 57 const char* mFilename; 58}; 59 60/** 61 * Base class for sections that call a command that might need a timeout. 62 */ 63class WorkerThreadSection : public Section 64{ 65public: 66 WorkerThreadSection(int id); 67 virtual ~WorkerThreadSection(); 68 69 virtual status_t Execute(ReportRequestSet* requests) const; 70 71 virtual status_t BlockingCall(int pipeWriteFd) const = 0; 72}; 73 74/** 75 * Section that forks and execs a command, and puts stdout as the section. 76 */ 77class CommandSection : public Section 78{ 79public: 80 CommandSection(int id, const char* first, ...); 81 virtual ~CommandSection(); 82 83 virtual status_t Execute(ReportRequestSet* requests) const; 84 85private: 86 const char** mCommand; 87}; 88 89/** 90 * Section that calls dumpsys on a system service. 91 */ 92class DumpsysSection : public WorkerThreadSection 93{ 94public: 95 DumpsysSection(int id, const char* service, ...); 96 virtual ~DumpsysSection(); 97 98 virtual status_t BlockingCall(int pipeWriteFd) const; 99 100private: 101 String16 mService; 102 Vector<String16> mArgs; 103}; 104 105#endif // SECTIONS_H 106 107