]> sjero.net Git - linphone/blob - coreapi/lpconfig.h
310baaff3e5a147150643092ad9b04e57b83a4e3
[linphone] / coreapi / lpconfig.h
1 /***************************************************************************
2  *            lpconfig.h
3  *
4  *  Thu Mar 10 15:02:49 2005
5  *  Copyright  2005  Simon Morlat
6  *  Email simon.morlat@linphone.org
7  ****************************************************************************/
8
9 /*
10  *  This program is free software; you can redistribute it and/or modify
11  *  it under the terms of the GNU General Public License as published by
12  *  the Free Software Foundation; either version 2 of the License, or
13  *  (at your option) any later version.
14  *
15  *  This program is distributed in the hope that it will be useful,
16  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
17  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
18  *  GNU Library General Public License for more details.
19  *
20  *  You should have received a copy of the GNU General Public License
21  *  along with this program; if not, write to the Free Software
22  *  Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
23  */
24  
25 #ifndef LPCONFIG_H
26 #define LPCONFIG_H
27
28 #include <ortp/port.h>
29
30 /**
31  * The LpConfig object is used to manipulate a configuration file.
32  * 
33  * @ingroup misc
34  * The format of the configuration file is a .ini like format:
35  * - sections are defined in []
36  * - each section contains a sequence of key=value pairs.
37  *
38  * Example:
39  * @code
40  * [sound]
41  * echocanceler=1
42  * playback_dev=ALSA: Default device
43  *
44  * [video]
45  * enabled=1
46  * @endcode
47 **/
48 typedef struct _LpConfig LpConfig;
49
50 #ifdef __cplusplus
51 extern "C" {
52 #endif
53
54
55 #define LP_CONFIG_DEFAULT_STRING(config, name, default) \
56         (config) ? (lp_config_get_string(config, "default_values", name, default)) : (default)
57
58 #define LP_CONFIG_DEFAULT_INT(config, name, default) \
59         (config) ? (lp_config_get_int(config, "default_values", name, default)) : (default)
60
61 #define LP_CONFIG_DEFAULT_INT64(config, name, default) \
62         (config) ? (lp_config_get_int64(config, "default_values", name, default)) : (default)
63
64 #define LP_CONFIG_DEFAULT_FLOAT(config, name, default) \
65         (config) ? (lp_config_get_float(config, "default_values", name, default)) : (default)
66
67
68 LpConfig * lp_config_new(const char *filename);
69 int lp_config_read_file(LpConfig *lpconfig, const char *filename);
70 /**
71  * Retrieves a configuration item as a string, given its section, key, and default value.
72  * 
73  * @ingroup misc
74  * The default value string is returned if the config item isn't found.
75 **/
76 const char *lp_config_get_string(const LpConfig *lpconfig, const char *section, const char *key, const char *default_string);
77 int lp_config_read_file(LpConfig *lpconfig, const char *filename);
78 /**
79  * Retrieves a configuration item as a range, given its section, key, and default min and max values.
80  *
81  * @ingroup misc
82  * @return TRUE if the value is successfully parsed as a range, FALSE otherwise.
83  * If FALSE is returned, min and max are filled respectively with default_min and default_max values.
84  */
85 bool_t lp_config_get_range(const LpConfig *lpconfig, const char *section, const char *key, int *min, int *max, int default_min, int default_max);
86 /**
87  * Retrieves a configuration item as an integer, given its section, key, and default value.
88  * 
89  * @ingroup misc
90  * The default integer value is returned if the config item isn't found.
91 **/
92 int lp_config_get_int(const LpConfig *lpconfig,const char *section, const char *key, int default_value);
93
94 /**
95  * Retrieves a configuration item as a 64 bit integer, given its section, key, and default value.
96  * 
97  * @ingroup misc
98  * The default integer value is returned if the config item isn't found.
99 **/
100 int64_t lp_config_get_int64(const LpConfig *lpconfig,const char *section, const char *key, int64_t default_value);
101
102
103 int lp_config_read_file(LpConfig *lpconfig, const char *filename);
104 /**
105  * Retrieves a configuration item as a float, given its section, key, and default value.
106  * 
107  * @ingroup misc
108  * The default float value is returned if the config item isn't found.
109 **/
110 float lp_config_get_float(const LpConfig *lpconfig,const char *section, const char *key, float default_value);
111 /**
112  * Sets a string config item 
113  *
114  * @ingroup misc
115 **/
116 void lp_config_set_string(LpConfig *lpconfig,const char *section, const char *key, const char *value);
117 /**
118  * Sets a range config item
119  *
120  * @ingroup misc
121  */
122 void lp_config_set_range(LpConfig *lpconfig, const char *section, const char *key, int min_value, int max_value);
123 /**
124  * Sets an integer config item
125  *
126  * @ingroup misc
127 **/
128 void lp_config_set_int(LpConfig *lpconfig,const char *section, const char *key, int value);
129
130 /**
131  * Sets an integer config item, but store it as hexadecimal
132  *
133  * @ingroup misc
134 **/
135 void lp_config_set_int_hex(LpConfig *lpconfig,const char *section, const char *key, int value);
136
137 /**
138  * Sets a 64 bits integer config item
139  *
140  * @ingroup misc
141 **/
142 void lp_config_set_int64(LpConfig *lpconfig,const char *section, const char *key, int64_t value);
143
144 /**
145  * Sets a float config item
146  *
147  * @ingroup misc
148 **/
149 void lp_config_set_float(LpConfig *lpconfig,const char *section, const char *key, float value); 
150 /**
151  * Writes the config file to disk.
152  * 
153  * @ingroup misc
154 **/
155 int lp_config_sync(LpConfig *lpconfig);
156 /**
157  * Returns 1 if a given section is present in the configuration.
158  *
159  * @ingroup misc
160 **/
161 int lp_config_has_section(const LpConfig *lpconfig, const char *section);
162 /**
163  * Removes every pair of key,value in a section and remove the section.
164  *
165  * @ingroup misc
166 **/
167 void lp_config_clean_section(LpConfig *lpconfig, const char *section);
168 /**
169  * Call a function for each section present in the configuration.
170  *
171  * @ingroup misc
172 **/
173 void lp_config_for_each_section(const LpConfig *lpconfig, void (*callback)(const char *section, void *ctx), void *ctx);
174 /**
175  * Call a function for each entry present in a section configuration.
176  *
177  * @ingroup misc
178 **/
179 void lp_config_for_each_entry(const LpConfig *lpconfig, const char *section, void (*callback)(const char *entry, void *ctx), void *ctx);
180
181 /*tells whether uncommited (with lp_config_sync()) modifications exist*/
182 int lp_config_needs_commit(const LpConfig *lpconfig);
183 void lp_config_destroy(LpConfig *cfg);
184         
185 #ifdef __cplusplus
186 }
187 #endif
188
189 #endif