Loading cmds/incident/Android.bp +1 −1 Original line number Diff line number Diff line Loading @@ -30,7 +30,7 @@ cc_binary { ], static_libs: [ "libplatformprotos", "libprotoutil", ], cflags: [ Loading cmds/incident/main.cpp +22 −1 Original line number Diff line number Diff line Loading @@ -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> Loading @@ -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 { Loading Loading @@ -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"); Loading @@ -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); Loading @@ -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); Loading Loading @@ -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(); Loading tools/incident_report/main.cpp +11 −2 Original line number Diff line number Diff line Loading @@ -292,6 +292,7 @@ usage(FILE* out) fprintf(out, "Take an incident report over adb (which must be in the PATH).\n"); fprintf(out, " -b output the incident report raw protobuf format\n"); fprintf(out, " -o OUTPUT the output file. OUTPUT may be '-' or omitted to use stdout\n"); fprintf(out, " -r REASON human readable description of why the report is taken.\n"); fprintf(out, " -s SERIAL sent to adb to choose which device, instead of $ANDROID_SERIAL\n"); fprintf(out, " -t output the incident report in pretty-printed text format\n"); fprintf(out, "\n"); Loading @@ -307,13 +308,14 @@ main(int argc, char** argv) enum { OUTPUT_TEXT, OUTPUT_PROTO } outputFormat = OUTPUT_TEXT; const char* inFilename = NULL; const char* outFilename = NULL; const char* reason = NULL; const char* adbSerial = NULL; pid_t childPid = -1; vector<string> sections; const char* privacy = NULL; int opt; while ((opt = getopt(argc, argv, "bhi:o:s:twp:")) != -1) { while ((opt = getopt(argc, argv, "bhi:o:r:s:twp:")) != -1) { switch (opt) { case 'b': outputFormat = OUTPUT_PROTO; Loading @@ -324,6 +326,9 @@ main(int argc, char** argv) case 'o': outFilename = optarg; break; case 'r': reason = optarg; break; case 's': adbSerial = optarg; break; Loading Loading @@ -376,7 +381,7 @@ main(int argc, char** argv) dup2(pfd[1], STDOUT_FILENO); close(pfd[0]); close(pfd[1]); char const** args = (char const**)malloc(sizeof(char*) * (8 + sections.size())); char const** args = (char const**)malloc(sizeof(char*) * (10 + sections.size())); int argpos = 0; args[argpos++] = "adb"; if (adbSerial != NULL) { Loading @@ -389,6 +394,10 @@ main(int argc, char** argv) args[argpos++] = "-p"; args[argpos++] = privacy; } if (reason != NULL) { args[argpos++] = "-r"; args[argpos++] = reason; } for (vector<string>::const_iterator it=sections.begin(); it!=sections.end(); it++) { args[argpos++] = it->c_str(); } Loading Loading
cmds/incident/Android.bp +1 −1 Original line number Diff line number Diff line Loading @@ -30,7 +30,7 @@ cc_binary { ], static_libs: [ "libplatformprotos", "libprotoutil", ], cflags: [ Loading
cmds/incident/main.cpp +22 −1 Original line number Diff line number Diff line Loading @@ -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> Loading @@ -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 { Loading Loading @@ -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"); Loading @@ -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); Loading @@ -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); Loading Loading @@ -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(); Loading
tools/incident_report/main.cpp +11 −2 Original line number Diff line number Diff line Loading @@ -292,6 +292,7 @@ usage(FILE* out) fprintf(out, "Take an incident report over adb (which must be in the PATH).\n"); fprintf(out, " -b output the incident report raw protobuf format\n"); fprintf(out, " -o OUTPUT the output file. OUTPUT may be '-' or omitted to use stdout\n"); fprintf(out, " -r REASON human readable description of why the report is taken.\n"); fprintf(out, " -s SERIAL sent to adb to choose which device, instead of $ANDROID_SERIAL\n"); fprintf(out, " -t output the incident report in pretty-printed text format\n"); fprintf(out, "\n"); Loading @@ -307,13 +308,14 @@ main(int argc, char** argv) enum { OUTPUT_TEXT, OUTPUT_PROTO } outputFormat = OUTPUT_TEXT; const char* inFilename = NULL; const char* outFilename = NULL; const char* reason = NULL; const char* adbSerial = NULL; pid_t childPid = -1; vector<string> sections; const char* privacy = NULL; int opt; while ((opt = getopt(argc, argv, "bhi:o:s:twp:")) != -1) { while ((opt = getopt(argc, argv, "bhi:o:r:s:twp:")) != -1) { switch (opt) { case 'b': outputFormat = OUTPUT_PROTO; Loading @@ -324,6 +326,9 @@ main(int argc, char** argv) case 'o': outFilename = optarg; break; case 'r': reason = optarg; break; case 's': adbSerial = optarg; break; Loading Loading @@ -376,7 +381,7 @@ main(int argc, char** argv) dup2(pfd[1], STDOUT_FILENO); close(pfd[0]); close(pfd[1]); char const** args = (char const**)malloc(sizeof(char*) * (8 + sections.size())); char const** args = (char const**)malloc(sizeof(char*) * (10 + sections.size())); int argpos = 0; args[argpos++] = "adb"; if (adbSerial != NULL) { Loading @@ -389,6 +394,10 @@ main(int argc, char** argv) args[argpos++] = "-p"; args[argpos++] = privacy; } if (reason != NULL) { args[argpos++] = "-r"; args[argpos++] = reason; } for (vector<string>::const_iterator it=sections.begin(); it!=sections.end(); it++) { args[argpos++] = it->c_str(); } Loading