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#define LOG_TAG "dumpstate" 181754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato 191754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato#include <android/os/IncidentReportArgs.h> 201754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato 211754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato#include <cutils/log.h> 221754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato 231754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onoratonamespace android { 241754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onoratonamespace os { 251754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato 261754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe OnoratoIncidentReportArgs::IncidentReportArgs() 271754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato :mSections(), 280f0471623e91c202fb7381a050cc331572fb439fYi Jin mAll(false), 290f0471623e91c202fb7381a050cc331572fb439fYi Jin mDest(-1) 301754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato{ 311754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato} 321754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato 331754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe OnoratoIncidentReportArgs::IncidentReportArgs(const IncidentReportArgs& that) 341754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato :mSections(that.mSections), 351754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato mHeaders(that.mHeaders), 360f0471623e91c202fb7381a050cc331572fb439fYi Jin mAll(that.mAll), 370f0471623e91c202fb7381a050cc331572fb439fYi Jin mDest(that.mDest) 381754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato{ 391754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato} 401754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato 411754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe OnoratoIncidentReportArgs::~IncidentReportArgs() 421754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato{ 431754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato} 441754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato 451754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onoratostatus_t 461754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe OnoratoIncidentReportArgs::writeToParcel(Parcel* out) const 471754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato{ 481754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato status_t err; 491754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato 501754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato err = out->writeInt32(mAll); 511754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato if (err != NO_ERROR) { 521754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato return err; 531754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato } 541754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato 551754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato err = out->writeInt32(mSections.size()); 561754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato if (err != NO_ERROR) { 571754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato return err; 581754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato } 591754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato 601754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato for (set<int>::const_iterator it=mSections.begin(); it!=mSections.end(); it++) { 611754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato err = out->writeInt32(*it); 621754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato if (err != NO_ERROR) { 631754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato return err; 641754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato } 651754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato } 661754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato 671754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato err = out->writeInt32(mHeaders.size()); 681754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato if (err != NO_ERROR) { 691754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato return err; 701754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato } 711754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato 72bdf58942c86240070bacc25203177cf47f6a1577Yi Jin for (vector<vector<uint8_t>>::const_iterator it = mHeaders.begin(); it != mHeaders.end(); it++) { 731754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato err = out->writeByteVector(*it); 741754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato if (err != NO_ERROR) { 751754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato return err; 761754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato } 771754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato } 781754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato 790f0471623e91c202fb7381a050cc331572fb439fYi Jin err = out->writeInt32(mDest); 800f0471623e91c202fb7381a050cc331572fb439fYi Jin if (err != NO_ERROR) { 810f0471623e91c202fb7381a050cc331572fb439fYi Jin return err; 820f0471623e91c202fb7381a050cc331572fb439fYi Jin } 830f0471623e91c202fb7381a050cc331572fb439fYi Jin 841754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato return NO_ERROR; 851754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato} 861754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato 871754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onoratostatus_t 881754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe OnoratoIncidentReportArgs::readFromParcel(const Parcel* in) 891754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato{ 901754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato status_t err; 911754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato 921754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato int32_t all; 931754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato err = in->readInt32(&all); 941754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato if (err != NO_ERROR) { 951754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato return err; 961754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato } 971754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato if (all != 0) { 981754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato mAll = all; 991754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato } 1001754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato 1011754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato mSections.clear(); 1021754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato int32_t sectionCount; 1031754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato err = in->readInt32(§ionCount); 1041754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato if (err != NO_ERROR) { 1051754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato return err; 1061754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato } 1071754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato for (int i=0; i<sectionCount; i++) { 1081754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato int32_t section; 1091754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato err = in->readInt32(§ion); 1101754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato if (err != NO_ERROR) { 1111754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato return err; 1121754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato } 1131754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato 1141754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato mSections.insert(section); 1151754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato } 1161754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato 1171754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato int32_t headerCount; 1181754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato err = in->readInt32(&headerCount); 1191754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato if (err != NO_ERROR) { 1201754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato return err; 1211754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato } 1221754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato mHeaders.resize(headerCount); 1231754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato for (int i=0; i<headerCount; i++) { 1241754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato err = in->readByteVector(&mHeaders[i]); 1251754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato if (err != NO_ERROR) { 1261754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato return err; 1271754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato } 1281754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato } 1291754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato 1300f0471623e91c202fb7381a050cc331572fb439fYi Jin int32_t dest; 1310f0471623e91c202fb7381a050cc331572fb439fYi Jin err = in->readInt32(&dest); 1320f0471623e91c202fb7381a050cc331572fb439fYi Jin if (err != NO_ERROR) { 1330f0471623e91c202fb7381a050cc331572fb439fYi Jin return err; 1340f0471623e91c202fb7381a050cc331572fb439fYi Jin } 1350f0471623e91c202fb7381a050cc331572fb439fYi Jin mDest = dest; 1360f0471623e91c202fb7381a050cc331572fb439fYi Jin 1371754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato return OK; 1381754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato} 1391754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato 1401754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onoratovoid 1411754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe OnoratoIncidentReportArgs::setAll(bool all) 1421754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato{ 1431754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato mAll = all; 1441754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato if (all) { 1451754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato mSections.clear(); 1461754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato } 1471754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato} 1481754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato 1491754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onoratovoid 1500f0471623e91c202fb7381a050cc331572fb439fYi JinIncidentReportArgs::setDest(int dest) 1510f0471623e91c202fb7381a050cc331572fb439fYi Jin{ 1520f0471623e91c202fb7381a050cc331572fb439fYi Jin mDest = dest; 1530f0471623e91c202fb7381a050cc331572fb439fYi Jin} 1540f0471623e91c202fb7381a050cc331572fb439fYi Jin 1550f0471623e91c202fb7381a050cc331572fb439fYi Jinvoid 1561754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe OnoratoIncidentReportArgs::addSection(int section) 1571754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato{ 1581754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato if (!mAll) { 1591754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato mSections.insert(section); 1601754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato } 1611754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato} 1621754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato 1631754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onoratovoid 164437aa6e8ad24489fcd8a7ab2c889874cfae12d0bYi JinIncidentReportArgs::addHeader(const IncidentHeaderProto& headerProto) 1651754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato{ 166437aa6e8ad24489fcd8a7ab2c889874cfae12d0bYi Jin vector<uint8_t> header; 167437aa6e8ad24489fcd8a7ab2c889874cfae12d0bYi Jin auto serialized = headerProto.SerializeAsString(); 168437aa6e8ad24489fcd8a7ab2c889874cfae12d0bYi Jin if (serialized.empty()) return; 169437aa6e8ad24489fcd8a7ab2c889874cfae12d0bYi Jin for (auto it = serialized.begin(); it != serialized.end(); it++) { 170437aa6e8ad24489fcd8a7ab2c889874cfae12d0bYi Jin header.push_back((uint8_t)*it); 171437aa6e8ad24489fcd8a7ab2c889874cfae12d0bYi Jin } 1721754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato mHeaders.push_back(header); 1731754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato} 1741754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato 1751754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onoratobool 1761754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe OnoratoIncidentReportArgs::containsSection(int section) const 1771754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato{ 1781754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato return mAll || mSections.find(section) != mSections.end(); 1791754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato} 1801754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato 1811754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onoratovoid 1821754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe OnoratoIncidentReportArgs::merge(const IncidentReportArgs& that) 1831754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato{ 1841754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato if (mAll) { 1851754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato return; 1861754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato } else if (that.mAll) { 1871754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato mAll = true; 1881754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato mSections.clear(); 1891754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato } else { 1901754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato for (set<int>::const_iterator it=that.mSections.begin(); 1911754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato it!=that.mSections.end(); it++) { 1921754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato mSections.insert(*it); 1931754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato } 1941754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato } 1951754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato} 1961754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato 1971754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato} 1981754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato} 199