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