#ifndef HTTP_H #define HTTP_H struct span { int start; int length; }; struct header { struct span name; struct span value; }; struct request { int (* step)(struct request *); char * data; int length; int position; struct span method; struct span path; struct span version; struct header * headers; struct span body; }; enum status { STATUS_OK = 200, STATUS_BAD_REQUEST = 400, STATUS_METHOD_NOT_ALLOWED = 405, STATUS_REQUEST_TIMEOUT = 408, STATUS_INTERNAL_SERVER_ERROR = 500, STATUS_NOT_IMPLEMENTED = 501, STATUS_VERSION_NOT_SUPPORTED = 505, }; extern const char * status_str[]; struct request * new_request(void); void free_request(struct request *); int respond_only_status(int, enum status); int respond_with_body(int, enum status, const char *, int); int collect_request(int, char **); int parse_method(struct request *); int parse_path(struct request *); int parse_version(struct request *); #endif // HTTP_H