24 |
|
|
25 |
#include "boa.h" |
#include "boa.h" |
26 |
|
|
|
#define HTML "text/html; charset=ISO-8859-1" |
|
|
#define CRLF "\r\n" |
|
|
|
|
27 |
void print_content_type(request * req) |
void print_content_type(request * req) |
28 |
{ |
{ |
29 |
req_write(req, "Content-Type: "); |
req_write(req, "Content-Type: "); |
126 |
if (req->simple) |
if (req->simple) |
127 |
return; |
return; |
128 |
|
|
129 |
req_write(req, "HTTP/1.0 200 OK\r\n"); |
req_write(req, HTTP_VERSION" 200 OK\r\n"); |
130 |
print_http_headers(req); |
print_http_headers(req); |
131 |
|
|
132 |
if (!req->is_cgi) { |
if (!req->is_cgi) { |
144 |
if (req->simple) |
if (req->simple) |
145 |
return; |
return; |
146 |
|
|
147 |
req_write(req, "HTTP/1.0 206 Partial content\r\n"); |
req_write(req, HTTP_VERSION" 206 Partial content\r\n"); |
148 |
print_http_headers(req); |
print_http_headers(req); |
149 |
|
|
150 |
if (!req->is_cgi) { |
if (!req->is_cgi) { |
162 |
SQUASH_KA(req); |
SQUASH_KA(req); |
163 |
req->response_status = R_MOVED_PERM; |
req->response_status = R_MOVED_PERM; |
164 |
if (!req->simple) { |
if (!req->simple) { |
165 |
req_write(req, "HTTP/1.0 301 Moved Permanently\r\n"); |
req_write(req, HTTP_VERSION" 301 Moved Permanently\r\n"); |
166 |
print_http_headers(req); |
print_http_headers(req); |
167 |
req_write(req, "Content-Type: " HTML "\r\n"); |
req_write(req, "Content-Type: " TEXT_HTML "\r\n"); |
168 |
|
|
169 |
req_write(req, "Location: "); |
req_write(req, "Location: "); |
170 |
req_write_escape_http(req, url); |
req_write_escape_http(req, url); |
187 |
SQUASH_KA(req); |
SQUASH_KA(req); |
188 |
req->response_status = R_MOVED_TEMP; |
req->response_status = R_MOVED_TEMP; |
189 |
if (!req->simple) { |
if (!req->simple) { |
190 |
req_write(req, "HTTP/1.0 302 Moved Temporarily\r\n"); |
req_write(req, HTTP_VERSION" 302 Moved Temporarily\r\n"); |
191 |
print_http_headers(req); |
print_http_headers(req); |
192 |
req_write(req, "Content-Type: " HTML "\r\n"); |
req_write(req, "Content-Type: " TEXT_HTML "\r\n"); |
193 |
|
|
194 |
req_write(req, "Location: "); |
req_write(req, "Location: "); |
195 |
req_write_escape_http(req, url); |
req_write_escape_http(req, url); |
213 |
{ |
{ |
214 |
SQUASH_KA(req); |
SQUASH_KA(req); |
215 |
req->response_status = R_NOT_MODIFIED; |
req->response_status = R_NOT_MODIFIED; |
216 |
req_write(req, "HTTP/1.0 304 Not Modified\r\n"); |
req_write(req, HTTP_VERSION" 304 Not Modified\r\n"); |
217 |
print_http_headers(req); |
print_http_headers(req); |
218 |
print_content_type(req); |
print_content_type(req); |
219 |
req_write(req, "\r\n"); |
req_write(req, "\r\n"); |
226 |
SQUASH_KA(req); |
SQUASH_KA(req); |
227 |
req->response_status = R_BAD_REQUEST; |
req->response_status = R_BAD_REQUEST; |
228 |
if (!req->simple) { |
if (!req->simple) { |
229 |
req_write(req, "HTTP/1.0 400 Bad Request\r\n"); |
req_write(req, HTTP_VERSION" 400 Bad Request\r\n"); |
230 |
print_http_headers(req); |
print_http_headers(req); |
231 |
req_write(req, "Content-Type: " HTML "\r\n\r\n"); /* terminate header */ |
req_write(req, "Content-Type: " TEXT_HTML "\r\n\r\n"); /* terminate header */ |
232 |
} |
} |
233 |
if (req->method != M_HEAD) |
if (req->method != M_HEAD) |
234 |
req_write(req, |
req_write(req, |
244 |
SQUASH_KA(req); |
SQUASH_KA(req); |
245 |
req->response_status = R_UNAUTHORIZED; |
req->response_status = R_UNAUTHORIZED; |
246 |
if (!req->simple) { |
if (!req->simple) { |
247 |
req_write(req, "HTTP/1.0 401 Unauthorized\r\n"); |
req_write(req, HTTP_VERSION" 401 Unauthorized\r\n"); |
248 |
print_http_headers(req); |
print_http_headers(req); |
249 |
req_write(req, "WWW-Authenticate: Basic realm=\""); |
req_write(req, "WWW-Authenticate: Basic realm=\""); |
250 |
req_write(req, realm_name); |
req_write(req, realm_name); |
251 |
req_write(req, "\"\r\n"); |
req_write(req, "\"\r\n"); |
252 |
req_write(req, "Content-Type: " HTML "\r\n\r\n"); /* terminate header */ |
req_write(req, "Content-Type: " TEXT_HTML "\r\n\r\n"); /* terminate header */ |
253 |
} |
} |
254 |
if (req->method != M_HEAD) { |
if (req->method != M_HEAD) { |
255 |
req_write(req, |
req_write(req, |
268 |
SQUASH_KA(req); |
SQUASH_KA(req); |
269 |
req->response_status = R_FORBIDDEN; |
req->response_status = R_FORBIDDEN; |
270 |
if (!req->simple) { |
if (!req->simple) { |
271 |
req_write(req, "HTTP/1.0 403 Forbidden\r\n"); |
req_write(req, HTTP_VERSION" 403 Forbidden\r\n"); |
272 |
print_http_headers(req); |
print_http_headers(req); |
273 |
req_write(req, "Content-Type: " HTML "\r\n\r\n"); /* terminate header */ |
req_write(req, "Content-Type: " TEXT_HTML "\r\n\r\n"); /* terminate header */ |
274 |
} |
} |
275 |
if (req->method != M_HEAD) { |
if (req->method != M_HEAD) { |
276 |
req_write(req, "<HTML><HEAD><TITLE>403 Forbidden</TITLE></HEAD>\n" |
req_write(req, "<HTML><HEAD><TITLE>403 Forbidden</TITLE></HEAD>\n" |
288 |
SQUASH_KA(req); |
SQUASH_KA(req); |
289 |
req->response_status = R_NOT_FOUND; |
req->response_status = R_NOT_FOUND; |
290 |
if (!req->simple) { |
if (!req->simple) { |
291 |
req_write(req, "HTTP/1.0 404 Not Found\r\n"); |
req_write(req, HTTP_VERSION" 404 Not Found\r\n"); |
292 |
print_http_headers(req); |
print_http_headers(req); |
293 |
req_write(req, "Content-Type: " HTML "\r\n\r\n"); /* terminate header */ |
req_write(req, "Content-Type: " TEXT_HTML "\r\n\r\n"); /* terminate header */ |
294 |
} |
} |
295 |
if (req->method != M_HEAD) { |
if (req->method != M_HEAD) { |
296 |
req_write(req, "<HTML><HEAD><TITLE>404 Not Found</TITLE></HEAD>\n" |
req_write(req, "<HTML><HEAD><TITLE>404 Not Found</TITLE></HEAD>\n" |
309 |
return; |
return; |
310 |
|
|
311 |
if (!req->simple) { |
if (!req->simple) { |
312 |
req_write(req, "HTTP/1.0 416 Range Not Satisfiable\r\n"); |
req_write(req, HTTP_VERSION" 416 Range Not Satisfiable\r\n"); |
313 |
print_http_headers(req); |
print_http_headers(req); |
314 |
req_write(req, "Content-Type: " HTML "\r\n\r\n"); /* terminate header */ |
req_write(req, "Content-Type: " TEXT_HTML "\r\n\r\n"); /* terminate header */ |
315 |
} |
} |
316 |
if (req->method != M_HEAD) { |
if (req->method != M_HEAD) { |
317 |
char int1[22], int2[22]; |
char int1[22], int2[22]; |
338 |
SQUASH_KA(req); |
SQUASH_KA(req); |
339 |
req->response_status = R_ERROR; |
req->response_status = R_ERROR; |
340 |
if (!req->simple) { |
if (!req->simple) { |
341 |
req_write(req, "HTTP/1.0 500 Server Error\r\n"); |
req_write(req, HTTP_VERSION" 500 Server Error\r\n"); |
342 |
print_http_headers(req); |
print_http_headers(req); |
343 |
req_write(req, "Content-Type: " HTML "\r\n\r\n"); /* terminate header */ |
req_write(req, "Content-Type: " TEXT_HTML "\r\n\r\n"); /* terminate header */ |
344 |
} |
} |
345 |
if (req->method != M_HEAD) { |
if (req->method != M_HEAD) { |
346 |
req_write(req, |
req_write(req, |
358 |
SQUASH_KA(req); |
SQUASH_KA(req); |
359 |
req->response_status = R_NOT_IMP; |
req->response_status = R_NOT_IMP; |
360 |
if (!req->simple) { |
if (!req->simple) { |
361 |
req_write(req, "HTTP/1.0 501 Not Implemented\r\n"); |
req_write(req, HTTP_VERSION" 501 Not Implemented\r\n"); |
362 |
print_http_headers(req); |
print_http_headers(req); |
363 |
req_write(req, "Content-Type: " HTML "\r\n\r\n"); /* terminate header */ |
req_write(req, "Content-Type: " TEXT_HTML "\r\n\r\n"); /* terminate header */ |
364 |
} |
} |
365 |
if (req->method != M_HEAD) { |
if (req->method != M_HEAD) { |
366 |
req_write(req, |
req_write(req, |
377 |
SQUASH_KA(req); |
SQUASH_KA(req); |
378 |
req->response_status = R_BAD_GATEWAY; |
req->response_status = R_BAD_GATEWAY; |
379 |
if (!req->simple) { |
if (!req->simple) { |
380 |
req_write(req, "HTTP/1.0 502 Bad Gateway" CRLF); |
req_write(req, HTTP_VERSION" 502 Bad Gateway" CRLF); |
381 |
print_http_headers(req); |
print_http_headers(req); |
382 |
req_write(req, "Content-Type: " HTML CRLF CRLF); /* terminate header */ |
req_write(req, "Content-Type: " TEXT_HTML CRLF CRLF); /* terminate header */ |
383 |
} |
} |
384 |
if (req->method != M_HEAD) { |
if (req->method != M_HEAD) { |
385 |
req_write(req, |
req_write(req, |
409 |
SQUASH_KA(req); |
SQUASH_KA(req); |
410 |
req->response_status = R_SERVICE_UNAV; |
req->response_status = R_SERVICE_UNAV; |
411 |
if (!req->simple) { |
if (!req->simple) { |
412 |
req_write(req, "HTTP/1.0 503 Service Unavailable\r\n"); |
req_write(req, HTTP_VERSION" 503 Service Unavailable\r\n"); |
413 |
print_http_headers(req); |
print_http_headers(req); |
414 |
if (body_len) { |
if (body_len) { |
415 |
req_write(req, "Content-Length: "); |
req_write(req, "Content-Length: "); |
416 |
req_write(req, body_len); |
req_write(req, body_len); |
417 |
req_write(req, "\r\n"); |
req_write(req, "\r\n"); |
418 |
} |
} |
419 |
req_write(req, "Content-Type: " HTML "\r\n\r\n"); /* terminate header |
req_write(req, "Content-Type: " TEXT_HTML "\r\n\r\n"); /* terminate header |
420 |
*/ |
*/ |
421 |
} |
} |
422 |
if (req->method != M_HEAD) { |
if (req->method != M_HEAD) { |
432 |
SQUASH_KA(req); |
SQUASH_KA(req); |
433 |
req->response_status = R_BAD_VERSION; |
req->response_status = R_BAD_VERSION; |
434 |
if (!req->simple) { |
if (!req->simple) { |
435 |
req_write(req, "HTTP/1.0 505 HTTP Version Not Supported\r\n"); |
req_write(req, HTTP_VERSION" 505 HTTP Version Not Supported\r\n"); |
436 |
print_http_headers(req); |
print_http_headers(req); |
437 |
req_write(req, "Content-Type: " HTML "\r\n\r\n"); /* terminate header */ |
req_write(req, "Content-Type: " TEXT_HTML "\r\n\r\n"); /* terminate header */ |
438 |
} |
} |
439 |
if (req->method != M_HEAD) { |
if (req->method != M_HEAD) { |
440 |
req_write(req, |
req_write(req, |