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(&sectionCount);
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(&section);
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