diff options
| author | San Mehat <san@google.com> | 2009-05-22 15:36:13 -0700 |
|---|---|---|
| committer | San Mehat <san@google.com> | 2009-05-29 15:26:21 -0700 |
| commit | 3c5a6f0bc8aefc4dacab8e95ba9017a7ac7d91f5 (patch) | |
| tree | e73708dde1e774c8e6a0539a91a228acd68000a2 /nexus/PropertyManager.cpp | |
| parent | 192331d9060763b92f7989124bedbd136689d735 (diff) | |
| download | system_core-3c5a6f0bc8aefc4dacab8e95ba9017a7ac7d91f5.tar.gz system_core-3c5a6f0bc8aefc4dacab8e95ba9017a7ac7d91f5.tar.bz2 system_core-3c5a6f0bc8aefc4dacab8e95ba9017a7ac7d91f5.zip | |
nexus: Refactor some of the create/remove network path and add code for
retrieving network lists from supplicant
nexus: Rework properties
nexus: Implement wifi network enable/disable and add some error checking
nexus: Add some TODOs
nexus: Whitespace cleanup
nexus: Add bindings between controllers and network interfaces
nexus: Add properties for InterfaceConfig
nexus: Fix a few conversion bugs in InterfaceConfig
Signed-off-by: San Mehat <san@google.com>
Diffstat (limited to 'nexus/PropertyManager.cpp')
| -rw-r--r-- | nexus/PropertyManager.cpp | 122 |
1 files changed, 122 insertions, 0 deletions
diff --git a/nexus/PropertyManager.cpp b/nexus/PropertyManager.cpp new file mode 100644 index 00000000..3366babe --- /dev/null +++ b/nexus/PropertyManager.cpp @@ -0,0 +1,122 @@ +/* + * Copyright (C) 2008 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#define LOG_TAG "PropertyManager" + +#include <cutils/log.h> + +#include "PropertyManager.h" + +PropertyManager::PropertyManager() { + mPropertyPairs = new PropertyPairCollection(); + pthread_mutex_init(&mLock, NULL); +} + +PropertyManager::~PropertyManager() { + delete mPropertyPairs; +} + +int PropertyManager::registerProperty(const char *name, IPropertyProvider *pp) { + PropertyPairCollection::iterator it; + +// LOGD("registerProperty(%s)", name); + pthread_mutex_lock(&mLock); + for (it = mPropertyPairs->begin(); it != mPropertyPairs->end(); ++it) { + if (!strcmp(name, (*it)->getName())) { + errno = EADDRINUSE; + LOGE("Failed to register property (%s)", strerror(errno)); + pthread_mutex_unlock(&mLock); + return -1; + } + } + mPropertyPairs->push_back(new PropertyPair(name, pp)); + pthread_mutex_unlock(&mLock); + return 0; +} + +int PropertyManager::unregisterProperty(const char *name) { + PropertyPairCollection::iterator it; + +// LOGD("unregisterProperty(%s)", name); + pthread_mutex_lock(&mLock); + for (it = mPropertyPairs->begin(); it != mPropertyPairs->end(); ++it) { + if (!strcmp(name, (*it)->getName())) { + delete ((*it)); + mPropertyPairs->erase(it); + pthread_mutex_unlock(&mLock); + return 0; + } + } + pthread_mutex_unlock(&mLock); + errno = ENOENT; + return -1; +} + +/* + * IPropertyManager methods + */ + +int PropertyManager::set(const char *name, const char *value) { + PropertyPairCollection::iterator it; + + pthread_mutex_lock(&mLock); + for (it = mPropertyPairs->begin(); it != mPropertyPairs->end(); ++it) { + if (!strcmp(name, (*it)->getName())) { + pthread_mutex_unlock(&mLock); + return (*it)->getProvider()->set(name, value); + } + } + pthread_mutex_unlock(&mLock); + errno = ENOENT; + return -1; +} + +const char *PropertyManager::get(const char *name, char *buffer, size_t max) { + PropertyPairCollection::iterator it; + + memset(buffer, 0, max); + pthread_mutex_lock(&mLock); + for (it = mPropertyPairs->begin(); it != mPropertyPairs->end(); ++it) { + if (!strcmp(name, (*it)->getName())) { + pthread_mutex_unlock(&mLock); + return (*it)->getProvider()->get(name, buffer, max); + } + } + pthread_mutex_unlock(&mLock); + errno = ENOENT; + return NULL; +} + +android::List<char *> *PropertyManager::createPropertyList() { + android::List<char *> *c = new android::List<char *>(); + + PropertyPairCollection::iterator it; + + pthread_mutex_lock(&mLock); + for (it = mPropertyPairs->begin(); it != mPropertyPairs->end(); ++it) + c->push_back(strdup((*it)->getName())); + pthread_mutex_unlock(&mLock); + return c; +} + +PropertyPair::PropertyPair(const char *name, IPropertyProvider *pp) { + mName = strdup(name); + mPp = pp; +} + +PropertyPair::~PropertyPair() { + free(mName); +} |
