57 lines
1.3 KiB
C
57 lines
1.3 KiB
C
|
#ifndef LANDER_HTTP_RES
|
||
|
#define LANDER_HTTP_RES
|
||
|
|
||
|
#include <stdbool.h>
|
||
|
#include <stdio.h>
|
||
|
|
||
|
#include "http/types.h"
|
||
|
|
||
|
typedef struct http_response_header {
|
||
|
http_header type;
|
||
|
const char *value;
|
||
|
bool owned;
|
||
|
} http_response_header;
|
||
|
|
||
|
typedef struct http_response {
|
||
|
http_status status;
|
||
|
const char *head;
|
||
|
size_t head_len;
|
||
|
size_t head_written;
|
||
|
http_body_type body_type;
|
||
|
union {
|
||
|
char *buf;
|
||
|
FILE *file;
|
||
|
} body;
|
||
|
size_t body_len;
|
||
|
size_t body_written;
|
||
|
// If false, the body won't be freed
|
||
|
bool owns_body;
|
||
|
http_response_header headers[4];
|
||
|
size_t header_count;
|
||
|
} http_response;
|
||
|
|
||
|
/*
|
||
|
* Set the request body to the given buffer. If owned is set to true, the body
|
||
|
* buffer will be free'd after the request has finished.
|
||
|
*/
|
||
|
void http_res_set_body_buf(http_response *res, const char *body,
|
||
|
size_t body_len, bool owned);
|
||
|
|
||
|
/*
|
||
|
* Set the request body to the given filename.
|
||
|
*/
|
||
|
void http_res_set_body_file(http_response *res, const char *filename);
|
||
|
|
||
|
/*
|
||
|
* Add a header to the response.
|
||
|
*/
|
||
|
void http_res_add_header(http_response *res, http_header type,
|
||
|
const char *value, bool owned);
|
||
|
|
||
|
/*
|
||
|
* Add a Content-Type header corresponding to the mime type.
|
||
|
*/
|
||
|
void http_res_set_mime_type(http_response *res, http_mime_type mime_type);
|
||
|
|
||
|
#endif
|