+ Client get return reference + wip binary flags for http_method + moved config parser files
106 lines
3.0 KiB
C++
106 lines
3.0 KiB
C++
/* ************************************************************************** */
|
|
/* */
|
|
/* ::: :::::::: */
|
|
/* ConfigParser.hpp :+: :+: :+: */
|
|
/* +:+ +:+ +:+ */
|
|
/* By: lperrey <lperrey@student.42.fr> +#+ +:+ +#+ */
|
|
/* +#+#+#+#+#+ +#+ */
|
|
/* Created: 2022/07/11 23:01:41 by me #+# #+# */
|
|
/* Updated: 2022/08/02 14:05:30 by lperrey ### ########.fr */
|
|
/* */
|
|
/* ************************************************************************** */
|
|
|
|
#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> // atoi (athough it's already cover by <string>)
|
|
# include <iostream> // cout, cin
|
|
# include <fstream> // ifstream
|
|
//# include <unistd.h> // access()
|
|
# include <dirent.h> // opendir()
|
|
|
|
|
|
class ConfigParser {
|
|
|
|
public:
|
|
|
|
// canonical
|
|
|
|
ConfigParser(const char* path); // a string?
|
|
~ConfigParser();
|
|
|
|
// ideally i wouldn't have one cuz it makes no sense, when would i use it?
|
|
// ConfigParser & operator=(const ConfigParser& rhs);
|
|
|
|
// void parse(); // return void cuz throw exceptions.
|
|
std::vector<ServerConfig> * parse(); // const?
|
|
// std::vector<ServerConfig> parse(); // const?
|
|
|
|
// other parses?
|
|
|
|
// i thought if it were an instance of this class you could call
|
|
// private member functions from anywhere...
|
|
void _print_content() const;
|
|
|
|
private:
|
|
std::string _content;
|
|
|
|
// explicit?
|
|
// what exaclty does explicit do again?
|
|
ConfigParser(); // might need a path as arg?
|
|
// 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?
|
|
|
|
|
|
// why static? it's an enum...
|
|
static http_method _str_to_method_type(std::string str);
|
|
|
|
|
|
|
|
// some sort of post processing...
|
|
|
|
void _post_processing(std::vector<ServerConfig> *servers);
|
|
|
|
|
|
|
|
};
|
|
|
|
|
|
// def needs work line a better name an do i even need this?
|
|
// should it be in Utils instead?
|
|
class MyException : public std::invalid_argument
|
|
{
|
|
MyException(const std::string str)
|
|
: std::invalid_argument(str) {}
|
|
};
|
|
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|