mmmmh
This commit is contained in:
parent
82aee127b0
commit
a92b119549
99 changed files with 6922 additions and 5723 deletions
83
http.h
Normal file
83
http.h
Normal file
|
|
@ -0,0 +1,83 @@
|
|||
#pragma once
|
||||
|
||||
#include "collatypes.h"
|
||||
#include "str.h"
|
||||
|
||||
typedef struct arena_t arena_t;
|
||||
typedef uintptr_t socket_t;
|
||||
|
||||
typedef enum {
|
||||
HTTP_GET,
|
||||
HTTP_POST,
|
||||
HTTP_HEAD,
|
||||
HTTP_PUT,
|
||||
HTTP_DELETE
|
||||
} http_method_e;
|
||||
|
||||
const char *httpGetStatusString(int status);
|
||||
|
||||
typedef struct {
|
||||
uint8 major;
|
||||
uint8 minor;
|
||||
} http_version_t;
|
||||
|
||||
// translates a http_version_t to a single readable number (e.g. 1.1 -> 11, 1.0 -> 10, etc)
|
||||
int httpVerNumber(http_version_t ver);
|
||||
|
||||
typedef struct http_header_t {
|
||||
strview_t key;
|
||||
strview_t value;
|
||||
struct http_header_t *next;
|
||||
} http_header_t;
|
||||
|
||||
typedef struct {
|
||||
http_method_e method;
|
||||
http_version_t version;
|
||||
http_header_t *headers;
|
||||
strview_t url;
|
||||
strview_t body;
|
||||
} http_req_t;
|
||||
|
||||
typedef struct {
|
||||
int status_code;
|
||||
http_version_t version;
|
||||
http_header_t *headers;
|
||||
strview_t body;
|
||||
} http_res_t;
|
||||
|
||||
// strview_t request needs to be valid for http_req_t to be valid!
|
||||
http_req_t httpParseReq(arena_t *arena, strview_t request);
|
||||
http_res_t httpParseRes(arena_t *arena, strview_t response);
|
||||
|
||||
str_t httpReqToStr(arena_t *arena, http_req_t *req);
|
||||
str_t httpResToStr(arena_t *arena, http_res_t *res);
|
||||
|
||||
bool httpHasHeader(http_header_t *headers, strview_t key);
|
||||
void httpSetHeader(http_header_t *headers, strview_t key, strview_t value);
|
||||
strview_t httpGetHeader(http_header_t *headers, strview_t key);
|
||||
|
||||
str_t httpMakeUrlSafe(arena_t *arena, strview_t string);
|
||||
str_t httpDecodeUrlSafe(arena_t *arena, strview_t string);
|
||||
|
||||
typedef struct {
|
||||
strview_t host;
|
||||
strview_t uri;
|
||||
} http_url_t;
|
||||
|
||||
http_url_t httpSplitUrl(strview_t url);
|
||||
|
||||
typedef struct {
|
||||
arena_t *arena;
|
||||
strview_t url;
|
||||
http_method_e request_type;
|
||||
http_header_t *headers;
|
||||
int header_count;
|
||||
strview_t body;
|
||||
} http_request_desc_t;
|
||||
|
||||
// arena_t *arena, strview_t url, [ http_header_t *headers, int header_count, strview_t body ]
|
||||
#define httpGet(arena, url, ...) httpRequest(&(http_request_desc_t){ arena, url, .request_type = HTTP_GET, __VA_ARGS__ })
|
||||
#define httpsGet(arena, url, ...) httpsRequest(&(http_request_desc_t){ arena, url, .request_type = HTTP_GET, __VA_ARGS__ })
|
||||
|
||||
http_res_t httpRequest(http_request_desc_t *request);
|
||||
buffer_t httpsRequest(http_request_desc_t *request);
|
||||
Loading…
Add table
Add a link
Reference in a new issue