Annotation of embedaddon/strongswan/src/libstrongswan/settings/settings.h, revision 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>