summaryrefslogtreecommitdiff
path: root/minion/src/http/request.hpp
blob: 8524dc677fbe40f64a5cda4eb6588f420e480ba4 (plain)
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
#pragma once

#include <stddef.h>

enum HTTPRequestMethod
{
	GET,
	POST,
	PUT,
	HEAD,
	DELETE,
	CONNECT,
	OPTIONS,
	TRACE,
	PATCH
};

constexpr const char *http_request_method_strs[] = { "GET",		"POST",	  "PUT",
													 "HEAD",	"DELETE", "CONNECT",
													 "OPTIONS", "TRACE",  "PATCH" };

auto str_to_http_request_method(const char *http_request_method_str) -> HTTPRequestMethod;

class HTTPRequest
{
public:
	explicit HTTPRequest(
		int connection_id,
		HTTPRequestMethod method,
		char *http_version,
		char *path,
		int data_length,
		char *data
	) noexcept;

	HTTPRequest(const HTTPRequest &other) noexcept = delete;

	HTTPRequest(HTTPRequest &&other) noexcept;

	~HTTPRequest() noexcept;

	auto connection_id() const noexcept -> int;

	auto method() const noexcept -> HTTPRequestMethod;

	auto http_version() const noexcept -> const char *;

	auto path() const noexcept -> const char *;

	auto data_length() const noexcept -> int;

	auto data() const noexcept -> const char *;

	auto operator=(const HTTPRequest &other) noexcept -> HTTPRequest & = delete;

	auto operator=(HTTPRequest &&other) noexcept -> HTTPRequest &;

	static HTTPRequest create_invalid() noexcept;

private:
	const int _connection_id;
	const HTTPRequestMethod _method;
	char *_http_version;
	char *_path;
	const int _data_length;
	char *_data;

	HTTPRequest() noexcept;
};