From 07780b06aa7b0fe049cc412309cf87e7fb10a0ef Mon Sep 17 00:00:00 2001 From: Boris Kolpackov Date: Thu, 30 Apr 2015 14:25:29 +0200 Subject: Implement module configuration with an option list --- web/apache/log | 12 ++--- web/apache/service | 127 ++++++++++++++++++++++++++++++++++------------------- 2 files changed, 89 insertions(+), 50 deletions(-) (limited to 'web/apache') diff --git a/web/apache/log b/web/apache/log index f8c65e9..50e2f7c 100644 --- a/web/apache/log +++ b/web/apache/log @@ -21,7 +21,7 @@ namespace web { public: - log (request_rec* req) noexcept: req_ (req) {} + log (server_rec* server) noexcept: server_ (server) {} virtual void write (const char* msg) {write (APLOG_ERR, msg);} @@ -47,30 +47,30 @@ namespace web level = std::min (level, APLOG_TRACE8); if (func) - ap_log_rerror (file, + ap_log_error (file, line, APLOG_NO_MODULE, level, 0, - req_, + server_, "[%s]: %s", func, msg); else // skip function name placeholder from log line // - ap_log_rerror (file, + ap_log_error (file, line, APLOG_NO_MODULE, level, 0, - req_, + server_, ": %s", msg); } private: - request_rec* req_; + server_rec* server_; }; } } diff --git a/web/apache/service b/web/apache/service index d003767..cd405ee 100644 --- a/web/apache/service +++ b/web/apache/service @@ -13,8 +13,11 @@ #include #include +#include +#include // unique_ptr #include #include +#include // move() #include #include @@ -27,10 +30,15 @@ namespace web class service: ::module { public: + + using option_names = std::vector; + // Note that the module exemplar is stored by-reference. // template - service (const std::string& name, M& exemplar) + service (const std::string& name, + M& exemplar, + option_names opts = option_names ()) : ::module { STANDARD20_MODULE_STUFF, @@ -38,36 +46,44 @@ namespace web nullptr, nullptr, nullptr, - directives_, + nullptr, ®ister_hooks }, name_ (name), exemplar_ (exemplar), - conf_ (name + "_conf"), - conf_err_ ("A file containing configuration options for module " + - name_), - - // Defines service configuration directives. At the moment the - // only configuration directive is - // "_conf ". Configuration file path - // specified will be passed as a parameter to - // web::module::init call on exemplar_ object when apache worker - // process is started but prior to accepting client requests. - // - directives_ - { - { - conf_.c_str (), - reinterpret_cast (config_file), - this, - RSRC_CONF, - TAKE1, - conf_err_.c_str () - } - } + option_names_ (std::move (opts)) // Doesn't look like handle_ member is required at all. // handle_ (&handle_impl) { + // Fill apache module directive definitions. Directives share + // common name space in apache configuration file, so to prevent name + // clash have to form directive name as a combination of module and + // option names: -