LeftHookRoll
An HTTP/1.0 compliant web server, as specified by RFC1945
Loading...
Searching...
No Matches
main.cpp
Go to the documentation of this file.
1/**
2 * @file main.cpp - Entry point for LeftHookRoll web server.
3 * @brief validates args, spins up parser ServerManager, and enters main event loop.
4 *
5 */
6#include <iostream>
7#include <cstdlib>
8#include <csignal>
9
10#include "../includes/ServerManager.hpp"
11#include "../includes/FatalExceptions.hpp"
12#include "../includes/ConfigParser.hpp"
13
14//turn in checklist:
15// write README
16//comment .h and check for errors (to avoid forbidden functions)
17//eval sheet test cases
18volatile sig_atomic_t g_running = 1;
19volatile sig_atomic_t g_sigpipe = 0;
20
21static void signalHandler(int sig)
22{
23 (void)sig;
24 g_running = 0;
25}
26
27static void signalPipeHandler(int sig) {
28 g_sigpipe = sig;
29}
30
31int main(int argc, char** argv)
32{
33 signal(SIGINT, signalHandler);
34 signal(SIGPIPE, signalPipeHandler);
35 if (argc > 2)
36 {
37 std::cerr << "Usage: " << argv[0] << " [configuration file]" << std::endl;
38 return 1;
39 }
40 try
41 {
42 std::vector<ServerConf> parsedConfs;
43 if (argc == 1)
44 {
45 ServerConf defaultConf;
46 defaultConf.setDefaults();
47 parsedConfs.push_back(defaultConf);
48 }
49 else
50 {
51 ConfigParser parser(argv[1]);
52 parsedConfs = parser.parse();
53 }
54 ServerManager manager(parsedConfs);
55 manager.run();
56 }
57 catch (const FatalException& e)
58 {
59 std::cerr << "Fatal: " << e.what() << std::endl;
60 return 1;
61 }
62 catch (const std::exception& e)
63 {
64 std::cerr << "Unexpected fatal error: " << e.what() << std::endl;
65 return 1;
66 }
67 return 0;
68}
std::vector< ServerConf > parse()
Parses the config file and returns one ServerConf per server block.
virtual const char * what() const
void setDefaults()
Set the Defaults config directives.
void run()
Enters the main epoll() event loop. Blocks until g_running becomes false.
int main(int argc, char **argv)
Definition main.cpp:31
volatile sig_atomic_t g_sigpipe
Definition main.cpp:19
volatile sig_atomic_t g_running
Definition main.cpp:18
static void signalHandler(int sig)
Definition main.cpp:21
static void signalPipeHandler(int sig)
Definition main.cpp:27