tildefriends/src/http.h

41 lines
1.2 KiB
C
Raw Normal View History

#pragma once
#include <stddef.h>
typedef struct uv_loop_s uv_loop_t;
typedef struct _tf_http_t tf_http_t;
typedef struct _tf_http_connection_t tf_http_connection_t;
typedef enum _tf_http_callback_phase_t
{
k_http_callback_phase_headers_received,
k_http_callback_phase_request_done,
} tf_http_callback_phase_t;
typedef struct _tf_http_request_t
{
tf_http_callback_phase_t phase;
tf_http_connection_t* connection;
const char* method;
const char* path;
const char* query;
void* body;
size_t content_length;
struct phr_header* headers;
int headers_count;
void* user_data;
int ref_count;
} tf_http_request_t;
typedef void (tf_http_callback_t)(tf_http_request_t* request);
tf_http_t* tf_http_create(uv_loop_t* loop);
void tf_http_listen(tf_http_t* http, int port);
void tf_http_add_handler(tf_http_t* http, const char* pattern, tf_http_callback_t* callback, void* user_data);
void tf_http_respond(tf_http_request_t* request, int status, const char** headers, int headers_count, const void* body, size_t content_length);
size_t tf_http_get_body(const tf_http_request_t* request, const void** out_data);
void tf_http_destroy(tf_http_t* http);
void tf_http_request_ref(tf_http_request_t* request);
void tf_http_request_release(tf_http_request_t* request);