ret_t cherokee_handler_dbslayer_configure (cherokee_config_node_t *conf, cherokee_server_t *srv, cherokee_module_props_t **_props) { ret_t ret; cherokee_list_t *i; cherokee_handler_dbslayer_props_t *props; /* Instance a new property object */ if (*_props == NULL) { CHEROKEE_NEW_STRUCT (n, handler_dbslayer_props); cherokee_handler_props_init_base (HANDLER_PROPS(n), MODULE_PROPS_FREE(props_free)); n->balancer = NULL; cherokee_buffer_init (&n->user); cherokee_buffer_init (&n->password); cherokee_buffer_init (&n->db); *_props = MODULE_PROPS(n); } props = PROP_DBSLAYER(*_props); /* Parse the configuration tree */ cherokee_config_node_foreach (i, conf) { cherokee_config_node_t *subconf = CONFIG_NODE(i); if (equal_buf_str (&subconf->key, "balancer")) { ret = cherokee_balancer_instance (&subconf->val, subconf, srv, &props->balancer); if (ret != ret_ok) return ret; } else if (equal_buf_str (&subconf->key, "user")) { cherokee_buffer_clean (&props->user); cherokee_buffer_add_buffer (&props->user, &subconf->val); } else if (equal_buf_str (&subconf->key, "password")) { cherokee_buffer_clean (&props->password); cherokee_buffer_add_buffer (&props->password, &subconf->val); } else if (equal_buf_str (&subconf->key, "db")) { cherokee_buffer_clean (&props->db); cherokee_buffer_add_buffer (&props->db, &subconf->val); } else if (equal_buf_str (&subconf->key, "lang")) { ret = cherokee_dwriter_lang_to_type (&subconf->val, &props->lang); if (ret != ret_ok) { LOG_CRITICAL (CHEROKEE_ERROR_HANDLER_DBSLAYER_LANG, subconf->val.buf); return ret_error; } } }
ret_t cherokee_handler_dbslayer_new (cherokee_handler_t **hdl, void *cnt, cherokee_module_props_t *props) { CHEROKEE_NEW_STRUCT (n, handler_dbslayer); /* Init the base class object */ cherokee_handler_init_base (HANDLER(n), cnt, HANDLER_PROPS(props), PLUGIN_INFO_HANDLER_PTR(dbslayer)); MODULE(n)->init = (handler_func_init_t) cherokee_handler_dbslayer_init; MODULE(n)->free = (module_func_free_t) dbslayer_free; HANDLER(n)->step = (handler_func_step_t) dbslayer_step; HANDLER(n)->add_headers = (handler_func_add_headers_t) dbslayer_add_headers; /* Supported features */ HANDLER(n)->support = hsupport_nothing; /* Properties */ n->src_ref = NULL; n->rollback = false; /* Data writer */ cherokee_dwriter_init (&n->writer, &CONN_THREAD(cnt)->tmp_buf1); n->writer.lang = PROP_DBSLAYER(props)->lang; /* MySQL */ n->conn = mysql_init (NULL); if (unlikely (n->conn == NULL)) { cherokee_handler_free (HANDLER(n)); return ret_nomem; } *hdl = HANDLER(n); return ret_ok; }