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 #ifndef _PROPERTY_H
     18 #define _PROPERTY_H
     19 
     20 #include <netinet/in.h>
     21 #include <utils/List.h>
     22 
     23 class Property {
     24     const char *mName;
     25     bool       mReadOnly;
     26     int        mType;
     27     int        mNumElements;
     28 
     29 public:
     30     static const int NameMaxSize   = 128;
     31     static const int ValueMaxSize  = 255;
     32 
     33     static const int Type_STRING  = 1;
     34     static const int Type_INTEGER = 2;
     35     static const int Type_IPV4    = 3;
     36 
     37     Property(const char *name, bool ro, int type, int elements);
     38     virtual ~Property() {}
     39 
     40     virtual int set(int idx, const char *value) = 0;
     41     virtual int set(int idx, int value) = 0;
     42     virtual int set(int idx, struct in_addr *value) = 0;
     43 
     44     virtual int get(int idx, char *buffer, size_t max) = 0;
     45     virtual int get(int idx, int *buffer) = 0;
     46     virtual int get(int idx, struct in_addr *buffer) = 0;
     47 
     48     int getType() { return mType; }
     49     bool getReadOnly() { return mReadOnly; }
     50     int getNumElements() { return mNumElements; }
     51     const char *getName() { return mName; }
     52 };
     53 
     54 class StringProperty : public Property {
     55 public:
     56     StringProperty(const char *name, bool ro, int elements);
     57     virtual ~StringProperty() {}
     58 
     59     virtual int set(int idx, const char *value) = 0;
     60     int set(int idx, int value);
     61     int set(int idx, struct in_addr *value);
     62 
     63     virtual int get(int idx, char *buffer, size_t max) = 0;
     64     int get(int idx, int *buffer);
     65     int get(int idx, struct in_addr *buffer);
     66 };
     67 
     68 class StringPropertyHelper : public StringProperty {
     69     char *mBuffer;
     70     size_t mMax;
     71 public:
     72     StringPropertyHelper(const char *name, bool ro,
     73                          char *buffer, size_t max);
     74     int set(int idx, const char *value);
     75     int get(int idx, char *buffer, size_t max);
     76 };
     77 
     78 class IntegerProperty : public Property {
     79 public:
     80     IntegerProperty(const char *name, bool ro, int elements);
     81     virtual ~IntegerProperty() {}
     82 
     83     int set(int idx, const char *value);
     84     virtual int set(int idx, int value) = 0;
     85     int set(int idx, struct in_addr *value);
     86 
     87     int get(int idx, char *buffer, size_t max);
     88     virtual int get(int idx, int *buffer) = 0;
     89     int get(int idx, struct in_addr *buffer);
     90 };
     91 
     92 class IntegerPropertyHelper : public IntegerProperty {
     93     int *mBuffer;
     94 public:
     95     IntegerPropertyHelper(const char *name, bool ro, int *buffer);
     96     int set(int idx, int value);
     97     int get(int idx, int *buffer);
     98 };
     99 
    100 class IPV4AddressProperty : public Property {
    101 public:
    102     IPV4AddressProperty(const char *name, bool ro, int elements);
    103     virtual ~IPV4AddressProperty() {}
    104 
    105     int set(int idx, const char *value);
    106     int set(int idx, int value);
    107     virtual int set(int idx, struct in_addr *value) = 0;
    108 
    109     int get(int idx, char *buffer, size_t max);
    110     int get(int idx, int *buffer);
    111     virtual int get(int idx, struct in_addr *buffer) = 0;
    112 };
    113 
    114 class IPV4AddressPropertyHelper : public IPV4AddressProperty {
    115     struct in_addr *mBuffer;
    116 public:
    117     IPV4AddressPropertyHelper(const char *name, bool ro, struct in_addr *buf);
    118     int set(int idx, struct in_addr *value);
    119     int get(int idx, struct in_addr *buffer);
    120 };
    121 
    122 typedef android::List<Property *> PropertyCollection;
    123 
    124 class PropertyNamespace {
    125     char         *mName;
    126     PropertyCollection *mProperties;
    127 
    128 public:
    129     PropertyNamespace(const char *name);
    130     virtual ~PropertyNamespace();
    131 
    132     const char *getName() { return mName; }
    133     PropertyCollection *getProperties() { return mProperties; }
    134 };
    135 
    136 typedef android::List<PropertyNamespace *> PropertyNamespaceCollection;
    137 #endif
    138