// // Copyright 2005 The Android Open Source Project // #define LOG_TAG "ServiceManager" #include "ServiceManager.h" #include "SignalHandler.h" #include <utils/Debug.h> #include <utils/Log.h> #include <binder/Parcel.h> #include <utils/String8.h> #include <binder/ProcessState.h> #include <private/utils/Static.h> #include <ctype.h> #include <errno.h> #include <limits.h> #include <stdio.h> #include <stdlib.h> #include <sys/stat.h> namespace android { BServiceManager::BServiceManager() { } sp<IBinder> BServiceManager::getService(const String16& name) const { AutoMutex _l(mLock); ssize_t i = mServices.indexOfKey(name); LOGV("ServiceManager: getService(%s) -> %d\n", String8(name).string(), i); if (i >= 0) return mServices.valueAt(i); return NULL; } sp<IBinder> BServiceManager::checkService(const String16& name) const { AutoMutex _l(mLock); ssize_t i = mServices.indexOfKey(name); LOGV("ServiceManager: getService(%s) -> %d\n", String8(name).string(), i); if (i >= 0) return mServices.valueAt(i); return NULL; } status_t BServiceManager::addService(const String16& name, const sp<IBinder>& service) { AutoMutex _l(mLock); LOGI("ServiceManager: addService(%s, %p)\n", String8(name).string(), service.get()); const ssize_t res = mServices.add(name, service); if (res >= NO_ERROR) { mChanged.broadcast(); return NO_ERROR; } return res; } Vector<String16> BServiceManager::listServices() { Vector<String16> res; AutoMutex _l(mLock); const size_t N = mServices.size(); for (size_t i=0; i<N; i++) { res.add(mServices.keyAt(i)); } return res; } }; // namespace android