void dbt_driver_register(dbt_driver_t *dd) { if (dd->dd_use_sql) { dd->dd_get = sql_db_get; dd->dd_set = sql_db_set; dd->dd_del = sql_db_del; dd->dd_walk = sql_db_walk; dd->dd_expire = sql_db_expire; } if (dd->dd_init) { dd->dd_init(); } if((sht_insert(dbt_drivers, dd->dd_name, dd)) == -1) { log_die(EX_SOFTWARE, "dbt_driver_register: sht_insert for " "driver \"%s\" failed", dd->dd_name); } log_info("dbt_driver_register: database driver \"%s\" registered", dd->dd_name); return; }
int hitlist_register(char *name) { hitlist_t *hl; ll_t *keys; VAR_INT_T *create; VAR_INT_T *update; VAR_INT_T *count; VAR_INT_T *timeout; VAR_INT_T *extend; VAR_INT_T *cleanup; char *sum; char *table; char *value_field; char *expire_field; if (name == NULL) { log_die(EX_SOFTWARE, "hitlist_register: name is NULL"); } keys = cf_get_value(VT_LIST, HITLIST_NAME, name, "keys", NULL); create = cf_get_value(VT_INT, HITLIST_NAME, name, "create", NULL); update = cf_get_value(VT_INT, HITLIST_NAME, name, "update", NULL); count = cf_get_value(VT_INT, HITLIST_NAME, name, "count", NULL); timeout = cf_get_value(VT_INT, HITLIST_NAME, name, "timeout", NULL); extend = cf_get_value(VT_INT, HITLIST_NAME, name, "extend", NULL); cleanup = cf_get_value(VT_INT, HITLIST_NAME, name, "cleanup", NULL); sum = cf_get_value(VT_STRING, HITLIST_NAME, name, "sum", NULL); table = cf_get_value(VT_STRING, HITLIST_NAME, name, "table", NULL); value_field = cf_get_value(VT_STRING, HITLIST_NAME, name, "value_field", NULL); expire_field = cf_get_value(VT_STRING, HITLIST_NAME, name, "expire_field", NULL); if (keys == NULL) { log_die(EX_SOFTWARE, "hitlist_register: %s: need keys", name); } if (keys->ll_size == 0) { log_die(EX_CONFIG, "hitlist_register: %s: keys is empty", name); } hl = hitlist_create(name, keys, create, update, count, timeout, extend, cleanup, sum, table, value_field, expire_field); if (hl == NULL) { log_die(EX_SOFTWARE, "hitlist_register: hl_create failed"); } if (sht_insert(hitlists, name, hl)) { log_die(EX_SOFTWARE, "hitlist_register: sht_insert failed"); } acl_symbol_register(name, MS_ANY, hitlist_lookup, AS_CACHE); return 0; }
void watchdog(var_t *table, char *stage) { watchdog_t *wd; char *id; if (pthread_mutex_lock(&watchdog_mutex)) { log_sys_error("watchdog: pthread_mutex_lock"); return; } watchdog_init(); // In init id is not set. No problem. id = vtable_get(table, "id"); if (id == NULL) { goto exit; } // Record does not exist wd = sht_lookup(&watchdog_table, id); if (wd == NULL) { wd = watchdog_create(id, stage); if (wd == NULL) { log_error("watchdog: watchdog_create failed"); goto exit; } if (sht_insert(&watchdog_table, id, wd)) { log_error("watchdog: sht_insert failed"); goto exit; } } else { wd->wd_stage = stage; wd->wd_instage = time(NULL); } exit: if (pthread_mutex_unlock(&watchdog_mutex)) { log_sys_error("watchdog: pthread_mutex_unlock"); } return; }
void exp_define(char *name, exp_t *exp) { if (sht_insert(exp_defs, name, exp)) { log_debug("exp_define: sht_insert failed"); log_die(EX_SOFTWARE, "Multiple definition of %s", name); } free(name); return; }
int server_init() { server_function_t *func; /* * Don't start the server if server_socket is empty */ if (!cf_control_socket) { log_debug("server_init: server_socket is empty: exit"); return 0; } /* * Load function table */ if (sht_init(&server_function_table, FUNC_BUCKETS, NULL)) { log_die(EX_SOFTWARE, "server_init: sht_init failed"); } for (func = server_functions; func->sf_name; ++func) { if (sht_insert(&server_function_table, func->sf_name, func)) { log_die(EX_SOFTWARE, "server_init: sht_insert failed"); } } /* * Create server socket */ server_socket = sock_listen(cf_control_socket, BACKLOG); if (server_socket == -1) { log_die(EX_SOFTWARE, "server_init: sock_listen failed"); } /* * Start server thread */ if (util_thread_create(&server_thread, server_main, NULL)) { log_error("server_init: util_thread_create failed"); return -1; } return 0; }