diff options
author | Joe Onorato <joeo@google.com> | 2019-05-19 17:36:08 -0700 |
---|---|---|
committer | Joe Onorato <joeo@google.com> | 2019-05-21 13:29:23 -0700 |
commit | 5dfe3dfeb83e1da4d6316be11110fe24df40e5a6 (patch) | |
tree | 7baffdd51bea6be9220aa70b4b316651165557f3 /cmds/incident/main.cpp | |
parent | dcd64522f4386d3e791c6242cff4c274ecc17326 (diff) |
Add command line utilites to set the reason field in incident report header
Bug: 132890298
Test: incident_report -t -r "\"Hello Joe\"" 3000
Change-Id: Ic7a2523d7e87ba88019c5ac9b23ff35387fbc498
Diffstat (limited to 'cmds/incident/main.cpp')
-rw-r--r-- | cmds/incident/main.cpp | 23 |
1 files changed, 22 insertions, 1 deletions
diff --git a/cmds/incident/main.cpp b/cmds/incident/main.cpp index eca781fd4e4f..13e707bc341d 100644 --- a/cmds/incident/main.cpp +++ b/cmds/incident/main.cpp @@ -21,6 +21,7 @@ #include <android/os/BnIncidentReportStatusListener.h> #include <android/os/IIncidentManager.h> #include <android/os/IncidentReportArgs.h> +#include <android/util/ProtoOutputStream.h> #include <binder/IPCThreadState.h> #include <binder/IServiceManager.h> #include <utils/Looper.h> @@ -36,6 +37,9 @@ using namespace android; using namespace android::base; using namespace android::binder; using namespace android::os; +using android::util::FIELD_COUNT_SINGLE; +using android::util::FIELD_TYPE_STRING; +using android::util::ProtoOutputStream; // ================================================================================ class StatusListener : public BnIncidentReportStatusListener { @@ -208,6 +212,7 @@ usage(FILE* out) fprintf(out, "and one of these destinations:\n"); fprintf(out, " -b (default) print the report to stdout (in proto format)\n"); fprintf(out, " -d send the report into dropbox\n"); + fprintf(out, " -r REASON human readable description of why the report is taken.\n"); fprintf(out, " -s PKG/CLS send broadcast to the broadcast receiver.\n"); fprintf(out, "\n"); fprintf(out, " SECTION the field numbers of the incident report fields to include\n"); @@ -221,11 +226,12 @@ main(int argc, char** argv) IncidentReportArgs args; enum { DEST_UNSET, DEST_DROPBOX, DEST_STDOUT, DEST_BROADCAST } destination = DEST_UNSET; int privacyPolicy = PRIVACY_POLICY_AUTOMATIC; + string reason; string receiverArg; // Parse the args int opt; - while ((opt = getopt(argc, argv, "bhdlp:s:")) != -1) { + while ((opt = getopt(argc, argv, "bhdlp:r:s:")) != -1) { switch (opt) { case 'h': usage(stdout); @@ -250,6 +256,13 @@ main(int argc, char** argv) case 'p': privacyPolicy = get_privacy_policy(optarg); break; + case 'r': + if (reason.size() > 0) { + usage(stderr); + return 1; + } + reason = optarg; + break; case 's': if (destination != DEST_UNSET) { usage(stderr); @@ -301,6 +314,14 @@ main(int argc, char** argv) } args.setPrivacyPolicy(privacyPolicy); + if (reason.size() > 0) { + ProtoOutputStream proto; + proto.write(/* reason field id */ 2 | FIELD_TYPE_STRING | FIELD_COUNT_SINGLE, reason); + vector<uint8_t> header; + proto.serializeToVector(&header); + args.addHeader(header); + } + // Start the thread pool. sp<ProcessState> ps(ProcessState::self()); ps->startThreadPool(); |