11754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato/* 21754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato * Copyright (C) 2016 The Android Open Source Project 31754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato * 41754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato * Licensed under the Apache License, Version 2.0 (the "License"); 51754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato * you may not use this file except in compliance with the License. 61754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato * You may obtain a copy of the License at 71754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato * 81754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato * http://www.apache.org/licenses/LICENSE-2.0 91754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato * 101754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato * Unless required by applicable law or agreed to in writing, software 111754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato * distributed under the License is distributed on an "AS IS" BASIS, 121754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 131754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato * See the License for the specific language governing permissions and 141754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato * limitations under the License. 151754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato */ 161754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato 171754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato#ifndef SECTIONS_H 181754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato#define SECTIONS_H 191754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato 201754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato#include "FdBuffer.h" 211754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato 221754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato#include <utils/String8.h> 231754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato#include <utils/String16.h> 241754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato#include <utils/Vector.h> 251754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato 261754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onoratousing namespace android; 271754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato 281754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato/** 291754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato * Base class for sections 301754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato */ 311754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onoratoclass Section 321754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato{ 331754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onoratopublic: 341754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato int id; 351754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato String8 name; 361754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato 371754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato Section(int id); 381754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato virtual ~Section(); 391754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato 401754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato virtual status_t Execute(ReportRequestSet* requests) const = 0; 411754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato 421754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato status_t WriteHeader(ReportRequestSet* requests, size_t size) const; 431754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato}; 441754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato 451754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato/** 461754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato * Section that reads in a file. 471754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato */ 481754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onoratoclass FileSection : public Section 491754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato{ 501754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onoratopublic: 511754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato FileSection(int id, const char* filename); 521754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato virtual ~FileSection(); 531754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato 541754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato virtual status_t Execute(ReportRequestSet* requests) const; 551754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato 561754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onoratoprivate: 571754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato const char* mFilename; 581754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato}; 591754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato 601754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato/** 611754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato * Base class for sections that call a command that might need a timeout. 621754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato */ 631754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onoratoclass WorkerThreadSection : public Section 641754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato{ 651754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onoratopublic: 661754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato WorkerThreadSection(int id); 671754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato virtual ~WorkerThreadSection(); 681754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato 691754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato virtual status_t Execute(ReportRequestSet* requests) const; 701754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato 711754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato virtual status_t BlockingCall(int pipeWriteFd) const = 0; 721754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato}; 731754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato 741754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato/** 751754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato * Section that forks and execs a command, and puts stdout as the section. 761754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato */ 771754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onoratoclass CommandSection : public Section 781754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato{ 791754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onoratopublic: 801754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato CommandSection(int id, const char* first, ...); 811754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato virtual ~CommandSection(); 821754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato 831754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato virtual status_t Execute(ReportRequestSet* requests) const; 841754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato 851754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onoratoprivate: 861754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato const char** mCommand; 871754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato}; 881754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato 891754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato/** 901754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato * Section that calls dumpsys on a system service. 911754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato */ 921754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onoratoclass DumpsysSection : public WorkerThreadSection 931754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato{ 941754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onoratopublic: 951754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato DumpsysSection(int id, const char* service, ...); 961754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato virtual ~DumpsysSection(); 971754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato 981754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato virtual status_t BlockingCall(int pipeWriteFd) const; 991754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato 1001754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onoratoprivate: 1011754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato String16 mService; 1021754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato Vector<String16> mArgs; 1031754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato}; 1041754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato 1051754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato#endif // SECTIONS_H 1061754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato 107