From 88e2df2e4b34841f562f846861913bae3f1a42ed Mon Sep 17 00:00:00 2001 From: Richard Fuchs Date: Tue, 13 Oct 2020 09:47:00 -0400 Subject: [PATCH] TT#97150 restore strings broken up by separator parsing This is relevant for records coming from Redis, as the insertion into the trash and backup tables is done from the strings kept in memory. Change-Id: I1398f7bfc0d4a0c2da8b8104dc4589ea9d983da7 (cherry picked from commit 6e957e69b7ee5cc0d21a3b40d917a0f3ce70eab6) (cherry picked from commit d9dd8eebdf40bf2a9e750bb507bfce5348130c43) --- cdr.c | 35 +++++++++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) diff --git a/cdr.c b/cdr.c index ccfc546..ce0b80c 100644 --- a/cdr.c +++ b/cdr.c @@ -249,6 +249,7 @@ static int cdr_parse_srcleg(char *srcleg, cdr_entry_t *cdr) } *tmp1 = '\0'; g_strlcpy(cdr->source_user_id, tmp2, sizeof(cdr->source_user_id)); + *tmp1 = MED_SEP; tmp2 = ++tmp1; tmp1 = strchr(tmp2, MED_SEP); @@ -260,6 +261,7 @@ static int cdr_parse_srcleg(char *srcleg, cdr_entry_t *cdr) *tmp1 = '\0'; g_strlcpy(cdr->source_user, tmp2, sizeof(cdr->source_user)); uri_unescape(cdr->source_user); + *tmp1 = MED_SEP; tmp2 = ++tmp1; tmp1 = strchr(tmp2, MED_SEP); @@ -270,6 +272,7 @@ static int cdr_parse_srcleg(char *srcleg, cdr_entry_t *cdr) } *tmp1 = '\0'; g_strlcpy(cdr->source_domain, tmp2, sizeof(cdr->source_domain)); + *tmp1 = MED_SEP; tmp2 = ++tmp1; @@ -282,6 +285,7 @@ static int cdr_parse_srcleg(char *srcleg, cdr_entry_t *cdr) *tmp1 = '\0'; g_strlcpy(cdr->source_cli, tmp2, sizeof(cdr->source_cli)); uri_unescape(cdr->source_cli); + *tmp1 = MED_SEP; tmp2 = ++tmp1; tmp1 = strchr(tmp2, MED_SEP); @@ -293,6 +297,7 @@ static int cdr_parse_srcleg(char *srcleg, cdr_entry_t *cdr) *tmp1 = '\0'; g_strlcpy(cdr->source_ext_subscriber_id, tmp2, sizeof(cdr->source_ext_subscriber_id)); uri_unescape(cdr->source_ext_subscriber_id); + *tmp1 = MED_SEP; tmp2 = ++tmp1; tmp1 = strchr(tmp2, MED_SEP); @@ -304,6 +309,7 @@ static int cdr_parse_srcleg(char *srcleg, cdr_entry_t *cdr) *tmp1 = '\0'; g_strlcpy(cdr->source_ext_contract_id, tmp2, sizeof(cdr->source_ext_contract_id)); uri_unescape(cdr->source_ext_contract_id); + *tmp1 = MED_SEP; tmp2 = ++tmp1; tmp1 = strchr(tmp2, MED_SEP); @@ -314,6 +320,7 @@ static int cdr_parse_srcleg(char *srcleg, cdr_entry_t *cdr) } *tmp1 = '\0'; cdr->source_account_id = atoll(tmp2); + *tmp1 = MED_SEP; tmp2 = ++tmp1; tmp1 = strchr(tmp2, MED_SEP); @@ -324,6 +331,7 @@ static int cdr_parse_srcleg(char *srcleg, cdr_entry_t *cdr) } *tmp1 = '\0'; g_strlcpy(cdr->peer_auth_user, tmp2, sizeof(cdr->peer_auth_user)); + *tmp1 = MED_SEP; tmp2 = ++tmp1; tmp1 = strchr(tmp2, MED_SEP); @@ -334,6 +342,7 @@ static int cdr_parse_srcleg(char *srcleg, cdr_entry_t *cdr) } *tmp1 = '\0'; g_strlcpy(cdr->peer_auth_realm, tmp2, sizeof(cdr->peer_auth_realm)); + *tmp1 = MED_SEP; tmp2 = ++tmp1; tmp1 = strchr(tmp2, MED_SEP); @@ -344,6 +353,7 @@ static int cdr_parse_srcleg(char *srcleg, cdr_entry_t *cdr) } *tmp1 = '\0'; cdr->source_clir = atoi(tmp2); + *tmp1 = MED_SEP; tmp2 = ++tmp1; tmp1 = strchr(tmp2, MED_SEP); @@ -354,6 +364,7 @@ static int cdr_parse_srcleg(char *srcleg, cdr_entry_t *cdr) } *tmp1 = '\0'; g_strlcpy(cdr->call_type, tmp2, sizeof(cdr->call_type)); + *tmp1 = MED_SEP; tmp2 = ++tmp1; tmp1 = strchr(tmp2, MED_SEP); @@ -364,6 +375,7 @@ static int cdr_parse_srcleg(char *srcleg, cdr_entry_t *cdr) } *tmp1 = '\0'; g_strlcpy(cdr->source_ip, tmp2, sizeof(cdr->source_ip)); + *tmp1 = MED_SEP; tmp2 = ++tmp1; tmp1 = strchr(tmp2, MED_SEP); @@ -374,6 +386,7 @@ static int cdr_parse_srcleg(char *srcleg, cdr_entry_t *cdr) } *tmp1 = '\0'; cdr->init_time = g_strtod(tmp2, NULL); + *tmp1 = MED_SEP; tmp2 = ++tmp1; int i; @@ -387,6 +400,7 @@ static int cdr_parse_srcleg(char *srcleg, cdr_entry_t *cdr) } *tmp1 = '\0'; g_strlcpy(cdr->source_gpp[i], tmp2, sizeof(cdr->source_gpp[i])); + *tmp1 = MED_SEP; tmp2 = ++tmp1; } @@ -405,6 +419,7 @@ static int cdr_parse_srcleg(char *srcleg, cdr_entry_t *cdr) } *tmp1 = '\0'; g_strlcpy(cdr->source_lnp_prefix, tmp2, sizeof(cdr->source_lnp_prefix)); + *tmp1 = MED_SEP; tmp2 = ++tmp1; tmp1 = strchr(tmp2, MED_SEP); @@ -422,6 +437,7 @@ static int cdr_parse_srcleg(char *srcleg, cdr_entry_t *cdr) *tmp1 = '\0'; g_strlcpy(cdr->source_user_out, tmp2, sizeof(cdr->source_user_out)); uri_unescape(cdr->source_user_out); + *tmp1 = MED_SEP; tmp2 = ++tmp1; tmp1 = strchr(tmp2, MED_SEP); @@ -432,6 +448,7 @@ static int cdr_parse_srcleg(char *srcleg, cdr_entry_t *cdr) } *tmp1 = '\0'; g_strlcpy(cdr->source_lnp_type, tmp2, sizeof(cdr->source_lnp_type)); + *tmp1 = MED_SEP; tmp2 = ++tmp1; tmp1 = strchr(tmp2, MED_SEP); @@ -442,6 +459,7 @@ static int cdr_parse_srcleg(char *srcleg, cdr_entry_t *cdr) } *tmp1 = '\0'; g_strlcpy(cdr->header_pai, tmp2, sizeof(cdr->header_pai)); + *tmp1 = MED_SEP; tmp2 = ++tmp1; tmp1 = strchr(tmp2, MED_SEP); @@ -452,6 +470,7 @@ static int cdr_parse_srcleg(char *srcleg, cdr_entry_t *cdr) } *tmp1 = '\0'; g_strlcpy(cdr->header_diversion, tmp2, sizeof(cdr->header_diversion)); + *tmp1 = MED_SEP; tmp2 = ++tmp1; return 0; @@ -471,6 +490,7 @@ static int cdr_parse_dstleg(char *dstleg, cdr_entry_t *cdr) } *tmp1 = '\0'; cdr->split = atoi(tmp2); + *tmp1 = MED_SEP; tmp2 = ++tmp1; tmp1 = strchr(tmp2, MED_SEP); @@ -482,6 +502,7 @@ static int cdr_parse_dstleg(char *dstleg, cdr_entry_t *cdr) *tmp1 = '\0'; g_strlcpy(cdr->destination_ext_subscriber_id, tmp2, sizeof(cdr->destination_ext_subscriber_id)); uri_unescape(cdr->destination_ext_subscriber_id); + *tmp1 = MED_SEP; tmp2 = ++tmp1; tmp1 = strchr(tmp2, MED_SEP); @@ -493,6 +514,7 @@ static int cdr_parse_dstleg(char *dstleg, cdr_entry_t *cdr) *tmp1 = '\0'; g_strlcpy(cdr->destination_ext_contract_id, tmp2, sizeof(cdr->destination_ext_contract_id)); uri_unescape(cdr->destination_ext_contract_id); + *tmp1 = MED_SEP; tmp2 = ++tmp1; tmp1 = strchr(tmp2, MED_SEP); @@ -503,6 +525,7 @@ static int cdr_parse_dstleg(char *dstleg, cdr_entry_t *cdr) } *tmp1 = '\0'; cdr->destination_account_id = atoll(tmp2); + *tmp1 = MED_SEP; tmp2 = ++tmp1; tmp1 = strchr(tmp2, MED_SEP); @@ -513,6 +536,7 @@ static int cdr_parse_dstleg(char *dstleg, cdr_entry_t *cdr) } *tmp1 = '\0'; g_strlcpy(cdr->destination_dialed, tmp2, sizeof(cdr->destination_dialed)); + *tmp1 = MED_SEP; tmp2 = ++tmp1; tmp1 = strchr(tmp2, MED_SEP); @@ -523,6 +547,7 @@ static int cdr_parse_dstleg(char *dstleg, cdr_entry_t *cdr) } *tmp1 = '\0'; g_strlcpy(cdr->destination_user_id, tmp2, sizeof(cdr->destination_user_id)); + *tmp1 = MED_SEP; tmp2 = ++tmp1; tmp1 = strchr(tmp2, MED_SEP); @@ -533,6 +558,7 @@ static int cdr_parse_dstleg(char *dstleg, cdr_entry_t *cdr) } *tmp1 = '\0'; g_strlcpy(cdr->destination_user, tmp2, sizeof(cdr->destination_user)); + *tmp1 = MED_SEP; tmp2 = ++tmp1; tmp1 = strchr(tmp2, MED_SEP); @@ -543,6 +569,7 @@ static int cdr_parse_dstleg(char *dstleg, cdr_entry_t *cdr) } *tmp1 = '\0'; g_strlcpy(cdr->destination_domain, tmp2, sizeof(cdr->destination_domain)); + *tmp1 = MED_SEP; tmp2 = ++tmp1; tmp1 = strchr(tmp2, MED_SEP); @@ -553,6 +580,7 @@ static int cdr_parse_dstleg(char *dstleg, cdr_entry_t *cdr) } *tmp1 = '\0'; g_strlcpy(cdr->destination_user_in, tmp2, sizeof(cdr->destination_user_in)); + *tmp1 = MED_SEP; tmp2 = ++tmp1; tmp1 = strchr(tmp2, MED_SEP); @@ -563,6 +591,7 @@ static int cdr_parse_dstleg(char *dstleg, cdr_entry_t *cdr) } *tmp1 = '\0'; g_strlcpy(cdr->destination_domain_in, tmp2, sizeof(cdr->destination_domain_in)); + *tmp1 = MED_SEP; tmp2 = ++tmp1; tmp1 = strchr(tmp2, MED_SEP); @@ -573,6 +602,7 @@ static int cdr_parse_dstleg(char *dstleg, cdr_entry_t *cdr) } *tmp1 = '\0'; cdr->destination_lcr_id = atoll(tmp2); + *tmp1 = MED_SEP; tmp2 = ++tmp1; int i; @@ -586,6 +616,7 @@ static int cdr_parse_dstleg(char *dstleg, cdr_entry_t *cdr) } *tmp1 = '\0'; g_strlcpy(cdr->destination_gpp[i], tmp2, sizeof(cdr->destination_gpp[i])); + *tmp1 = MED_SEP; tmp2 = ++tmp1; } @@ -604,6 +635,7 @@ static int cdr_parse_dstleg(char *dstleg, cdr_entry_t *cdr) } *tmp1 = '\0'; g_strlcpy(cdr->destination_lnp_prefix, tmp2, sizeof(cdr->destination_lnp_prefix)); + *tmp1 = MED_SEP; tmp2 = ++tmp1; tmp1 = strchr(tmp2, MED_SEP); @@ -620,6 +652,7 @@ static int cdr_parse_dstleg(char *dstleg, cdr_entry_t *cdr) } *tmp1 = '\0'; g_strlcpy(cdr->destination_user_out, tmp2, sizeof(cdr->destination_user_out)); + *tmp1 = MED_SEP; tmp2 = ++tmp1; tmp1 = strchr(tmp2, MED_SEP); @@ -630,6 +663,7 @@ static int cdr_parse_dstleg(char *dstleg, cdr_entry_t *cdr) } *tmp1 = '\0'; g_strlcpy(cdr->destination_lnp_type, tmp2, sizeof(cdr->destination_lnp_type)); + *tmp1 = MED_SEP; tmp2 = ++tmp1; tmp1 = strchr(tmp2, MED_SEP); @@ -640,6 +674,7 @@ static int cdr_parse_dstleg(char *dstleg, cdr_entry_t *cdr) } *tmp1 = '\0'; g_strlcpy(cdr->furnished_charging_info, tmp2, sizeof(cdr->furnished_charging_info)); + *tmp1 = MED_SEP; tmp2 = ++tmp1; return 0;