static void reload(rpc_t* rpc, void* c) { lock_get(reload_lock); if (reload_tables() != 1) rpc->fault(c, 500, "LCR Module Reload Failed"); lock_release(reload_lock); }
/* * RPC command to reload domain table */ static void domain_rpc_reload(rpc_t* rpc, void* ctx) { lock_get(reload_lock); if (reload_tables() < 0) { rpc->fault(ctx, 400, "Reload of domain tables failed"); } lock_release(reload_lock); }
static int mod_init(void) { LM_DBG("initializing\n"); if (register_mi_mod(exports.name, mi_cmds) != 0) { LM_ERR("failed to register MI commands\n"); return -1; } if (domain_init_rpc() != 0) { LM_ERR("failed to register RPC commands\n"); return -1; } if (domain_reg_myself !=0 ) { if (register_check_self_func(domain_check_self) <0 ) { LM_ERR("failed to register check self function\n"); return -1; } } /* Bind database */ if (domain_db_bind(&db_url)) { LM_DBG("Usign db_url [%.*s]\n", db_url.len, db_url.s); LM_ERR("no database module found. Have you configure thed \"db_url\" modparam properly?\n"); return -1; } /* Check table versions */ if (domain_db_init(&db_url) < 0) { LM_ERR("unable to open database connection\n"); return -1; } if (domain_db_ver(&domain_table, DOMAIN_TABLE_VERSION) < 0) { LM_ERR("error during check of domain table version\n"); domain_db_close(); goto error; } if (domain_db_ver(&domain_attrs_table, DOMAIN_ATTRS_TABLE_VERSION) < 0) { LM_ERR("error during check of domain_attrs table version\n"); domain_db_close(); goto error; } domain_db_close(); /* Initializing hash tables and hash table variable */ hash_table = (struct domain_list ***)shm_malloc (sizeof(struct domain_list *)); hash_table_1 = (struct domain_list **)shm_malloc (sizeof(struct domain_list *) * (DOM_HASH_SIZE + 1)); hash_table_2 = (struct domain_list **)shm_malloc (sizeof(struct domain_list *) * (DOM_HASH_SIZE + 1)); if ((hash_table == 0) || (hash_table_1 == 0) || (hash_table_2 == 0)) { LM_ERR("no memory for hash table\n"); goto error; } memset(hash_table_1, 0, sizeof(struct domain_list *) * (DOM_HASH_SIZE + 1)); memset(hash_table_2, 0, sizeof(struct domain_list *) * (DOM_HASH_SIZE + 1)); *hash_table = hash_table_1; /* Allocate and initialize locks */ reload_lock = lock_alloc(); if (reload_lock == NULL) { LM_ERR("cannot allocate reload_lock\n"); goto error; } if (lock_init(reload_lock) == NULL) { LM_ERR("cannot init reload_lock\n"); goto error; } /* First reload */ lock_get(reload_lock); if (reload_tables() == -1) { lock_release(reload_lock); LM_CRIT("domain reload failed\n"); goto error; } lock_release(reload_lock); return 0; error: destroy(); return -1; }