Annotation of embedaddon/strongswan/src/libstrongswan/settings/settings.h, revision 1.1.1.1
1.1 misho 1: /*
2: * Copyright (C) 2010-2018 Tobias Brunner
3: * Copyright (C) 2008 Martin Willi
4: * HSR Hochschule fuer Technik Rapperswil
5: *
6: * This program is free software; you can redistribute it and/or modify it
7: * under the terms of the GNU General Public License as published by the
8: * Free Software Foundation; either version 2 of the License, or (at your
9: * option) any later version. See <http://www.fsf.org/copyleft/gpl.txt>.
10: *
11: * This program is distributed in the hope that it will be useful, but
12: * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
13: * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
14: * for more details.
15: */
16:
17: /**
18: * @defgroup settings settings
19: * @ingroup libstrongswan
20: *
21: * @defgroup settings_t settings
22: * @{ @ingroup settings
23: */
24:
25: #ifndef SETTINGS_H_
26: #define SETTINGS_H_
27:
28: typedef struct settings_t settings_t;
29:
30: #include "utils/utils.h"
31: #include "collections/enumerator.h"
32:
33: /**
34: * Convert a string value returned by a key/value enumerator to a boolean.
35: *
36: * @see settings_t.create_key_value_enumerator()
37: * @see settings_t.get_bool()
38: * @param value the string value
39: * @param def the default value, if value is NULL or invalid
40: */
41: bool settings_value_as_bool(char *value, bool def);
42:
43: /**
44: * Convert a string value returned by a key/value enumerator to an integer.
45: *
46: * @see settings_t.create_key_value_enumerator()
47: * @see settings_t.get_int()
48: * @param value the string value
49: * @param def the default value, if value is NULL or invalid
50: */
51: int settings_value_as_int(char *value, int def);
52:
53: /**
54: * Convert a string value returned by a key/value enumerator to an uint64_t.
55: *
56: * @see settings_t.create_key_value_enumerator()
57: * @param value the string value
58: * @param def the default value, if value is NULL or invalid
59: */
60: uint64_t settings_value_as_uint64(char *value, uint64_t def);
61:
62: /**
63: * Convert a string value returned by a key/value enumerator to a double.
64: *
65: * @see settings_t.create_key_value_enumerator()
66: * @see settings_t.get_double()
67: * @param value the string value
68: * @param def the default value, if value is NULL or invalid
69: */
70: double settings_value_as_double(char *value, double def);
71:
72: /**
73: * Convert a string value returned by a key/value enumerator to a time value.
74: *
75: * @see settings_t.create_key_value_enumerator()
76: * @see settings_t.get_time()
77: * @param value the string value
78: * @param def the default value, if value is NULL or invalid
79: */
80: uint32_t settings_value_as_time(char *value, uint32_t def);
81:
82: /**
83: * Generic configuration options read from a config file.
84: *
85: * The syntax is quite simple:
86: * @code
87: * settings := (section|keyvalue)*
88: * section := name { settings }
89: * keyvalue := key = value\n
90: * @endcode
91: * E.g.:
92: * @code
93: a = b
94: section-one {
95: somevalue = asdf
96: subsection {
97: othervalue = xxx
98: }
99: yetanother = zz
100: }
101: section-two {
102: }
103: @endcode
104: *
105: * The values are accessed using the get() functions using dotted keys, e.g.
106: * section-one.subsection.othervalue
107: *
108: * Currently only a limited set of printf format specifiers are supported
109: * (namely %s, %d and %N, see implementation for details).
110: *
111: * \section includes Including other files
112: * Other files can be included, using the include statement e.g.
113: * @code
114: * include /somepath/subconfig.conf
115: * @endcode
116: * Shell patterns like *.conf are possible.
117: *
118: * If the path is relative, the directory of the file containing the include
119: * statement is used as base.
120: *
121: * Sections loaded from included files extend previously loaded sections,
122: * already existing values are replaced.
123: *
124: * All settings included from files are added relative to the section the
125: * include statement is in.
126: *
127: * The following files result in the same final config as above:
128: *
129: * @code
130: a = b
131: section-one {
132: somevalue = before include
133: include include.conf
134: }
135: include two.conf
136: @endcode
137: * include.conf
138: * @code
139: somevalue = asdf
140: subsection {
141: othervalue = yyy
142: }
143: yetanother = zz
144: @endcode
145: * two.conf
146: * @code
147: section-one {
148: subsection {
149: othervalue = xxx
150: }
151: }
152: section-two {
153: }
154: @endcode
155: */
156: struct settings_t {
157:
158: /**
159: * Get a settings value as a string.
160: *
161: * @param key key including sections, printf style format
162: * @param def value returned if key not found
163: * @param ... argument list for key
164: * @return value pointing to internal string
165: */
166: char* (*get_str)(settings_t *this, char *key, char *def, ...);
167:
168: /**
169: * Get a boolean yes|no, true|false value.
170: *
171: * @param key key including sections, printf style format
172: * @param def value returned if key not found
173: * @param ... argument list for key
174: * @return value of the key
175: */
176: bool (*get_bool)(settings_t *this, char *key, int def, ...);
177:
178: /**
179: * Get an integer value.
180: *
181: * @param key key including sections, printf style format
182: * @param def value returned if key not found
183: * @param ... argument list for key
184: * @return value of the key
185: */
186: int (*get_int)(settings_t *this, char *key, int def, ...);
187:
188: /**
189: * Get an double value.
190: *
191: * @param key key including sections, printf style format
192: * @param def value returned if key not found
193: * @param ... argument list for key
194: * @return value of the key
195: */
196: double (*get_double)(settings_t *this, char *key, double def, ...);
197:
198: /**
199: * Get a time value.
200: *
201: * @param key key including sections, printf style format
202: * @param def value returned if key not found
203: * @param ... argument list for key
204: * @return value of the key (in seconds)
205: */
206: uint32_t (*get_time)(settings_t *this, char *key, uint32_t def, ...);
207:
208: /**
209: * Set a string value.
210: *
211: * @param key key including sections, printf style format
212: * @param value value to set (gets cloned)
213: * @param ... argument list for key
214: */
215: void (*set_str)(settings_t *this, char *key, char *value, ...);
216:
217: /**
218: * Set a boolean value.
219: *
220: * @param key key including sections, printf style format
221: * @param value value to set
222: * @param ... argument list for key
223: */
224: void (*set_bool)(settings_t *this, char *key, int value, ...);
225:
226: /**
227: * Set an integer value.
228: *
229: * @param key key including sections, printf style format
230: * @param value value to set
231: * @param ... argument list for key
232: */
233: void (*set_int)(settings_t *this, char *key, int value, ...);
234:
235: /**
236: * Set an double value.
237: *
238: * @param key key including sections, printf style format
239: * @param value value to set
240: * @param ... argument list for key
241: */
242: void (*set_double)(settings_t *this, char *key, double value, ...);
243:
244: /**
245: * Set a time value.
246: *
247: * @param key key including sections, printf style format
248: * @param def value to set
249: * @param ... argument list for key
250: */
251: void (*set_time)(settings_t *this, char *key, uint32_t value, ...);
252:
253: /**
254: * Set a default for string value.
255: *
256: * @param key key including sections, printf style format
257: * @param def value to set if unconfigured
258: * @param ... argument list for key
259: * @return TRUE if a new default value for key has been set
260: */
261: bool (*set_default_str)(settings_t *this, char *key, char *value, ...);
262:
263: /**
264: * Create an enumerator over subsection names of a section.
265: *
266: * @param section section including parents, printf style format
267: * @param ... argument list for key
268: * @return enumerator over subsection names
269: */
270: enumerator_t* (*create_section_enumerator)(settings_t *this,
271: char *section, ...);
272:
273: /**
274: * Create an enumerator over key/value pairs in a section.
275: *
276: * @param section section name to list key/value pairs of, printf style
277: * @param ... argument list for section
278: * @return enumerator over (char *key, char *value)
279: */
280: enumerator_t* (*create_key_value_enumerator)(settings_t *this,
281: char *section, ...);
282:
283: /**
284: * Add a fallback for the given section.
285: *
286: * Example: When the fallback 'section-two' is configured for
287: * 'section-one.two' any failed lookup for a section or key in
288: * 'section-one.two' will result in a lookup for the same section/key
289: * in 'section-two'.
290: *
291: * @note Additional arguments will be applied to both section format
292: * strings so they must be compatible. And they are evaluated immediately,
293: * so arguments can't contain dots.
294: *
295: * @param section section for which a fallback is configured, printf style
296: * @param fallback fallback section, printf style
297: * @param ... argument list for section and fallback
298: */
299: void (*add_fallback)(settings_t *this, const char *section,
300: const char *fallback, ...);
301:
302: /**
303: * Load settings from the files matching the given pattern.
304: *
305: * If merge is TRUE, existing sections are extended, existing values
306: * replaced, by those found in the loaded files. If it is FALSE, existing
307: * sections are purged before reading the new config.
308: *
309: * @note If any of the files matching the pattern fails to load, no settings
310: * are added at all. So, it's all or nothing.
311: *
312: * @param pattern file pattern
313: * @param merge TRUE to merge config with existing values
314: * @return TRUE, if settings were loaded successfully
315: */
316: bool (*load_files)(settings_t *this, char *pattern, bool merge);
317:
318: /**
319: * Load settings from the files matching the given pattern.
320: *
321: * If merge is TRUE, existing sections are extended, existing values
322: * replaced, by those found in the loaded files. If it is FALSE, existing
323: * sections are purged before reading the new config.
324: *
325: * All settings are loaded relative to the given section. The section is
326: * created, if it does not yet exist.
327: *
328: * @note If any of the files matching the pattern fails to load, no settings
329: * are added at all. So, it's all or nothing.
330: *
331: * @param pattern file pattern
332: * @param merge TRUE to merge config with existing values
333: * @param section section name of parent section, printf style
334: * @param ... argument list for section
335: * @return TRUE, if settings were loaded successfully
336: */
337: bool (*load_files_section)(settings_t *this, char *pattern, bool merge,
338: char *section, ...);
339:
340: /**
341: * Load settings from the given string.
342: *
343: * If merge is TRUE, existing sections are extended, existing values
344: * replaced, by those found in the string. If it is FALSE, existing
345: * sections are purged before reading the new config.
346: *
347: * @note If the string contains _include_ statements they should be
348: * absolute paths.
349: *
350: * @note If any failures occur, no settings are added at all. So, it's all
351: * or nothing.
352: *
353: * @param settings string to parse
354: * @param merge TRUE to merge config with existing values
355: * @return TRUE, if settings were loaded successfully
356: */
357: bool (*load_string)(settings_t *this, char *settings, bool merge);
358:
359: /**
360: * Load settings from the given string.
361: *
362: * If merge is TRUE, existing sections are extended, existing values
363: * replaced, by those found in the string. If it is FALSE, existing
364: * sections are purged before reading the new config.
365: *
366: * All settings are loaded relative to the given section. The section is
367: * created, if it does not yet exist.
368: *
369: * @note If the string contains _include_ statements they should be
370: * absolute paths.
371: *
372: * @note If any failures occur, no settings are added at all. So, it's all
373: * or nothing.
374: *
375: * @param settings string to parse
376: * @param merge TRUE to merge config with existing values
377: * @param section section name of parent section, printf style
378: * @param ... argument list for section
379: * @return TRUE, if settings were loaded successfully
380: */
381: bool (*load_string_section)(settings_t *this, char *settings, bool merge,
382: char *section, ...);
383:
384: /**
385: * Destroy a settings instance.
386: */
387: void (*destroy)(settings_t *this);
388: };
389:
390: /**
391: * Load settings from a file.
392: *
393: * @note If parsing the file fails the object is still created.
394: *
395: * @param file optional file to read settings from
396: * @return settings object
397: */
398: settings_t *settings_create(char *file);
399:
400: /**
401: * Load settings from a string.
402: *
403: * @note If parsing the file fails the object is still created.
404: *
405: * @param settings string to read settings from
406: * @return settings object, or NULL
407: */
408: settings_t *settings_create_string(char *settings);
409:
410: /**
411: * Remove the given key/value.
412: *
413: * Compared to setting a key to NULL, which makes it appear to be unset (i.e.
414: * default values will apply) this removes the given key (if found) and
415: * references/fallbacks will apply when looking for that key. This is mainly
416: * usefuls for the unit tests.
417: *
418: * @param settings settings to remove key/value from
419: * @param key key including sections, printf style format
420: * @param ... argument list for key
421: */
422: void settings_remove_value(settings_t *settings, char *key, ...);
423:
424: #endif /** SETTINGS_H_ @}*/
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>