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 */ 16b592e3bc3169e39bd6b0bfce9f788631d5d22acdYi Jin#pragma once 171754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato 181754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato#ifndef REPORTER_H 191754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato#define REPORTER_H 201754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato 211754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato#include <android/os/IIncidentReportStatusListener.h> 221754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato#include <android/os/IncidentReportArgs.h> 231754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato 24329130b7e40d27f660aa275ef6905bd7ee91f64cYi Jin#include <map> 251754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato#include <string> 261754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato#include <vector> 271754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato 281754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato#include <time.h> 291754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato 304e843106a6f510a7d77fedfbeaec8e95b57905b7Yi Jin#include "Throttler.h" 314e843106a6f510a7d77fedfbeaec8e95b57905b7Yi Jin#include "frameworks/base/libs/incident/proto/android/os/metadata.pb.h" 324e843106a6f510a7d77fedfbeaec8e95b57905b7Yi Jin 336cacbcbf436be744a34f7ea0d4f838ff97757446Yi Jinnamespace android { 346cacbcbf436be744a34f7ea0d4f838ff97757446Yi Jinnamespace os { 356cacbcbf436be744a34f7ea0d4f838ff97757446Yi Jinnamespace incidentd { 361754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato 371754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato// ================================================================================ 38b592e3bc3169e39bd6b0bfce9f788631d5d22acdYi Jinstruct ReportRequest : public virtual RefBase { 391754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato IncidentReportArgs args; 401754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato sp<IIncidentReportStatusListener> listener; 411754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato int fd; 421754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato status_t err; 431754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato 44b592e3bc3169e39bd6b0bfce9f788631d5d22acdYi Jin ReportRequest(const IncidentReportArgs& args, const sp<IIncidentReportStatusListener>& listener, 45b592e3bc3169e39bd6b0bfce9f788631d5d22acdYi Jin int fd); 461754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato virtual ~ReportRequest(); 47edfd5bb7888899976762623a4c940710026480eaYi Jin 48b592e3bc3169e39bd6b0bfce9f788631d5d22acdYi Jin bool ok(); // returns true if the request is ok for write. 491754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato}; 501754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato 511754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato// ================================================================================ 52b592e3bc3169e39bd6b0bfce9f788631d5d22acdYi Jinclass ReportRequestSet { 531754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onoratopublic: 541754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato ReportRequestSet(); 551754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato ~ReportRequestSet(); 561754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato 571754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato void add(const sp<ReportRequest>& request); 581754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato void setMainFd(int fd); 593ec5cc792e932dc668bf9fb2cf5e6c6288a7f9b4Yi Jin void setMainDest(int dest); 601754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato 611754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato typedef vector<sp<ReportRequest>>::iterator iterator; 621754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato 631754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato iterator begin() { return mRequests.begin(); } 641754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato iterator end() { return mRequests.end(); } 651754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato 6699c248feb2d1f863b864bdfd1e3b37af17f18732Yi Jin int mainFd() { return mMainFd; } 673ec5cc792e932dc668bf9fb2cf5e6c6288a7f9b4Yi Jin int mainDest() { return mMainDest; } 68329130b7e40d27f660aa275ef6905bd7ee91f64cYi Jin IncidentMetadata& metadata() { return mMetadata; } 6986dce413f808ca9ef160e8762f74deaafd7c23aeYi Jin map<int, IncidentMetadata::SectionStats>& allSectionStats() { return mSectionStats; } 70329130b7e40d27f660aa275ef6905bd7ee91f64cYi Jin 71329130b7e40d27f660aa275ef6905bd7ee91f64cYi Jin bool containsSection(int id); 72329130b7e40d27f660aa275ef6905bd7ee91f64cYi Jin IncidentMetadata::SectionStats* sectionStats(int id); 73329130b7e40d27f660aa275ef6905bd7ee91f64cYi Jin 741754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onoratoprivate: 751754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato vector<sp<ReportRequest>> mRequests; 76add11e9176f2a5a2e5193726b863d03c281a4eddYi Jin IncidentReportArgs mSections; 771754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato int mMainFd; 783ec5cc792e932dc668bf9fb2cf5e6c6288a7f9b4Yi Jin int mMainDest; 79329130b7e40d27f660aa275ef6905bd7ee91f64cYi Jin 80329130b7e40d27f660aa275ef6905bd7ee91f64cYi Jin IncidentMetadata mMetadata; 8186dce413f808ca9ef160e8762f74deaafd7c23aeYi Jin map<int, IncidentMetadata::SectionStats> mSectionStats; 821754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato}; 831754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato 841754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato// ================================================================================ 85b592e3bc3169e39bd6b0bfce9f788631d5d22acdYi Jinclass Reporter : public virtual RefBase { 861754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onoratopublic: 87b592e3bc3169e39bd6b0bfce9f788631d5d22acdYi Jin enum run_report_status_t { REPORT_FINISHED = 0, REPORT_NEEDS_DROPBOX = 1 }; 881754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato 891754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato ReportRequestSet batch; 901754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato 91b592e3bc3169e39bd6b0bfce9f788631d5d22acdYi Jin Reporter(); // PROD must use this constructor. 92b592e3bc3169e39bd6b0bfce9f788631d5d22acdYi Jin Reporter(const char* directory); // For testing purpose only. 931754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato virtual ~Reporter(); 941754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato 951754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato // Run the report as described in the batch and args parameters. 964e843106a6f510a7d77fedfbeaec8e95b57905b7Yi Jin run_report_status_t runReport(size_t* reportByteSize); 971754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato 981754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato static run_report_status_t upload_backlog(); 991754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato 1001754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onoratoprivate: 101add11e9176f2a5a2e5193726b863d03c281a4eddYi Jin String8 mIncidentDirectory; 102add11e9176f2a5a2e5193726b863d03c281a4eddYi Jin 1031754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato string mFilename; 1041754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato off_t mMaxSize; 1051754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato size_t mMaxCount; 1061754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato time_t mStartTime; 1071754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato 1081754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato status_t create_file(int* fd); 109add11e9176f2a5a2e5193726b863d03c281a4eddYi Jin 110b592e3bc3169e39bd6b0bfce9f788631d5d22acdYi Jin bool isTest = true; // default to true for testing 1111754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato}; 1121754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato 1136cacbcbf436be744a34f7ea0d4f838ff97757446Yi Jin} // namespace incidentd 1146cacbcbf436be744a34f7ea0d4f838ff97757446Yi Jin} // namespace os 1156cacbcbf436be744a34f7ea0d4f838ff97757446Yi Jin} // namespace android 1166cacbcbf436be744a34f7ea0d4f838ff97757446Yi Jin 117b592e3bc3169e39bd6b0bfce9f788631d5d22acdYi Jin#endif // REPORTER_H 118