Skip to content

Commit

Permalink
dialplan: Fix startup with a single, non-default partition
Browse files Browse the repository at this point in the history
  • Loading branch information
liviuchircu committed Nov 5, 2020
1 parent 5b86833 commit a67b74d
Show file tree
Hide file tree
Showing 3 changed files with 39 additions and 18 deletions.
12 changes: 6 additions & 6 deletions modules/dialplan/dialplan.c
Expand Up @@ -44,7 +44,6 @@


#define DEFAULT_PARAM "$ruri.user"
#define DEFAULT_PARTITION "default"
#define PARAM_URL "db_url"
#define PARAM_TABLE "table_name"
#define DP_CHAR_COLON ':'
Expand Down Expand Up @@ -315,6 +314,8 @@ static int dp_set_partition(modparam_t type, void* val)
p.s = (char *)val;
p.len = strlen(val);

default_dp_table.len = strlen(default_dp_table.s);

if (dp_create_head(&p)) {
LM_ERR("Error creating head!\n");
return -1;
Expand Down Expand Up @@ -346,6 +347,7 @@ static int mod_init(void)
LM_INFO("initializing module...\n");
init_db_url(default_dp_db_url, 1 /* can be null */);

default_dp_table.len = strlen(default_dp_table.s);
dpid_column.len = strlen(dpid_column.s);
pr_column.len = strlen(pr_column.s);
match_op_column.len = strlen(match_op_column.s);
Expand All @@ -357,11 +359,9 @@ static int mod_init(void)
timerec_column.len = strlen(timerec_column.s);
disabled_column.len = strlen(disabled_column.s);

if (!dp_df_head && str_match(&dp_df_part, _str(DEFAULT_PARTITION))) {
if (default_dp_db_url.s)
dp_head_insert(DP_TYPE_URL, &default_dp_db_url, &dp_df_part);

default_dp_table.len = strlen(default_dp_table.s);
if (!dp_df_head && str_match(&dp_df_part, _str(DEFAULT_PARTITION)) &&
default_dp_db_url.s) {
dp_head_insert(DP_TYPE_URL, &default_dp_db_url, &dp_df_part);
dp_head_insert(DP_TYPE_TABLE, &default_dp_table, &dp_df_part);
}

Expand Down
2 changes: 2 additions & 0 deletions modules/dialplan/dialplan.h
Expand Up @@ -36,6 +36,8 @@
#define REGEX_OP 1
#define EQUAL_OP 0

#define DEFAULT_PARTITION "default"

#define DP_CASE_INSENSITIVE 1
#define DP_INDEX_HASH_SIZE 16

Expand Down
43 changes: 31 additions & 12 deletions modules/dialplan/dp_db.c
Expand Up @@ -169,21 +169,45 @@ void dp_disconnect_db(dp_connection_list_p dp_conn)
int init_data(void)
{
dp_head_p start, tmp;
int found_df_part = 0;

start = dp_hlist;
if (!start) {
if (!dp_hlist) {
LM_ERR("no partition defined, not even the default one!\n");
return -1;
}

/* was the default partition re-pointed? */
if (!str_match(&dp_df_part, _str(DEFAULT_PARTITION))) {
int found = 0;

for (start = dp_hlist; start; start = start->next) {
if (str_match(&dp_df_part, &start->partition)) {
found = 1;
break;
}
}

if (!found) {
LM_ERR("partition not found: '%.*s'\n",
dp_df_part.len, dp_df_part.s);
return -1;
}
}

if (!dp_df_head) {
if (pkg_str_dup(&dp_df_part, &dp_hlist->partition) < 0) {
LM_ERR("oom\n");
return -1;
}

LM_INFO("no 'default' partition set, assuming '%.*s'\n",
dp_df_part.len, dp_df_part.s);
}

start = dp_hlist;
while (start) {
LM_DBG("Adding partition with name [%.*s]\n",
start->partition.len, start->partition.s);

if (str_match(&start->partition, &dp_df_part))
found_df_part = 1;

if (!dp_add_connection(start)) {
LM_ERR("failed to initialize partition '%.*s'\n",
start->partition.len, start->partition.s);
Expand All @@ -195,13 +219,8 @@ int init_data(void)
pkg_free(tmp);
}

if (!found_df_part) {
LM_ERR("partition '%.*s' is not defined\n",
dp_df_part.len, dp_df_part.s);
return -1;
}

dp_hlist = NULL;
dp_df_head = NULL;
return 0;
}

Expand Down

0 comments on commit a67b74d

Please sign in to comment.