2018-02-04 20:27:33 +00:00
|
|
|
/* See LICENSE file for copyright and license details. */
|
|
|
|
#ifndef HTTP_H
|
|
|
|
#define HTTP_H
|
|
|
|
|
|
|
|
#include <limits.h>
|
|
|
|
|
|
|
|
#define HEADER_MAX 4096
|
|
|
|
#define FIELD_MAX 200
|
|
|
|
|
|
|
|
enum req_field {
|
|
|
|
REQ_HOST,
|
|
|
|
REQ_RANGE,
|
2020-08-05 13:46:03 +00:00
|
|
|
REQ_IF_MODIFIED_SINCE,
|
2018-02-04 20:27:33 +00:00
|
|
|
NUM_REQ_FIELDS,
|
|
|
|
};
|
|
|
|
|
|
|
|
extern const char *req_field_str[];
|
|
|
|
|
|
|
|
enum req_method {
|
|
|
|
M_GET,
|
|
|
|
M_HEAD,
|
|
|
|
NUM_REQ_METHODS,
|
|
|
|
};
|
|
|
|
|
|
|
|
extern const char *req_method_str[];
|
|
|
|
|
|
|
|
struct request {
|
|
|
|
enum req_method method;
|
|
|
|
char target[PATH_MAX];
|
|
|
|
char field[NUM_REQ_FIELDS][FIELD_MAX];
|
|
|
|
};
|
|
|
|
|
|
|
|
enum status {
|
|
|
|
S_OK = 200,
|
|
|
|
S_PARTIAL_CONTENT = 206,
|
|
|
|
S_MOVED_PERMANENTLY = 301,
|
|
|
|
S_NOT_MODIFIED = 304,
|
|
|
|
S_BAD_REQUEST = 400,
|
|
|
|
S_FORBIDDEN = 403,
|
|
|
|
S_NOT_FOUND = 404,
|
|
|
|
S_METHOD_NOT_ALLOWED = 405,
|
|
|
|
S_REQUEST_TIMEOUT = 408,
|
|
|
|
S_RANGE_NOT_SATISFIABLE = 416,
|
|
|
|
S_REQUEST_TOO_LARGE = 431,
|
|
|
|
S_INTERNAL_SERVER_ERROR = 500,
|
|
|
|
S_VERSION_NOT_SUPPORTED = 505,
|
|
|
|
};
|
|
|
|
|
|
|
|
extern const char *status_str[];
|
|
|
|
|
2020-08-05 11:41:44 +00:00
|
|
|
enum res_field {
|
|
|
|
RES_ACCEPT_RANGES,
|
|
|
|
RES_ALLOW,
|
|
|
|
RES_LOCATION,
|
|
|
|
RES_LAST_MODIFIED,
|
|
|
|
RES_CONTENT_LENGTH,
|
|
|
|
RES_CONTENT_RANGE,
|
|
|
|
RES_CONTENT_TYPE,
|
|
|
|
NUM_RES_FIELDS,
|
|
|
|
};
|
|
|
|
|
|
|
|
extern const char *res_field_str[];
|
|
|
|
|
|
|
|
struct response {
|
|
|
|
enum status status;
|
|
|
|
char field[NUM_RES_FIELDS][FIELD_MAX];
|
|
|
|
};
|
|
|
|
|
|
|
|
enum status http_send_header(int, const struct response *);
|
2018-02-04 20:27:33 +00:00
|
|
|
enum status http_send_status(int, enum status);
|
|
|
|
int http_get_request(int, struct request *);
|
2020-08-05 16:28:21 +00:00
|
|
|
enum status http_send_response(int, const struct request *);
|
2018-02-04 20:27:33 +00:00
|
|
|
|
|
|
|
#endif /* HTTP_H */
|