diff --git a/src/demo/config b/src/demo/config new file mode 100644 index 00000000..b63319de --- /dev/null +++ b/src/demo/config @@ -0,0 +1,4 @@ + +ngx_addon_name=ngx_http_demo_module +NGX_ADDON_SRCS="$NGX_ADDON_SRCS $ngx_addon_dir/${ngx_addon_name}.c" +HTTP_MODULES="$HTTP_MODULES $ngx_addon_name" diff --git a/src/demo/ngx_http_demo_module.c b/src/demo/ngx_http_demo_module.c new file mode 100644 index 00000000..1eb58167 --- /dev/null +++ b/src/demo/ngx_http_demo_module.c @@ -0,0 +1,89 @@ +#include +#include +#include + +ngx_module_t ngx_http_demo_module; + +typedef struct { + ngx_str_t echo; +} ngx_http_demo_loc_conf_t; + +ngx_int_t +ngx_http_demo_handler(ngx_http_request_t *r) { + ngx_int_t rc = ngx_http_discard_request_body(r); + if (rc != NGX_OK) { + return rc; + } + + ngx_http_demo_loc_conf_t *dlcf = ngx_http_get_module_loc_conf(r, ngx_http_demo_module); + ngx_str_t echo = dlcf->echo; + + r->headers_out.status = NGX_HTTP_OK; + r->headers_out.content_length_n = echo.len; + rc = ngx_http_send_header(r); + if (rc != NGX_OK) { + return rc; + } + + ngx_buf_t *buf = ngx_create_temp_buf(r->pool, echo.len); + ngx_memcpy(buf->pos, echo.data, echo.len); + buf->last = buf->pos+echo.len; + buf->last_buf = 1; + ngx_log_error(NGX_LOG_ERR, r->connection->log, 0, "what %d", buf->pos); + ngx_log_error(NGX_LOG_ERR, r->connection->log, 0, "what %d", buf->last); + + ngx_chain_t out = {buf, NULL}; + return ngx_http_output_filter(r, &out); +} + +static char* +ngx_http_demo(ngx_conf_t *cf, ngx_command_t *cmd, void *conf) { + ngx_http_core_loc_conf_t *clcf = ngx_http_conf_get_module_loc_conf(cf, ngx_http_core_module); + clcf->handler = ngx_http_demo_handler; + + ngx_str_t *value = cf->args->elts; + ngx_http_demo_loc_conf_t *dlcf = ngx_http_conf_get_module_loc_conf(cf, ngx_http_demo_module); + dlcf->echo = value[1]; + return NGX_CONF_OK; +} +void * +ngx_http_demo_create_loc_conf(ngx_conf_t *cf) { + return ngx_palloc(cf->pool, sizeof(ngx_http_demo_loc_conf_t)); +} + +static ngx_command_t ngx_http_demo_commands[] = { + { + ngx_string("demo"), + NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_CONF_1MORE, + ngx_http_demo, + NGX_HTTP_LOC_CONF_OFFSET, + 0, NULL, + }, + ngx_null_command +}; + +static ngx_http_module_t ngx_http_demo_module_ctx = { + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + &ngx_http_demo_create_loc_conf, + NULL +}; + +ngx_module_t ngx_http_demo_module = { + NGX_MODULE_V1, + &ngx_http_demo_module_ctx, + ngx_http_demo_commands, + NGX_HTTP_MODULE, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NGX_MODULE_V1_PADDING +};