Lines Matching refs:hctx
140 handler_ctx *hctx = ck_calloc(1, sizeof(*hctx)); in mod_dirlisting_handler_ctx_init() local
141 memcpy(&hctx->conf, &p->conf, sizeof(plugin_config)); in mod_dirlisting_handler_ctx_init()
142 return hctx; in mod_dirlisting_handler_ctx_init()
145 static void mod_dirlisting_handler_ctx_free (handler_ctx *hctx) { in mod_dirlisting_handler_ctx_free() argument
146 if (hctx->dp) in mod_dirlisting_handler_ctx_free()
147 closedir(hctx->dp); in mod_dirlisting_handler_ctx_free()
148 if (hctx->files.ent) { in mod_dirlisting_handler_ctx_free()
149 dirls_entry_t ** const ent = hctx->files.ent; in mod_dirlisting_handler_ctx_free()
150 for (uint32_t i = 0, used = hctx->files.used; i < used; ++i) in mod_dirlisting_handler_ctx_free()
154 if (hctx->dirs.ent) { in mod_dirlisting_handler_ctx_free()
155 dirls_entry_t ** const ent = hctx->dirs.ent; in mod_dirlisting_handler_ctx_free()
156 for (uint32_t i = 0, used = hctx->dirs.used; i < used; ++i) in mod_dirlisting_handler_ctx_free()
160 if (hctx->jb) { in mod_dirlisting_handler_ctx_free()
161 chunk_buffer_release(hctx->jb); in mod_dirlisting_handler_ctx_free()
162 if (hctx->jfn) { in mod_dirlisting_handler_ctx_free()
163 unlink(hctx->jfn); in mod_dirlisting_handler_ctx_free()
164 free(hctx->jfn); in mod_dirlisting_handler_ctx_free()
166 if (-1 != hctx->jfd) in mod_dirlisting_handler_ctx_free()
167 close(hctx->jfd); in mod_dirlisting_handler_ctx_free()
169 free(hctx->path); in mod_dirlisting_handler_ctx_free()
170 free(hctx); in mod_dirlisting_handler_ctx_free()
987 static int http_open_directory(request_st * const r, handler_ctx * const hctx) { in http_open_directory() argument
990 hctx->name_max = FILENAME_MAX; in http_open_directory()
996 hctx->name_max = PATH_MAX - dlen - 1; in http_open_directory()
998 hctx->path = ck_malloc(dlen + hctx->name_max + 1); in http_open_directory()
999 memcpy(hctx->path, r->physical.path.ptr, dlen+1); in http_open_directory()
1001 hctx->path_file = hctx->path + dlen; in http_open_directory()
1005 hctx->dfd = -1; in http_open_directory()
1006 hctx->dp = opendir(hctx->path); in http_open_directory()
1008 hctx->dfd = fdevent_open_dirname(hctx->path, r->conf.follow_symlink); in http_open_directory()
1009 hctx->dp = (hctx->dfd >= 0) ? fdopendir(hctx->dfd) : NULL; in http_open_directory()
1011 if (NULL == hctx->dp) { in http_open_directory()
1012 log_perror(r->conf.errh, __FILE__, __LINE__, "opendir %s", hctx->path); in http_open_directory()
1013 if (hctx->dfd >= 0) { in http_open_directory()
1014 close(hctx->dfd); in http_open_directory()
1015 hctx->dfd = -1; in http_open_directory()
1020 if (hctx->conf.json) return 0; in http_open_directory()
1022 dirls_list_t * const dirs = &hctx->dirs; in http_open_directory()
1023 dirls_list_t * const files = &hctx->files; in http_open_directory()
1138 static void http_list_directory(request_st * const r, handler_ctx * const hctx) { in http_list_directory() argument
1139 dirls_list_t * const dirs = &hctx->dirs; in http_list_directory()
1140 dirls_list_t * const files = &hctx->files; in http_list_directory()
1191 memcpy(hctx->path_file, DIRLIST_ENT_NAME(tmp), tmp->namelen + 1); in http_list_directory()
1192 content_type = stat_cache_mimetype_by_xattr(hctx->path); in http_list_directory()
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()
1268 static void mod_dirlisting_json_append (request_st * const r, handler_ctx * const hctx, const int f… in mod_dirlisting_json_append() argument
1269 buffer * const jb = hctx->jb; in mod_dirlisting_json_append()
1275 if (hctx->jfn) { in mod_dirlisting_json_append()
1276 if (__builtin_expect( (write_all(hctx->jfd, BUF_PTR_LEN(jb)) < 0), 0)) { in mod_dirlisting_json_append()
1278 unlink(hctx->jfn); in mod_dirlisting_json_append()
1279 free(hctx->jfn); in mod_dirlisting_json_append()
1280 hctx->jfn = NULL; in mod_dirlisting_json_append()
1281 close(hctx->jfd); in mod_dirlisting_json_append()
1282 hctx->jfd = -1; in mod_dirlisting_json_append()
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);
1368 handler_ctx * const hctx = mod_dirlisting_handler_ctx_init(p); in URIHANDLER_FUNC() local
1383 if (0 != http_open_directory(r, hctx)) { in URIHANDLER_FUNC()
1386 mod_dirlisting_handler_ctx_free(hctx); in URIHANDLER_FUNC()
1392 hctx->jfd = -1; in URIHANDLER_FUNC()
1393 hctx->jb = chunk_buffer_acquire(); in URIHANDLER_FUNC()
1394 buffer_append_string_len(hctx->jb, CONST_STR_LEN("{[")); in URIHANDLER_FUNC()
1396 mod_dirlisting_cache_json_init(r, hctx); in URIHANDLER_FUNC()
1404 r->plugin_ctx[p->id] = hctx; in URIHANDLER_FUNC()
1412 handler_ctx * const hctx = r->plugin_ctx[p->id]; in SUBREQUEST_FUNC() local
1413 if (NULL == hctx) return HANDLER_GO_ON; /*(should not happen)*/ in SUBREQUEST_FUNC()
1415 handler_t rc = http_read_directory(hctx); in SUBREQUEST_FUNC()
1418 if (hctx->jb) { /* (hctx->conf.json) */ in SUBREQUEST_FUNC()
1419 mod_dirlisting_json_append(r, hctx, 1); in SUBREQUEST_FUNC()
1421 if (hctx->jfn) /* (also (hctx->conf.cache) */ in SUBREQUEST_FUNC()
1422 mod_dirlisting_cache_json(r, hctx); in SUBREQUEST_FUNC()
1425 mod_dirlisting_response(r, hctx); in SUBREQUEST_FUNC()
1426 if (hctx->conf.cache) in SUBREQUEST_FUNC()
1427 mod_dirlisting_cache_add(r, hctx); in SUBREQUEST_FUNC()
1432 if (hctx->jb) /* (hctx->conf.json) */ in SUBREQUEST_FUNC()
1433 mod_dirlisting_json_append(r, hctx, 0); in SUBREQUEST_FUNC()
1575 static void mod_dirlisting_cache_add (request_st * const r, handler_ctx * const hctx) { in mod_dirlisting_cache_add() argument
1582 buffer_copy_path_len2(tb, BUF_PTR_LEN(hctx->conf.cache->path), in mod_dirlisting_cache_add()
1585 && 0 != mkdir_recursive(tb->ptr, buffer_clen(hctx->conf.cache->path))) in mod_dirlisting_cache_add()
1599 mod_dirlisting_cache_control(r, hctx->conf.cache->max_age); 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
1622 buffer_copy_path_len2(tb, BUF_PTR_LEN(hctx->conf.cache->path), in mod_dirlisting_cache_json_init()
1625 && 0 != mkdir_recursive(tb->ptr, buffer_clen(hctx->conf.cache->path))) in mod_dirlisting_cache_json_init()
1630 hctx->jfn_len = buffer_clen(tb); in mod_dirlisting_cache_json_init()
1631 hctx->jfd = fd; in mod_dirlisting_cache_json_init()
1632 hctx->jfn = ck_malloc(hctx->jfn_len+1); in mod_dirlisting_cache_json_init()
1633 memcpy(hctx->jfn, tb->ptr, hctx->jfn_len+1); /*(include '\0')*/ 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
1644 const size_t len = hctx->jfn_len - 7; /*(-7 for .XXXXXX)*/ in mod_dirlisting_cache_json()
1646 memcpy(newpath, hctx->jfn, len); in mod_dirlisting_cache_json()
1648 if (0 == fdevent_rename(hctx->jfn, newpath)) in mod_dirlisting_cache_json()
1651 unlink(hctx->jfn); in mod_dirlisting_cache_json()
1652 free(hctx->jfn); in mod_dirlisting_cache_json()
1653 hctx->jfn = NULL; in mod_dirlisting_cache_json()