2024-08-31 07:48:24 +00:00
|
|
|
// ISC License
|
|
|
|
//
|
|
|
|
// Copyright (c) 2024 Stephen Seo
|
|
|
|
//
|
|
|
|
// Permission to use, copy, modify, and/or distribute this software for any
|
|
|
|
// purpose with or without fee is hereby granted, provided that the above
|
|
|
|
// copyright notice and this permission notice appear in all copies.
|
|
|
|
//
|
|
|
|
// THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
|
|
|
|
// REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
|
|
|
|
// AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
|
|
|
|
// INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
|
|
|
|
// LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
|
|
|
|
// OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
|
|
|
|
// PERFORMANCE OF THIS SOFTWARE.
|
|
|
|
|
|
|
|
#ifndef SEODISPARATE_COM_C_SIMPLE_HTTP_CONFIG_H_
|
|
|
|
#define SEODISPARATE_COM_C_SIMPLE_HTTP_CONFIG_H_
|
|
|
|
|
|
|
|
// Third party includes.
|
|
|
|
#include <SimpleArchiver/src/data_structures/linked_list.h>
|
|
|
|
#include <SimpleArchiver/src/data_structures/hash_map.h>
|
|
|
|
|
|
|
|
typedef struct C_SIMPLE_HTTP_ParsedConfig {
|
|
|
|
/// Each entry in this data structure is a hash map where its value for the
|
|
|
|
/// key "PATH" is the path it represents. The "key" value should match the
|
|
|
|
/// mentioned value for "PATH".
|
|
|
|
union {
|
|
|
|
SDArchiverHashMap *paths;
|
|
|
|
SDArchiverHashMap *hash_map;
|
|
|
|
};
|
|
|
|
} C_SIMPLE_HTTP_ParsedConfig;
|
|
|
|
|
|
|
|
typedef C_SIMPLE_HTTP_ParsedConfig C_SIMPLE_HTTP_HashMapWrapper;
|
|
|
|
|
|
|
|
/// Each line in the config should be a key-value pair separated by an equals
|
2024-08-31 07:55:09 +00:00
|
|
|
/// sign "=". All whitespace is ignored unless if the value is "quoted". A part
|
|
|
|
/// of a string can be "quoted" if it is surrounded by three single-quotes or
|
|
|
|
/// three double-quotes. The "separating_key" separates lines of config into
|
|
|
|
/// sections such that each key with the "separating_key" is the start of a new
|
|
|
|
/// section. All key-value pairs after a "separating_key" belongs to that
|
|
|
|
/// section. "required_names" is an optional list of c-strings that defines
|
|
|
|
/// required keys for each section. If it is not desired to use
|
|
|
|
/// "required_names", then pass NULL instead of a pointer.
|
2024-09-02 04:25:30 +00:00
|
|
|
///
|
|
|
|
/// The returned wrapped hash-map is structured as follows: Each key is a
|
|
|
|
/// c-string which corresponds to an existing value for a separating_key, and
|
|
|
|
/// each value is a C_SIMPLE_HTTP_ParsedConfig pointer containing the key-value
|
|
|
|
/// pairs from the config. For example, if the config is as follows:
|
|
|
|
///
|
|
|
|
/// PATH=/
|
|
|
|
/// SOME_KEY=SOME_VALUE
|
|
|
|
/// PATH=/inner
|
|
|
|
/// SOME_OTHER_KEY=SOME_OTHER_VALUE
|
|
|
|
///
|
|
|
|
/// then the wrapped hash-map has "/" and "/inner" as keys (length including the
|
|
|
|
/// zero-terminator of the c-string). The wrapped hash-map pointer in the
|
|
|
|
/// C_SIMPLE_HTTP_ParsedConfig pointer corresponding to key "/" has key "PATH"
|
|
|
|
/// to value "/" and has key "SOME_KEY" to value "SOME_VALUE". The wrapped
|
|
|
|
/// hash-map pointer corresponding to key "/inner" has key "PATH" to value
|
|
|
|
/// "/inner" and has key "SOME_OTHER_KEY" to value "SOME_OTHER_VALUE".
|
2024-08-31 07:48:24 +00:00
|
|
|
C_SIMPLE_HTTP_ParsedConfig c_simple_http_parse_config(
|
|
|
|
const char *config_filename,
|
|
|
|
const char *separating_key,
|
2024-09-04 06:26:20 +00:00
|
|
|
const SDArchiverLinkedList *required_names
|
2024-08-31 07:48:24 +00:00
|
|
|
);
|
|
|
|
|
|
|
|
void c_simple_http_clean_up_parsed_config(C_SIMPLE_HTTP_ParsedConfig *config);
|
|
|
|
|
|
|
|
#endif
|
|
|
|
|
2024-09-09 04:53:58 +00:00
|
|
|
// vim: et ts=2 sts=2 sw=2
|