summaryrefslogtreecommitdiff
path: root/minion/src/http/request.hpp
blob: fc9547335f3fd0f21ee90e1650c8a11c690ae784 (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
70
71
#pragma once

#include "network_connection.hpp"

#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(
		NetworkConnection connection,
		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() noexcept -> NetworkConnection &;

	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 auto create_invalid() noexcept -> HTTPRequest;

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

	HTTPRequest() noexcept;
};