request.h (1078B)
1 #ifndef REQUEST_H 2 #define REQUEST_H 3 4 #include "../utils/vec.h" 5 #include "../utils/hashmap.h" 6 7 enum http_method { 8 GET, 9 HEAD, 10 POST, 11 PUT, 12 DELETE, 13 CONNECT, 14 OPTIONS, 15 TRACE, 16 }; 17 const char* method_name(enum http_method m); 18 enum http_method method_enum(char* p); 19 20 #define MAX_PATH_LEN 128 21 #define MAX_HEADER_NAME 32 22 #define MAX_HEADER_VALUE 512 23 #define MAX_MIMETYPE_LEN 32 24 #define MAX_MIME_SUBTYPE_LEN 32 25 26 enum mime_disctype { 27 MIME_APPLICATION, 28 MIME_AUDIO, 29 MIME_EXAMPLE, 30 MIME_FONT, 31 MIME_IMAGE, 32 MIME_MODEL, 33 MIME_TEXT, 34 MIME_VIDEO, 35 }; 36 37 struct mime_type { 38 enum mime_disctype type; 39 char subtype[MAX_MIME_SUBTYPE_LEN]; 40 }; 41 42 struct req_mimetype { 43 float q; 44 char item[MAX_MIMETYPE_LEN]; 45 }; 46 47 vec_t hdr_parse_accept(char* val); 48 49 typedef struct request { 50 char* buf; 51 size_t bufsize; 52 enum http_method method; 53 char path[MAX_PATH_LEN]; 54 float ver; 55 hashmap_t headers; 56 } request_t; 57 58 request_t req_new(char* reqbuf, size_t bufsize); 59 int req_parse(request_t* req); 60 void req_free(request_t* req); 61 62 #endif