56 lines
1.4 KiB
C++
56 lines
1.4 KiB
C++
|
|
#ifndef CONFIGPARSER_HPP
|
|
# define CONFIGPARSER_HPP
|
|
|
|
# include "ServerConfig.hpp"
|
|
# include "LocationConfig.hpp"
|
|
# include "utils.hpp"
|
|
|
|
# include <map>
|
|
# include <vector>
|
|
# include <exception> // exception, what
|
|
# include <stdexcept> // runtime_error, invalid_argument
|
|
# include <string> // string
|
|
# include <cstdlib> // strtol, stroul
|
|
# include <iostream> // cout, cin
|
|
# include <fstream> // ifstream
|
|
# include <algorithm> // sort() in Post
|
|
|
|
class ConfigParser {
|
|
|
|
public:
|
|
|
|
ConfigParser();
|
|
~ConfigParser();
|
|
ConfigParser(const std::string &config_file);
|
|
|
|
void read_config(const std::string &config_file);
|
|
|
|
std::vector<ServerConfig> *parse() const;
|
|
|
|
void print_content() const;
|
|
|
|
private:
|
|
std::string _content;
|
|
|
|
ServerConfig _parse_server(size_t *start) const;
|
|
LocationConfig _parse_location(size_t *start) const;
|
|
|
|
void _set_server_values(ServerConfig *server, const std::string &key, std::string value) const;
|
|
void _set_location_values(LocationConfig *location, const std::string &key, std::string value) const;
|
|
|
|
/* Extra */
|
|
std::string _pre_set_val_check(const std::string &key,
|
|
const std::string &value) const;
|
|
|
|
std::string _get_first_word(size_t *curr) const;
|
|
std::string _get_rest_of_line(size_t *curr) const;
|
|
|
|
/* Post Processing */
|
|
void _post_processing(std::vector<ServerConfig> *servers) const;
|
|
bool _find_root_path_location(std::vector<LocationConfig> locations) const;
|
|
|
|
};
|
|
|
|
#endif
|