diff options
-rw-r--r-- | cmds/incidentd/Android.bp | 6 | ||||
-rw-r--r-- | cmds/incidentd/tests/Reporter_test.cpp | 23 | ||||
-rw-r--r-- | cmds/incidentd/tests/Section_test.cpp | 22 | ||||
-rw-r--r-- | cmds/statsd/src/anomaly/subscriber_util.cpp | 1 | ||||
-rw-r--r-- | cmds/statsd/src/subscriber/IncidentdReporter.cpp | 49 | ||||
-rw-r--r-- | libs/incident/Android.bp | 3 | ||||
-rw-r--r-- | libs/incident/include/android/os/IncidentReportArgs.h | 4 | ||||
-rw-r--r-- | libs/incident/src/IncidentReportArgs.cpp | 10 |
8 files changed, 89 insertions, 29 deletions
diff --git a/cmds/incidentd/Android.bp b/cmds/incidentd/Android.bp index 40da583e4f6c..3dc10939fed7 100644 --- a/cmds/incidentd/Android.bp +++ b/cmds/incidentd/Android.bp @@ -94,8 +94,10 @@ cc_test { data: ["testdata/**/*"], - static_libs: ["libgmock"], - + static_libs: [ + "libgmock", + "libplatformprotos", + ], shared_libs: [ "libbase", "libbinder", diff --git a/cmds/incidentd/tests/Reporter_test.cpp b/cmds/incidentd/tests/Reporter_test.cpp index f54f738fb62b..b5e41d767295 100644 --- a/cmds/incidentd/tests/Reporter_test.cpp +++ b/cmds/incidentd/tests/Reporter_test.cpp @@ -35,6 +35,16 @@ using namespace std; using ::testing::StrEq; using ::testing::Test; +namespace { +void getHeaderData(const IncidentHeaderProto& headerProto, vector<uint8_t>* out) { + out->clear(); + auto serialized = headerProto.SerializeAsString(); + if (serialized.empty()) return; + out->resize(serialized.length()); + std::copy(serialized.begin(), serialized.end(), out->begin()); +} +} + class TestListener : public IIncidentReportStatusListener { public: int startInvoked; @@ -143,7 +153,10 @@ TEST_F(ReporterTest, RunReportWithHeaders) { args2.addSection(2); IncidentHeaderProto header; header.set_alert_id(12); - args2.addHeader(header); + + vector<uint8_t> out; + getHeaderData(header, &out); + args2.addHeader(out); sp<ReportRequest> r1 = new ReportRequest(args1, l, tf.fd); sp<ReportRequest> r2 = new ReportRequest(args2, l, tf.fd); @@ -169,8 +182,12 @@ TEST_F(ReporterTest, RunReportToGivenDirectory) { IncidentHeaderProto header1, header2; header1.set_alert_id(12); header2.set_reason("abcd"); - args.addHeader(header1); - args.addHeader(header2); + + vector<uint8_t> out; + getHeaderData(header1, &out); + args.addHeader(out); + getHeaderData(header2, &out); + args.addHeader(out); sp<ReportRequest> r = new ReportRequest(args, l, -1); reporter->batch.add(r); diff --git a/cmds/incidentd/tests/Section_test.cpp b/cmds/incidentd/tests/Section_test.cpp index 9b684a060286..24454ed15d40 100644 --- a/cmds/incidentd/tests/Section_test.cpp +++ b/cmds/incidentd/tests/Section_test.cpp @@ -82,6 +82,16 @@ protected: virtual IBinder* onAsBinder() override { return nullptr; }; }; +namespace { +void getHeaderData(const IncidentHeaderProto& headerProto, vector<uint8_t>* out) { + out->clear(); + auto serialized = headerProto.SerializeAsString(); + if (serialized.empty()) return; + out->resize(serialized.length()); + std::copy(serialized.begin(), serialized.end(), out->begin()); +} +} + TEST_F(SectionTest, HeaderSection) { HeaderSection hs; @@ -94,9 +104,15 @@ TEST_F(SectionTest, HeaderSection) { head1.set_reason("axe"); head2.set_reason("pup"); - args1.addHeader(head1); - args1.addHeader(head2); - args2.addHeader(head2); + vector<uint8_t> out; + getHeaderData(head1, &out); + args1.addHeader(out); + + getHeaderData(head2, &out); + args1.addHeader(out); + + getHeaderData(head2, &out); + args2.addHeader(out); requests.add(new ReportRequest(args1, new SimpleListener(), -1)); requests.add(new ReportRequest(args2, new SimpleListener(), tf.fd)); diff --git a/cmds/statsd/src/anomaly/subscriber_util.cpp b/cmds/statsd/src/anomaly/subscriber_util.cpp index ad5eae361f1c..6b46b8b3b900 100644 --- a/cmds/statsd/src/anomaly/subscriber_util.cpp +++ b/cmds/statsd/src/anomaly/subscriber_util.cpp @@ -23,7 +23,6 @@ #include "external/Perfetto.h" #include "external/Perfprofd.h" -#include "frameworks/base/libs/incident/proto/android/os/header.pb.h" #include "subscriber/IncidentdReporter.h" #include "subscriber/SubscriberReporter.h" diff --git a/cmds/statsd/src/subscriber/IncidentdReporter.cpp b/cmds/statsd/src/subscriber/IncidentdReporter.cpp index 6e4b2c86c837..42cac0cc4122 100644 --- a/cmds/statsd/src/subscriber/IncidentdReporter.cpp +++ b/cmds/statsd/src/subscriber/IncidentdReporter.cpp @@ -17,32 +17,67 @@ #include "Log.h" #include "IncidentdReporter.h" -#include "frameworks/base/libs/incident/proto/android/os/header.pb.h" #include <android/os/IIncidentManager.h> #include <android/os/IncidentReportArgs.h> +#include <android/util/ProtoOutputStream.h> #include <binder/IBinder.h> #include <binder/IServiceManager.h> +#include <vector> + namespace android { namespace os { namespace statsd { +using android::util::ProtoOutputStream; +using std::vector; + +using util::FIELD_TYPE_MESSAGE; +using util::FIELD_TYPE_INT32; +using util::FIELD_TYPE_INT64; + +// field ids in IncidentHeaderProto +const int FIELD_ID_ALERT_ID = 1; +const int FIELD_ID_CONFIG_KEY = 3; +const int FIELD_ID_CONFIG_KEY_UID = 1; +const int FIELD_ID_CONFIG_KEY_ID = 2; + +namespace { +void getProtoData(const int64_t& rule_id, const ConfigKey& configKey, vector<uint8_t>* protoData) { + ProtoOutputStream headerProto; + headerProto.write(FIELD_TYPE_INT64 | FIELD_ID_ALERT_ID, (long long)rule_id); + uint64_t token = + headerProto.start(FIELD_TYPE_MESSAGE | FIELD_ID_CONFIG_KEY); + headerProto.write(FIELD_TYPE_INT32 | FIELD_ID_CONFIG_KEY_UID, configKey.GetUid()); + headerProto.write(FIELD_TYPE_INT64 | FIELD_ID_CONFIG_KEY_ID, (long long)configKey.GetId()); + headerProto.end(token); + + protoData->resize(headerProto.size()); + size_t pos = 0; + auto iter = headerProto.data(); + while (iter.readBuffer() != NULL) { + size_t toRead = iter.currentToRead(); + std::memcpy(&((*protoData)[pos]), iter.readBuffer(), toRead); + pos += toRead; + iter.rp()->move(toRead); + } +} +} // namespace + bool GenerateIncidentReport(const IncidentdDetails& config, const int64_t& rule_id, const ConfigKey& configKey) { if (config.section_size() == 0) { VLOG("The alert %lld contains zero section in config(%d,%lld)", (unsigned long long)rule_id, - configKey.GetUid(), (long long) configKey.GetId()); + configKey.GetUid(), (long long)configKey.GetId()); return false; } IncidentReportArgs incidentReport; - android::os::IncidentHeaderProto header; - header.set_alert_id(rule_id); - header.mutable_config_key()->set_uid(configKey.GetUid()); - header.mutable_config_key()->set_id(configKey.GetId()); - incidentReport.addHeader(header); + vector<uint8_t> protoData; + getProtoData(rule_id, configKey, &protoData); + incidentReport.addHeader(protoData); for (int i = 0; i < config.section_size(); i++) { incidentReport.addSection(config.section(i)); diff --git a/libs/incident/Android.bp b/libs/incident/Android.bp index 0619a9c100dd..905e3039ff88 100644 --- a/libs/incident/Android.bp +++ b/libs/incident/Android.bp @@ -36,7 +36,6 @@ cc_library_shared { srcs: [ ":libincident_aidl", - "proto/android/os/header.proto", "proto/android/os/metadata.proto", "src/IncidentReportArgs.cpp", ], @@ -47,4 +46,4 @@ cc_library_shared { }, export_include_dirs: ["include"], -} +}
\ No newline at end of file diff --git a/libs/incident/include/android/os/IncidentReportArgs.h b/libs/incident/include/android/os/IncidentReportArgs.h index ee1e33c43b89..5e8eac1833ce 100644 --- a/libs/incident/include/android/os/IncidentReportArgs.h +++ b/libs/incident/include/android/os/IncidentReportArgs.h @@ -24,8 +24,6 @@ #include <set> #include <vector> -#include "frameworks/base/libs/incident/proto/android/os/header.pb.h" - namespace android { namespace os { @@ -49,7 +47,7 @@ public: void setAll(bool all); void setDest(int dest); void addSection(int section); - void addHeader(const IncidentHeaderProto& headerProto); + void addHeader(const vector<uint8_t>& headerProto); inline bool all() const { return mAll; } bool containsSection(int section) const; diff --git a/libs/incident/src/IncidentReportArgs.cpp b/libs/incident/src/IncidentReportArgs.cpp index 26261ef929ae..06b7a5b682b1 100644 --- a/libs/incident/src/IncidentReportArgs.cpp +++ b/libs/incident/src/IncidentReportArgs.cpp @@ -161,15 +161,9 @@ IncidentReportArgs::addSection(int section) } void -IncidentReportArgs::addHeader(const IncidentHeaderProto& headerProto) +IncidentReportArgs::addHeader(const vector<uint8_t>& headerProto) { - vector<uint8_t> header; - auto serialized = headerProto.SerializeAsString(); - if (serialized.empty()) return; - for (auto it = serialized.begin(); it != serialized.end(); it++) { - header.push_back((uint8_t)*it); - } - mHeaders.push_back(header); + mHeaders.push_back(headerProto); } bool |