void h2o_fastcgi_register_configurator(h2o_globalconf_t *conf) { struct fastcgi_configurator_t *c = (void *)h2o_configurator_create(conf, sizeof(*c)); /* set default vars */ c->vars = c->_vars_stack; c->vars->io_timeout = H2O_DEFAULT_FASTCGI_IO_TIMEOUT; c->vars->keepalive_timeout = 0; /* setup handlers */ c->super.enter = on_config_enter; c->super.exit = on_config_exit; h2o_configurator_define_command(&c->super, "fastcgi.connect", H2O_CONFIGURATOR_FLAG_PATH | H2O_CONFIGURATOR_FLAG_EXTENSION | H2O_CONFIGURATOR_FLAG_DEFERRED, on_config_connect); h2o_configurator_define_command(&c->super, "fastcgi.spawn", H2O_CONFIGURATOR_FLAG_PATH | H2O_CONFIGURATOR_FLAG_EXTENSION | H2O_CONFIGURATOR_FLAG_DEFERRED, on_config_spawn); h2o_configurator_define_command(&c->super, "fastcgi.timeout.io", H2O_CONFIGURATOR_FLAG_ALL_LEVELS | H2O_CONFIGURATOR_FLAG_EXPECT_SCALAR, on_config_timeout_io); h2o_configurator_define_command(&c->super, "fastcgi.timeout.keepalive", H2O_CONFIGURATOR_FLAG_ALL_LEVELS | H2O_CONFIGURATOR_FLAG_EXPECT_SCALAR, on_config_timeout_keepalive); h2o_configurator_define_command(&c->super, "fastcgi.document_root", H2O_CONFIGURATOR_FLAG_ALL_LEVELS | H2O_CONFIGURATOR_FLAG_EXPECT_SCALAR, on_config_document_root); h2o_configurator_define_command(&c->super, "fastcgi.send-delegated-uri", H2O_CONFIGURATOR_FLAG_ALL_LEVELS | H2O_CONFIGURATOR_FLAG_EXPECT_SCALAR, on_config_send_delegated_uri); }
void h2o_access_log_register_configurator(h2o_globalconf_t *conf) { struct st_h2o_access_log_configurator_t *self = (void *)h2o_configurator_create(conf, sizeof(*self)); self->super.enter = on_config_enter; self->super.exit = on_config_exit; self->handles = self->_handles_stack; h2o_configurator_define_command(&self->super, "access-log", H2O_CONFIGURATOR_FLAG_ALL_LEVELS, on_config); }
void h2o_redirect_register_configurator(h2o_globalconf_t *conf) { h2o_configurator_t *c = h2o_configurator_create(conf, sizeof(*c)); h2o_configurator_define_command(c, "redirect", H2O_CONFIGURATOR_FLAG_PATH, on_config, "redirects the request to given URL prefix\n" " - if the value is a scalar, it is considered as the destination URL prefix\n" " - if the value is a mapping, it should contain the following properties:\n" " status: HTTP status code to be sent (e.g. 301)\n" " url: the destination URL prefix"); }
void h2o_mruby_register_configurator(h2o_globalconf_t *conf) { struct mruby_configurator_t *c = (void *)h2o_configurator_create(conf, sizeof(*c)); c->vars = c->_vars_stack; c->super.enter = on_config_enter; c->super.exit = on_config_exit; /* set mruby script path */ h2o_configurator_define_command(&c->super, "mruby.handler_path", H2O_CONFIGURATOR_FLAG_PATH | H2O_CONFIGURATOR_FLAG_EXPECT_SCALAR, on_config_mruby_handler_path); }
void h2o_configurator__init_core(h2o_globalconf_t *conf) { /* check if already initialized */ if (h2o_configurator_get_command(conf, "files") != NULL) return; { /* `hosts` and `paths` */ h2o_configurator_t *c = h2o_configurator_create(conf, sizeof(*c)); h2o_configurator_define_command(c, "hosts", H2O_CONFIGURATOR_FLAG_GLOBAL | H2O_CONFIGURATOR_FLAG_EXPECT_MAPPING | H2O_CONFIGURATOR_FLAG_DEFERRED, on_config_hosts); h2o_configurator_define_command(c, "paths", H2O_CONFIGURATOR_FLAG_HOST | H2O_CONFIGURATOR_FLAG_EXPECT_MAPPING | H2O_CONFIGURATOR_FLAG_DEFERRED, on_config_paths); }; { /* setup global configurators */ h2o_configurator_t *c = h2o_configurator_create(conf, sizeof(*c)); h2o_configurator_define_command(c, "limit-request-body", H2O_CONFIGURATOR_FLAG_GLOBAL | H2O_CONFIGURATOR_FLAG_EXPECT_SCALAR, on_config_limit_request_body); h2o_configurator_define_command(c, "max-delegations", H2O_CONFIGURATOR_FLAG_GLOBAL | H2O_CONFIGURATOR_FLAG_EXPECT_SCALAR, on_config_max_delegations); h2o_configurator_define_command(c, "http1-request-timeout", H2O_CONFIGURATOR_FLAG_GLOBAL | H2O_CONFIGURATOR_FLAG_EXPECT_SCALAR, on_config_http1_request_timeout); h2o_configurator_define_command(c, "http1-upgrade-to-http2", H2O_CONFIGURATOR_FLAG_GLOBAL | H2O_CONFIGURATOR_FLAG_EXPECT_SCALAR, on_config_http1_upgrade_to_http2); h2o_configurator_define_command(c, "http2-idle-timeout", H2O_CONFIGURATOR_FLAG_GLOBAL | H2O_CONFIGURATOR_FLAG_EXPECT_SCALAR, on_config_http2_idle_timeout); h2o_configurator_define_command(c, "http2-max-concurrent-requests-per-connection", H2O_CONFIGURATOR_FLAG_GLOBAL | H2O_CONFIGURATOR_FLAG_EXPECT_SCALAR, on_config_http2_max_concurrent_requests_per_connection); h2o_configurator_define_command(c, "http2-reprioritize-blocking-assets", H2O_CONFIGURATOR_FLAG_GLOBAL | H2O_CONFIGURATOR_FLAG_EXPECT_SCALAR, on_config_http2_reprioritize_blocking_assets); } }
void h2o_file_register_configurator(h2o_globalconf_t *globalconf) { struct st_h2o_file_configurator_t *self = (void *)h2o_configurator_create(globalconf, sizeof(*self)); self->super.enter = on_config_enter; self->super.exit = on_config_exit; self->vars = self->_vars_stack; self->vars->mimemap = h2o_mimemap_create(); self->vars->index_files = h2o_file_default_index_files; h2o_configurator_define_command(&self->super, "file.dir", H2O_CONFIGURATOR_FLAG_PATH | H2O_CONFIGURATOR_FLAG_EXPECT_SCALAR | H2O_CONFIGURATOR_FLAG_DEFERRED, on_config_dir); h2o_configurator_define_command(&self->super, "file.index", (H2O_CONFIGURATOR_FLAG_ALL_LEVELS & ~H2O_CONFIGURATOR_FLAG_EXTENSION) | H2O_CONFIGURATOR_FLAG_EXPECT_SEQUENCE, on_config_index); h2o_configurator_define_command(&self->super, "file.mime.settypes", (H2O_CONFIGURATOR_FLAG_ALL_LEVELS & ~H2O_CONFIGURATOR_FLAG_EXTENSION) | H2O_CONFIGURATOR_FLAG_EXPECT_MAPPING, on_config_mime_settypes); h2o_configurator_define_command(&self->super, "file.mime.addtypes", (H2O_CONFIGURATOR_FLAG_ALL_LEVELS & ~H2O_CONFIGURATOR_FLAG_EXTENSION) | H2O_CONFIGURATOR_FLAG_EXPECT_MAPPING, on_config_mime_addtypes); h2o_configurator_define_command(&self->super, "file.mime.removetypes", (H2O_CONFIGURATOR_FLAG_ALL_LEVELS & ~H2O_CONFIGURATOR_FLAG_EXTENSION) | H2O_CONFIGURATOR_FLAG_EXPECT_SEQUENCE, on_config_mime_removetypes); h2o_configurator_define_command(&self->super, "file.mime.setdefaulttype", (H2O_CONFIGURATOR_FLAG_ALL_LEVELS & ~H2O_CONFIGURATOR_FLAG_EXTENSION) | H2O_CONFIGURATOR_FLAG_EXPECT_SCALAR, on_config_mime_setdefaulttype); h2o_configurator_define_command(&self->super, "file.custom-handler", (H2O_CONFIGURATOR_FLAG_ALL_LEVELS & ~H2O_CONFIGURATOR_FLAG_EXTENSION) | H2O_CONFIGURATOR_FLAG_SEMI_DEFERRED, on_config_custom_handler); h2o_configurator_define_command(&self->super, "file.etag", (H2O_CONFIGURATOR_FLAG_ALL_LEVELS & ~H2O_CONFIGURATOR_FLAG_EXTENSION) | H2O_CONFIGURATOR_FLAG_EXPECT_SCALAR, on_config_etag); h2o_configurator_define_command(&self->super, "file.send-gzip", (H2O_CONFIGURATOR_FLAG_ALL_LEVELS & ~H2O_CONFIGURATOR_FLAG_EXTENSION) | H2O_CONFIGURATOR_FLAG_EXPECT_SCALAR, on_config_send_gzip); h2o_configurator_define_command(&self->super, "file.dirlisting", (H2O_CONFIGURATOR_FLAG_ALL_LEVELS & ~H2O_CONFIGURATOR_FLAG_EXTENSION) | H2O_CONFIGURATOR_FLAG_EXPECT_SCALAR, on_config_dir_listing); }
void h2o_headers_register_configurator(h2o_globalconf_t *conf) { struct headers_configurator_t *c = (void *)h2o_configurator_create(conf, sizeof(*c)); c->super.enter = on_config_enter; c->super.exit = on_config_exit; #define DEFINE_CMD(name, cb) \ h2o_configurator_define_command(&c->super, name, H2O_CONFIGURATOR_FLAG_ALL_LEVELS | H2O_CONFIGURATOR_FLAG_EXPECT_SCALAR, cb) DEFINE_CMD("header.add", on_config_header_add); DEFINE_CMD("header.append", on_config_header_append); DEFINE_CMD("header.merge", on_config_header_merge); DEFINE_CMD("header.set", on_config_header_set); DEFINE_CMD("header.setifempty", on_config_header_setifempty); DEFINE_CMD("header.unset", on_config_header_unset); #undef DEFINE_CMD c->cmds = c->_cmd_stack; }
void h2o_access_log_register_configurator(h2o_globalconf_t *conf) { struct st_h2o_access_log_configurator_t *self = (void*)h2o_configurator_create(conf, sizeof(*self)); self->super.enter = on_config_enter; self->super.exit = on_config_exit; self->handles = self->_handles_stack; h2o_configurator_define_command(&self->super, "access-log", H2O_CONFIGURATOR_FLAG_GLOBAL | H2O_CONFIGURATOR_FLAG_HOST | H2O_CONFIGURATOR_FLAG_PATH, on_config, "path (and optionally the format) of the access log (default: none)", " - if the value is a scalar, it is treated as the path of the log file", " - if the value is a mapping, its `path` property is treated as the path", " and `format` property is treated as the format", " - if the path starts with `|`, the rest of the path is considered as a ", " command pipe to which the logs should be emitted" ); }
void h2o_file_register_configurator(h2o_globalconf_t *globalconf) { struct st_h2o_file_configurator_t *self = (void *)h2o_configurator_create(globalconf, sizeof(*self)); self->super.enter = on_config_enter; self->super.exit = on_config_exit; self->vars = self->_vars_stack; self->vars->index_files = h2o_file_default_index_files; h2o_configurator_define_command(&self->super, "file.dir", H2O_CONFIGURATOR_FLAG_PATH | H2O_CONFIGURATOR_FLAG_EXPECT_SCALAR | H2O_CONFIGURATOR_FLAG_DEFERRED, on_config_dir); h2o_configurator_define_command(&self->super, "file.file", H2O_CONFIGURATOR_FLAG_PATH | H2O_CONFIGURATOR_FLAG_EXPECT_SCALAR | H2O_CONFIGURATOR_FLAG_DEFERRED, on_config_file); h2o_configurator_define_command(&self->super, "file.index", (H2O_CONFIGURATOR_FLAG_ALL_LEVELS & ~H2O_CONFIGURATOR_FLAG_EXTENSION) | H2O_CONFIGURATOR_FLAG_EXPECT_SEQUENCE, on_config_index); h2o_configurator_define_command(&self->super, "file.etag", (H2O_CONFIGURATOR_FLAG_ALL_LEVELS & ~H2O_CONFIGURATOR_FLAG_EXTENSION) | H2O_CONFIGURATOR_FLAG_EXPECT_SCALAR, on_config_etag); h2o_configurator_define_command(&self->super, "file.send-compressed", (H2O_CONFIGURATOR_FLAG_ALL_LEVELS & ~H2O_CONFIGURATOR_FLAG_EXTENSION) | H2O_CONFIGURATOR_FLAG_EXPECT_SCALAR, on_config_send_compressed); h2o_configurator_define_command(&self->super, "file.send-gzip", (H2O_CONFIGURATOR_FLAG_ALL_LEVELS & ~H2O_CONFIGURATOR_FLAG_EXTENSION) | H2O_CONFIGURATOR_FLAG_EXPECT_SCALAR, on_config_send_compressed); h2o_configurator_define_command(&self->super, "file.dirlisting", (H2O_CONFIGURATOR_FLAG_ALL_LEVELS & ~H2O_CONFIGURATOR_FLAG_EXTENSION) | H2O_CONFIGURATOR_FLAG_EXPECT_SCALAR, on_config_dir_listing); }
void h2o_headers_register_configurator(h2o_globalconf_t *conf) { struct headers_configurator_t *c = (void *)h2o_configurator_create(conf, sizeof(*c)); c->super.enter = on_config_enter; c->super.exit = on_config_exit; #define DEFINE_CMD(name, cb, desc) \ h2o_configurator_define_command(&c->super, name, H2O_CONFIGURATOR_FLAG_GLOBAL | H2O_CONFIGURATOR_FLAG_HOST | \ H2O_CONFIGURATOR_FLAG_PATH | H2O_CONFIGURATOR_FLAG_EXPECT_SCALAR, \ cb, desc) DEFINE_CMD("header.add", on_config_header_add, "adds a new header line to the response headers"); DEFINE_CMD("header.append", on_config_header_append, "adds a new header line, or appends the value to the existing header with\n" "the same name (separated by `,`)"); DEFINE_CMD("header.merge", on_config_header_merge, "adds a new header line, or merges the value to the existing header of\n" "comma-separated values"); DEFINE_CMD("header.set", on_config_header_set, "sets a header line, removing headers with the same name (if exist)"); DEFINE_CMD("header.setifempty", on_config_header_setifempty, "sets a header line, only when a header with the same name does not exist"); DEFINE_CMD("header.unset", on_config_header_unset, "removes headers with the specified name"); #undef DEFINE_CMD c->cmds = c->_cmd_stack; }