Home | History | Annotate | Download | only in nexus
      1 /*
      2  * Copyright (C) 2008 The Android Open Source Project
      3  *
      4  * Licensed under the Apache License, Version 2.0 (the "License");
      5  * you may not use this file except in compliance with the License.
      6  * You may obtain a copy of the License at
      7  *
      8  *      http://www.apache.org/licenses/LICENSE-2.0
      9  *
     10  * Unless required by applicable law or agreed to in writing, software
     11  * distributed under the License is distributed on an "AS IS" BASIS,
     12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     13  * See the License for the specific language governing permissions and
     14  * limitations under the License.
     15  */
     16 
     17 #include <stdlib.h>
     18 #include <errno.h>
     19 #include <strings.h>
     20 #include <netinet/in.h>
     21 
     22 #define LOG_TAG "Property"
     23 
     24 #include <cutils/log.h>
     25 
     26 #include "Property.h"
     27 
     28 Property::Property(const char *name, bool readOnly,
     29                    int type, int numElements) :
     30           mName(name), mReadOnly(readOnly), mType(type),
     31           mNumElements(numElements) {
     32     if (index(name, '.')) {
     33         LOGW("Property name %s violates namespace rules", name);
     34     }
     35 }
     36 
     37 StringProperty::StringProperty(const char *name, bool ro, int elements) :
     38                 Property(name, ro, Property::Type_STRING, elements) {
     39 }
     40 int StringProperty::set(int idx, int value) {
     41     LOGE("Integer 'set' called on string property!");
     42     errno = EINVAL;
     43     return -1;
     44 }
     45 int StringProperty::set(int idx, struct in_addr *value) {
     46     LOGE("IpAddr 'set' called on string property!");
     47     errno = EINVAL;
     48     return -1;
     49 }
     50 int StringProperty::get(int idx, int *buffer) {
     51     LOGE("Integer 'get' called on string property!");
     52     errno = EINVAL;
     53     return -1;
     54 }
     55 int StringProperty::get(int idx, struct in_addr *buffer) {
     56     LOGE("IpAddr 'get' called on string property!");
     57     errno = EINVAL;
     58     return -1;
     59 }
     60 
     61 StringPropertyHelper::StringPropertyHelper(const char *name, bool ro,
     62                                            char *buffer, size_t max) :
     63                       StringProperty(name, ro, 1) {
     64     mBuffer = buffer;
     65     mMax = max;
     66 }
     67 
     68 int StringPropertyHelper::set(int idx, const char *value) {
     69     if (idx != 0) {
     70         LOGW("Attempt to use array index on StringPropertyHelper::set");
     71         errno = EINVAL;
     72         return -1;
     73     }
     74     strncpy(mBuffer, value, mMax);
     75     return 0;
     76 }
     77 
     78 int StringPropertyHelper::get(int idx, char *buffer, size_t max) {
     79     if (idx != 0) {
     80         LOGW("Attempt to use array index on StringPropertyHelper::get");
     81         errno = EINVAL;
     82         return -1;
     83     }
     84     strncpy(buffer, mBuffer, max);
     85     return 0;
     86 }
     87 
     88 IntegerProperty::IntegerProperty(const char *name, bool ro, int elements) :
     89                 Property(name, ro, Property::Type_INTEGER, elements) {
     90 }
     91 
     92 int IntegerProperty::set(int idx, const char *value) {
     93     LOGE("String 'set' called on integer property!");
     94     errno = EINVAL;
     95     return -1;
     96 }
     97 int IntegerProperty::set(int idx, struct in_addr *value) {
     98     LOGE("IpAddr 'set' called on integer property!");
     99     errno = EINVAL;
    100     return -1;
    101 }
    102 int IntegerProperty::get(int idx, char *buffer, size_t max) {
    103     LOGE("String 'get' called on integer property!");
    104     errno = EINVAL;
    105     return -1;
    106 }
    107 int IntegerProperty::get(int idx, struct in_addr *buffer) {
    108     LOGE("IpAddr 'get' called on integer property!");
    109     errno = EINVAL;
    110     return -1;
    111 }
    112 
    113 IntegerPropertyHelper::IntegerPropertyHelper(const char *name, bool ro,
    114                                              int *buffer) :
    115                        IntegerProperty(name, ro, 1) {
    116     mBuffer = buffer;
    117 }
    118 
    119 int IntegerPropertyHelper::set(int idx, int value) {
    120     if (idx != 0) {
    121         LOGW("Attempt to use array index on IntegerPropertyHelper::set");
    122         errno = EINVAL;
    123         return -1;
    124     }
    125     *mBuffer = value;
    126     return 0;
    127 }
    128 
    129 int IntegerPropertyHelper::get(int idx, int *buffer) {
    130     if (idx != 0) {
    131         LOGW("Attempt to use array index on IntegerPropertyHelper::get");
    132         errno = EINVAL;
    133         return -1;
    134     }
    135     *buffer = *mBuffer;
    136     return 0;
    137 }
    138 
    139 IPV4AddressProperty::IPV4AddressProperty(const char *name, bool ro, int elements) :
    140                 Property(name, ro, Property::Type_IPV4, elements) {
    141 }
    142 
    143 int IPV4AddressProperty::set(int idx, const char *value) {
    144     LOGE("String 'set' called on ipv4 property!");
    145     errno = EINVAL;
    146     return -1;
    147 }
    148 int IPV4AddressProperty::set(int idx, int value) {
    149     LOGE("Integer 'set' called on ipv4 property!");
    150     errno = EINVAL;
    151     return -1;
    152 }
    153 int IPV4AddressProperty::get(int idx, char *buffer, size_t max) {
    154     LOGE("String 'get' called on ipv4 property!");
    155     errno = EINVAL;
    156     return -1;
    157 }
    158 int IPV4AddressProperty::get(int idx, int *buffer) {
    159     LOGE("Integer 'get' called on ipv4 property!");
    160     errno = EINVAL;
    161     return -1;
    162 }
    163 
    164 IPV4AddressPropertyHelper::IPV4AddressPropertyHelper(const char *name, bool ro,
    165                                                      struct in_addr *buffer) :
    166                        IPV4AddressProperty(name, ro, 1) {
    167     mBuffer = buffer;
    168 }
    169 
    170 int IPV4AddressPropertyHelper::set(int idx, struct in_addr *value) {
    171     if (idx != 0) {
    172         LOGW("Attempt to use array index on IPV4AddressPropertyHelper::set");
    173         errno = EINVAL;
    174         return -1;
    175     }
    176     memcpy(mBuffer, value, sizeof(struct in_addr));
    177     return 0;
    178 }
    179 
    180 int IPV4AddressPropertyHelper::get(int idx, struct in_addr *buffer) {
    181     if (idx != 0) {
    182         LOGW("Attempt to use array index on IPV4AddressPropertyHelper::get");
    183         errno = EINVAL;
    184         return -1;
    185     }
    186     memcpy(buffer, mBuffer, sizeof(struct in_addr));
    187     return 0;
    188 }
    189 
    190 PropertyNamespace::PropertyNamespace(const char *name) {
    191     mName = strdup(name);
    192     mProperties = new PropertyCollection();
    193 }
    194 
    195 PropertyNamespace::~PropertyNamespace() {
    196     PropertyCollection::iterator it;
    197     for (it = mProperties->begin(); it != mProperties->end();) {
    198         delete (*it);
    199         it = mProperties->erase(it);
    200     }
    201     delete mProperties;
    202     free(mName);
    203 }
    204