/
request.h
57 lines (46 loc) · 1.19 KB
/
request.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
#ifndef __request_h__
#define __request_h__
#include <ev.h>
#include "http_parser.h"
#include "common.h"
void _initialize_request_module(const char* host, const int port);
typedef struct {
unsigned error_code : 2;
unsigned parse_finished : 1;
unsigned start_response_called : 1;
unsigned wsgi_call_done : 1;
unsigned keep_alive : 1;
unsigned response_length_unknown : 1;
unsigned chunked_response : 1;
unsigned use_sendfile : 1;
} request_state;
typedef struct {
http_parser parser;
string field;
string value;
string body;
} bj_parser;
typedef struct {
#ifdef DEBUG
unsigned long id;
#endif
bj_parser parser;
ev_io ev_watcher;
int client_fd;
PyObject* client_addr;
request_state state;
PyObject* status;
PyObject* headers;
PyObject* current_chunk;
Py_ssize_t current_chunk_p;
PyObject* iterable;
PyObject* iterator;
} Request;
#define REQUEST_FROM_WATCHER(watcher) \
(Request*)((size_t)watcher - (size_t)(&(((Request*)NULL)->ev_watcher)));
Request* Request_new(int client_fd, const char* client_addr);
void Request_parse(Request*, const char*, const size_t);
void Request_reset(Request*);
void Request_clean(Request*);
void Request_free(Request*);
#endif