From fa5db1518b900bc27514b18133658c2caa5ea3b8 Mon Sep 17 00:00:00 2001 From: Rene Krenn Date: Tue, 6 Jun 2017 05:43:36 +0200 Subject: [PATCH] TT#14298 default values for missing leg tokens - for acc src and dst leg tokens added since 3.x: lnp_prefix, user_out Change-Id: I7bdf360bc372e797f58015a04938d5ac714e1bf2 --- cdr.c | 42 ++++++++++++++++++++++++++++++++++-------- config.c | 8 +++++++- config.h | 1 + 3 files changed, 42 insertions(+), 9 deletions(-) diff --git a/cdr.c b/cdr.c index f843122..1b62c52 100644 --- a/cdr.c +++ b/cdr.c @@ -358,8 +358,15 @@ static int cdr_parse_srcleg(char *srcleg, cdr_entry_t *cdr) tmp1 = strchr(tmp2, MED_SEP); if(tmp1 == NULL) { - syslog(LOG_WARNING, "Call-Id '%s' has no separated source lnp prefix, '%s'", cdr->call_id, tmp2); - return -1; + if (strict_leg_tokens) { + syslog(LOG_WARNING, "Call-Id '%s' has no separated source lnp prefix, '%s'", cdr->call_id, tmp2); + return -1; + } else { + cdr->source_lnp_prefix[0] = '\0'; + cdr->source_user_out[0] = '\0'; + syslog(LOG_WARNING, "Call-Id '%s' src leg has missing tokens (using empty lnp prefix, user out) '%s'", cdr->call_id, tmp2); + return 0; + } } *tmp1 = '\0'; g_strlcpy(cdr->source_lnp_prefix, tmp2, sizeof(cdr->source_lnp_prefix)); @@ -368,8 +375,14 @@ static int cdr_parse_srcleg(char *srcleg, cdr_entry_t *cdr) tmp1 = strchr(tmp2, MED_SEP); if(tmp1 == NULL) { - syslog(LOG_WARNING, "Call-Id '%s' has no separated source user out, '%s'", cdr->call_id, tmp2); - return -1; + if (strict_leg_tokens) { + syslog(LOG_WARNING, "Call-Id '%s' has no separated source user out, '%s'", cdr->call_id, tmp2); + return -1; + } else { + cdr->source_user_out[0] = '\0'; + syslog(LOG_WARNING, "Call-Id '%s' src leg has missing tokens (using empty user out) '%s'", cdr->call_id, tmp2); + return 0; + } } *tmp1 = '\0'; g_strlcpy(cdr->source_user_out, tmp2, sizeof(cdr->source_user_out)); @@ -513,8 +526,15 @@ static int cdr_parse_dstleg(char *dstleg, cdr_entry_t *cdr) tmp1 = strchr(tmp2, MED_SEP); if(tmp1 == NULL) { - syslog(LOG_WARNING, "Call-Id '%s' has no separated destination lnp prefix, '%s'", cdr->call_id, tmp2); - return -1; + if (strict_leg_tokens) { + syslog(LOG_WARNING, "Call-Id '%s' has no separated destination lnp prefix, '%s'", cdr->call_id, tmp2); + return -1; + } else { + cdr->destination_lnp_prefix[0] = '\0'; + cdr->destination_user_out[0] = '\0'; + syslog(LOG_WARNING, "Call-Id '%s' dst leg has missing tokens (using empty lnp prefix, user out) '%s'", cdr->call_id, tmp2); + return 0; + } } *tmp1 = '\0'; g_strlcpy(cdr->destination_lnp_prefix, tmp2, sizeof(cdr->destination_lnp_prefix)); @@ -523,8 +543,14 @@ static int cdr_parse_dstleg(char *dstleg, cdr_entry_t *cdr) tmp1 = strchr(tmp2, MED_SEP); if(tmp1 == NULL) { - syslog(LOG_WARNING, "Call-Id '%s' has no separated destination user out, '%s'", cdr->call_id, tmp2); - return -1; + if (strict_leg_tokens) { + syslog(LOG_WARNING, "Call-Id '%s' has no separated destination user out, '%s'", cdr->call_id, tmp2); + return -1; + } else { + cdr->destination_user_out[0] = '\0'; + syslog(LOG_WARNING, "Call-Id '%s' dst leg has missing tokens (using empty user out) '%s'", cdr->call_id, tmp2); + return 0; + } } *tmp1 = '\0'; g_strlcpy(cdr->destination_user_out, tmp2, sizeof(cdr->destination_user_out)); diff --git a/config.c b/config.c index 4d59340..41fa6b5 100644 --- a/config.c +++ b/config.c @@ -34,6 +34,7 @@ unsigned int config_stats_port = MEDIATOR_DEFAULT_STATSPORT; med_stats_period_t config_stats_period = MEDIATOR_DEFAULT_STATSPERIOD; int config_maintenance = 0; +int strict_leg_tokens = 0; static u_int8_t config_pid_path_free = 0; @@ -87,6 +88,7 @@ static void config_help(const char *self) " -X\tThe stats db name (default = '%s').\n" \ " -x\tThe stats db period (default = '%d', 1=hour, 2=day, 3=month).\n" \ " -m\tMaintenance mode (do nothing, just sleep).\n" \ + " -s\tStrict acc fields (move to trash otherwise).\n" \ " -?\tDisplays this message.\n", self, config_pid_path, config_interval, config_med_host, config_med_port, config_med_user, config_med_pass, config_med_db, @@ -100,7 +102,7 @@ int config_parse_cmdopts(int argc, char **argv) { int c; - while((c = getopt(argc, argv, "D:i:dl?h:u:p:b:o:H:U:P:B:O:S:T:R:A:N:Z:z:W:w:X:x:m")) != -1) + while((c = getopt(argc, argv, "D:i:dl?h:u:p:b:o:H:U:P:B:O:S:T:R:A:N:Z:z:W:w:X:x:m:s")) != -1) { if(c == '?') { @@ -262,6 +264,10 @@ int config_parse_cmdopts(int argc, char **argv) { config_maintenance = 1; } + else if(c == 's') + { + strict_leg_tokens = 1; + } } return 0; diff --git a/config.h b/config.h index 6677639..59e3c07 100644 --- a/config.h +++ b/config.h @@ -37,6 +37,7 @@ extern unsigned int config_interval; extern u_int8_t config_dumpcdr; extern int config_maintenance; +extern int strict_leg_tokens; int config_parse_cmdopts(int argc, char **argv); void config_cleanup();