-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathhttp_server.h
More file actions
80 lines (66 loc) · 2.38 KB
/
http_server.h
File metadata and controls
80 lines (66 loc) · 2.38 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
#pragma once
#include <unistd.h>
#include <sys/socket.h>
#include <arpa/inet.h>
#include <netinet/in.h>
#include <csignal>
#include <pthread.h>
#include <queue>
#include <string>
#include <cstring>
#include <sys/ioctl.h>
#include <iostream>
#include <fstream>
#include <chrono>
#include <ctime>
#include <sstream>
#include <map>
#include <tuple>
#include "const.h"
#define THREAD_POOL_SIZE 20
#define LISTEN_COUNT 5
extern int sockfd;
extern int sigint_flag;
struct client_t {
std::string ip;
int socket;
};
extern std::queue<client_t> q;
extern pthread_t thread_pool[THREAD_POOL_SIZE];
extern pthread_mutex_t content_mutex;
extern pthread_mutex_t mutex;
extern pthread_cond_t condvar;
extern std::map<std::string, std::map<std::string, int>> content_map;
const std::map<int, std::string> statuses{
std::pair<int, std::string>{200, "OK"},
std::pair<int, std::string>{403, "Forbidden"},
std::pair<int, std::string>{404, "Not Found"},
std::pair<int, std::string>{405, "Method Not Allowed"},
};
const std::map<std::string, std::string> content_types{
std::pair<std::string, std::string>{".html", "text/html"},
std::pair<std::string, std::string>{".css", "text/css"},
std::pair<std::string, std::string>{".js", "application/javascript"},
std::pair<std::string, std::string>{".jpg", "image/jpeg"},
std::pair<std::string, std::string>{".jpeg", "image/jpeg"},
std::pair<std::string, std::string>{".png", "image/png"},
std::pair<std::string, std::string>{".gif", "image/gif"},
};
void* thread_function(void* argv);
void handle_function(client_t client);
void sigint_handler(int signum);
std::map<std::string, std::string> get_headers(std::string header_text);
std::string get_start_response_line(
std::string protocol, int status_code, std::string status_string);
void save_statistics(void);
void write_statistics(std::string ip, std::string ext);
std::string response_format(
std::string protocol, int status_code, std::string status_string,
std::map<std::string, std::string> headers, std::string body);
std::tuple<std::string, std::string, std::string>
split_start_request_line(std::string line);
std::string get_content_type(std::string ext);
int check_host(std::map<std::string, std::string> headers);
std::string get_extension(std::string path);
std::string get_response(client_t client, std::string request);
std::string string_to_hex(const std::string& input);