| // |
| // 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 |