61 lines
1.6 KiB
C
61 lines
1.6 KiB
C
#ifndef RESPONSE_H
|
|
#define RESPONSE_H
|
|
|
|
#include <stddef.h>
|
|
|
|
typedef struct response response_t;
|
|
typedef struct response_header response_header_t;
|
|
|
|
// Response header
|
|
struct response_header {
|
|
char *name;
|
|
char *value;
|
|
response_header_t *next;
|
|
};
|
|
|
|
// HTTP response
|
|
struct response {
|
|
int status_code;
|
|
char *status_text;
|
|
|
|
response_header_t *headers;
|
|
|
|
char *body;
|
|
size_t body_len;
|
|
size_t body_cap;
|
|
|
|
int headers_sent;
|
|
};
|
|
|
|
// Response creation
|
|
response_t* response_new(void);
|
|
void response_free(response_t *res);
|
|
void response_reset(response_t *res);
|
|
|
|
// Status
|
|
response_t* response_status(response_t *res, int code);
|
|
|
|
// Headers
|
|
response_t* response_header(response_t *res, const char *name, const char *value);
|
|
response_t* response_content_type(response_t *res, const char *type);
|
|
response_t* response_content_length(response_t *res, size_t len);
|
|
|
|
// Body
|
|
response_t* response_body(response_t *res, const char *data, size_t len);
|
|
response_t* response_write(response_t *res, const char *data, size_t len);
|
|
|
|
// Convenience methods
|
|
response_t* response_text(response_t *res, int status, const char *text);
|
|
response_t* response_html(response_t *res, int status, const char *html);
|
|
response_t* response_json(response_t *res, int status, const char *json);
|
|
response_t* response_redirect(response_t *res, const char *url, int status);
|
|
|
|
// Cookie
|
|
response_t* response_cookie(response_t *res, const char *name, const char *value,
|
|
const char *path, int max_age, int http_only, int secure);
|
|
|
|
// Serialize to buffer
|
|
int response_serialize(response_t *res, char *buf, size_t size);
|
|
|
|
#endif // RESPONSE_H
|