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 #include "request.h"
30
31 #include "../util/pblock.h"
32 #include "httprequest.h"
33 #include "../public/vfs.h"
34
35
36
37
38
39
40
41 int request_initialize(
42 pool_handle_t *pool,
43 HTTPRequest *hrq,
44 NSAPIRequest *nrq)
45 {
46 Request *rq = &nrq->rq;
47
48 rq->vars = pblock_create_pool(pool,
REQ_HASHSIZE);
49 if (!rq->vars)
50 return 1;
51 rq->reqpb = pblock_create_pool(pool,
REQ_HASHSIZE);
52 if (!rq->reqpb)
53 return 1;
54 rq->loadhdrs =
0;
55 rq->headers = pblock_create_pool(pool,
REQ_HASHSIZE);
56 if (!rq->headers)
57 return 1;
58 rq->senthdrs =
0;
59 rq->srvhdrs = pblock_create_pool(pool,
REQ_HASHSIZE);
60 if (!rq->srvhdrs)
61 return 1;
62
63 rq->os =
NULL;
64 rq->tmpos =
NULL;
65 rq->statpath =
NULL;
66 rq->staterr =
NULL;
67 rq->finfo =
NULL;
68 rq->aclstate =
0;
69 rq->acldirno =
0;
70 rq->aclname =
NULL;
71 rq->aclpb =
NULL;
72 rq->acllist =
NULL;
73 rq->aclreqaccess =
0;
74 rq->request_is_cacheable =
0;
75 rq->directive_is_cacheable =
0;
76 rq->cached_headers =
NULL;
77 rq->cached_headers_len =
0;
78 rq->unused =
NULL;
79
80 rq->protv_num =
0;
81 rq->method_num = -
1;
82
83 *(
RQATTR *) &rq->rq_attr =
0;
84
85 rq->allowed =
0;
86 rq->byterange =
0;
87 rq->status_num =
0;
88 rq->staterrno =
0;
89 rq->orig_rq = rq;
90
91
92
93
94 nrq->context.last_req_code =
REQ_NOACTION;
95
96 nrq->context.objset_index = -
1;
97 nrq->context.dtable_index =
0;
98
99
100
101
102 nrq->jvm_context =
NULL;
103
104
105
106 rq->status_num = -
1;
107 rq->vfs =
NULL;
108 rq->davCollection =
NULL;
109
110 return 0;
111 }
112
113 const VirtualServer* request_get_vs(Request *rq) {
114 return ((NSAPIRequest*)rq)->vs;
115 }
116
117 struct stat* request_stat_path(
const char *path, Request *rq) {
118
119
120 struct stat *s = malloc(
sizeof(
struct stat));
121 if(stat(path, s)) {
122 free(s);
123 return NULL;
124 }
125
126 rq->finfo = s;
127 return s;
128 }
129
130 int request_set_path(cxstring root, cxstring path, pblock *vars) {
131
132
133
134 size_t length = root.length + path.length;
135 char *translated_path = alloca(length +
1);
136 memcpy(translated_path, root.ptr, root.length);
137 if(root.ptr[root.length-
1] ==
'/') {
138 memcpy(translated_path + root.length, path.ptr, path.length);
139 }
else {
140 translated_path[root.length] =
'/';
141 memcpy(translated_path + root.length +
1, path.ptr, path.length);
142 length++;
143 }
144
145
146 pblock_kvinsert(
147 pb_key_ppath,
148 translated_path,
149 length,
150 vars);
151
152 pblock_kvinsert(pb_key_ntrans_base, root.ptr, root.length, vars);
153
154 return REQ_PROCEED;
155 }
156
157 void request_free(Request *rq) {
158
159 }
160
161 Request* request_restart_internal(
const char *uri, Request *rq) {
162
163 return NULL;
164 }
165
166
167 char* servact_translate_uri(
char *uri, Session *sn) {
168
169 return NULL;
170 }
171