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 #ifndef HTTPREQUEST_H
30 #define HTTPREQUEST_H
31
32 #include <ucx/string.h>
33
34 #include "sessionhandler.h"
35 #include "../public/nsapi.h"
36 #include "../util/pool.h"
37 #include "session.h"
38 #include "request.h"
39
40 #ifdef __cplusplus
41 extern "C" {
42 #endif
43
44 typedef struct _http_request HTTPRequest;
45 typedef struct _header Header;
46 typedef struct _header_array HeaderArray;
47
48 struct _http_request {
49 Connection *connection;
50 sstr_t request_line;
51 sstr_t method;
52 sstr_t uri;
53 sstr_t httpv;
54 HeaderArray *headers;
55 netbuf *netbuf;
56 time_t req_start;
57 };
58
59 struct _header {
60 sstr_t name;
61 sstr_t value;
62 };
63
64 struct _header_array {
65 HeaderArray *next;
66 Header *headers;
67 int len;
68 int alloc;
69 };
70
71 void http_request_init(HTTPRequest *req);
72 void http_request_cleanup(HTTPRequest *req);
73
74 sstr_t http_request_get_abspath(HTTPRequest *req);
75
76
77
78
79
80
81
82 int handle_request(HTTPRequest *request,
threadpool_t *pool, EventHandler *ev);
83
84
85
86 void header_add(HeaderArray *hd,
sstr_t name,
sstr_t value);
87 void header_array_free(HeaderArray *hd);
88
89 int nsapi_handle_request(NSAPISession *sn, NSAPIRequest *rq);
90 int nsapi_finish_request(NSAPISession *sn, NSAPIRequest *rq);
91
92 int nsapi_authtrans(NSAPISession *sn, NSAPIRequest *rq);
93 int nsapi_nametrans(NSAPISession *sn, NSAPIRequest *rq);
94 int nsapi_pathcheck(NSAPISession *sn, NSAPIRequest *rq);
95 int nsapi_objecttype(NSAPISession *sn, NSAPIRequest *rq);
96 int nsapi_service(NSAPISession *sn, NSAPIRequest *rq);
97 int nsapi_error(NSAPISession *sn, NSAPIRequest *rq);
98 int nsapi_addlog(NSAPISession *sn, NSAPIRequest *rq);
99
100 int nsapi_exec(directive *d, NSAPISession *sn, NSAPIRequest *rq);
101
102 int nsapi_exec_tp(
103 directive *d,
104 NSAPISession *sn,
105 NSAPIRequest *rq,
106 threadpool_t *pool);
107
108
109
110 void nsapi_change_threadpool(
111 NSAPISession *sn,
112 NSAPIRequest *rq,
113 threadpool_t *thrpool);
114
115 void* thrpool_exec(
void *d);
116
117 void* thrpool_change(
void *data);
118
119
120 int add_objects(
121 HTTPObjectConfig *objs,
122 httpd_objset *os,
123 NSAPISession *sn,
124 NSAPIRequest *rq,
125 char *name,
126 char *path);
127
128 int method_match(
char *cmp,
char *method);
129 int contenttype_match(
sstr_t cmp,
sstr_t ctype);
130
131
132 int request_initialize(
133 pool_handle_t *pool,
134 HTTPRequest *hrq,
135 NSAPIRequest *nrq);
136
137 #ifdef __cplusplus
138 }
139 #endif
140
141 #endif
142
143