2009-03-04 03:31:44 +00:00
|
|
|
//
|
|
|
|
// 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>
|
2009-05-20 02:08:10 +00:00
|
|
|
#include <binder/Parcel.h>
|
2009-03-04 03:31:44 +00:00
|
|
|
#include <utils/String8.h>
|
2009-05-20 02:08:10 +00:00
|
|
|
#include <binder/ProcessState.h>
|
2009-03-04 03:31:44 +00:00
|
|
|
|
|
|
|
#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
|