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 <cx/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 cxmutstr request_line;
51 cxmutstr method;
52 cxmutstr uri;
53 cxmutstr httpv;
54 HeaderArray *headers;
55 netbuf *netbuf;
56 time_t req_start;
57 };
58
59 struct _header {
60 cxmutstr name;
61 cxmutstr 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 cxmutstr http_request_get_abspath(HTTPRequest *req);
75
76
77 NSAPISession* nsapisession_create(
pool_handle_t *pool);
78 int nsapisession_setconnection(NSAPISession *sn, Connection *conn, netbuf *inbuf, IOStream **io);
79
80
81
82
83
84
85
86 int handle_request(HTTPRequest *request,
threadpool_t *thrpool, EventHandler *ev);
87
88
89
90
91 int nsapi_start_request(
92 HTTPRequest *request,
93 threadpool_t *thrpool,
94 EventHandler *ev,
95 pool_handle_t *pool);
96
97
98 void header_add(HeaderArray *hd, cxmutstr name, cxmutstr value);
99 void header_array_free(HeaderArray *hd);
100
101 int nsapi_handle_request(NSAPISession *sn, NSAPIRequest *rq);
102 int nsapi_finish_request(NSAPISession *sn, NSAPIRequest *rq);
103
104 void nsapi_saf_return(Session *sn, Request *rq,
int ret);;
105
106 void request_free_resources(NSAPISession *sn, NSAPIRequest *rq);
107
108 int nsapi_authtrans(NSAPISession *sn, NSAPIRequest *rq);
109 int nsapi_nametrans(NSAPISession *sn, NSAPIRequest *rq);
110 int nsapi_pathcheck(NSAPISession *sn, NSAPIRequest *rq);
111 int nsapi_objecttype(NSAPISession *sn, NSAPIRequest *rq);
112 int nsapi_service(NSAPISession *sn, NSAPIRequest *rq);
113 int nsapi_error(NSAPISession *sn, NSAPIRequest *rq);
114 int nsapi_addlog(NSAPISession *sn, NSAPIRequest *rq);
115
116 int nsapi_exec(directive *d, NSAPISession *sn, NSAPIRequest *rq);
117
118 int nsapi_exec_tp(
119 directive *d,
120 NSAPISession *sn,
121 NSAPIRequest *rq,
122 threadpool_t *pool);
123
124
125
126 void nsapi_change_threadpool(
127 NSAPISession *sn,
128 NSAPIRequest *rq,
129 threadpool_t *thrpool);
130
131 void* thrpool_exec(
void *d);
132
133 void* thrpool_change(
void *data);
134
135
136 int add_objects(
137 HTTPObjectConfig *objs,
138 httpd_objset *os,
139 NSAPISession *sn,
140 NSAPIRequest *rq,
141 char *name,
142 char *path);
143
144 int method_match(
char *cmp,
char *method);
145 int contenttype_match(cxstring cmp, cxstring ctype);
146
147
148 int request_initialize(
149 pool_handle_t *pool,
150 HTTPRequest *hrq,
151 NSAPIRequest *nrq);
152
153 #ifdef __cplusplus
154 }
155 #endif
156
157 #endif
158
159