config.cpp revision a24be4f06674b2707b57904deaa0dff5a95823bd
1b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org/******************************************************************************
2b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org *
3b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org *  Copyright (C) 2011-2012 Broadcom Corporation
4b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org *
5b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org *  Licensed under the Apache License, Version 2.0 (the "License");
6b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org *  you may not use this file except in compliance with the License.
7b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org *  You may obtain a copy of the License at:
8b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org *
9b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org *  http://www.apache.org/licenses/LICENSE-2.0
10b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org *
11b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org *  Unless required by applicable law or agreed to in writing, software
12b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org *  distributed under the License is distributed on an "AS IS" BASIS,
13b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14d4682361fd4d284657e4e33ca5f022cc8ea8f468andrew@webrtc.org *  See the License for the specific language governing permissions and
15b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org *  limitations under the License.
16d4682361fd4d284657e4e33ca5f022cc8ea8f468andrew@webrtc.org *
17d4682361fd4d284657e4e33ca5f022cc8ea8f468andrew@webrtc.org ******************************************************************************/
18b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#include "OverrideLog.h"
19856edd527f7c49517d6d866b602defd743ca0bdbandrew@webrtc.org#include "config.h"
20856edd527f7c49517d6d866b602defd743ca0bdbandrew@webrtc.org#include <stdio.h>
21856edd527f7c49517d6d866b602defd743ca0bdbandrew@webrtc.org#include <string>
22b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#include <vector>
23b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#include <list>
24b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
25b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#define LOG_TAG "NfcNciHal"
26b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
27b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgconst char transport_config_path[] = "/etc/";
28856edd527f7c49517d6d866b602defd743ca0bdbandrew@webrtc.org
29856edd527f7c49517d6d866b602defd743ca0bdbandrew@webrtc.org#define config_name             "libnfc-brcm.conf"
30b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#define extra_config_base       "libnfc-brcm-"
31b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#define extra_config_ext        ".conf"
32b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#define     IsStringValue       0x80000000
33b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
34b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgusing namespace::std;
35b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
36b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgclass CNfcParam : public string
37b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org{
38b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgpublic:
39b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    CNfcParam();
40b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    CNfcParam(const char* name, const string& value);
41b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    CNfcParam(const char* name, unsigned long value);
42b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    virtual ~CNfcParam();
43b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    unsigned long numValue() const {return m_numValue;}
44b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    const char*   str_value() const {return m_str_value.c_str();}
45b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    size_t        str_len() const   {return m_str_value.length();}
46b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgprivate:
47b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    string          m_str_value;
48b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    unsigned long   m_numValue;
49b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org};
50b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
51b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgclass CNfcConfig : public vector<const CNfcParam*>
52b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org{
53b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgpublic:
54b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    virtual ~CNfcConfig();
55b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    static CNfcConfig& GetInstance();
56b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    friend void readOptionalConfig(const char* optional);
57b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
58b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    bool    getValue(const char* name, char* pValue, size_t& len) const;
59b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    bool    getValue(const char* name, unsigned long& rValue) const;
60b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    bool    getValue(const char* name, unsigned short & rValue) const;
61b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    const CNfcParam*    find(const char* p_name) const;
62b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    void    clean();
63b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgprivate:
64b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    CNfcConfig();
65b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    bool    readConfig(const char* name, bool bResetContent);
66b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    void    moveFromList();
67b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    void    moveToList();
68b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    void    add(const CNfcParam* pParam);
69b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    list<const CNfcParam*> m_list;
70b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    bool    mValidFile;
71b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
72b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    unsigned long   state;
73b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
74b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    inline bool Is(unsigned long f) {return (state & f) == f;}
75b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    inline void Set(unsigned long f) {state |= f;}
76b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    inline void Reset(unsigned long f) {state &= ~f;}
77b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org};
78b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
79b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org/*******************************************************************************
80b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org**
81b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org** Function:    isPrintable()
82b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org**
83b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org** Description: detremine if a char is printable
84b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org**
85b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org** Returns:     none
86b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org**
87b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org*******************************************************************************/
88b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orginline bool isPrintable(char c)
89b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org{
90b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    return  (c >= 'A' && c <= 'Z') ||
91b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org            (c >= 'a' && c <= 'z') ||
92b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org            (c >= '0' && c <= '9') ||
93b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org            c == '/' || c == '_' || c == '-' || c == '.';
94b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org}
95b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
96b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org/*******************************************************************************
97b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org**
98b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org** Function:    isDigit()
99b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org**
100b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org** Description: detremine if a char is numeral digit
101b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org**
102b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org** Returns:     none
103b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org**
104b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org*******************************************************************************/
105b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orginline bool isDigit(char c, int base)
106b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org{
107b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    if ('0' <= c && c <= '9')
108b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org        return true;
109b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    if (base == 16)
110b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    {
111b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org        if (('A' <= c && c <= 'F') ||
112b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org            ('a' <= c && c <= 'f') )
113b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org            return true;
114b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    }
115b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    return false;
116b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org}
117b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
118b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org/*******************************************************************************
119b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org**
120b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org** Function:    getDigitValue()
121b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org**
122b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org** Description: return numercal value of a char
123b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org**
124b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org** Returns:     none
125b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org**
126b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org*******************************************************************************/
127b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orginline int getDigitValue(char c, int base)
128b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org{
129b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    if ('0' <= c && c <= '9')
130b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org        return c - '0';
131b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    if (base == 16)
132b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    {
133b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org        if ('A' <= c && c <= 'F')
134b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org            return c - 'A' + 10;
135b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org        else if ('a' <= c && c <= 'f')
136b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org            return c - 'a' + 10;
137b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    }
138b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    return 0;
139b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org}
140b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
141b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org/*******************************************************************************
142b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org**
143b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org** Function:    CNfcConfig::readConfig()
144b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org**
145b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org** Description: read Config settings and parse them into a linked list
146b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org**              move the element from linked list to a array at the end
147b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org**
148b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org** Returns:     none
149b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org**
150856edd527f7c49517d6d866b602defd743ca0bdbandrew@webrtc.org*******************************************************************************/
151b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgbool CNfcConfig::readConfig(const char* name, bool bResetContent)
152856edd527f7c49517d6d866b602defd743ca0bdbandrew@webrtc.org{
153b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    enum {
154856edd527f7c49517d6d866b602defd743ca0bdbandrew@webrtc.org        BEGIN_LINE = 1,
155b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org        TOKEN,
156b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org        STR_VALUE,
157856edd527f7c49517d6d866b602defd743ca0bdbandrew@webrtc.org        NUM_VALUE,
158b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org        BEGIN_HEX,
159b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org        BEGIN_QUOTE,
160b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org        END_LINE
161b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    };
162b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
163b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    FILE*   fd = NULL;
164b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    string  token;
165b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    string  strValue;
166b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    unsigned long    numValue = 0;
167b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    CNfcParam* pParam = NULL;
168b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    int     i = 0;
169b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    int     base = 0;
170b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    char    c = 0;
171856edd527f7c49517d6d866b602defd743ca0bdbandrew@webrtc.org
172b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    state = BEGIN_LINE;
173b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    /* open config file, read it into a buffer */
174856edd527f7c49517d6d866b602defd743ca0bdbandrew@webrtc.org    if ((fd = fopen(name, "rb")) == NULL)
175b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    {
176856edd527f7c49517d6d866b602defd743ca0bdbandrew@webrtc.org        ALOGD("%s Cannot open config file %s\n", __func__, name);
177b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org        if (bResetContent)
178856edd527f7c49517d6d866b602defd743ca0bdbandrew@webrtc.org        {
179b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org            ALOGD("%s Using default value for all settings\n", __func__);
180856edd527f7c49517d6d866b602defd743ca0bdbandrew@webrtc.org        mValidFile = false;
181b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org        }
182856edd527f7c49517d6d866b602defd743ca0bdbandrew@webrtc.org        return false;
183b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    }
184856edd527f7c49517d6d866b602defd743ca0bdbandrew@webrtc.org    ALOGD("%s Opened %s config %s\n", __func__, (bResetContent ? "base" : "optional"), name);
185b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
186856edd527f7c49517d6d866b602defd743ca0bdbandrew@webrtc.org    mValidFile = true;
187b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    if (size() > 0)
188856edd527f7c49517d6d866b602defd743ca0bdbandrew@webrtc.org    {
189b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org        if (bResetContent)
190b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org        clean();
191b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org        else
192856edd527f7c49517d6d866b602defd743ca0bdbandrew@webrtc.org            moveToList();
193b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    }
194b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
195856edd527f7c49517d6d866b602defd743ca0bdbandrew@webrtc.org    while (!feof(fd) && fread(&c, 1, 1, fd) == 1)
196b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    {
197b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org        switch (state & 0xff)
198856edd527f7c49517d6d866b602defd743ca0bdbandrew@webrtc.org        {
199b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org        case BEGIN_LINE:
200856edd527f7c49517d6d866b602defd743ca0bdbandrew@webrtc.org            if (c == '#')
201856edd527f7c49517d6d866b602defd743ca0bdbandrew@webrtc.org                state = END_LINE;
202b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org            else if (isPrintable(c))
203856edd527f7c49517d6d866b602defd743ca0bdbandrew@webrtc.org            {
204b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org                i = 0;
205856edd527f7c49517d6d866b602defd743ca0bdbandrew@webrtc.org                token.erase();
206856edd527f7c49517d6d866b602defd743ca0bdbandrew@webrtc.org                strValue.erase();
207b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org                state = TOKEN;
208856edd527f7c49517d6d866b602defd743ca0bdbandrew@webrtc.org                token.push_back(c);
209b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org            }
210856edd527f7c49517d6d866b602defd743ca0bdbandrew@webrtc.org            break;
211856edd527f7c49517d6d866b602defd743ca0bdbandrew@webrtc.org        case TOKEN:
212b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org            if (c == '=')
213856edd527f7c49517d6d866b602defd743ca0bdbandrew@webrtc.org            {
214b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org                token.push_back('\0');
215856edd527f7c49517d6d866b602defd743ca0bdbandrew@webrtc.org                state = BEGIN_QUOTE;
216856edd527f7c49517d6d866b602defd743ca0bdbandrew@webrtc.org            }
217b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org            else if (isPrintable(c))
218b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org                token.push_back(c);
219b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org            else
220856edd527f7c49517d6d866b602defd743ca0bdbandrew@webrtc.org                state = END_LINE;
221856edd527f7c49517d6d866b602defd743ca0bdbandrew@webrtc.org            break;
222b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org        case BEGIN_QUOTE:
223856edd527f7c49517d6d866b602defd743ca0bdbandrew@webrtc.org            if (c == '"')
224b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org            {
225b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org                state = STR_VALUE;
226b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org                base = 0;
227b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org            }
228b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org            else if (c == '0')
229b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org                state = BEGIN_HEX;
230b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org            else if (isDigit(c, 10))
231b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org            {
232b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org                state = NUM_VALUE;
233b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org                base = 10;
234b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org                numValue = getDigitValue(c, base);
235b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org                i = 0;
236b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org            }
237b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org            else if (c == '{')
238b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org            {
239b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org                state = NUM_VALUE;
240b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org                base = 16;
241b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org                i = 0;
242b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org                Set(IsStringValue);
243b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org            }
244b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org            else
245b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org                state = END_LINE;
246b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org            break;
247b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org        case BEGIN_HEX:
248b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org            if (c == 'x' || c == 'X')
249b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org            {
250b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org                state = NUM_VALUE;
251b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org                base = 16;
252b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org                numValue = 0;
253b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org                i = 0;
254b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org                break;
255b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org            }
256b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org            else if (isDigit(c, 10))
257b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org            {
258b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org                state = NUM_VALUE;
259b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org                base = 10;
260b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org                numValue = getDigitValue(c, base);
261b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org                break;
262b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org            }
263b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org            else if (c != '\n' && c != '\r')
264b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org            {
265b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org                state = END_LINE;
266b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org                break;
267b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org            }
268b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org            // fal through to numValue to handle numValue
269b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
270b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org        case NUM_VALUE:
271b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org            if (isDigit(c, base))
272b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org            {
273b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org                numValue *= base;
274b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org                numValue += getDigitValue(c, base);
275b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org                ++i;
276856edd527f7c49517d6d866b602defd743ca0bdbandrew@webrtc.org            }
277856edd527f7c49517d6d866b602defd743ca0bdbandrew@webrtc.org            else if (base == 16 && (c == ':' || c == '-' || c == ' ' || c == '}'))
278856edd527f7c49517d6d866b602defd743ca0bdbandrew@webrtc.org            {
279b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org                if (i > 0)
280b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org                {
281b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org                    int n = (i+1) / 2;
282b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org                    while (n-- > 0)
283b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org                    {
284b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org                        unsigned char c = (numValue >> (n * 8))  & 0xFF;
285b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org                        strValue.push_back(c);
286b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org                    }
287b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org                }
288b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org                Set(IsStringValue);
289b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org                numValue = 0;
290b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org                i = 0;
291b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org            }
292b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org            else
293b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org            {
294b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org                if (c == '\n' || c == '\r')
295b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org                    state = BEGIN_LINE;
296b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org                else
297b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org                    state = END_LINE;
298b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org                if (Is(IsStringValue) && base == 16 && i > 0)
299b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org                {
300b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org                    int n = (i+1) / 2;
301b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org                    while (n-- > 0)
302b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org                        strValue.push_back(((numValue >> (n * 8))  & 0xFF));
303b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org                }
304b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org                if (strValue.length() > 0)
305b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org                    pParam = new CNfcParam(token.c_str(), strValue);
306b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org                else
307b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org                    pParam = new CNfcParam(token.c_str(), numValue);
308b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org                add(pParam);
309b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org                strValue.erase();
310b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org                numValue = 0;
311b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org            }
312b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org            break;
313b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org        case STR_VALUE:
314b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org            if (c == '"')
315b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org            {
316b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org                strValue.push_back('\0');
317b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org                state = END_LINE;
318b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org                pParam = new CNfcParam(token.c_str(), strValue);
319b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org                add(pParam);
320b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org            }
321b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org            else if (isPrintable(c))
322b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org                strValue.push_back(c);
3232a5dbce193b4ee594f0bb66c4f1a2bb24f31e621stefan@webrtc.org            break;
3242a5dbce193b4ee594f0bb66c4f1a2bb24f31e621stefan@webrtc.org        case END_LINE:
3252a5dbce193b4ee594f0bb66c4f1a2bb24f31e621stefan@webrtc.org            if (c == '\n' || c == '\r')
3262a5dbce193b4ee594f0bb66c4f1a2bb24f31e621stefan@webrtc.org                state = BEGIN_LINE;
3272a5dbce193b4ee594f0bb66c4f1a2bb24f31e621stefan@webrtc.org            break;
3282a5dbce193b4ee594f0bb66c4f1a2bb24f31e621stefan@webrtc.org        default:
3292a5dbce193b4ee594f0bb66c4f1a2bb24f31e621stefan@webrtc.org            break;
3302a5dbce193b4ee594f0bb66c4f1a2bb24f31e621stefan@webrtc.org        }
3312a5dbce193b4ee594f0bb66c4f1a2bb24f31e621stefan@webrtc.org    }
3322a5dbce193b4ee594f0bb66c4f1a2bb24f31e621stefan@webrtc.org
333b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    fclose(fd);
334b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
335b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    moveFromList();
336b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    return size() > 0;
337b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org}
338b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
339b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org/*******************************************************************************
340b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org**
341b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org** Function:    CNfcConfig::CNfcConfig()
342b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org**
343b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org** Description: class constructor
344b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org**
345b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org** Returns:     none
346b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org**
347b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org*******************************************************************************/
348b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgCNfcConfig::CNfcConfig() :
349b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    mValidFile(true)
350b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org{
351b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org}
352b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
353b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org/*******************************************************************************
354b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org**
355b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org** Function:    CNfcConfig::~CNfcConfig()
356b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org**
357b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org** Description: class destructor
358b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org**
359b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org** Returns:     none
360b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org**
361b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org*******************************************************************************/
362b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgCNfcConfig::~CNfcConfig()
363856edd527f7c49517d6d866b602defd743ca0bdbandrew@webrtc.org{
364b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org}
365b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
366b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org/*******************************************************************************
367b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org**
368b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org** Function:    CNfcConfig::GetInstance()
369b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org**
370b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org** Description: get class singleton object
371b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org**
372b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org** Returns:     none
373b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org**
374b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org*******************************************************************************/
375b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgCNfcConfig& CNfcConfig::GetInstance()
376b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org{
377b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    static CNfcConfig theInstance;
378b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
379b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    if (theInstance.size() == 0 && theInstance.mValidFile)
380b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    {
381b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org        string strPath;
382b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org        strPath.assign(transport_config_path);
383b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org        strPath += config_name;
384b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org        theInstance.readConfig(strPath.c_str(), true);
385b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    }
386b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
387b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    return theInstance;
388b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org}
389b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
390b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org/*******************************************************************************
391b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org**
392b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org** Function:    CNfcConfig::getValue()
393b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org**
394b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org** Description: get a string value of a setting
395b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org**
396b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org** Returns:     true if setting exists
397856edd527f7c49517d6d866b602defd743ca0bdbandrew@webrtc.org**              false if setting does not exist
398b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org**
399b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org*******************************************************************************/
400b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgbool CNfcConfig::getValue(const char* name, char* pValue, size_t& len) const
401b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org{
402b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    const CNfcParam* pParam = find(name);
403b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    if (pParam == NULL)
404b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org        return false;
405b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
406b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    if (pParam->str_len() > 0)
407b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    {
408b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org        memset(pValue, 0, len);
409b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org        if (len > pParam->str_len())
410b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org            len  = pParam->str_len();
411b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org        memcpy(pValue, pParam->str_value(), len);
412b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org        return true;
413b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    }
414b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    return false;
415b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org}
416b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
417b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org/*******************************************************************************
418b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org**
419b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org** Function:    CNfcConfig::getValue()
420b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org**
421b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org** Description: get a long numerical value of a setting
422b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org**
423b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org** Returns:     true if setting exists
424b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org**              false if setting does not exist
425b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org**
426b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org*******************************************************************************/
427b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgbool CNfcConfig::getValue(const char* name, unsigned long& rValue) const
428b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org{
429b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    const CNfcParam* pParam = find(name);
430b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    if (pParam == NULL)
431b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org        return false;
432b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
433b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    if (pParam->str_len() == 0)
434b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    {
435b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org        rValue = static_cast<unsigned long>(pParam->numValue());
436b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org        return true;
437b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    }
438b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    return false;
439b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org}
440b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
441b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org/*******************************************************************************
442b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org**
443b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org** Function:    CNfcConfig::getValue()
444b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org**
445b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org** Description: get a short numerical value of a setting
446b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org**
447b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org** Returns:     true if setting exists
448b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org**              false if setting does not exist
449b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org**
450b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org*******************************************************************************/
451b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgbool CNfcConfig::getValue(const char* name, unsigned short& rValue) const
452b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org{
453b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    const CNfcParam* pParam = find(name);
454b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    if (pParam == NULL)
455b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org        return false;
456b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
457b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    if (pParam->str_len() == 0)
458b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    {
459b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org        rValue = static_cast<unsigned short>(pParam->numValue());
460b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org        return true;
461b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    }
462b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    return false;
463b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org}
464b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
465b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org/*******************************************************************************
466b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org**
467b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org** Function:    CNfcConfig::find()
468b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org**
469b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org** Description: search if a setting exist in the setting array
470b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org**
471b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org** Returns:     pointer to the setting object
472b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org**
473b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org*******************************************************************************/
474b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgconst CNfcParam* CNfcConfig::find(const char* p_name) const
475b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org{
476b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    if (size() == 0)
477b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org        return NULL;
478b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
479b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    for (const_iterator it = begin(), itEnd = end(); it != itEnd; ++it)
480b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    {
481b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org        if (**it < p_name)
482b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org            continue;
483b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org        else if (**it == p_name)
484b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org        {
485b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org            if((*it)->str_len() > 0)
486b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org                ALOGD("%s found %s=%s\n", __func__, p_name, (*it)->str_value());
487b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org            else
488b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org                ALOGD("%s found %s=(0x%lX)\n", __func__, p_name, (*it)->numValue());
489b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org            return *it;
490b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org        }
491b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org        else
492b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org            break;
493b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    }
494b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    return NULL;
495b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org}
496b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
497b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org/*******************************************************************************
498b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org**
499b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org** Function:    CNfcConfig::clean()
500b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org**
501b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org** Description: reset the setting array
502b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org**
503b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org** Returns:     none
504b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org**
505b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org*******************************************************************************/
506b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgvoid CNfcConfig::clean()
507b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org{
508b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    if (size() == 0)
509b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org        return;
510b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
511b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    for (iterator it = begin(), itEnd = end(); it != itEnd; ++it)
512b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org        delete *it;
513b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    clear();
514b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org}
515b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
516b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org/*******************************************************************************
517b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org**
518b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org** Function:    CNfcConfig::Add()
519b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org**
520b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org** Description: add a setting object to the list
521b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org**
522b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org** Returns:     none
523b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org**
524b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org*******************************************************************************/
525b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgvoid CNfcConfig::add(const CNfcParam* pParam)
526b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org{
527b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    if (m_list.size() == 0)
528b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    {
529b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org        m_list.push_back(pParam);
530b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org        return;
531b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    }
532b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    for (list<const CNfcParam*>::iterator it = m_list.begin(), itEnd = m_list.end(); it != itEnd; ++it)
533b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    {
534b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org        if (**it < pParam->c_str())
535b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org            continue;
536b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org        m_list.insert(it, pParam);
537b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org        return;
538b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    }
539b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    m_list.push_back(pParam);
540b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org}
541b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
542b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org/*******************************************************************************
543b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org**
544b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org** Function:    CNfcConfig::moveFromList()
545b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org**
546b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org** Description: move the setting object from list to array
547b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org**
548b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org** Returns:     none
549b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org**
550b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org*******************************************************************************/
551b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgvoid CNfcConfig::moveFromList()
552b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org{
553b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    if (m_list.size() == 0)
554b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org        return;
555b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
556b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    for (list<const CNfcParam*>::iterator it = m_list.begin(), itEnd = m_list.end(); it != itEnd; ++it)
557b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org        push_back(*it);
558b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    m_list.clear();
559b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org}
560b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
561b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org/*******************************************************************************
562b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org**
563b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org** Function:    CNfcConfig::moveToList()
564b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org**
565b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org** Description: move the setting object from array to list
566b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org**
567b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org** Returns:     none
568b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org**
569b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org*******************************************************************************/
570b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgvoid CNfcConfig::moveToList()
571b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org{
572b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    if (m_list.size() != 0)
573b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org        m_list.clear();
574b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
575b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    for (iterator it = begin(), itEnd = end(); it != itEnd; ++it)
576b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org        m_list.push_back(*it);
577b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    clear();
578b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org}
579b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
580b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org/*******************************************************************************
581b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org**
582b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org** Function:    CNfcParam::CNfcParam()
583b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org**
584b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org** Description: class constructor
585b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org**
586b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org** Returns:     none
587b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org**
588b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org*******************************************************************************/
589b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgCNfcParam::CNfcParam() :
590b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    m_numValue(0)
591b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org{
592b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org}
593b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
594b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org/*******************************************************************************
595b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org**
596b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org** Function:    CNfcParam::~CNfcParam()
597b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org**
598b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org** Description: class destructor
599b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org**
600b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org** Returns:     none
601b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org**
602b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org*******************************************************************************/
603b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgCNfcParam::~CNfcParam()
604b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org{
605b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org}
606b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
607b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org/*******************************************************************************
608b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org**
609b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org** Function:    CNfcParam::CNfcParam()
610b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org**
611b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org** Description: class copy constructor
612b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org**
613b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org** Returns:     none
614b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org**
615b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org*******************************************************************************/
616b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgCNfcParam::CNfcParam(const char* name,  const string& value) :
617b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    string(name),
618b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    m_str_value(value),
619b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    m_numValue(0)
620b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org{
621b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org}
622b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
623b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org/*******************************************************************************
624b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org**
625b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org** Function:    CNfcParam::CNfcParam()
626b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org**
627b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org** Description: class copy constructor
628b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org**
629b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org** Returns:     none
630b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org**
631b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org*******************************************************************************/
632b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgCNfcParam::CNfcParam(const char* name,  unsigned long value) :
633b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    string(name),
634b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    m_numValue(value)
635b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org{
636b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org}
637b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
638b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org/*******************************************************************************
639b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org**
640b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org** Function:    GetStrValue
641b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org**
642b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org** Description: API function for getting a string value of a setting
643b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org**
644b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org** Returns:     none
645b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org**
646b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org*******************************************************************************/
647b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgextern "C" int GetStrValue(const char* name, char* pValue, unsigned long l)
648b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org{
649b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    size_t len = l;
650b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    CNfcConfig& rConfig = CNfcConfig::GetInstance();
651b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
652b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    bool b = rConfig.getValue(name, pValue, len);
653b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    return b ? len : 0;
654b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org}
655b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
656b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org/*******************************************************************************
657b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org**
658b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org** Function:    GetNumValue
659b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org**
660b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org** Description: API function for getting a numerical value of a setting
661b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org**
662b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org** Returns:     none
663b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org**
664b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org*******************************************************************************/
665b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgextern "C" int GetNumValue(const char* name, void* pValue, unsigned long len)
666b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org{
667b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    if (!pValue)
668b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org        return false;
669b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
670b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    CNfcConfig& rConfig = CNfcConfig::GetInstance();
671b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    const CNfcParam* pParam = rConfig.find(name);
672b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
673b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    if (pParam == NULL)
674b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org        return false;
675b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    unsigned long v = pParam->numValue();
676b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    if (v == 0 && pParam->str_len() > 0 && pParam->str_len() < 4)
677b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    {
678b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org        const unsigned char* p = (const unsigned char*)pParam->str_value();
679b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org        for (size_t i = 0 ; i < pParam->str_len(); ++i)
680b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org        {
681b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org            v *= 256;
682b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org            v += *p++;
683b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org        }
684b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    }
685b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    switch (len)
686b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    {
687b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    case sizeof(unsigned long):
688b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org        *(static_cast<unsigned long*>(pValue)) = (unsigned long)v;
689b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org        break;
690b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    case sizeof(unsigned short):
691b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org        *(static_cast<unsigned short*>(pValue)) = (unsigned short)v;
692b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org        break;
693b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    case sizeof(unsigned char):
694b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org        *(static_cast<unsigned char*> (pValue)) = (unsigned char)v;
695b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org        break;
696b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    default:
697b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org        return false;
698b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    }
699b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    return true;
700b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org}
701b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
702b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org/*******************************************************************************
703b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org**
704b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org** Function:    resetConfig
705b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org**
706b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org** Description: reset settings array
707b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org**
708b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org** Returns:     none
709b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org**
710b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org*******************************************************************************/
711b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgextern void resetConfig()
712b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org{
713b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    CNfcConfig& rConfig = CNfcConfig::GetInstance();
714b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
715b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    rConfig.clean();
716b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org}
717b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
718b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org/*******************************************************************************
719b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org**
720b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org** Function:    readOptionalConfig()
721b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org**
722b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org** Description: read Config settings from an optional conf file
723b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org**
724b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org** Returns:     none
725b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org**
726b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org*******************************************************************************/
727b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgvoid readOptionalConfig(const char* extra)
728b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org{
729b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    string strPath;
730b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    strPath.assign(transport_config_path);
731b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    strPath += extra_config_base;
732b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    strPath += extra;
733b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    strPath += extra_config_ext;
734b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    CNfcConfig::GetInstance().readConfig(strPath.c_str(), false);
735b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org}
736b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
737b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org