added experimental code to pass unvalidated configuration items to a module

This commit is contained in:
hyung-hwan 2014-11-12 15:39:45 +00:00
parent f049aa4b09
commit c23e2a4a7c
5 changed files with 20 additions and 13 deletions

View File

@ -2045,7 +2045,7 @@ static qse_httpd_server_t* attach_server (qse_httpd_t* httpd, int num, qse_xli_l
static int load_hook_modules (qse_httpd_t* httpd, qse_xli_list_t* hook_list) static int load_hook_modules (qse_httpd_t* httpd, qse_xli_list_t* hook_list)
{ {
qse_char_t buf[32]; qse_char_t buf[32];
qse_xli_pair_t* pair; qse_xli_pair_t* pair, * cfg;
httpd_xtn_t* httpd_xtn; httpd_xtn_t* httpd_xtn;
int i; int i;
@ -2065,7 +2065,8 @@ static int load_hook_modules (qse_httpd_t* httpd, qse_xli_list_t* hook_list)
} }
else else
{ {
qse_httpd_loadmod (httpd, ((qse_xli_str_t*)pair->val)->ptr); cfg = qse_xli_findpair (httpd_xtn->xli, (qse_xli_list_t*)pair->val, QSE_T("config"));
qse_httpd_loadmod (httpd, ((qse_xli_str_t*)pair->val)->ptr, (cfg? cfg->val: QSE_NULL));
/* TODO: error handling and logging */ /* TODO: error handling and logging */
} }
} }
@ -2239,11 +2240,11 @@ static int open_config_file (qse_httpd_t* httpd)
xli_in.type = QSE_XLI_IOSTD_FILE; xli_in.type = QSE_XLI_IOSTD_FILE;
xli_in.u.file.path = httpd_xtn->cfgfile; xli_in.u.file.path = httpd_xtn->cfgfile;
xli_in.u.file.cmgr = QSE_NULL; xli_in.u.file.cmgr = QSE_NULL;
if (qse_xli_readstd (httpd_xtn->xli, &xli_in) <= -1) if (qse_xli_readstd (httpd_xtn->xli, &xli_in) <= -1)
{ {
const qse_xli_loc_t* errloc; const qse_xli_loc_t* errloc;
errloc = qse_xli_geterrloc (httpd_xtn->xli); errloc = qse_xli_geterrloc (httpd_xtn->xli);
if (errloc->line > 0 || errloc->colm > 0) if (errloc->line > 0 || errloc->colm > 0)
@ -2361,7 +2362,7 @@ static int load_config (qse_httpd_t* httpd)
else else
{ {
qse_httpd_server_t* server; qse_httpd_server_t* server;
server = attach_server (httpd, i, (qse_xli_list_t*)pair->val); server = attach_server (httpd, i, (qse_xli_list_t*)pair->val);
if (server) if (server)
{ {

View File

@ -12,6 +12,10 @@ max-nproc = none;
#hooks { #hooks {
# module "ext-1" { # module "ext-1" {
# file = "ext"; # file = "ext";
# config {
# item1 = abc;
# item2 = def;
# }
# } # }
#} #}

View File

@ -29,7 +29,7 @@
#include <qse/cmn/time.h> #include <qse/cmn/time.h>
#include <qse/cmn/tmr.h> #include <qse/cmn/tmr.h>
#include <qse/cmn/env.h> #include <qse/cmn/env.h>
#include <qse/xli/xli.h>
typedef struct qse_httpd_t qse_httpd_t; typedef struct qse_httpd_t qse_httpd_t;
typedef struct qse_httpd_mate_t qse_httpd_mate_t; typedef struct qse_httpd_mate_t qse_httpd_mate_t;
@ -103,7 +103,8 @@ typedef enum qse_httpd_trait_t qse_httpd_trait_t;
typedef struct qse_httpd_mod_t qse_httpd_mod_t; typedef struct qse_httpd_mod_t qse_httpd_mod_t;
typedef int (*qse_httpd_mod_load_t) ( typedef int (*qse_httpd_mod_load_t) (
qse_httpd_mod_t* mod qse_httpd_mod_t* mod,
const qse_xli_list_t* cfg
); );
typedef void (*qse_httpd_mod_unload_t) ( typedef void (*qse_httpd_mod_unload_t) (
@ -1419,8 +1420,9 @@ QSE_EXPORT int qse_httpd_rewriteurl (
); );
QSE_EXPORT int qse_httpd_loadmod ( QSE_EXPORT int qse_httpd_loadmod (
qse_httpd_t* httpd, qse_httpd_t* httpd,
const qse_char_t* name const qse_char_t* name,
const qse_xli_list_t* list
); );
QSE_EXPORT qse_httpd_mod_t* qse_httpd_findmod ( QSE_EXPORT qse_httpd_mod_t* qse_httpd_findmod (

View File

@ -115,6 +115,7 @@ enum qse_xli_trait_t
* "tg" is stored into the tag field of qse_xli_str_t. */ * "tg" is stored into the tag field of qse_xli_str_t. */
QSE_XLI_STRTAG = (1 << 10), QSE_XLI_STRTAG = (1 << 10),
/** enable pair validation against pair definitions while reading */
QSE_XLI_VALIDATE = (1 << 11) QSE_XLI_VALIDATE = (1 << 11)
}; };
typedef enum qse_xli_trait_t qse_xli_trait_t; typedef enum qse_xli_trait_t qse_xli_trait_t;
@ -668,7 +669,7 @@ QSE_EXPORT int qse_xli_undefinepair (
QSE_EXPORT void qse_xli_undefinepairs ( QSE_EXPORT void qse_xli_undefinepairs (
qse_xli_t* xli qse_xli_t* xli
); );
QSE_EXPORT int qse_xli_read ( QSE_EXPORT int qse_xli_read (
qse_xli_t* xli, qse_xli_t* xli,
qse_xli_io_impl_t io qse_xli_io_impl_t io
@ -679,7 +680,6 @@ QSE_EXPORT int qse_xli_write (
qse_xli_io_impl_t io qse_xli_io_impl_t io
); );
QSE_EXPORT void* qse_getxlipairxtn ( QSE_EXPORT void* qse_getxlipairxtn (
qse_xli_pair_t* pair qse_xli_pair_t* pair
); );

View File

@ -2236,7 +2236,7 @@ static void unload_all_modules (qse_httpd_t* httpd)
} }
} }
int qse_httpd_loadmod (qse_httpd_t* httpd, const qse_char_t* name) int qse_httpd_loadmod (qse_httpd_t* httpd, const qse_char_t* name, const qse_xli_list_t* cfg)
{ {
qse_httpd_mod_t* mod; qse_httpd_mod_t* mod;
qse_size_t name_len, prefix_len, postfix_len, fullname_len; qse_size_t name_len, prefix_len, postfix_len, fullname_len;
@ -2308,7 +2308,7 @@ int qse_httpd_loadmod (qse_httpd_t* httpd, const qse_char_t* name)
} }
} }
if (load == QSE_NULL || load (mod) <= -1) if (load == QSE_NULL || load (mod, cfg) <= -1)
{ {
httpd->opt.scb.mod.close (httpd, mod->handle); httpd->opt.scb.mod.close (httpd, mod->handle);
qse_httpd_freemem (httpd, mod); qse_httpd_freemem (httpd, mod);