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