diff options
Diffstat (limited to 'cmds/statsd/src/StatsService.cpp')
-rw-r--r-- | cmds/statsd/src/StatsService.cpp | 47 |
1 files changed, 45 insertions, 2 deletions
diff --git a/cmds/statsd/src/StatsService.cpp b/cmds/statsd/src/StatsService.cpp index ca097d0623ca..31994e1a92d1 100644 --- a/cmds/statsd/src/StatsService.cpp +++ b/cmds/statsd/src/StatsService.cpp @@ -24,6 +24,7 @@ #include "guardrail/MemoryLeakTrackUtil.h" #include "guardrail/StatsdStats.h" #include "storage/StorageManager.h" +#include "subscriber/SubscriberReporter.h" #include <android-base/file.h> #include <binder/IPCThreadState.h> @@ -67,6 +68,7 @@ CompanionDeathRecipient::CompanionDeathRecipient(const sp<AnomalyMonitor>& anoma void CompanionDeathRecipient::binderDied(const wp<IBinder>& who) { ALOGW("statscompanion service died"); mAnomalyMonitor->setStatsCompanionService(nullptr); + SubscriberReporter::getInstance().setStatsCompanionService(nullptr); } // ====================================================================== @@ -380,6 +382,8 @@ status_t StatsService::cmd_config(FILE* in, FILE* out, FILE* err, Vector<String8 "The config can only be set for other UIDs on eng or userdebug " "builds.\n"); } + } else if (argCount == 2 && args[1] == "remove") { + good = true; } if (!good) { @@ -681,6 +685,7 @@ Status StatsService::statsCompanionReady() { VLOG("StatsService::statsCompanionReady linking to statsCompanion."); IInterface::asBinder(statsCompanion)->linkToDeath(new CompanionDeathRecipient(mAnomalyMonitor)); mAnomalyMonitor->setStatsCompanionService(statsCompanion); + SubscriberReporter::getInstance().setStatsCompanionService(statsCompanion); return Status::ok(); } @@ -725,7 +730,7 @@ Status StatsService::addConfiguration(int64_t key, if (checkCallingPermission(String16(kPermissionDump))) { ConfigKey configKey(ipc->getCallingUid(), key); StatsdConfig cfg; - if (!cfg.ParseFromArray(&config[0], config.size())) { + if (config.empty() || !cfg.ParseFromArray(&config[0], config.size())) { *success = false; return Status::ok(); } @@ -743,7 +748,27 @@ Status StatsService::addConfiguration(int64_t key, Status StatsService::removeConfiguration(int64_t key, bool* success) { IPCThreadState* ipc = IPCThreadState::self(); if (checkCallingPermission(String16(kPermissionDump))) { - mConfigManager->RemoveConfig(ConfigKey(ipc->getCallingUid(), key)); + ConfigKey configKey(ipc->getCallingUid(), key); + mConfigManager->RemoveConfig(configKey); + SubscriberReporter::getInstance().removeConfig(configKey); + *success = true; + return Status::ok(); + } else { + *success = false; + return Status::fromExceptionCode(binder::Status::EX_SECURITY); + } +} + +Status StatsService::setBroadcastSubscriber(int64_t configId, + int64_t subscriberId, + const sp<android::IBinder>& intentSender, + bool* success) { + VLOG("StatsService::setBroadcastSubscriber called."); + IPCThreadState* ipc = IPCThreadState::self(); + if (checkCallingPermission(String16(kPermissionDump))) { + ConfigKey configKey(ipc->getCallingUid(), configId); + SubscriberReporter::getInstance() + .setBroadcastSubscriber(configKey, subscriberId, intentSender); *success = true; return Status::ok(); } else { @@ -752,6 +777,24 @@ Status StatsService::removeConfiguration(int64_t key, bool* success) { } } +Status StatsService::unsetBroadcastSubscriber(int64_t configId, + int64_t subscriberId, + bool* success) { + VLOG("StatsService::unsetBroadcastSubscriber called."); + IPCThreadState* ipc = IPCThreadState::self(); + if (checkCallingPermission(String16(kPermissionDump))) { + ConfigKey configKey(ipc->getCallingUid(), configId); + SubscriberReporter::getInstance() + .unsetBroadcastSubscriber(configKey, subscriberId); + *success = true; + return Status::ok(); + } else { + *success = false; + return Status::fromExceptionCode(binder::Status::EX_SECURITY); + } +} + + void StatsService::binderDied(const wp <IBinder>& who) { } |