Files
42_INT_12_webserv/srcs/config/ConfigParser.hpp
lperrey a284e400c1 changed client_body_limit (now in KB)
+ multiples little adjusts
2022-08-15 02:14:27 +02:00

64 lines
1.7 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 <sys/stat.h> // stat(), replaces opendir() don't bother with ERRNO ?
# 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?
// i thought if it were an instance of this class you could call
// private member functions from anywhere... // QUESTION : Wut ?
void print_content() const;
private:
std::string _content;
// explicit?
// what exaclty does explicit do again?
// ConfigParser();
// should this be in private since it always needs a path?
ServerConfig _parse_server(size_t *start);
LocationConfig _parse_location(size_t *start);
void _set_server_values(ServerConfig *server, const std::string key, std::string value);
void _set_location_values(LocationConfig *location, const std::string key, std::string value);
std::string _pre_set_val_check(const std::string key, \
const std::string value);
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);
bool _find_root_path_location(std::vector<LocationConfig> locations); // const?
};
#endif