Annotation of embedaddon/strongswan/src/libstrongswan/settings/settings_types.h, revision 1.1

1.1     ! misho       1: /*
        !             2:  * Copyright (C) 2010-2018 Tobias Brunner
        !             3:  * HSR Hochschule fuer Technik Rapperswil
        !             4:  *
        !             5:  * This program is free software; you can redistribute it and/or modify it
        !             6:  * under the terms of the GNU General Public License as published by the
        !             7:  * Free Software Foundation; either version 2 of the License, or (at your
        !             8:  * option) any later version.  See <http://www.fsf.org/copyleft/gpl.txt>.
        !             9:  *
        !            10:  * This program is distributed in the hope that it will be useful, but
        !            11:  * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
        !            12:  * or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
        !            13:  * for more details.
        !            14:  */
        !            15: 
        !            16: /**
        !            17:  * Internal data types and functions shared between the parser and t.
        !            18:  *
        !            19:  * @defgroup settings_types settings_types
        !            20:  * @{ @ingroup settings
        !            21:  */
        !            22: 
        !            23: #ifndef SETTINGS_TYPES_H_
        !            24: #define SETTINGS_TYPES_H_
        !            25: 
        !            26: typedef struct kv_t kv_t;
        !            27: typedef struct section_ref_t section_ref_t;
        !            28: typedef struct section_t section_t;
        !            29: 
        !            30: #include "collections/array.h"
        !            31: 
        !            32: /**
        !            33:  * Key/value pair.
        !            34:  */
        !            35: struct kv_t {
        !            36: 
        !            37:        /**
        !            38:         * Key string, relative, not the full name.
        !            39:         */
        !            40:        char *key;
        !            41: 
        !            42:        /**
        !            43:         * Value as string.
        !            44:         */
        !            45:        char *value;
        !            46: };
        !            47: 
        !            48: /**
        !            49:  * Section reference.
        !            50:  */
        !            51: struct section_ref_t {
        !            52: 
        !            53:        /**
        !            54:         * Name of the referenced section.
        !            55:         */
        !            56:        char *name;
        !            57: 
        !            58:        /**
        !            59:         * TRUE for permanent references that were added programmatically via
        !            60:         * add_fallback() and are not removed during reloads/purges.
        !            61:         */
        !            62:        bool permanent;
        !            63: };
        !            64: 
        !            65: /**
        !            66:  * Section containing subsections and key value pairs.
        !            67:  */
        !            68: struct section_t {
        !            69: 
        !            70:        /**
        !            71:         * Name of the section.
        !            72:         */
        !            73:        char *name;
        !            74: 
        !            75:        /**
        !            76:         * Referenced sections, as section_ref_t.
        !            77:         */
        !            78:        array_t *references;
        !            79: 
        !            80:        /**
        !            81:         * Subsections, as section_t.
        !            82:         */
        !            83:        array_t *sections;
        !            84: 
        !            85:        /**
        !            86:         * Subsections in original order, as section_t (pointer to obj in sections).
        !            87:         */
        !            88:        array_t *sections_order;
        !            89: 
        !            90:        /**
        !            91:         * Key value pairs, as kv_t.
        !            92:         */
        !            93:        array_t *kv;
        !            94: 
        !            95:        /**
        !            96:         * Key value pairs in original order, as kv_t (pointer to obj in kv).
        !            97:         */
        !            98:        array_t *kv_order;
        !            99: };
        !           100: 
        !           101: /**
        !           102:  * Create a key/value pair.
        !           103:  *
        !           104:  * @param key          key (gets adopted)
        !           105:  * @param value                value (gets adopted)
        !           106:  * @return                     allocated key/value pair
        !           107:  */
        !           108: kv_t *settings_kv_create(char *key, char *value);
        !           109: 
        !           110: /**
        !           111:  * Destroy a key/value pair.
        !           112:  *
        !           113:  * @param this         key/value pair to destroy
        !           114:  * @param contents     optional array to store the value in
        !           115:  */
        !           116: void settings_kv_destroy(kv_t *this, array_t *contents);
        !           117: 
        !           118: /**
        !           119:  * Set the value of the given key/value pair.
        !           120:  *
        !           121:  * @param kv           key/value pair
        !           122:  * @param value                new value (gets adopted), may be NULL
        !           123:  * @param contents     optional array to store replaced values in
        !           124:  */
        !           125: void settings_kv_set(kv_t *kv, char *value, array_t *contents);
        !           126: 
        !           127: /**
        !           128:  * Add the given key/value pair to the given section.
        !           129:  *
        !           130:  * @param section      section to add pair to
        !           131:  * @param kv           key/value pair to add (gets adopted)
        !           132:  * @param contents     optional array to store replaced values in
        !           133:  */
        !           134: void settings_kv_add(section_t *section, kv_t *kv, array_t *contents);
        !           135: 
        !           136: /**
        !           137:  * Add a reference to another section.
        !           138:  *
        !           139:  * @param section      section to which to add the reference
        !           140:  * @param name         name of the referenced section (adopted)
        !           141:  * @param permanent    whether the reference is not removed during reloads
        !           142:  */
        !           143: void settings_reference_add(section_t *section, char *name, bool permanent);
        !           144: 
        !           145: /**
        !           146:  * Create a section with the given name.
        !           147:  *
        !           148:  * @param name         name (gets adopted)
        !           149:  * @return                     allocated section
        !           150:  */
        !           151: section_t *settings_section_create(char *name);
        !           152: 
        !           153: /**
        !           154:  * Destroy a section.
        !           155:  *
        !           156:  * @param this         section to destroy
        !           157:  * @param contents     optional array to store values of removed key/value pairs
        !           158:  */
        !           159: void settings_section_destroy(section_t *this, array_t *contents);
        !           160: 
        !           161: /**
        !           162:  * Add the given section to the given parent section.
        !           163:  *
        !           164:  * @param parent       section to add section to
        !           165:  * @param section      section to add (gets adopted)
        !           166:  * @param contents     optional array to store replaced values in
        !           167:  */
        !           168: void settings_section_add(section_t *parent, section_t *section,
        !           169:                                                  array_t *contents);
        !           170: 
        !           171: /**
        !           172:  * Extend the first section with the values and sub-sections of the second
        !           173:  * section, from where they are consequently removed.
        !           174:  *
        !           175:  * @param base         base section to extend
        !           176:  * @param extension    section whose data is extracted
        !           177:  * @param contents     optional array to store replaced values in
        !           178:  * @param purge                TRUE to remove settings and sections not found in the
        !           179:  *                                     extension (unless (sub-)sections have/are fallbacks)
        !           180:  */
        !           181: void settings_section_extend(section_t *base, section_t *extension,
        !           182:                                                         array_t *contents, bool purge);
        !           183: 
        !           184: /**
        !           185:  * Callback to find a section by name
        !           186:  */
        !           187: int settings_section_find(const void *a, const void *b);
        !           188: 
        !           189: /**
        !           190:  * Callback to sort sections by name
        !           191:  */
        !           192: int settings_section_sort(const void *a, const void *b, void *user);
        !           193: 
        !           194: /**
        !           195:  * Callback to find a key/value pair by key
        !           196:  */
        !           197: int settings_kv_find(const void *a, const void *b);
        !           198: 
        !           199: /**
        !           200:  * Callback to sort kv pairs by key
        !           201:  */
        !           202: int settings_kv_sort(const void *a, const void *b, void *user);
        !           203: 
        !           204: #endif /** SETTINGS_TYPES_H_ @}*/

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>