From e38d736779328ae0de5f46ad4cc5afbbb93237f6 Mon Sep 17 00:00:00 2001 From: thomas Date: Wed, 24 Jun 2015 20:44:27 +0200 Subject: [PATCH 1/2] Added modparam id_in_avp for carrierroute so the ID may be returned to the AVP variable for easier debugging --- modules/carrierroute/carrierroute.c | 7 ++++ modules/carrierroute/cr_db.c | 61 +++++++++++++++++++++++++++-- 2 files changed, 65 insertions(+), 3 deletions(-) diff --git a/modules/carrierroute/carrierroute.c b/modules/carrierroute/carrierroute.c index a9cc847ee9b..ff530f45527 100644 --- a/modules/carrierroute/carrierroute.c +++ b/modules/carrierroute/carrierroute.c @@ -79,6 +79,7 @@ const str CR_EMPTY_PREFIX = str_init("null"); int mode = 0; int cr_match_mode = 10; int cr_avoid_failed_dests = 1; +int cr_id_in_avp = 0; /************* Declaration of Interface Functions **************************/ static int mod_init(void); @@ -120,6 +121,7 @@ static param_export_t params[]= { {"fetch_rows", INT_PARAM, &default_carrierroute_cfg.fetch_rows }, {"match_mode", INT_PARAM, &cr_match_mode }, {"avoid_failed_destinations", INT_PARAM, &cr_avoid_failed_dests }, + {"id_in_avp", INT_PARAM, &cr_id_in_avp}, {0,0,0} }; @@ -186,6 +188,11 @@ static int mod_init(void) { return -1; } + if (cr_id_in_avp < 0 || cr_id_in_avp > 2) { + LM_ERR("id_in_avp must be between 0 and 2"); + return -1; + } + if (strcmp(config_source, "db") == 0) { mode = CARRIERROUTE_MODE_DB; diff --git a/modules/carrierroute/cr_db.c b/modules/carrierroute/cr_db.c index 65d1ebc8e1f..a5c63467950 100644 --- a/modules/carrierroute/cr_db.c +++ b/modules/carrierroute/cr_db.c @@ -258,7 +258,7 @@ int load_user_carrier(str * user, str * domain) { int load_route_data_db(struct route_data_t * rd) { db1_res_t * res = NULL; db_row_t * row = NULL; - int i, ret; + int i, ret, to_free; struct carrier_data_t * tmp_carrier_data; static str query_str; str tmp_scan_prefix, tmp_rewrite_host, tmp_rewrite_prefix, @@ -349,7 +349,29 @@ int load_route_data_db(struct route_data_t * rd) { tmp_rewrite_host.s=(char *)row->values[COL_REWRITE_HOST].val.string_val; tmp_rewrite_prefix.s=(char *)row->values[COL_REWRITE_PREFIX].val.string_val; tmp_rewrite_suffix.s=(char *)row->values[COL_REWRITE_SUFFIX].val.string_val; - tmp_comment.s=(char *)row->values[COL_COMMENT].val.string_val; + switch(cr_id_in_avp) { + case 0: + //Description only + tmp_comment.s=(char *)row->values[COL_COMMENT].val.string_val; + break; + case 1: + //ID of row + comment + //Malloc sizeof int * 8 bytes + 255 chars for comment from db + " - " + NULL + tmp_comment.s=(char *)pkg_malloc(8 * sizeof(int) + 255 + 3 + 1); + if (!tmp_comment.s) + LM_ERR("No pkg memory left\n"); + snprintf(tmp_comment.s, 8 * sizeof(int) + 255 + 3 + 1, "%d - %s", row->values[COL_ID].val.int_val, row->values[COL_COMMENT].val.string_val); + to_free = 1; + break; + case 2: + //ID of row only + tmp_comment.s=(char *)pkg_malloc(8 * sizeof(int) + 1); + if (!tmp_comment.s) + LM_ERR("No pkg memory left\n"); + snprintf(tmp_comment.s, 8 * sizeof(int) + 1, "%d", row->values[COL_ID].val.int_val); + to_free = 1; + break; + } if (tmp_scan_prefix.s==NULL) tmp_scan_prefix.s=""; if (tmp_rewrite_host.s==NULL) tmp_rewrite_host.s=""; if (tmp_rewrite_prefix.s==NULL) tmp_rewrite_prefix.s=""; @@ -379,6 +401,10 @@ int load_route_data_db(struct route_data_t * rd) { &tmp_comment) == -1) { goto errout; } + if(to_free && tmp_comment.s) { + pkg_free(tmp_comment.s); + to_free = 0; + } } if (DB_CAPABILITY(carrierroute_dbf, DB_CAP_FETCH)) { if(carrierroute_dbf.fetch_result(carrierroute_dbh, &res, cfg_get(carrierroute, carrierroute_cfg, fetch_rows)) < 0) { @@ -409,7 +435,29 @@ int load_route_data_db(struct route_data_t * rd) { tmp_scan_prefix.s=(char *)row->values[FCOL_SCAN_PREFIX].val.string_val; tmp_host_name.s=(char *)row->values[FCOL_HOST_NAME].val.string_val; tmp_reply_code.s=(char *)row->values[FCOL_REPLY_CODE].val.string_val; - tmp_comment.s=(char *)row->values[FCOL_COMMENT].val.string_val; + switch(cr_id_in_avp) { + case 0: + //Description only + tmp_comment.s=(char *)row->values[FCOL_COMMENT].val.string_val; + break; + case 1: + //ID of row + comment + //Malloc sizeof int * 8 bytes + 255 chars for comment from db + " - " + NULL + tmp_comment.s=(char *)pkg_malloc(8 * sizeof(int) + 255 + 3 + 1); + if (!tmp_comment.s) + LM_ERR("No pkg memory left\n"); + snprintf(tmp_comment.s, 8 * sizeof(int) + 255 + 3 + 1, "%d - %s", row->values[FCOL_ID].val.int_val, row->values[FCOL_COMMENT].val.string_val); + to_free = 1; + break; + case 2: + //ID of row only + tmp_comment.s=(char *)pkg_malloc(8 * sizeof(int) + 1); + if (!tmp_comment.s) + LM_ERR("No pkg memory left\n"); + snprintf(tmp_comment.s, 8 * sizeof(int) + 1, "%d", row->values[FCOL_ID].val.int_val); + to_free = 1; + break; + } if (tmp_scan_prefix.s==NULL) tmp_scan_prefix.s=""; if (tmp_host_name.s==NULL) tmp_host_name.s=""; if (tmp_reply_code.s==NULL) tmp_reply_code.s=""; @@ -430,6 +478,10 @@ int load_route_data_db(struct route_data_t * rd) { &tmp_comment) == -1) { goto errout; } + if(to_free && tmp_comment.s) { + pkg_free(tmp_comment.s); + to_free = 0; + } } carrierroute_dbf.free_result(carrierroute_dbh, res); @@ -439,5 +491,8 @@ int load_route_data_db(struct route_data_t * rd) { if (res) { carrierroute_dbf.free_result(carrierroute_dbh, res); } + if(to_free && tmp_comment.s) { + pkg_free(tmp_comment.s); + } return -1; } From b9c9a785d7aae3fc6a1980b14e1787ab18bf2611 Mon Sep 17 00:00:00 2001 From: thomas Date: Wed, 24 Jun 2015 21:32:34 +0200 Subject: [PATCH 2/2] added variable cr_id_in_avp to carrierroute.h --- modules/carrierroute/carrierroute.h | 1 + 1 file changed, 1 insertion(+) diff --git a/modules/carrierroute/carrierroute.h b/modules/carrierroute/carrierroute.h index 83e6da1275d..5f67e2d8dcc 100644 --- a/modules/carrierroute/carrierroute.h +++ b/modules/carrierroute/carrierroute.h @@ -54,6 +54,7 @@ extern const str CR_EMPTY_PREFIX; extern int mode; extern int cr_match_mode; extern int cr_avoid_failed_dests; +extern int cr_id_in_avp; extern int_str cr_uris_avp;