Lines Matching refs:r
350 static void mod_dirlisting_patch_config(request_st * const r, plugin_data * const p) { in mod_dirlisting_patch_config() argument
353 if (config_check_cond(r, (uint32_t)p->cvlist[i].k_id)) in mod_dirlisting_patch_config()
576 static void http_list_directory_include_file(request_st * const r, const handler_ctx * const p, int… in http_list_directory_include_file() argument
591 len = buffer_clen(&r->physical.path); in http_list_directory_include_file()
592 buffer_append_path_len(&r->physical.path, BUF_PTR_LEN(path)); in http_list_directory_include_file()
593 path = &r->physical.path; in http_list_directory_include_file()
596 stat_cache_get_entry_open(path, r->conf.follow_symlink); in http_list_directory_include_file()
598 buffer_truncate(&r->physical.path, len); in http_list_directory_include_file()
602 chunkqueue * const cq = &r->write_queue; in http_list_directory_include_file()
615 buffer * const tb = r->tmp_buf; in http_list_directory_include_file()
628 r->conf.errh)) in http_list_directory_include_file()
639 (void)http_chunk_append_file_ref(r, sce); in http_list_directory_include_file()
844 static void http_list_directory_header(request_st * const r, const handler_ctx * const p) { in http_list_directory_header() argument
846 chunkqueue * const cq = &r->write_queue; in http_list_directory_header()
861 buffer_append_string_encoded(out, BUF_PTR_LEN(&r->uri.path), ENCODING_MINIMAL_XML); in http_list_directory_header()
911 http_list_directory_include_file(r, p, 1);/*0 for readme; 1 for header*/ in http_list_directory_header()
916 buffer_append_string_encoded(out, BUF_PTR_LEN(&r->uri.path), ENCODING_MINIMAL_XML); in http_list_directory_header()
931 if (!buffer_is_equal_string(&r->uri.path, CONST_STR_LEN("/"))) { in http_list_directory_header()
944 static void http_list_directory_footer(request_st * const r, const handler_ctx * const p) { in http_list_directory_footer() argument
946 chunkqueue * const cq = &r->write_queue; in http_list_directory_footer()
954 http_list_directory_include_file(r, p, 0);/*0 for readme; 1 for header*/ in http_list_directory_footer()
962 : r->conf.server_tag in http_list_directory_footer()
963 ? r->conf.server_tag in http_list_directory_footer()
987 static int http_open_directory(request_st * const r, handler_ctx * const hctx) { in http_open_directory() argument
988 const uint32_t dlen = buffer_clen(&r->physical.path); in http_open_directory()
999 memcpy(hctx->path, r->physical.path.ptr, dlen+1); in http_open_directory()
1008 hctx->dfd = fdevent_open_dirname(hctx->path, r->conf.follow_symlink); in http_open_directory()
1012 log_perror(r->conf.errh, __FILE__, __LINE__, "opendir %s", hctx->path); in http_open_directory()
1138 static void http_list_directory(request_st * const r, handler_ctx * const hctx) { in http_list_directory() argument
1150 chunkqueue * const cq = &r->write_queue; in http_list_directory()
1151 buffer * const tb = r->tmp_buf; in http_list_directory()
1175 r->conf.errh)) in http_list_directory()
1183 const array * const mimetypes = r->conf.mimetypes; in http_list_directory()
1190 if (r->conf.use_xattr) { in http_list_directory()
1225 r->conf.errh)) in http_list_directory()
1236 r->conf.errh)) { in http_list_directory()
1246 static void mod_dirlisting_content_type (request_st * const r, const buffer * const encoding) { in mod_dirlisting_content_type() argument
1248 http_header_response_set_ptr(r, HTTP_HEADER_CONTENT_TYPE, in mod_dirlisting_content_type()
1258 static void mod_dirlisting_response (request_st * const r, handler_ctx * const hctx) { in mod_dirlisting_response() argument
1259 http_list_directory_header(r, hctx); in mod_dirlisting_response()
1260 http_list_directory(r, hctx); in mod_dirlisting_response()
1261 http_list_directory_footer(r, hctx); in mod_dirlisting_response()
1262 mod_dirlisting_content_type(r, hctx->conf.encoding); in mod_dirlisting_response()
1264 r->resp_body_finished = 1; in mod_dirlisting_response()
1268 static void mod_dirlisting_json_append (request_st * const r, handler_ctx * const hctx, const int f… in mod_dirlisting_json_append() argument
1295 http_chunk_append_buffer(r, jb); /* clears jb */ in mod_dirlisting_json_append()
1301 static handler_t mod_dirlisting_cache_check (request_st * const r, plugin_data * const p);
1303 static void mod_dirlisting_cache_add (request_st * const r, handler_ctx * const hctx);
1305 static void mod_dirlisting_cache_json_init (request_st * const r, handler_ctx * const hctx);
1307 static void mod_dirlisting_cache_json (request_st * const r, handler_ctx * const hctx);
1313 if (NULL != r->handler_module) return HANDLER_GO_ON; in URIHANDLER_FUNC()
1314 if (!buffer_has_slash_suffix(&r->uri.path)) return HANDLER_GO_ON; in URIHANDLER_FUNC()
1315 if (!http_method_get_or_head(r->http_method)) return HANDLER_GO_ON; in URIHANDLER_FUNC()
1319 mod_dirlisting_patch_config(r, p); in URIHANDLER_FUNC()
1323 if (r->conf.log_request_handling) { in URIHANDLER_FUNC()
1324 log_error(r->conf.errh, __FILE__, __LINE__, in URIHANDLER_FUNC()
1326 log_error(r->conf.errh, __FILE__, __LINE__, in URIHANDLER_FUNC()
1327 "URI : %s", r->uri.path.ptr); in URIHANDLER_FUNC()
1334 if (!stat_cache_path_isdir(&r->physical.path)) { in URIHANDLER_FUNC()
1337 log_perror(r->conf.errh,__FILE__,__LINE__,"%s",r->physical.path.ptr); in URIHANDLER_FUNC()
1338 r->http_status = 500; in URIHANDLER_FUNC()
1346 http_header_request_get(r, HTTP_HEADER_ACCEPT, CONST_STR_LEN("Accept")); in URIHANDLER_FUNC()
1351 handler_t rc = mod_dirlisting_cache_check(r, p); in URIHANDLER_FUNC()
1361 r->http_status = 503; in URIHANDLER_FUNC()
1362 http_header_response_set(r, HTTP_HEADER_OTHER, in URIHANDLER_FUNC()
1383 if (0 != http_open_directory(r, hctx)) { in URIHANDLER_FUNC()
1385 r->http_status = 403; in URIHANDLER_FUNC()
1396 mod_dirlisting_cache_json_init(r, hctx); in URIHANDLER_FUNC()
1397 http_header_response_set(r, HTTP_HEADER_CONTENT_TYPE, in URIHANDLER_FUNC()
1400 r->http_status = 200; in URIHANDLER_FUNC()
1401 r->resp_body_started = 1; in URIHANDLER_FUNC()
1404 r->plugin_ctx[p->id] = hctx; in URIHANDLER_FUNC()
1405 r->handler_module = p->self; in URIHANDLER_FUNC()
1406 return mod_dirlisting_subrequest(r, p); in URIHANDLER_FUNC()
1412 handler_ctx * const hctx = r->plugin_ctx[p->id]; in SUBREQUEST_FUNC()
1419 mod_dirlisting_json_append(r, hctx, 1); in SUBREQUEST_FUNC()
1420 r->resp_body_finished = 1; in SUBREQUEST_FUNC()
1422 mod_dirlisting_cache_json(r, hctx); in SUBREQUEST_FUNC()
1425 mod_dirlisting_response(r, hctx); in SUBREQUEST_FUNC()
1427 mod_dirlisting_cache_add(r, hctx); in SUBREQUEST_FUNC()
1429 mod_dirlisting_reset(r, p); /*(release resources, including hctx)*/ in SUBREQUEST_FUNC()
1433 mod_dirlisting_json_append(r, hctx, 0); in SUBREQUEST_FUNC()
1434 joblist_append(r->con); in SUBREQUEST_FUNC()
1445 void ** const restrict dptr = &r->plugin_ctx[((plugin_data *)p_d)->id]; in REQUEST_FUNC()
1455 static void mod_dirlisting_cache_control (request_st * const r, unix_time64_t max_age) { in mod_dirlisting_cache_control() argument
1456 if (!light_btst(r->resp_htags, HTTP_HEADER_CACHE_CONTROL)) { in mod_dirlisting_cache_control()
1458 http_header_response_set_ptr(r, HTTP_HEADER_CACHE_CONTROL, in mod_dirlisting_cache_control()
1466 static handler_t mod_dirlisting_cache_check (request_st * const r, plugin_data * const p) { in mod_dirlisting_cache_check() argument
1469 buffer * const tb = r->tmp_buf; in mod_dirlisting_cache_check()
1471 BUF_PTR_LEN(&r->physical.path)); in mod_dirlisting_cache_check()
1483 ? mod_dirlisting_content_type(r, p->conf.encoding) in mod_dirlisting_cache_check()
1484 : http_header_response_set(r, HTTP_HEADER_CONTENT_TYPE, in mod_dirlisting_cache_check()
1491 const int follow_symlink = r->conf.follow_symlink; in mod_dirlisting_cache_check()
1492 r->conf.follow_symlink = 1; /*(skip symlink checks into cache)*/ in mod_dirlisting_cache_check()
1493 http_response_send_file(r, sce->name, sce); in mod_dirlisting_cache_check()
1494 r->conf.follow_symlink = follow_symlink; in mod_dirlisting_cache_check()
1495 if (r->http_status < 400) in mod_dirlisting_cache_check()
1497 r->http_status = 0; in mod_dirlisting_cache_check()
1504 if (0 != http_chunk_append_file_ref(r, sce)) { in mod_dirlisting_cache_check()
1505 http_header_response_unset(r, HTTP_HEADER_CONTENT_TYPE, in mod_dirlisting_cache_check()
1507 http_response_body_clear(r, 0); in mod_dirlisting_cache_check()
1512 mod_dirlisting_cache_control(r, max_age); in mod_dirlisting_cache_check()
1513 if (0 != r->conf.etag_flags) { in mod_dirlisting_cache_check()
1514 const buffer *etag = stat_cache_etag_get(sce, r->conf.etag_flags); in mod_dirlisting_cache_check()
1516 http_header_response_set(r, HTTP_HEADER_ETAG, in mod_dirlisting_cache_check()
1521 r->resp_body_finished = 1; in mod_dirlisting_cache_check()
1575 static void mod_dirlisting_cache_add (request_st * const r, handler_ctx * const hctx) { in mod_dirlisting_cache_add() argument
1581 buffer * const tb = r->tmp_buf; in mod_dirlisting_cache_add()
1583 BUF_PTR_LEN(&r->physical.path)); in mod_dirlisting_cache_add()
1595 if (mod_dirlisting_write_cq(fd, &r->write_queue, r->conf.errh) in mod_dirlisting_cache_add()
1599 mod_dirlisting_cache_control(r, hctx->conf.cache->max_age); in mod_dirlisting_cache_add()
1600 if (0 != r->conf.etag_flags) { in mod_dirlisting_cache_add()
1604 http_header_response_set_ptr(r, HTTP_HEADER_ETAG, in mod_dirlisting_cache_add()
1606 http_etag_create(vb, &st, r->conf.etag_flags); in mod_dirlisting_cache_add()
1617 static void mod_dirlisting_cache_json_init (request_st * const r, handler_ctx * const hctx) { in mod_dirlisting_cache_json_init() argument
1621 buffer * const tb = r->tmp_buf; in mod_dirlisting_cache_json_init()
1623 BUF_PTR_LEN(&r->physical.path)); in mod_dirlisting_cache_json_init()
1638 static void mod_dirlisting_cache_json (request_st * const r, handler_ctx * const hctx) { in mod_dirlisting_cache_json() argument
1642 UNUSED(r); in mod_dirlisting_cache_json()