http.h - quark - quark web server
(HTM) git clone git://git.suckless.org/quark
(DIR) Log
(DIR) Files
(DIR) Refs
(DIR) LICENSE
---
http.h (2072B)
---
1 /* See LICENSE file for copyright and license details. */
2 #ifndef HTTP_H
3 #define HTTP_H
4
5 #include <limits.h>
6 #include <sys/socket.h>
7
8 #include "config.h"
9 #include "server.h"
10 #include "util.h"
11
12 enum req_field {
13 REQ_HOST,
14 REQ_RANGE,
15 REQ_IF_MODIFIED_SINCE,
16 NUM_REQ_FIELDS,
17 };
18
19 extern const char *req_field_str[];
20
21 enum req_method {
22 M_GET,
23 M_HEAD,
24 NUM_REQ_METHODS,
25 };
26
27 extern const char *req_method_str[];
28
29 struct request {
30 enum req_method method;
31 char path[PATH_MAX];
32 char query[FIELD_MAX];
33 char fragment[FIELD_MAX];
34 char field[NUM_REQ_FIELDS][FIELD_MAX];
35 };
36
37 enum status {
38 S_OK = 200,
39 S_PARTIAL_CONTENT = 206,
40 S_MOVED_PERMANENTLY = 301,
41 S_NOT_MODIFIED = 304,
42 S_BAD_REQUEST = 400,
43 S_FORBIDDEN = 403,
44 S_NOT_FOUND = 404,
45 S_METHOD_NOT_ALLOWED = 405,
46 S_REQUEST_TIMEOUT = 408,
47 S_RANGE_NOT_SATISFIABLE = 416,
48 S_REQUEST_TOO_LARGE = 431,
49 S_INTERNAL_SERVER_ERROR = 500,
50 S_VERSION_NOT_SUPPORTED = 505,
51 };
52
53 extern const char *status_str[];
54
55 enum res_field {
56 RES_ACCEPT_RANGES,
57 RES_ALLOW,
58 RES_LOCATION,
59 RES_LAST_MODIFIED,
60 RES_CONTENT_LENGTH,
61 RES_CONTENT_RANGE,
62 RES_CONTENT_TYPE,
63 NUM_RES_FIELDS,
64 };
65
66 extern const char *res_field_str[];
67
68 enum res_type {
69 RESTYPE_DIRLISTING,
70 RESTYPE_ERROR,
71 RESTYPE_FILE,
72 NUM_RES_TYPES,
73 };
74
75 struct response {
76 enum res_type type;
77 enum status status;
78 char field[NUM_RES_FIELDS][FIELD_MAX];
79 char path[PATH_MAX];
80 char internal_path[PATH_MAX];
81 struct vhost *vhost;
82 struct {
83 size_t lower;
84 size_t upper;
85 } file;
86 };
87
88 enum status http_prepare_header_buf(const struct response *, struct buffer *);
89 enum status http_send_buf(int, struct buffer *);
90 enum status http_recv_header(int, struct buffer *, int *);
91 enum status http_parse_header(const char *, struct request *);
92 void http_prepare_response(const struct request *, struct response *,
93 const struct server *);
94 void http_prepare_error_response(const struct request *,
95 struct response *, enum status);
96
97 #endif /* HTTP_H */