From e76a0acfccdd2a76252f220a2b530b19c5dfa1ba Mon Sep 17 00:00:00 2001 From: Daniel-Constantin Mierla Date: Thu, 16 Nov 2017 15:34:17 +0100 Subject: [PATCH] drouting: clang format the source code --- src/modules/drouting/dr_load.c | 428 +++++++++-------- src/modules/drouting/dr_load.h | 4 +- src/modules/drouting/dr_time.c | 684 +++++++++++++------------- src/modules/drouting/dr_time.h | 66 ++- src/modules/drouting/drouting.c | 749 +++++++++++++++-------------- src/modules/drouting/parse.h | 8 +- src/modules/drouting/prefix_tree.c | 179 +++---- src/modules/drouting/prefix_tree.h | 145 +++--- src/modules/drouting/routing.c | 324 ++++++------- src/modules/drouting/routing.h | 81 ++-- 10 files changed, 1274 insertions(+), 1394 deletions(-) diff --git a/src/modules/drouting/dr_load.c b/src/modules/drouting/dr_load.c index e80bda87910..e8499449402 100644 --- a/src/modules/drouting/dr_load.c +++ b/src/modules/drouting/dr_load.c @@ -41,12 +41,12 @@ #include "parse.h" -#define DST_ID_DRD_COL "gwid" -#define ADDRESS_DRD_COL "address" -#define STRIP_DRD_COL "strip" -#define PREFIX_DRD_COL "pri_prefix" -#define TYPE_DRD_COL "type" -#define ATTRS_DRD_COL "attrs" +#define DST_ID_DRD_COL "gwid" +#define ADDRESS_DRD_COL "address" +#define STRIP_DRD_COL "strip" +#define PREFIX_DRD_COL "pri_prefix" +#define TYPE_DRD_COL "type" +#define ATTRS_DRD_COL "attrs" static str dst_id_drd_col = str_init(DST_ID_DRD_COL); static str address_drd_col = str_init(ADDRESS_DRD_COL); static str strip_drd_col = str_init(STRIP_DRD_COL); @@ -54,13 +54,13 @@ static str prefix_drd_col = str_init(PREFIX_DRD_COL); static str type_drd_col = str_init(TYPE_DRD_COL); static str attrs_drd_col = str_init(ATTRS_DRD_COL); -#define RULE_ID_DRR_COL "ruleid" -#define GROUP_DRR_COL "groupid" -#define PREFIX_DRR_COL "prefix" -#define TIME_DRR_COL "timerec" -#define PRIORITY_DRR_COL "priority" -#define ROUTEID_DRR_COL "routeid" -#define DSTLIST_DRR_COL "gwlist" +#define RULE_ID_DRR_COL "ruleid" +#define GROUP_DRR_COL "groupid" +#define PREFIX_DRR_COL "prefix" +#define TIME_DRR_COL "timerec" +#define PRIORITY_DRR_COL "priority" +#define ROUTEID_DRR_COL "routeid" +#define DSTLIST_DRR_COL "gwlist" static str rule_id_drr_col = str_init(RULE_ID_DRR_COL); static str group_drr_col = str_init(GROUP_DRR_COL); static str prefix_drr_col = str_init(PREFIX_DRR_COL); @@ -69,59 +69,61 @@ static str priority_drr_col = str_init(PRIORITY_DRR_COL); static str routeid_drr_col = str_init(ROUTEID_DRR_COL); static str dstlist_drr_col = str_init(DSTLIST_DRR_COL); -#define ID_DRL_COL "id" +#define ID_DRL_COL "id" #define GWLIST_DRL_CAL "gwlist" static str id_drl_col = str_init(ID_DRL_COL); static str gwlist_drl_col = str_init(GWLIST_DRL_CAL); -struct dr_gwl_tmp { +struct dr_gwl_tmp +{ unsigned int id; char *gwlist; struct dr_gwl_tmp *next; }; -static struct dr_gwl_tmp* dr_gw_lists = NULL; - -#define check_val( _val, _type, _not_null, _is_empty_str) \ - do{\ - if ((_val)->type!=_type) { \ - LM_ERR("bad colum type\n");\ - goto error;\ - } \ - if (_not_null && (_val)->nul) { \ - LM_ERR("nul column\n");\ - goto error;\ - } \ - if (_is_empty_str && VAL_STRING(_val)==0) { \ - LM_ERR("empty str column\n");\ - goto error;\ - } \ - }while(0) +static struct dr_gwl_tmp *dr_gw_lists = NULL; + +#define check_val(_val, _type, _not_null, _is_empty_str) \ + do { \ + if((_val)->type != _type) { \ + LM_ERR("bad colum type\n"); \ + goto error; \ + } \ + if(_not_null && (_val)->nul) { \ + LM_ERR("nul column\n"); \ + goto error; \ + } \ + if(_is_empty_str && VAL_STRING(_val) == 0) { \ + LM_ERR("empty str column\n"); \ + goto error; \ + } \ + } while(0) #define TR_SEPARATOR '|' -#define load_TR_value( _p,_s, _tr, _func, _err, _done) \ - do{ \ - _s = strchr(_p, (int)TR_SEPARATOR); \ - if (_s) \ - *_s = 0; \ - /*DBG("----parsing tr param <%s>\n",_p);*/\ - if(_s != _p) {\ - if( _func( _tr, _p)) {\ - if (_s) *_s = TR_SEPARATOR; \ - goto _err; \ - } \ - } \ - if (_s) { \ - *_s = TR_SEPARATOR; \ - _p = _s+1;\ - if ( *(_p)==0 ) \ - goto _done; \ - } else {\ - goto _done; \ - }\ +#define load_TR_value(_p, _s, _tr, _func, _err, _done) \ + do { \ + _s = strchr(_p, (int)TR_SEPARATOR); \ + if(_s) \ + *_s = 0; \ + /*DBG("----parsing tr param <%s>\n",_p);*/ \ + if(_s != _p) { \ + if(_func(_tr, _p)) { \ + if(_s) \ + *_s = TR_SEPARATOR; \ + goto _err; \ + } \ + } \ + if(_s) { \ + *_s = TR_SEPARATOR; \ + _p = _s + 1; \ + if(*(_p) == 0) \ + goto _done; \ + } else { \ + goto _done; \ + } \ } while(0) extern int dr_fetch_rows; @@ -134,13 +136,13 @@ static int add_tmp_gw_list(unsigned int id, char *list) unsigned int list_len; list_len = strlen(list) + 1; - tmp = (struct dr_gwl_tmp*)pkg_malloc(sizeof(struct dr_gwl_tmp) + list_len); - if (tmp==NULL) { + tmp = (struct dr_gwl_tmp *)pkg_malloc(sizeof(struct dr_gwl_tmp) + list_len); + if(tmp == NULL) { LM_ERR("no more pkg mem\n"); return -1; } tmp->id = id; - tmp->gwlist = (char*)(tmp+1); + tmp->gwlist = (char *)(tmp + 1); memcpy(tmp->gwlist, list, list_len); tmp->next = dr_gw_lists; @@ -148,12 +150,13 @@ static int add_tmp_gw_list(unsigned int id, char *list) return 0; } -static char* get_tmp_gw_list(unsigned int id) +static char *get_tmp_gw_list(unsigned int id) { struct dr_gwl_tmp *tmp; - for( tmp=dr_gw_lists ; tmp ; tmp=tmp->next ) - if (tmp->id == id) return tmp->gwlist; + for(tmp = dr_gw_lists; tmp; tmp = tmp->next) + if(tmp->id == id) + return tmp->gwlist; return NULL; } @@ -161,7 +164,7 @@ static void free_tmp_gw_list(void) { struct dr_gwl_tmp *tmp, *tmp1; - for( tmp=dr_gw_lists ; tmp ; ) { + for(tmp = dr_gw_lists; tmp;) { tmp1 = tmp; tmp = tmp->next; pkg_free(tmp1); @@ -170,88 +173,88 @@ static void free_tmp_gw_list(void) } -static inline tmrec_t* parse_time_def(char *time_str) +static inline tmrec_t *parse_time_def(char *time_str) { tmrec_t *time_rec; - char *p,*s; + char *p, *s; p = time_str; time_rec = 0; - time_rec = (tmrec_t*)shm_malloc(sizeof(tmrec_t)); - if (time_rec==0) { + time_rec = (tmrec_t *)shm_malloc(sizeof(tmrec_t)); + if(time_rec == 0) { LM_ERR("no more pkg mem\n"); goto error; } - memset( time_rec, 0, sizeof(tmrec_t)); + memset(time_rec, 0, sizeof(tmrec_t)); /* empty definition? */ - if ( time_str==0 || *time_str==0 ) + if(time_str == 0 || *time_str == 0) goto done; - load_TR_value( p, s, time_rec, tr_parse_dtstart, parse_error, done); - load_TR_value( p, s, time_rec, tr_parse_duration, parse_error, done); - load_TR_value( p, s, time_rec, tr_parse_freq, parse_error, done); - load_TR_value( p, s, time_rec, tr_parse_until, parse_error, done); - load_TR_value( p, s, time_rec, tr_parse_interval, parse_error, done); - load_TR_value( p, s, time_rec, tr_parse_byday, parse_error, done); - load_TR_value( p, s, time_rec, tr_parse_bymday, parse_error, done); - load_TR_value( p, s, time_rec, tr_parse_byyday, parse_error, done); - load_TR_value( p, s, time_rec, tr_parse_byweekno, parse_error, done); - load_TR_value( p, s, time_rec, tr_parse_bymonth, parse_error, done); - - /* success */ + load_TR_value(p, s, time_rec, tr_parse_dtstart, parse_error, done); + load_TR_value(p, s, time_rec, tr_parse_duration, parse_error, done); + load_TR_value(p, s, time_rec, tr_parse_freq, parse_error, done); + load_TR_value(p, s, time_rec, tr_parse_until, parse_error, done); + load_TR_value(p, s, time_rec, tr_parse_interval, parse_error, done); + load_TR_value(p, s, time_rec, tr_parse_byday, parse_error, done); + load_TR_value(p, s, time_rec, tr_parse_bymday, parse_error, done); + load_TR_value(p, s, time_rec, tr_parse_byyday, parse_error, done); + load_TR_value(p, s, time_rec, tr_parse_byweekno, parse_error, done); + load_TR_value(p, s, time_rec, tr_parse_bymonth, parse_error, done); + +/* success */ done: return time_rec; parse_error: - LM_ERR("parse error in <%s> around position %i\n", - time_str, (int)(long)(p-time_str)); + LM_ERR("parse error in <%s> around position %i\n", time_str, + (int)(long)(p - time_str)); error: - if (time_rec) - tmrec_free( time_rec ); + if(time_rec) + tmrec_free(time_rec); return 0; } -static int add_rule(rt_data_t *rdata, char *grplst, str *prefix, rt_info_t *rule) +static int add_rule( + rt_data_t *rdata, char *grplst, str *prefix, rt_info_t *rule) { long int t; char *tmp; char *ep; int n; - tmp=grplst; - n=0; + tmp = grplst; + n = 0; /* parse the grplst */ - while(tmp && (*tmp!=0)) { + while(tmp && (*tmp != 0)) { errno = 0; t = strtol(tmp, &ep, 10); - if (ep == tmp) { - LM_ERR("bad grp id '%c' (%d)[%s]\n", - *ep, (int)(ep-grplst), grplst); + if(ep == tmp) { + LM_ERR("bad grp id '%c' (%d)[%s]\n", *ep, (int)(ep - grplst), + grplst); goto error; } - if ((!IS_SPACE(*ep)) && (*ep != SEP) && (*ep != SEP1) && (*ep!=0)) { - LM_ERR("bad char %c (%d) [%s]\n", - *ep, (int)(ep-grplst), grplst); + if((!IS_SPACE(*ep)) && (*ep != SEP) && (*ep != SEP1) && (*ep != 0)) { + LM_ERR("bad char %c (%d) [%s]\n", *ep, (int)(ep - grplst), grplst); goto error; } - if (errno == ERANGE && (t== LONG_MAX || t== LONG_MIN)) { + if(errno == ERANGE && (t == LONG_MAX || t == LONG_MIN)) { LM_ERR("out of bounds\n"); goto error; } n++; /* add rule -> has prefix? */ - if (prefix->len) { + if(prefix->len) { /* add the routing rule */ - if ( add_prefix(rdata->pt, prefix, rule, (unsigned int)t)!=0 ) { + if(add_prefix(rdata->pt, prefix, rule, (unsigned int)t) != 0) { LM_ERR("failed to add prefix route\n"); - goto error; + goto error; } } else { - if ( add_rt_info( &rdata->noprefix, rule, (unsigned int)t)!=0 ) { + if(add_rt_info(&rdata->noprefix, rule, (unsigned int)t) != 0) { LM_ERR("failed to add prefixless route\n"); - goto error; + goto error; } } /* keep parsing */ @@ -262,9 +265,8 @@ static int add_rule(rt_data_t *rdata, char *grplst, str *prefix, rt_info_t *rule tmp = ep; } - if(n==0) { - LM_ERR("no id in grp list [%s]\n", - grplst); + if(n == 0) { + LM_ERR("no id in grp list [%s]\n", grplst); goto error; } @@ -274,35 +276,35 @@ static int add_rule(rt_data_t *rdata, char *grplst, str *prefix, rt_info_t *rule } -rt_data_t* dr_load_routing_info( db_func_t *dr_dbf, db1_con_t* db_hdl, - str *drd_table, str *drl_table, str* drr_table ) +rt_data_t *dr_load_routing_info(db_func_t *dr_dbf, db1_con_t *db_hdl, + str *drd_table, str *drl_table, str *drr_table) { - int int_vals[4]; - char * str_vals[5]; + int int_vals[4]; + char *str_vals[5]; str tmp; db_key_t columns[7]; - db1_res_t* res; - db_row_t* row; + db1_res_t *res; + db_row_t *row; rt_info_t *ri; rt_data_t *rdata; - tmrec_t *time_rec; + tmrec_t *time_rec; unsigned int id; str s_id; - int i,n; + int i, n; res = 0; ri = 0; rdata = 0; /* init new data structure */ - if ( (rdata=build_rt_data())==0 ) { + if((rdata = build_rt_data()) == 0) { LM_ERR("failed to build rdata\n"); goto error; } /* read the destinations */ - if (dr_dbf->use_table( db_hdl, drd_table) < 0) { - LM_ERR("cannot select table \"%.*s\"\n", drd_table->len,drd_table->s); + if(dr_dbf->use_table(db_hdl, drd_table) < 0) { + LM_ERR("cannot select table \"%.*s\"\n", drd_table->len, drd_table->s); goto error; } @@ -313,138 +315,139 @@ rt_data_t* dr_load_routing_info( db_func_t *dr_dbf, db1_con_t* db_hdl, columns[4] = &type_drd_col; columns[5] = &attrs_drd_col; - if (DB_CAPABILITY(*dr_dbf, DB_CAP_FETCH)) { - if ( dr_dbf->query( db_hdl, 0, 0, 0, columns, 0, 6, 0, 0 ) < 0) { + if(DB_CAPABILITY(*dr_dbf, DB_CAP_FETCH)) { + if(dr_dbf->query(db_hdl, 0, 0, 0, columns, 0, 6, 0, 0) < 0) { LM_ERR("DB query failed\n"); goto error; } - if(dr_dbf->fetch_result(db_hdl, &res, dr_fetch_rows)<0) { + if(dr_dbf->fetch_result(db_hdl, &res, dr_fetch_rows) < 0) { LM_ERR("Error fetching rows\n"); goto error; } } else { - if ( dr_dbf->query( db_hdl, 0, 0, 0, columns, 0, 6, 0, &res) < 0) { + if(dr_dbf->query(db_hdl, 0, 0, 0, columns, 0, 6, 0, &res) < 0) { LM_ERR("DB query failed\n"); goto error; } } - if (RES_ROW_N(res) == 0) { - LM_WARN("table \"%.*s\" empty\n", drd_table->len,drd_table->s ); + if(RES_ROW_N(res) == 0) { + LM_WARN("table \"%.*s\" empty\n", drd_table->len, drd_table->s); } - LM_DBG("%d records found in %.*s\n", - RES_ROW_N(res), drd_table->len,drd_table->s); + LM_DBG("%d records found in %.*s\n", RES_ROW_N(res), drd_table->len, + drd_table->s); n = 0; do { - for(i=0; i < RES_ROW_N(res); i++) { + for(i = 0; i < RES_ROW_N(res); i++) { row = RES_ROWS(res) + i; /* DST_ID column */ - check_val( ROW_VALUES(row), DB1_INT, 1, 0); - int_vals[0] = VAL_INT (ROW_VALUES(row)); + check_val(ROW_VALUES(row), DB1_INT, 1, 0); + int_vals[0] = VAL_INT(ROW_VALUES(row)); /* ADDRESS column */ - check_val( ROW_VALUES(row)+1, DB1_STRING, 1, 1); - str_vals[0] = (char*)VAL_STRING(ROW_VALUES(row)+1); + check_val(ROW_VALUES(row) + 1, DB1_STRING, 1, 1); + str_vals[0] = (char *)VAL_STRING(ROW_VALUES(row) + 1); /* STRIP column */ - check_val( ROW_VALUES(row)+2, DB1_INT, 1, 0); - int_vals[1] = VAL_INT (ROW_VALUES(row)+2); + check_val(ROW_VALUES(row) + 2, DB1_INT, 1, 0); + int_vals[1] = VAL_INT(ROW_VALUES(row) + 2); /* PREFIX column */ - check_val( ROW_VALUES(row)+3, DB1_STRING, 0, 0); - str_vals[1] = (char*)VAL_STRING(ROW_VALUES(row)+3); + check_val(ROW_VALUES(row) + 3, DB1_STRING, 0, 0); + str_vals[1] = (char *)VAL_STRING(ROW_VALUES(row) + 3); /* TYPE column */ - check_val( ROW_VALUES(row)+4, DB1_INT, 1, 0); - int_vals[2] = VAL_INT(ROW_VALUES(row)+4); + check_val(ROW_VALUES(row) + 4, DB1_INT, 1, 0); + int_vals[2] = VAL_INT(ROW_VALUES(row) + 4); /* ATTRS column */ - check_val( ROW_VALUES(row)+5, DB1_STRING, 0, 0); - str_vals[2] = (char*)VAL_STRING(ROW_VALUES(row)+5); + check_val(ROW_VALUES(row) + 5, DB1_STRING, 0, 0); + str_vals[2] = (char *)VAL_STRING(ROW_VALUES(row) + 5); /* add the destinaton definition in */ - if ( add_dst( rdata, int_vals[0], str_vals[0], int_vals[1], - str_vals[1], int_vals[2], str_vals[2])<0 ) { + if(add_dst(rdata, int_vals[0], str_vals[0], int_vals[1], + str_vals[1], int_vals[2], str_vals[2]) + < 0) { LM_ERR("failed to add destination id %d -> skipping\n", - int_vals[0]); + int_vals[0]); continue; } n++; } - if (DB_CAPABILITY(*dr_dbf, DB_CAP_FETCH)) { - if(dr_dbf->fetch_result(db_hdl, &res, dr_fetch_rows)<0) { - LM_ERR( "fetching rows (1)\n"); + if(DB_CAPABILITY(*dr_dbf, DB_CAP_FETCH)) { + if(dr_dbf->fetch_result(db_hdl, &res, dr_fetch_rows) < 0) { + LM_ERR("fetching rows (1)\n"); goto error; } } else { break; } - } while(RES_ROW_N(res)>0); + } while(RES_ROW_N(res) > 0); dr_dbf->free_result(db_hdl, res); res = 0; - if (n==0) { + if(n == 0) { LM_WARN("no valid " - "destinations set -> ignoring the routing rules\n"); + "destinations set -> ignoring the routing rules\n"); return rdata; } /* read the gw lists, if any */ - if (dr_dbf->use_table( db_hdl, drl_table) < 0) { - LM_ERR("cannot select table \"%.*s\"\n", drl_table->len,drl_table->s); + if(dr_dbf->use_table(db_hdl, drl_table) < 0) { + LM_ERR("cannot select table \"%.*s\"\n", drl_table->len, drl_table->s); goto error; } columns[0] = &id_drl_col; columns[1] = &gwlist_drl_col; - if (DB_CAPABILITY(*dr_dbf, DB_CAP_FETCH)) { - if ( dr_dbf->query( db_hdl, 0, 0, 0, columns, 0, 2, 0, 0 ) < 0) { + if(DB_CAPABILITY(*dr_dbf, DB_CAP_FETCH)) { + if(dr_dbf->query(db_hdl, 0, 0, 0, columns, 0, 2, 0, 0) < 0) { LM_ERR("DB query failed\n"); goto error; } - if(dr_dbf->fetch_result(db_hdl, &res, dr_fetch_rows)<0) { + if(dr_dbf->fetch_result(db_hdl, &res, dr_fetch_rows) < 0) { LM_ERR("Error fetching rows\n"); goto error; } } else { - if ( dr_dbf->query( db_hdl, 0, 0, 0, columns, 0, 2, 0, &res) < 0) { + if(dr_dbf->query(db_hdl, 0, 0, 0, columns, 0, 2, 0, &res) < 0) { LM_ERR("DB query failed\n"); goto error; } } - if (RES_ROW_N(res) == 0) { - LM_DBG("table \"%.*s\" empty\n", drl_table->len,drl_table->s ); + if(RES_ROW_N(res) == 0) { + LM_DBG("table \"%.*s\" empty\n", drl_table->len, drl_table->s); } else { - LM_DBG("%d records found in %.*s\n", - RES_ROW_N(res), drl_table->len,drl_table->s); + LM_DBG("%d records found in %.*s\n", RES_ROW_N(res), drl_table->len, + drl_table->s); do { - for(i=0; i < RES_ROW_N(res); i++) { + for(i = 0; i < RES_ROW_N(res); i++) { row = RES_ROWS(res) + i; /* ID column */ - check_val( ROW_VALUES(row), DB1_INT, 1, 0); - int_vals[0] = VAL_INT (ROW_VALUES(row)); + check_val(ROW_VALUES(row), DB1_INT, 1, 0); + int_vals[0] = VAL_INT(ROW_VALUES(row)); /* GWLIST column */ - check_val( ROW_VALUES(row)+1, DB1_STRING, 1, 1); - str_vals[0] = (char*)VAL_STRING(ROW_VALUES(row)+1); + check_val(ROW_VALUES(row) + 1, DB1_STRING, 1, 1); + str_vals[0] = (char *)VAL_STRING(ROW_VALUES(row) + 1); - if (add_tmp_gw_list(int_vals[0], str_vals[0])!=0) { + if(add_tmp_gw_list(int_vals[0], str_vals[0]) != 0) { LM_ERR("failed to add temporary GW list\n"); goto error; } } - if (DB_CAPABILITY(*dr_dbf, DB_CAP_FETCH)) { - if(dr_dbf->fetch_result(db_hdl, &res, dr_fetch_rows)<0) { - LM_ERR( "fetching rows (1)\n"); + if(DB_CAPABILITY(*dr_dbf, DB_CAP_FETCH)) { + if(dr_dbf->fetch_result(db_hdl, &res, dr_fetch_rows) < 0) { + LM_ERR("fetching rows (1)\n"); goto error; } } else { break; } - } while(RES_ROW_N(res)>0); + } while(RES_ROW_N(res) > 0); } dr_dbf->free_result(db_hdl, res); res = 0; /* read the routing rules */ - if (dr_dbf->use_table( db_hdl, drr_table) < 0) { + if(dr_dbf->use_table(db_hdl, drr_table) < 0) { LM_ERR("cannot select table \"%.*s\"\n", drr_table->len, drr_table->s); goto error; } @@ -457,130 +460,133 @@ rt_data_t* dr_load_routing_info( db_func_t *dr_dbf, db1_con_t* db_hdl, columns[5] = &routeid_drr_col; columns[6] = &dstlist_drr_col; - if (DB_CAPABILITY(*dr_dbf, DB_CAP_FETCH)) { - if ( dr_dbf->query( db_hdl, 0, 0, 0, columns, 0, 7, 0, 0) < 0) { + if(DB_CAPABILITY(*dr_dbf, DB_CAP_FETCH)) { + if(dr_dbf->query(db_hdl, 0, 0, 0, columns, 0, 7, 0, 0) < 0) { LM_ERR("DB query failed\n"); goto error; } - if(dr_dbf->fetch_result(db_hdl, &res, dr_fetch_rows)<0) { + if(dr_dbf->fetch_result(db_hdl, &res, dr_fetch_rows) < 0) { LM_ERR("Error fetching rows\n"); goto error; } } else { - if ( dr_dbf->query( db_hdl, 0, 0, 0, columns, 0, 7, 0, &res) < 0) { + if(dr_dbf->query(db_hdl, 0, 0, 0, columns, 0, 7, 0, &res) < 0) { LM_ERR("DB query failed\n"); goto error; } } - if (RES_ROW_N(res) == 0) { + if(RES_ROW_N(res) == 0) { LM_WARN("table \"%.*s\" is empty\n", drr_table->len, drr_table->s); } - LM_DBG("%d records found in %.*s\n", RES_ROW_N(res), - drr_table->len, drr_table->s); + LM_DBG("%d records found in %.*s\n", RES_ROW_N(res), drr_table->len, + drr_table->s); n = 0; do { - for(i=0; i < RES_ROW_N(res); i++) { + for(i = 0; i < RES_ROW_N(res); i++) { row = RES_ROWS(res) + i; /* RULE_ID column */ - check_val( ROW_VALUES(row), DB1_INT, 1, 0); - int_vals[0] = VAL_INT (ROW_VALUES(row)); + check_val(ROW_VALUES(row), DB1_INT, 1, 0); + int_vals[0] = VAL_INT(ROW_VALUES(row)); /* GROUP column */ - check_val( ROW_VALUES(row)+1, DB1_STRING, 1, 1); - str_vals[0] = (char*)VAL_STRING(ROW_VALUES(row)+1); + check_val(ROW_VALUES(row) + 1, DB1_STRING, 1, 1); + str_vals[0] = (char *)VAL_STRING(ROW_VALUES(row) + 1); /* PREFIX column - it may be null or empty */ - check_val( ROW_VALUES(row)+2, DB1_STRING, 0, 0); - if ((ROW_VALUES(row)+2)->nul || VAL_STRING(ROW_VALUES(row)+2)==0){ + check_val(ROW_VALUES(row) + 2, DB1_STRING, 0, 0); + if((ROW_VALUES(row) + 2)->nul + || VAL_STRING(ROW_VALUES(row) + 2) == 0) { tmp.s = NULL; tmp.len = 0; } else { - str_vals[1] = (char*)VAL_STRING(ROW_VALUES(row)+2); + str_vals[1] = (char *)VAL_STRING(ROW_VALUES(row) + 2); tmp.s = str_vals[1]; tmp.len = strlen(str_vals[1]); } /* TIME column */ - check_val( ROW_VALUES(row)+3, DB1_STRING, 1, 1); - str_vals[2] = (char*)VAL_STRING(ROW_VALUES(row)+3); + check_val(ROW_VALUES(row) + 3, DB1_STRING, 1, 1); + str_vals[2] = (char *)VAL_STRING(ROW_VALUES(row) + 3); /* PRIORITY column */ - check_val( ROW_VALUES(row)+4, DB1_INT, 1, 0); - int_vals[2] = VAL_INT (ROW_VALUES(row)+4); + check_val(ROW_VALUES(row) + 4, DB1_INT, 1, 0); + int_vals[2] = VAL_INT(ROW_VALUES(row) + 4); /* ROUTE_ID column */ - check_val( ROW_VALUES(row)+5, DB1_STRING, 1, 0); - str_vals[3] = (char*)VAL_STRING(ROW_VALUES(row)+5); + check_val(ROW_VALUES(row) + 5, DB1_STRING, 1, 0); + str_vals[3] = (char *)VAL_STRING(ROW_VALUES(row) + 5); /* DSTLIST column */ - check_val( ROW_VALUES(row)+6, DB1_STRING, 1, 1); - str_vals[4] = (char*)VAL_STRING(ROW_VALUES(row)+6); + check_val(ROW_VALUES(row) + 6, DB1_STRING, 1, 1); + str_vals[4] = (char *)VAL_STRING(ROW_VALUES(row) + 6); /* parse the time definition */ - if ((time_rec=parse_time_def(str_vals[2]))==0) { + if((time_rec = parse_time_def(str_vals[2])) == 0) { LM_ERR("bad time definition <%s> for rule id %d -> skipping\n", - str_vals[2], int_vals[0]); + str_vals[2], int_vals[0]); continue; } /* lookup for the script route ID */ - if (str_vals[3][0] && str_vals[3][0]!='0') { - int_vals[3] = route_lookup(&main_rt, str_vals[3]); - if (int_vals[3]==-1) { - LM_WARN("route <%s> does not exist\n",str_vals[3]); + if(str_vals[3][0] && str_vals[3][0] != '0') { + int_vals[3] = route_lookup(&main_rt, str_vals[3]); + if(int_vals[3] == -1) { + LM_WARN("route <%s> does not exist\n", str_vals[3]); int_vals[3] = 0; } } else { int_vals[3] = 0; } /* is gw_list a list or a list id? */ - if (str_vals[4][0]=='#') { - s_id.s = str_vals[4]+1; + if(str_vals[4][0] == '#') { + s_id.s = str_vals[4] + 1; s_id.len = strlen(s_id.s); - if ( str2int( &s_id, &id)!=0 || - (str_vals[4]=get_tmp_gw_list(id))==NULL ) { + if(str2int(&s_id, &id) != 0 + || (str_vals[4] = get_tmp_gw_list(id)) == NULL) { LM_ERR("invalid reference to a GW list <%s> -> skipping\n", - str_vals[4]); + str_vals[4]); continue; } } /* build the routing rule */ - if ((ri = build_rt_info( int_vals[2], time_rec, int_vals[3], - str_vals[4], rdata->pgw_l))== 0 ) { + if((ri = build_rt_info(int_vals[2], time_rec, int_vals[3], + str_vals[4], rdata->pgw_l)) + == 0) { LM_ERR("failed to add routing info for rule id %d -> " - "skipping\n", int_vals[0]); - tmrec_free( time_rec ); + "skipping\n", + int_vals[0]); + tmrec_free(time_rec); continue; } /* add the rule */ - if (add_rule( rdata, str_vals[0], &tmp, ri)!=0) { + if(add_rule(rdata, str_vals[0], &tmp, ri) != 0) { LM_ERR("failed to add rule id %d -> skipping\n", int_vals[0]); - free_rt_info( ri ); + free_rt_info(ri); continue; } n++; } - if (DB_CAPABILITY(*dr_dbf, DB_CAP_FETCH)) { - if(dr_dbf->fetch_result(db_hdl, &res, dr_fetch_rows)<0) { - LM_ERR( "fetching rows (1)\n"); + if(DB_CAPABILITY(*dr_dbf, DB_CAP_FETCH)) { + if(dr_dbf->fetch_result(db_hdl, &res, dr_fetch_rows) < 0) { + LM_ERR("fetching rows (1)\n"); goto error; } } else { break; } - } while(RES_ROW_N(res)>0); + } while(RES_ROW_N(res) > 0); dr_dbf->free_result(db_hdl, res); res = 0; free_tmp_gw_list(); - if (n==0) { + if(n == 0) { LM_WARN("no valid routing rules -> discarding all destinations\n"); - free_rt_data( rdata, 0 ); + free_rt_data(rdata, 0); } return rdata; error: - if (res) + if(res) dr_dbf->free_result(db_hdl, res); - if (rdata) - free_rt_data( rdata, 1 ); + if(rdata) + free_rt_data(rdata, 1); rdata = NULL; return 0; } diff --git a/src/modules/drouting/dr_load.h b/src/modules/drouting/dr_load.h index 28c2c73380c..3275c9b9d62 100644 --- a/src/modules/drouting/dr_load.h +++ b/src/modules/drouting/dr_load.h @@ -27,7 +27,7 @@ #include "../../lib/srdb1/db.h" #include "routing.h" -rt_data_t* dr_load_routing_info( db_func_t *dr_dbf, db1_con_t* db_hdl, - str *drd_table, str *drl_table, str* str_table); +rt_data_t *dr_load_routing_info(db_func_t *dr_dbf, db1_con_t *db_hdl, + str *drd_table, str *drl_table, str *str_table); #endif diff --git a/src/modules/drouting/dr_time.c b/src/modules/drouting/dr_time.c index c9a5161e1c8..5482df7e7c1 100644 --- a/src/modules/drouting/dr_time.c +++ b/src/modules/drouting/dr_time.c @@ -37,8 +37,7 @@ static inline int strz2int(char *_bp) return 0; _v = 0; _p = _bp; - while(*_p && *_p>='0' && *_p<='9') - { + while(*_p && *_p >= '0' && *_p <= '9') { _v += *_p - '0'; _p++; } @@ -46,33 +45,34 @@ static inline int strz2int(char *_bp) } -static inline char* trim(char* _s) +static inline char *trim(char *_s) { int len; - char* end; + char *end; - /* Null pointer, there is nothing to do */ - if (!_s) return _s; + /* Null pointer, there is nothing to do */ + if(!_s) + return _s; - /* Remove spaces and tabs from the beginning of string */ - while ((*_s == ' ') || (*_s == '\t')) _s++; + /* Remove spaces and tabs from the beginning of string */ + while((*_s == ' ') || (*_s == '\t')) + _s++; len = strlen(_s); - end = _s + len - 1; + end = _s + len - 1; - /* Remove trailing spaces and tabs */ - while ((*end == ' ') || (*end == '\t')) end--; - if (end != (_s + len - 1)) { - *(end+1) = '\0'; + /* Remove trailing spaces and tabs */ + while((*end == ' ') || (*end == '\t')) + end--; + if(end != (_s + len - 1)) { + *(end + 1) = '\0'; } return _s; } - - /************************ imported from "ac_tm.c" ***************************/ /* #define USE_YWEEK_U // Sunday system @@ -81,21 +81,20 @@ static inline char* trim(char* _s) #ifndef USE_YWEEK_U #ifndef USE_YWEEK_V #ifndef USE_YWEEK_W -#define USE_YWEEK_W /* Monday system */ +#define USE_YWEEK_W /* Monday system */ #endif #endif #endif #ifdef USE_YWEEK_U -#define SUN_WEEK(t) (int)(((t)->tm_yday + 7 - \ - ((t)->tm_wday)) / 7) +#define SUN_WEEK(t) (int)(((t)->tm_yday + 7 - ((t)->tm_wday)) / 7) #else -#define MON_WEEK(t) (int)(((t)->tm_yday + 7 - \ - ((t)->tm_wday ? (t)->tm_wday - 1 : 6)) / 7) +#define MON_WEEK(t) \ + (int)(((t)->tm_yday + 7 - ((t)->tm_wday ? (t)->tm_wday - 1 : 6)) / 7) #endif -#define ac_get_wday_yr(t) (int)((t)->tm_yday/7) -#define ac_get_wday_mr(t) (int)(((t)->tm_mday-1)/7) +#define ac_get_wday_yr(t) (int)((t)->tm_yday / 7) +#define ac_get_wday_mr(t) (int)(((t)->tm_mday - 1) / 7) ac_tm_p ac_tm_new(void) { @@ -104,24 +103,24 @@ ac_tm_p ac_tm_new(void) if(!_atp) return NULL; memset(_atp, 0, sizeof(ac_tm_t)); - + return _atp; } -int ac_tm_fill(ac_tm_p _atp, struct tm* _tm) +int ac_tm_fill(ac_tm_p _atp, struct tm *_tm) { if(!_atp || !_tm) return -1; - _atp->t.tm_sec = _tm->tm_sec; /* seconds */ - _atp->t.tm_min = _tm->tm_min; /* minutes */ - _atp->t.tm_hour = _tm->tm_hour; /* hours */ - _atp->t.tm_mday = _tm->tm_mday; /* day of the month */ - _atp->t.tm_mon = _tm->tm_mon; /* month */ - _atp->t.tm_year = _tm->tm_year; /* year */ - _atp->t.tm_wday = _tm->tm_wday; /* day of the week */ - _atp->t.tm_yday = _tm->tm_yday; /* day in the year */ - _atp->t.tm_isdst = _tm->tm_isdst; /* daylight saving time */ - + _atp->t.tm_sec = _tm->tm_sec; /* seconds */ + _atp->t.tm_min = _tm->tm_min; /* minutes */ + _atp->t.tm_hour = _tm->tm_hour; /* hours */ + _atp->t.tm_mday = _tm->tm_mday; /* day of the month */ + _atp->t.tm_mon = _tm->tm_mon; /* month */ + _atp->t.tm_year = _tm->tm_year; /* year */ + _atp->t.tm_wday = _tm->tm_wday; /* day of the week */ + _atp->t.tm_yday = _tm->tm_yday; /* day in the year */ + _atp->t.tm_isdst = _tm->tm_isdst; /* daylight saving time */ + _atp->mweek = ac_get_mweek(_tm); _atp->yweek = ac_get_yweek(_tm); _atp->ywday = ac_get_wday_yr(_tm); @@ -137,27 +136,29 @@ int ac_tm_set_time(ac_tm_p _atp, time_t _t) return ac_tm_fill(_atp, localtime(&_t)); } -int ac_get_mweek(struct tm* _tm) +int ac_get_mweek(struct tm *_tm) { if(!_tm) return -1; #ifdef USE_YWEEK_U - return ((_tm->tm_mday-1)/7 + (7-_tm->tm_wday+(_tm->tm_mday-1)%7)/7); + return ((_tm->tm_mday - 1) / 7 + + (7 - _tm->tm_wday + (_tm->tm_mday - 1) % 7) / 7); #else - return ((_tm->tm_mday-1)/7 + (7-(6+_tm->tm_wday)%7+(_tm->tm_mday-1)%7)/7); + return ((_tm->tm_mday - 1) / 7 + + (7 - (6 + _tm->tm_wday) % 7 + (_tm->tm_mday - 1) % 7) / 7); #endif } -int ac_get_yweek(struct tm* _tm) +int ac_get_yweek(struct tm *_tm) { int week = -1; #ifdef USE_YWEEK_V int days; #endif - + if(!_tm) return -1; - + #ifdef USE_YWEEK_U week = SUN_WEEK(_tm); #else @@ -165,13 +166,12 @@ int ac_get_yweek(struct tm* _tm) #endif #ifdef USE_YWEEK_V - days = ((_tm->tm_yday + 7 - (_tm->tm_wday ? _tm->tm_wday-1 : 6)) % 7); + days = ((_tm->tm_yday + 7 - (_tm->tm_wday ? _tm->tm_wday - 1 : 6)) % 7); - if(days >= 4) + if(days >= 4) week++; - else - if(week == 0) - week = 53; + else if(week == 0) + week = 53; #endif return week; } @@ -214,26 +214,28 @@ ac_maxval_p ac_get_maxval(ac_tm_p _atp) _amp = (ac_maxval_p)shm_malloc(sizeof(ac_maxval_t)); if(!_amp) return NULL; - + /* the number of the days in the year */ - _amp->yday = 365 + is_leap_year(_atp->t.tm_year+1900); + _amp->yday = 365 + is_leap_year(_atp->t.tm_year + 1900); /* the number of the days in the month */ - switch(_atp->t.tm_mon) - { + switch(_atp->t.tm_mon) { case 1: if(_amp->yday == 366) _amp->mday = 29; else _amp->mday = 28; - break; - case 3: case 5: case 8: case 10: + break; + case 3: + case 5: + case 8: + case 10: _amp->mday = 30; - break; + break; default: _amp->mday = 31; } - + /* maximum occurrences of a week day in the year */ memset(&_tm, 0, sizeof(struct tm)); _tm.tm_year = _atp->t.tm_year; @@ -245,20 +247,26 @@ ac_maxval_p ac_get_maxval(ac_tm_p _atp) _v = _atp->t.tm_wday - _tm.tm_wday + 1; else _v = _tm.tm_wday - _atp->t.tm_wday; - _amp->ywday = (int)((_tm.tm_yday-_v)/7) + 1; - + _amp->ywday = (int)((_tm.tm_yday - _v) / 7) + 1; + /* maximum number of weeks in the year */ _amp->yweek = ac_get_yweek(&_tm) + 1; - + /* maximum number of the week day in the month */ - _amp->mwday=(int)((_amp->mday-1-(_amp->mday-_atp->t.tm_mday)%7)/7)+1; - + _amp->mwday = + (int)((_amp->mday - 1 - (_amp->mday - _atp->t.tm_mday) % 7) / 7) + + 1; + /* maximum number of weeks in the month */ - _v = (_atp->t.tm_wday + (_amp->mday - _atp->t.tm_mday)%7)%7; + _v = (_atp->t.tm_wday + (_amp->mday - _atp->t.tm_mday) % 7) % 7; #ifdef USE_YWEEK_U - _amp->mweek = (int)((_amp->mday-1)/7+(7-_v+(_amp->mday-1)%7)/7)+1; + _amp->mweek = + (int)((_amp->mday - 1) / 7 + (7 - _v + (_amp->mday - 1) % 7) / 7) + + 1; #else - _amp->mweek = (int)((_amp->mday-1)/7+(7-(6+_v)%7+(_amp->mday-1)%7)/7)+1; + _amp->mweek = (int)((_amp->mday - 1) / 7 + + (7 - (6 + _v) % 7 + (_amp->mday - 1) % 7) / 7) + + 1; #endif _atp->mv = _amp; @@ -266,12 +274,9 @@ ac_maxval_p ac_get_maxval(ac_tm_p _atp) } - - - /************************ imported from "tmrec.c" ***************************/ -#define _D(c) ((c) -'0') +#define _D(c) ((c) - '0') tr_byxxx_p tr_byxxx_new(void) { @@ -288,19 +293,18 @@ int tr_byxxx_init(tr_byxxx_p _bxp, int _nr) if(!_bxp) return -1; _bxp->nr = _nr; - _bxp->xxx = (int*)shm_malloc(_nr*sizeof(int)); + _bxp->xxx = (int *)shm_malloc(_nr * sizeof(int)); if(!_bxp->xxx) return -1; - _bxp->req = (int*)shm_malloc(_nr*sizeof(int)); - if(!_bxp->req) - { + _bxp->req = (int *)shm_malloc(_nr * sizeof(int)); + if(!_bxp->req) { shm_free(_bxp->xxx); return -1; } - - memset(_bxp->xxx, 0, _nr*sizeof(int)); - memset(_bxp->req, 0, _nr*sizeof(int)); - + + memset(_bxp->xxx, 0, _nr * sizeof(int)); + memset(_bxp->req, 0, _nr * sizeof(int)); + return 0; } @@ -324,7 +328,7 @@ tmrec_p tmrec_new(void) if(!_trp) return NULL; memset(_trp, 0, sizeof(tmrec_t)); - localtime_r(&_trp->dtstart,&(_trp->ts)); + localtime_r(&_trp->dtstart, &(_trp->ts)); return _trp; } @@ -332,7 +336,7 @@ int tmrec_free(tmrec_p _trp) { if(!_trp) return -1; - + tr_byxxx_free(_trp->byday); tr_byxxx_free(_trp->bymday); tr_byxxx_free(_trp->byyday); @@ -348,7 +352,7 @@ int tr_parse_dtstart(tmrec_p _trp, char *_in) if(!_trp || !_in) return -1; _trp->dtstart = ic_parse_datetime(_in, &(_trp->ts)); - return (_trp->dtstart==0)?-1:0; + return (_trp->dtstart == 0) ? -1 : 0; } int tr_parse_dtend(tmrec_p _trp, char *_in) @@ -356,8 +360,8 @@ int tr_parse_dtend(tmrec_p _trp, char *_in) struct tm _tm; if(!_trp || !_in) return -1; - _trp->dtend = ic_parse_datetime(_in,&_tm); - return (_trp->dtend==0)?-1:0; + _trp->dtend = ic_parse_datetime(_in, &_tm); + return (_trp->dtend == 0) ? -1 : 0; } int tr_parse_duration(tmrec_p _trp, char *_in) @@ -381,28 +385,23 @@ int tr_parse_freq(tmrec_p _trp, char *_in) { if(!_trp || !_in) return -1; - if(strlen(_in)<5) - { + if(strlen(_in) < 5) { _trp->freq = FREQ_NOFREQ; return 0; } - if(!strcasecmp(_in, "daily")) - { + if(!strcasecmp(_in, "daily")) { _trp->freq = FREQ_DAILY; return 0; } - if(!strcasecmp(_in, "weekly")) - { + if(!strcasecmp(_in, "weekly")) { _trp->freq = FREQ_WEEKLY; return 0; } - if(!strcasecmp(_in, "monthly")) - { + if(!strcasecmp(_in, "monthly")) { _trp->freq = FREQ_MONTHLY; return 0; } - if(!strcasecmp(_in, "yearly")) - { + if(!strcasecmp(_in, "yearly")) { _trp->freq = FREQ_YEARLY; return 0; } @@ -423,7 +422,7 @@ int tr_parse_byday(tmrec_p _trp, char *_in) { if(!_trp || !_in) return -1; - _trp->byday = ic_parse_byday(_in); + _trp->byday = ic_parse_byday(_in); return 0; } @@ -431,7 +430,7 @@ int tr_parse_bymday(tmrec_p _trp, char *_in) { if(!_trp || !_in) return -1; - _trp->bymday = ic_parse_byxxx(_in); + _trp->bymday = ic_parse_byxxx(_in); return 0; } @@ -439,7 +438,7 @@ int tr_parse_byyday(tmrec_p _trp, char *_in) { if(!_trp || !_in) return -1; - _trp->byyday = ic_parse_byxxx(_in); + _trp->byyday = ic_parse_byxxx(_in); return 0; } @@ -447,7 +446,7 @@ int tr_parse_bymonth(tmrec_p _trp, char *_in) { if(!_trp || !_in) return -1; - _trp->bymonth = ic_parse_byxxx(_in); + _trp->bymonth = ic_parse_byxxx(_in); return 0; } @@ -455,7 +454,7 @@ int tr_parse_byweekno(tmrec_p _trp, char *_in) { if(!_trp || !_in) return -1; - _trp->byweekno = ic_parse_byxxx(_in); + _trp->byweekno = ic_parse_byxxx(_in); return 0; } @@ -470,17 +469,17 @@ int tr_parse_wkst(tmrec_p _trp, char *_in) time_t ic_parse_datetime(char *_in, struct tm *_tm) { - if(!_in || !_tm || strlen(_in)!=15) + if(!_in || !_tm || strlen(_in) != 15) return 0; - + memset(_tm, 0, sizeof(struct tm)); - _tm->tm_year = _D(_in[0])*1000 + _D(_in[1])*100 - + _D(_in[2])*10 + _D(_in[3]) - 1900; - _tm->tm_mon = _D(_in[4])*10 + _D(_in[5]) - 1; - _tm->tm_mday = _D(_in[6])*10 + _D(_in[7]); - _tm->tm_hour = _D(_in[9])*10 + _D(_in[10]); - _tm->tm_min = _D(_in[11])*10 + _D(_in[12]); - _tm->tm_sec = _D(_in[13])*10 + _D(_in[14]); + _tm->tm_year = _D(_in[0]) * 1000 + _D(_in[1]) * 100 + _D(_in[2]) * 10 + + _D(_in[3]) - 1900; + _tm->tm_mon = _D(_in[4]) * 10 + _D(_in[5]) - 1; + _tm->tm_mday = _D(_in[6]) * 10 + _D(_in[7]); + _tm->tm_hour = _D(_in[9]) * 10 + _D(_in[10]); + _tm->tm_min = _D(_in[11]) * 10 + _D(_in[12]); + _tm->tm_sec = _D(_in[13]) * 10 + _D(_in[14]); _tm->tm_isdst = -1 /*daylight*/; return mktime(_tm); } @@ -490,100 +489,102 @@ time_t ic_parse_duration(char *_in) time_t _t, _ft; char *_p; int _fl; - - if(!_in || strlen(_in)<2) + + if(!_in || strlen(_in) < 2) return 0; - - if(*_in == 'P' || *_in=='p') - { - _p = _in+1; + + if(*_in == 'P' || *_in == 'p') { + _p = _in + 1; _fl = 1; } else { _p = _in; _fl = 0; } - + _t = _ft = 0; - - while(*_p) - { - switch(*_p) - { - case '0': case '1': case '2': - case '3': case '4': case '5': - case '6': case '7': case '8': + + while(*_p) { + switch(*_p) { + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': case '9': - _t = _t*10 + *_p - '0'; - break; - + _t = _t * 10 + *_p - '0'; + break; + case 'w': case 'W': - if(!_fl) - { + if(!_fl) { LM_ERR("week duration not allowed" - " here (%d) [%s]\n", (int)(_p-_in), _in); + " here (%d) [%s]\n", + (int)(_p - _in), _in); return 0; } - _ft += _t*7*24*3600; + _ft += _t * 7 * 24 * 3600; _t = 0; - break; + break; case 'd': case 'D': - if(!_fl) - { + if(!_fl) { LM_ERR("day duration not allowed" - " here (%d) [%s]\n", (int)(_p-_in), _in); + " here (%d) [%s]\n", + (int)(_p - _in), _in); return 0; } - _ft += _t*24*3600; + _ft += _t * 24 * 3600; _t = 0; - break; + break; case 'h': case 'H': - if(_fl) - { + if(_fl) { LM_ERR("hour duration not allowed" - " here (%d) [%s]\n", (int)(_p-_in), _in); + " here (%d) [%s]\n", + (int)(_p - _in), _in); return 0; } - _ft += _t*3600; + _ft += _t * 3600; _t = 0; - break; + break; case 'm': case 'M': - if(_fl) - { + if(_fl) { LM_ERR("minute duration not allowed" - " here (%d) [%s]\n", (int)(_p-_in), _in); + " here (%d) [%s]\n", + (int)(_p - _in), _in); return 0; } - _ft += _t*60; + _ft += _t * 60; _t = 0; - break; + break; case 's': case 'S': - if(_fl) - { + if(_fl) { LM_ERR("second duration not allowed" - " here (%d) [%s]\n", (int)(_p-_in), _in); + " here (%d) [%s]\n", + (int)(_p - _in), _in); return 0; } _ft += _t; _t = 0; - break; + break; case 't': case 'T': - if(!_fl) - { + if(!_fl) { LM_ERR("'T' not allowed" - " here (%d) [%s]\n", (int)(_p-_in), _in); + " here (%d) [%s]\n", + (int)(_p - _in), _in); return 0; } _fl = 0; - break; + break; default: - LM_ERR("bad character here (%d) [%s]\n", - (int)(_p-_in), _in); + LM_ERR("bad character here (%d) [%s]\n", (int)(_p - _in), _in); return 0; } _p++; @@ -605,113 +606,113 @@ tr_byxxx_p ic_parse_byday(char *_in) return NULL; _p = _in; _nr = 1; - while(*_p) - { + while(*_p) { if(*_p == ',') _nr++; _p++; } - if(tr_byxxx_init(_bxp, _nr) < 0) - { + if(tr_byxxx_init(_bxp, _nr) < 0) { tr_byxxx_free(_bxp); return NULL; } _p = _in; _nr = _v = 0; _s = 1; - while(*_p && _nr < _bxp->nr) - { - switch(*_p) - { - case '0': case '1': case '2': - case '3': case '4': case '5': - case '6': case '7': case '8': + while(*_p && _nr < _bxp->nr) { + switch(*_p) { + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': case '9': - _v = _v*10 + *_p - '0'; - break; - + _v = _v * 10 + *_p - '0'; + break; + case 's': case 'S': _p++; - switch(*_p) - { + switch(*_p) { case 'a': case 'A': _bxp->xxx[_nr] = WDAY_SA; - _bxp->req[_nr] = _s*_v; - break; + _bxp->req[_nr] = _s * _v; + break; case 'u': case 'U': _bxp->xxx[_nr] = WDAY_SU; - _bxp->req[_nr] = _s*_v; - break; + _bxp->req[_nr] = _s * _v; + break; default: goto error; } _s = 1; _v = 0; - break; + break; case 'm': case 'M': _p++; - if(*_p!='o' && *_p!='O') + if(*_p != 'o' && *_p != 'O') goto error; _bxp->xxx[_nr] = WDAY_MO; - _bxp->req[_nr] = _s*_v; + _bxp->req[_nr] = _s * _v; _s = 1; _v = 0; - break; + break; case 't': case 'T': _p++; - switch(*_p) - { + switch(*_p) { case 'h': case 'H': _bxp->xxx[_nr] = WDAY_TH; - _bxp->req[_nr] = _s*_v; - break; + _bxp->req[_nr] = _s * _v; + break; case 'u': case 'U': _bxp->xxx[_nr] = WDAY_TU; - _bxp->req[_nr] = _s*_v; - break; + _bxp->req[_nr] = _s * _v; + break; default: goto error; } _s = 1; _v = 0; - break; + break; case 'w': case 'W': _p++; - if(*_p!='e' && *_p!='E') + if(*_p != 'e' && *_p != 'E') goto error; _bxp->xxx[_nr] = WDAY_WE; - _bxp->req[_nr] = _s*_v; + _bxp->req[_nr] = _s * _v; _s = 1; _v = 0; - break; + break; case 'f': case 'F': _p++; - if(*_p!='r' && *_p!='R') + if(*_p != 'r' && *_p != 'R') goto error; _bxp->xxx[_nr] = WDAY_FR; - _bxp->req[_nr] = _s*_v; + _bxp->req[_nr] = _s * _v; _s = 1; _v = 0; - break; + break; case '-': _s = -1; - break; + break; case '+': case ' ': case '\t': - break; + break; case ',': _nr++; - break; + break; default: goto error; } @@ -738,52 +739,53 @@ tr_byxxx_p ic_parse_byxxx(char *_in) return NULL; _p = _in; _nr = 1; - while(*_p) - { + while(*_p) { if(*_p == ',') _nr++; _p++; } - if(tr_byxxx_init(_bxp, _nr) < 0) - { + if(tr_byxxx_init(_bxp, _nr) < 0) { tr_byxxx_free(_bxp); return NULL; } _p = _in; _nr = _v = 0; _s = 1; - while(*_p && _nr < _bxp->nr) - { - switch(*_p) - { - case '0': case '1': case '2': - case '3': case '4': case '5': - case '6': case '7': case '8': + while(*_p && _nr < _bxp->nr) { + switch(*_p) { + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': case '9': - _v = _v*10 + *_p - '0'; - break; - + _v = _v * 10 + *_p - '0'; + break; + case '-': _s = -1; - break; + break; case '+': case ' ': case '\t': - break; + break; case ',': _bxp->xxx[_nr] = _v; _bxp->req[_nr] = _s; _s = 1; _v = 0; _nr++; - break; + break; default: goto error; } _p++; } - if(_nr < _bxp->nr) - { + if(_nr < _bxp->nr) { _bxp->xxx[_nr] = _v; _bxp->req[_nr] = _s; } @@ -796,15 +798,13 @@ tr_byxxx_p ic_parse_byxxx(char *_in) int ic_parse_wkst(char *_in) { - if(!_in || strlen(_in)!=2) + if(!_in || strlen(_in) != 2) goto error; - - switch(_in[0]) - { + + switch(_in[0]) { case 's': case 'S': - switch(_in[1]) - { + switch(_in[1]) { case 'a': case 'A': return WDAY_SA; @@ -816,13 +816,12 @@ int ic_parse_wkst(char *_in) } case 'm': case 'M': - if(_in[1]!='o' && _in[1]!='O') + if(_in[1] != 'o' && _in[1] != 'O') goto error; return WDAY_MO; case 't': case 'T': - switch(_in[1]) - { + switch(_in[1]) { case 'h': case 'H': return WDAY_TH; @@ -834,19 +833,19 @@ int ic_parse_wkst(char *_in) } case 'w': case 'W': - if(_in[1]!='e' && _in[1]!='E') + if(_in[1] != 'e' && _in[1] != 'E') goto error; return WDAY_WE; case 'f': case 'F': - if(_in[1]!='r' && _in[1]!='R') + if(_in[1] != 'r' && _in[1] != 'R') goto error; return WDAY_FR; - break; + break; default: goto error; } - + error: #ifdef USE_YWEEK_U return WDAY_SU; @@ -856,17 +855,13 @@ int ic_parse_wkst(char *_in) } - - - - /*********************** imported from "checktr.c" **************************/ -#define REC_ERR -1 -#define REC_MATCH 0 +#define REC_ERR -1 +#define REC_MATCH 0 #define REC_NOMATCH 1 -#define _IS_SET(x) (((x)>0)?1:0) +#define _IS_SET(x) (((x) > 0) ? 1 : 0) /*** local headers ***/ int get_min_interval(tmrec_p); @@ -890,43 +885,38 @@ int check_tmrec(tmrec_p _trp, ac_tm_p _atp, tr_res_p _tsw) return REC_NOMATCH; /* no duration or end -> for ever */ - if (!_IS_SET(_trp->duration) && !_IS_SET(_trp->dtend)) + if(!_IS_SET(_trp->duration) && !_IS_SET(_trp->dtend)) return REC_MATCH; /* compute the duration of the recurrence interval */ if(!_IS_SET(_trp->duration)) _trp->duration = _trp->dtend - _trp->dtstart; - - if(_atp->time <= _trp->dtstart+_trp->duration) - { - if(_tsw) - { - if(_tsw->flag & TSW_RSET) - { - if(_tsw->rest>_trp->dtstart+_trp->duration-_atp->time) - _tsw->rest = _trp->dtstart+_trp->duration - _atp->time; - } - else - { + + if(_atp->time <= _trp->dtstart + _trp->duration) { + if(_tsw) { + if(_tsw->flag & TSW_RSET) { + if(_tsw->rest > _trp->dtstart + _trp->duration - _atp->time) + _tsw->rest = _trp->dtstart + _trp->duration - _atp->time; + } else { _tsw->flag |= TSW_RSET; - _tsw->rest = _trp->dtstart+_trp->duration - _atp->time; + _tsw->rest = _trp->dtstart + _trp->duration - _atp->time; } } return REC_MATCH; } - + /* after the bound of recurrence */ if(_IS_SET(_trp->until) && _atp->time >= _trp->until + _trp->duration) return REC_NOMATCH; - + /* check if the instance of recurrence matches the 'interval' */ - if(check_freq_interval(_trp, _atp)!=REC_MATCH) + if(check_freq_interval(_trp, _atp) != REC_MATCH) return REC_NOMATCH; - if(check_min_unit(_trp, _atp, _tsw)!=REC_MATCH) + if(check_min_unit(_trp, _atp, _tsw) != REC_MATCH) return REC_NOMATCH; - if(check_byxxx(_trp, _atp)!=REC_MATCH) + if(check_byxxx(_trp, _atp) != REC_MATCH) return REC_NOMATCH; return REC_MATCH; @@ -939,15 +929,14 @@ int check_freq_interval(tmrec_p _trp, ac_tm_p _atp) struct tm _tm; if(!_trp || !_atp) return REC_ERR; - + if(!_IS_SET(_trp->freq)) return REC_NOMATCH; - - if(!_IS_SET(_trp->interval) || _trp->interval==1) + + if(!_IS_SET(_trp->interval) || _trp->interval == 1) return REC_MATCH; - - switch(_trp->freq) - { + + switch(_trp->freq) { case FREQ_DAILY: case FREQ_WEEKLY: memset(&_tm, 0, sizeof(struct tm)); @@ -961,26 +950,29 @@ int check_freq_interval(tmrec_p _trp, ac_tm_p _atp) _tm.tm_mday = _atp->t.tm_mday; _t1 = (int)mktime(&_tm); if(_trp->freq == FREQ_DAILY) - return (((_t1-_t0)/(24*3600))%_trp->interval==0)? - REC_MATCH:REC_NOMATCH; + return (((_t1 - _t0) / (24 * 3600)) % _trp->interval == 0) + ? REC_MATCH + : REC_NOMATCH; #ifdef USE_YWEEK_U - _t0 -= _trp->ts.tm_wday*24*3600; - _t1 -= _atp->t.tm_wday*24*3600; + _t0 -= _trp->ts.tm_wday * 24 * 3600; + _t1 -= _atp->t.tm_wday * 24 * 3600; #else - _t0 -= ((_trp->ts.tm_wday+6)%7)*24*3600; - _t1 -= ((_atp->t.tm_wday+6)%7)*24*3600; + _t0 -= ((_trp->ts.tm_wday + 6) % 7) * 24 * 3600; + _t1 -= ((_atp->t.tm_wday + 6) % 7) * 24 * 3600; #endif - return (((_t1-_t0)/(7*24*3600))%_trp->interval==0)? - REC_MATCH:REC_NOMATCH; + return (((_t1 - _t0) / (7 * 24 * 3600)) % _trp->interval == 0) + ? REC_MATCH + : REC_NOMATCH; case FREQ_MONTHLY: - _t0 = (_atp->t.tm_year-_trp->ts.tm_year)*12 - + _atp->t.tm_mon-_trp->ts.tm_mon; - return (_t0%_trp->interval==0)?REC_MATCH:REC_NOMATCH; + _t0 = (_atp->t.tm_year - _trp->ts.tm_year) * 12 + _atp->t.tm_mon + - _trp->ts.tm_mon; + return (_t0 % _trp->interval == 0) ? REC_MATCH : REC_NOMATCH; case FREQ_YEARLY: - return ((_atp->t.tm_year-_trp->ts.tm_year)%_trp->interval==0)? - REC_MATCH:REC_NOMATCH; + return ((_atp->t.tm_year - _trp->ts.tm_year) % _trp->interval == 0) + ? REC_MATCH + : REC_NOMATCH; } - + return REC_NOMATCH; } @@ -988,16 +980,16 @@ int get_min_interval(tmrec_p _trp) { if(!_trp) return FREQ_NOFREQ; - + if(_trp->freq == FREQ_DAILY || _trp->byday || _trp->bymday || _trp->byyday) return FREQ_DAILY; - if(_trp->freq == FREQ_WEEKLY || _trp->byweekno) + if(_trp->freq == FREQ_WEEKLY || _trp->byweekno) return FREQ_WEEKLY; if(_trp->freq == FREQ_MONTHLY || _trp->bymonth) return FREQ_MONTHLY; if(_trp->freq == FREQ_YEARLY) return FREQ_YEARLY; - + return FREQ_NOFREQ; } @@ -1006,46 +998,40 @@ int check_min_unit(tmrec_p _trp, ac_tm_p _atp, tr_res_p _tsw) int _v0, _v1; if(!_trp || !_atp) return REC_ERR; - switch(get_min_interval(_trp)) - { + switch(get_min_interval(_trp)) { case FREQ_DAILY: - break; + break; case FREQ_WEEKLY: if(_trp->ts.tm_wday != _atp->t.tm_wday) return REC_NOMATCH; - break; + break; case FREQ_MONTHLY: if(_trp->ts.tm_mday != _atp->t.tm_mday) return REC_NOMATCH; - break; + break; case FREQ_YEARLY: - if(_trp->ts.tm_mon != _atp->t.tm_mon + if(_trp->ts.tm_mon != _atp->t.tm_mon || _trp->ts.tm_mday != _atp->t.tm_mday) return REC_NOMATCH; - break; + break; default: return REC_NOMATCH; } - _v0 = _trp->ts.tm_hour*3600 + _trp->ts.tm_min*60 + _trp->ts.tm_sec; - _v1 = _atp->t.tm_hour*3600 + _atp->t.tm_min*60 + _atp->t.tm_sec; - if(_v1 >= _v0 && _v1 < _v0 + _trp->duration) - { - if(_tsw) - { - if(_tsw->flag & TSW_RSET) - { - if(_tsw->rest>_v0+_trp->duration-_v1) + _v0 = _trp->ts.tm_hour * 3600 + _trp->ts.tm_min * 60 + _trp->ts.tm_sec; + _v1 = _atp->t.tm_hour * 3600 + _atp->t.tm_min * 60 + _atp->t.tm_sec; + if(_v1 >= _v0 && _v1 < _v0 + _trp->duration) { + if(_tsw) { + if(_tsw->flag & TSW_RSET) { + if(_tsw->rest > _v0 + _trp->duration - _v1) _tsw->rest = _v0 + _trp->duration - _v1; - } - else - { + } else { _tsw->flag |= TSW_RSET; _tsw->rest = _v0 + _trp->duration - _v1; } } return REC_MATCH; } - + return REC_NOMATCH; } @@ -1055,105 +1041,101 @@ int check_byxxx(tmrec_p _trp, ac_tm_p _atp) ac_maxval_p _amp = NULL; if(!_trp || !_atp) return REC_ERR; - if(!_trp->byday && !_trp->bymday && !_trp->byyday && !_trp->bymonth + if(!_trp->byday && !_trp->bymday && !_trp->byyday && !_trp->bymonth && !_trp->byweekno) return REC_MATCH; - + _amp = ac_get_maxval(_atp); if(!_amp) return REC_NOMATCH; - - if(_trp->bymonth) - { - for(i=0; i<_trp->bymonth->nr; i++) - { - if(_atp->t.tm_mon == - (_trp->bymonth->xxx[i]*_trp->bymonth->req[i]+12)%12) + + if(_trp->bymonth) { + for(i = 0; i < _trp->bymonth->nr; i++) { + if(_atp->t.tm_mon + == (_trp->bymonth->xxx[i] * _trp->bymonth->req[i] + 12) + % 12) break; } - if(i>=_trp->bymonth->nr) + if(i >= _trp->bymonth->nr) return REC_NOMATCH; } - if(_trp->freq==FREQ_YEARLY && _trp->byweekno) - { - for(i=0; i<_trp->byweekno->nr; i++) - { - if(_atp->yweek == (_trp->byweekno->xxx[i]*_trp->byweekno->req[i]+ - _amp->yweek)%_amp->yweek) + if(_trp->freq == FREQ_YEARLY && _trp->byweekno) { + for(i = 0; i < _trp->byweekno->nr; i++) { + if(_atp->yweek + == (_trp->byweekno->xxx[i] * _trp->byweekno->req[i] + + _amp->yweek) + % _amp->yweek) break; } - if(i>=_trp->byweekno->nr) + if(i >= _trp->byweekno->nr) return REC_NOMATCH; } - if(_trp->byyday) - { - for(i=0; i<_trp->byyday->nr; i++) - { - if(_atp->t.tm_yday == (_trp->byyday->xxx[i]*_trp->byyday->req[i]+ - _amp->yday)%_amp->yday) + if(_trp->byyday) { + for(i = 0; i < _trp->byyday->nr; i++) { + if(_atp->t.tm_yday + == (_trp->byyday->xxx[i] * _trp->byyday->req[i] + + _amp->yday) + % _amp->yday) break; } - if(i>=_trp->byyday->nr) + if(i >= _trp->byyday->nr) return REC_NOMATCH; } - if(_trp->bymday) - { - for(i=0; i<_trp->bymday->nr; i++) - { + if(_trp->bymday) { + for(i = 0; i < _trp->bymday->nr; i++) { #ifdef EXTRA_DEBUG LM_DBG("%d == %d\n", _atp->t.tm_mday, - (_trp->bymday->xxx[i]*_trp->bymday->req[i]+ - _amp->mday)%_amp->mday + ((_trp->bymday->req[i]<0)?1:0)); + (_trp->bymday->xxx[i] * _trp->bymday->req[i] + _amp->mday) + % _amp->mday + + ((_trp->bymday->req[i] < 0) ? 1 : 0)); #endif - if(_atp->t.tm_mday == (_trp->bymday->xxx[i]*_trp->bymday->req[i]+ - _amp->mday)%_amp->mday + (_trp->bymday->req[i]<0)?1:0) + if(_atp->t.tm_mday + == (_trp->bymday->xxx[i] + * _trp->bymday->req[i] + + _amp->mday) + % _amp->mday + + (_trp->bymday->req[i] < 0) + ? 1 + : 0) break; } - if(i>=_trp->bymday->nr) + if(i >= _trp->bymday->nr) return REC_NOMATCH; } - if(_trp->byday) - { - for(i=0; i<_trp->byday->nr; i++) - { - if(_trp->freq==FREQ_YEARLY) - { + if(_trp->byday) { + for(i = 0; i < _trp->byday->nr; i++) { + if(_trp->freq == FREQ_YEARLY) { #ifdef EXTRA_DEBUG LM_DBG("%d==%d && %d==%d\n", _atp->t.tm_wday, - _trp->byday->xxx[i], _atp->ywday+1, - (_trp->byday->req[i]+_amp->ywday)%_amp->ywday); + _trp->byday->xxx[i], _atp->ywday + 1, + (_trp->byday->req[i] + _amp->ywday) % _amp->ywday); #endif - if(_atp->t.tm_wday == _trp->byday->xxx[i] && - _atp->ywday+1 == (_trp->byday->req[i]+_amp->ywday)% - _amp->ywday) + if(_atp->t.tm_wday == _trp->byday->xxx[i] + && _atp->ywday + 1 + == (_trp->byday->req[i] + _amp->ywday) + % _amp->ywday) break; - } - else - { - if(_trp->freq==FREQ_MONTHLY) - { + } else { + if(_trp->freq == FREQ_MONTHLY) { #ifdef EXTRA_DEBUG LM_DBG("%d==%d && %d==%d\n", _atp->t.tm_wday, - _trp->byday->xxx[i], _atp->mwday+1, - (_trp->byday->req[i]+_amp->mwday)%_amp->mwday); + _trp->byday->xxx[i], _atp->mwday + 1, + (_trp->byday->req[i] + _amp->mwday) % _amp->mwday); #endif - if(_atp->t.tm_wday == _trp->byday->xxx[i] && - _atp->mwday+1==(_trp->byday->req[i]+ - _amp->mwday)%_amp->mwday) + if(_atp->t.tm_wday == _trp->byday->xxx[i] + && _atp->mwday + 1 + == (_trp->byday->req[i] + _amp->mwday) + % _amp->mwday) break; - } - else - { + } else { if(_atp->t.tm_wday == _trp->byday->xxx[i]) break; } } } - if(i>=_trp->byday->nr) + if(i >= _trp->byday->nr) return REC_NOMATCH; } return REC_MATCH; } - - diff --git a/src/modules/drouting/dr_time.h b/src/modules/drouting/dr_time.h index f0383a0be65..86c041a6463 100644 --- a/src/modules/drouting/dr_time.h +++ b/src/modules/drouting/dr_time.h @@ -35,14 +35,15 @@ */ #ifndef USE_YWEEK_U -# ifndef USE_YWEEK_V -# ifndef USE_YWEEK_W -# define USE_YWEEK_W -# endif -# endif +#ifndef USE_YWEEK_V +#ifndef USE_YWEEK_W +#define USE_YWEEK_W +#endif +#endif #endif -#define is_leap_year(yyyy) ((((yyyy)%400))?(((yyyy)%100)?(((yyyy)%4)?0:1):0):1) +#define is_leap_year(yyyy) \ + ((((yyyy) % 400)) ? (((yyyy) % 100) ? (((yyyy) % 4) ? 0 : 1) : 0) : 1) typedef struct _ac_maxval @@ -73,24 +74,22 @@ int ac_tm_set_time(ac_tm_p, time_t); int ac_tm_reset(ac_tm_p); int ac_tm_free(ac_tm_p); -int ac_get_mweek(struct tm*); -int ac_get_yweek(struct tm*); +int ac_get_mweek(struct tm *); +int ac_get_yweek(struct tm *); ac_maxval_p ac_get_maxval(ac_tm_p); int ac_get_wkst(); int ac_print(ac_tm_p); - - /************************ imported from "tmrec.h" ***************************/ -#define FREQ_NOFREQ 0 -#define FREQ_YEARLY 1 +#define FREQ_NOFREQ 0 +#define FREQ_YEARLY 1 #define FREQ_MONTHLY 2 -#define FREQ_WEEKLY 3 -#define FREQ_DAILY 4 +#define FREQ_WEEKLY 3 +#define FREQ_DAILY 4 #define WDAY_SU 0 #define WDAY_MO 1 @@ -101,8 +100,8 @@ int ac_print(ac_tm_p); #define WDAY_SA 6 #define WDAY_NU 7 -#define TSW_TSET 1 -#define TSW_RSET 2 +#define TSW_TSET 1 +#define TSW_RSET 2 typedef struct _tr_byxxx { @@ -141,29 +140,28 @@ int tr_byxxx_free(tr_byxxx_p); tmrec_p tmrec_new(); int tmrec_free(tmrec_p); -int tr_parse_dtstart(tmrec_p, char*); -int tr_parse_dtend(tmrec_p, char*); -int tr_parse_duration(tmrec_p, char*); -int tr_parse_until(tmrec_p, char*); -int tr_parse_freq(tmrec_p, char*); -int tr_parse_interval(tmrec_p, char*); -int tr_parse_byday(tmrec_p, char*); -int tr_parse_bymday(tmrec_p, char*); -int tr_parse_byyday(tmrec_p, char*); -int tr_parse_bymonth(tmrec_p, char*); -int tr_parse_byweekno(tmrec_p, char*); -int tr_parse_wkst(tmrec_p, char*); +int tr_parse_dtstart(tmrec_p, char *); +int tr_parse_dtend(tmrec_p, char *); +int tr_parse_duration(tmrec_p, char *); +int tr_parse_until(tmrec_p, char *); +int tr_parse_freq(tmrec_p, char *); +int tr_parse_interval(tmrec_p, char *); +int tr_parse_byday(tmrec_p, char *); +int tr_parse_bymday(tmrec_p, char *); +int tr_parse_byyday(tmrec_p, char *); +int tr_parse_bymonth(tmrec_p, char *); +int tr_parse_byweekno(tmrec_p, char *); +int tr_parse_wkst(tmrec_p, char *); int tr_print(tmrec_p); -time_t ic_parse_datetime(char*,struct tm*); -time_t ic_parse_duration(char*); +time_t ic_parse_datetime(char *, struct tm *); +time_t ic_parse_duration(char *); -tr_byxxx_p ic_parse_byday(char*); -tr_byxxx_p ic_parse_byxxx(char*); -int ic_parse_wkst(char*); +tr_byxxx_p ic_parse_byday(char *); +tr_byxxx_p ic_parse_byxxx(char *); +int ic_parse_wkst(char *); int check_tmrec(tmrec_p, ac_tm_p, tr_res_p); #endif - diff --git a/src/modules/drouting/drouting.c b/src/modules/drouting/drouting.c index 6cb9a13ba30..4811faa0d50 100644 --- a/src/modules/drouting/drouting.c +++ b/src/modules/drouting/drouting.c @@ -50,7 +50,7 @@ /*** DB relatede stuff ***/ /* parameters */ -static str db_url = {NULL,0}; +static str db_url = {NULL, 0}; static str drg_table = str_init("dr_groups"); static str drd_table = str_init("dr_gateways"); static str drr_table = str_init("dr_rules"); @@ -74,25 +74,27 @@ static str drg_user_col = str_init("username"); static str drg_domain_col = str_init("domain"); static str drg_grpid_col = str_init("groupid"); /* variables */ -static db1_con_t *db_hdl=0; /* DB handler */ -static db_func_t dr_dbf; /* DB functions */ +static db1_con_t *db_hdl = 0; /* DB handler */ +static db_func_t dr_dbf; /* DB functions */ /* current dr data - pointer to a pointer in shm */ static rt_data_t **rdata = 0; /* AVP used to store serial RURIs */ -static struct _ruri_avp{ +static struct _ruri_avp +{ unsigned short type; /* AVP ID */ - int_str name; /* AVP name*/ -}ruri_avp = { 0, {.n=(int)0xad346b2f} }; -static str ruri_avp_spec = {0,0}; + int_str name; /* AVP name*/ +} ruri_avp = {0, {.n = (int)0xad346b2f}}; +static str ruri_avp_spec = {0, 0}; /* AVP used to store serial ATTRs */ -static struct _attrs_avp{ +static struct _attrs_avp +{ unsigned short type; /* AVP ID */ - int_str name; /* AVP name*/ -}attrs_avp = { 0, {.n=(int)0xad346b30} }; -static str attrs_avp_spec = {0,0}; + int_str name; /* AVP name*/ +} attrs_avp = {0, {.n = (int)0xad346b30}}; +static str attrs_avp_spec = {0, 0}; /* statistic data */ int tree_size = 0; @@ -101,50 +103,50 @@ int unode = 0; /* lock, ref counter and flag used for reloading the date */ static gen_lock_t *ref_lock = 0; -static int* data_refcnt = 0; -static int* reload_flag = 0; +static int *data_refcnt = 0; +static int *reload_flag = 0; static int dr_init(void); static int dr_child_init(int rank); static int dr_exit(void); -static int fixup_do_routing(void** param, int param_no); -static int fixup_from_gw(void** param, int param_no); +static int fixup_do_routing(void **param, int param_no); +static int fixup_from_gw(void **param, int param_no); -static int do_routing(struct sip_msg* msg, dr_group_t *drg); -static int do_routing_0(struct sip_msg* msg, char* str1, char* str2); -static int do_routing_1(struct sip_msg* msg, char* str1, char* str2); -static int use_next_gw(struct sip_msg* msg); -static int is_from_gw_0(struct sip_msg* msg, char* str1, char* str2); -static int is_from_gw_1(struct sip_msg* msg, char* str1, char* str2); -static int is_from_gw_2(struct sip_msg* msg, char* str1, char* str2); -static int goes_to_gw_0(struct sip_msg* msg, char* f1, char* f2); -static int goes_to_gw_1(struct sip_msg* msg, char* f1, char* f2); +static int do_routing(struct sip_msg *msg, dr_group_t *drg); +static int do_routing_0(struct sip_msg *msg, char *str1, char *str2); +static int do_routing_1(struct sip_msg *msg, char *str1, char *str2); +static int use_next_gw(struct sip_msg *msg); +static int is_from_gw_0(struct sip_msg *msg, char *str1, char *str2); +static int is_from_gw_1(struct sip_msg *msg, char *str1, char *str2); +static int is_from_gw_2(struct sip_msg *msg, char *str1, char *str2); +static int goes_to_gw_0(struct sip_msg *msg, char *f1, char *f2); +static int goes_to_gw_1(struct sip_msg *msg, char *f1, char *f2); MODULE_VERSION +/* clang-format off */ /* * Exported functions */ static cmd_export_t cmds[] = { - {"do_routing", (cmd_function)do_routing_0, 0, 0, 0, - REQUEST_ROUTE|FAILURE_ROUTE}, - {"do_routing", (cmd_function)do_routing_1, 1, fixup_do_routing, 0, - REQUEST_ROUTE|FAILURE_ROUTE}, - {"use_next_gw", (cmd_function)use_next_gw, 0, 0, 0, - REQUEST_ROUTE|FAILURE_ROUTE}, - {"next_routing", (cmd_function)use_next_gw, 0, 0, 0, - FAILURE_ROUTE}, - {"is_from_gw", (cmd_function)is_from_gw_0, 0, 0, 0, - REQUEST_ROUTE|FAILURE_ROUTE|ONREPLY_ROUTE}, - {"is_from_gw", (cmd_function)is_from_gw_1, 1, fixup_from_gw, 0, - REQUEST_ROUTE|FAILURE_ROUTE|ONREPLY_ROUTE}, - {"is_from_gw", (cmd_function)is_from_gw_2, 2, fixup_from_gw, 0, - REQUEST_ROUTE}, - {"goes_to_gw", (cmd_function)goes_to_gw_0, 0, 0, 0, - REQUEST_ROUTE|FAILURE_ROUTE|ONREPLY_ROUTE}, - {"goes_to_gw", (cmd_function)goes_to_gw_1, 1, fixup_from_gw, 0, - REQUEST_ROUTE|FAILURE_ROUTE|ONREPLY_ROUTE}, + {"do_routing", (cmd_function)do_routing_0, 0, 0, + 0, REQUEST_ROUTE | FAILURE_ROUTE}, + {"do_routing", (cmd_function)do_routing_1, 1, fixup_do_routing, 0, + REQUEST_ROUTE | FAILURE_ROUTE}, + {"use_next_gw", (cmd_function)use_next_gw, 0, 0, 0, + REQUEST_ROUTE | FAILURE_ROUTE}, + {"next_routing", (cmd_function)use_next_gw, 0, 0, 0, FAILURE_ROUTE}, + {"is_from_gw", (cmd_function)is_from_gw_0, 0, 0, 0, + REQUEST_ROUTE | FAILURE_ROUTE | ONREPLY_ROUTE}, + {"is_from_gw", (cmd_function)is_from_gw_1, 1, fixup_from_gw, 0, + REQUEST_ROUTE | FAILURE_ROUTE | ONREPLY_ROUTE}, + {"is_from_gw", (cmd_function)is_from_gw_2, 2, fixup_from_gw, 0, + REQUEST_ROUTE}, + {"goes_to_gw", (cmd_function)goes_to_gw_0, 0, 0, 0, + REQUEST_ROUTE | FAILURE_ROUTE | ONREPLY_ROUTE}, + {"goes_to_gw", (cmd_function)goes_to_gw_1, 1, fixup_from_gw, 0, + REQUEST_ROUTE | FAILURE_ROUTE | ONREPLY_ROUTE}, {0, 0, 0, 0, 0, 0} }; @@ -153,65 +155,64 @@ static cmd_export_t cmds[] = { * Exported parameters */ static param_export_t params[] = { - {"db_url", PARAM_STR, &db_url }, - {"drd_table", PARAM_STR, &drd_table }, - {"drr_table", PARAM_STR, &drr_table }, - {"drg_table", PARAM_STR, &drg_table }, - {"drl_table", PARAM_STR, &drl_table }, - {"use_domain", INT_PARAM, &use_domain }, - {"drg_user_col", PARAM_STR, &drg_user_col }, - {"drg_domain_col", PARAM_STR, &drg_domain_col}, - {"drg_grpid_col", PARAM_STR, &drg_grpid_col }, - {"ruri_avp", PARAM_STR, &ruri_avp_spec }, - {"attrs_avp", PARAM_STR, &attrs_avp_spec}, - {"sort_order", INT_PARAM, &sort_order }, - {"fetch_rows", INT_PARAM, &dr_fetch_rows }, - {"force_dns", INT_PARAM, &dr_force_dns }, - {"enable_keepalive",INT_PARAM, &dr_enable_keepalive}, + {"db_url", PARAM_STR, &db_url}, + {"drd_table", PARAM_STR, &drd_table}, + {"drr_table", PARAM_STR, &drr_table}, + {"drg_table", PARAM_STR, &drg_table}, + {"drl_table", PARAM_STR, &drl_table}, + {"use_domain", INT_PARAM, &use_domain}, + {"drg_user_col", PARAM_STR, &drg_user_col}, + {"drg_domain_col", PARAM_STR, &drg_domain_col}, + {"drg_grpid_col", PARAM_STR, &drg_grpid_col}, + {"ruri_avp", PARAM_STR, &ruri_avp_spec}, + {"attrs_avp", PARAM_STR, &attrs_avp_spec}, + {"sort_order", INT_PARAM, &sort_order}, + {"fetch_rows", INT_PARAM, &dr_fetch_rows}, + {"force_dns", INT_PARAM, &dr_force_dns}, + {"enable_keepalive", INT_PARAM, &dr_enable_keepalive}, {0, 0, 0} }; static rpc_export_t rpc_methods[]; struct module_exports exports = { - "drouting", - DEFAULT_DLFLAGS, /* dlopen flags */ - cmds, /* Exported functions */ - params, /* Exported parameters */ - NULL, /* exported statistics */ - NULL, /* exported MI functions */ - NULL, /* exported pseudo-variables */ - 0, /* additional processes */ - dr_init, /* Module initialization function */ - (response_function) NULL, - (destroy_function) dr_exit, - (child_init_function) dr_child_init /* per-child init function */ + "drouting", DEFAULT_DLFLAGS, /* dlopen flags */ + cmds, /* Exported functions */ + params, /* Exported parameters */ + NULL, /* exported statistics */ + NULL, /* exported MI functions */ + NULL, /* exported pseudo-variables */ + 0, /* additional processes */ + dr_init, /* Module initialization function */ + (response_function)NULL, + (destroy_function)dr_exit, + (child_init_function)dr_child_init /* per-child init function */ }; - +/* clang-format on */ /** * Rewrite Request-URI */ -static inline int rewrite_ruri(struct sip_msg* _m, char* _s) +static inline int rewrite_ruri(struct sip_msg *_m, char *_s) { - struct action act; - struct run_act_ctx ra_ctx; - - memset(&act, '\0', sizeof(act)); - act.type = SET_URI_T; - act.val[0].type = STRING_ST; - act.val[0].u.string = _s; - init_run_actions_ctx(&ra_ctx); - if (do_action(&ra_ctx, &act, _m) < 0) - { - LM_ERR("do_action failed\n"); - return -1; - } - return 0; + struct action act; + struct run_act_ctx ra_ctx; + + memset(&act, '\0', sizeof(act)); + act.type = SET_URI_T; + act.val[0].type = STRING_ST; + act.val[0].u.string = _s; + init_run_actions_ctx(&ra_ctx); + if(do_action(&ra_ctx, &act, _m) < 0) { + LM_ERR("do_action failed\n"); + return -1; + } + return 0; } -void dr_keepalive_statechanged(str *uri, ka_state state, void *user_attr) { +void dr_keepalive_statechanged(str *uri, ka_state state, void *user_attr) +{ ((pgw_t *)user_attr)->state = state; } @@ -223,33 +224,34 @@ static int dr_update_keepalive(pgw_t *addrs) for(cur = addrs; cur != NULL; cur = cur->next) { LM_DBG("uri: %.*s\n", cur->ip.len, cur->ip.s); - keepalive_api.add_destination(&cur->ip, &owner, 0, dr_keepalive_statechanged, cur); + keepalive_api.add_destination( + &cur->ip, &owner, 0, dr_keepalive_statechanged, cur); } return 0; } -static inline int dr_reload_data( void ) +static inline int dr_reload_data(void) { rt_data_t *new_data; rt_data_t *old_data; - new_data = dr_load_routing_info( &dr_dbf, db_hdl, - &drd_table, &drl_table, &drr_table); - if ( new_data==0 ) { + new_data = dr_load_routing_info( + &dr_dbf, db_hdl, &drd_table, &drl_table, &drr_table); + if(new_data == 0) { LM_CRIT("failed to load routing info\n"); return -1; } /* block access to data for all readers */ - lock_get( ref_lock ); + lock_get(ref_lock); *reload_flag = 1; - lock_release( ref_lock ); + lock_release(ref_lock); /* wait for all readers to finish - it's a kind of busy waitting but * it's not critical; * at this point, data_refcnt can only be decremented */ - while (*data_refcnt) { + while(*data_refcnt) { usleep(10); } @@ -261,10 +263,10 @@ static inline int dr_reload_data( void ) *reload_flag = 0; /* destroy old data */ - if (old_data) - free_rt_data( old_data, 1 ); + if(old_data) + free_rt_data(old_data, 1); - if (dr_enable_keepalive) { + if(dr_enable_keepalive) { dr_update_keepalive((*rdata)->pgw_l); } @@ -278,90 +280,91 @@ static int dr_init(void) LM_INFO("DRouting - initializing\n"); - if (rpc_register_array(rpc_methods)!=0) { + if(rpc_register_array(rpc_methods) != 0) { LM_ERR("failed to register RPC commands\n"); return -1; } /* check the module params */ - if (db_url.s==NULL || db_url.len<=0) { + if(db_url.s == NULL || db_url.len <= 0) { LM_CRIT("mandatory parameter \"DB_URL\" found empty\n"); goto error; } - if (drd_table.len<=0) { + if(drd_table.len <= 0) { LM_CRIT("mandatory parameter \"DRD_TABLE\" found empty\n"); goto error; } - if (drr_table.len<=0) { + if(drr_table.len <= 0) { LM_CRIT("mandatory parameter \"DRR_TABLE\" found empty\n"); goto error; } - if (drg_table.len<=0) { + if(drg_table.len <= 0) { LM_CRIT("mandatory parameter \"DRG_TABLE\" found empty\n"); goto error; } - if (drl_table.len<=0) { + if(drl_table.len <= 0) { LM_CRIT("mandatory parameter \"DRL_TABLE\" found empty\n"); goto error; } /* fix AVP spec */ - if (ruri_avp_spec.s) { - if (pv_parse_spec( &ruri_avp_spec, &avp_spec)==0 - || avp_spec.type!=PVT_AVP) { + if(ruri_avp_spec.s) { + if(pv_parse_spec(&ruri_avp_spec, &avp_spec) == 0 + || avp_spec.type != PVT_AVP) { LM_ERR("malformed or non AVP [%.*s] for RURI AVP definition\n", - ruri_avp_spec.len, ruri_avp_spec.s); + ruri_avp_spec.len, ruri_avp_spec.s); return E_CFG; } - if( pv_get_avp_name(0, &(avp_spec.pvp), &(ruri_avp.name), - &(ruri_avp.type) )!=0) { + if(pv_get_avp_name( + 0, &(avp_spec.pvp), &(ruri_avp.name), &(ruri_avp.type)) + != 0) { LM_ERR("[%.*s]- invalid AVP definition for RURI AVP\n", - ruri_avp_spec.len, ruri_avp_spec.s); + ruri_avp_spec.len, ruri_avp_spec.s); return E_CFG; } } - if (attrs_avp_spec.s) { - if (pv_parse_spec( &attrs_avp_spec, &avp_spec)==0 - || avp_spec.type!=PVT_AVP) { + if(attrs_avp_spec.s) { + if(pv_parse_spec(&attrs_avp_spec, &avp_spec) == 0 + || avp_spec.type != PVT_AVP) { LM_ERR("malformed or non AVP [%.*s] for ATTRS AVP definition\n", - attrs_avp_spec.len, attrs_avp_spec.s); + attrs_avp_spec.len, attrs_avp_spec.s); return E_CFG; } - if( pv_get_avp_name(0, &(avp_spec.pvp), &(attrs_avp.name), - &(attrs_avp.type) )!=0) { + if(pv_get_avp_name( + 0, &(avp_spec.pvp), &(attrs_avp.name), &(attrs_avp.type)) + != 0) { LM_ERR("[%.*s]- invalid AVP definition for ATTRS AVP\n", - attrs_avp_spec.len, attrs_avp_spec.s); + attrs_avp_spec.len, attrs_avp_spec.s); return E_CFG; } } /* data pointer in shm */ - rdata = (rt_data_t**)shm_malloc( sizeof(rt_data_t*) ); - if (rdata==0) { + rdata = (rt_data_t **)shm_malloc(sizeof(rt_data_t *)); + if(rdata == 0) { LM_CRIT("failed to get shm mem for data ptr\n"); goto error; } *rdata = 0; /* create & init lock */ - if ( (ref_lock=lock_alloc())==0) { + if((ref_lock = lock_alloc()) == 0) { LM_CRIT("failed to alloc ref_lock\n"); goto error; } - if (lock_init(ref_lock)==0 ) { + if(lock_init(ref_lock) == 0) { LM_CRIT("failed to init ref_lock\n"); goto error; } - data_refcnt = (int*)shm_malloc(sizeof(int)); - reload_flag = (int*)shm_malloc(sizeof(int)); - if(!data_refcnt || !reload_flag) - { + data_refcnt = (int *)shm_malloc(sizeof(int)); + reload_flag = (int *)shm_malloc(sizeof(int)); + if(!data_refcnt || !reload_flag) { LM_ERR("no more shared memory\n"); goto error; } @@ -369,19 +372,19 @@ static int dr_init(void) *reload_flag = 0; /* bind to the mysql module */ - if (db_bind_mod( &db_url, &dr_dbf )) { + if(db_bind_mod(&db_url, &dr_dbf)) { LM_CRIT("cannot bind to database module! " - "Did you forget to load a database module ?\n"); + "Did you forget to load a database module ?\n"); goto error; } - if (!DB_CAPABILITY( dr_dbf, DB_CAP_QUERY)) { - LM_CRIT( "database modules does not " - "provide QUERY functions needed by DRounting module\n"); + if(!DB_CAPABILITY(dr_dbf, DB_CAP_QUERY)) { + LM_CRIT("database modules does not " + "provide QUERY functions needed by DRounting module\n"); return -1; } - if (dr_enable_keepalive) { + if(dr_enable_keepalive) { LM_DBG("keepalive enabled - try loading keepalive module API\n"); if(keepalive_load_api(&keepalive_api) < 0) { @@ -392,16 +395,16 @@ static int dr_init(void) return 0; error: - if (ref_lock) { - lock_destroy( ref_lock ); - lock_dealloc( ref_lock ); + if(ref_lock) { + lock_destroy(ref_lock); + lock_dealloc(ref_lock); ref_lock = 0; } - if (db_hdl) { + if(db_hdl) { dr_dbf.close(db_hdl); db_hdl = 0; } - if (rdata) { + if(rdata) { shm_free(rdata); rdata = 0; } @@ -409,31 +412,30 @@ static int dr_init(void) } - static int dr_child_init(int rank) { /* only workers needs DB connection */ - if (rank==PROC_MAIN || rank==PROC_TCP_MAIN || rank==PROC_INIT) + if(rank == PROC_MAIN || rank == PROC_TCP_MAIN || rank == PROC_INIT) return 0; /* init DB connection */ - if ( (db_hdl=dr_dbf.init(&db_url))==0 ) { + if((db_hdl = dr_dbf.init(&db_url)) == 0) { LM_CRIT("cannot initialize database connection\n"); return -1; } /* child 1 load the routing info */ - if ( (rank==1) && dr_reload_data()!=0 ) { + if((rank == 1) && dr_reload_data() != 0) { LM_CRIT("failed to load routing data\n"); return -1; } /* set GROUP table for workers */ - if (dr_dbf.use_table( db_hdl, &drg_table) < 0) { + if(dr_dbf.use_table(db_hdl, &drg_table) < 0) { LM_ERR("cannot select table \"%.*s\"\n", drg_table.len, drg_table.s); return -1; } - kam_srand(getpid()+time(0)+rank); + kam_srand(getpid() + time(0) + rank); return 0; } @@ -441,26 +443,26 @@ static int dr_child_init(int rank) static int dr_exit(void) { /* close DB connection */ - if (db_hdl) { + if(db_hdl) { dr_dbf.close(db_hdl); db_hdl = 0; } /* destroy data */ - if ( rdata) { - if (*rdata) - free_rt_data( *rdata, 1 ); - shm_free( rdata ); + if(rdata) { + if(*rdata) + free_rt_data(*rdata, 1); + shm_free(rdata); rdata = 0; } /* destroy lock */ - if (ref_lock) { - lock_destroy( ref_lock ); - lock_dealloc( ref_lock ); + if(ref_lock) { + lock_destroy(ref_lock); + lock_dealloc(ref_lock); ref_lock = 0; } - + if(reload_flag) shm_free(reload_flag); if(data_refcnt) @@ -472,8 +474,7 @@ static int dr_exit(void) /* rpc function documentation */ static const char *rpc_reload_doc[2] = { - "Write back to disk modified tables", 0 -}; + "Write back to disk modified tables", 0}; /* rpc function implementations */ static void rpc_reload(rpc_t *rpc, void *c) @@ -483,15 +484,15 @@ static void rpc_reload(rpc_t *rpc, void *c) LM_INFO("RPC command received!\n"); /* init DB connection if needed */ - if (db_hdl==NULL) { - db_hdl=dr_dbf.init(&db_url); - if(db_hdl==0 ) { + if(db_hdl == NULL) { + db_hdl = dr_dbf.init(&db_url); + if(db_hdl == 0) { rpc->rpl_printf(c, "cannot initialize database connection"); return; } } - if ( (n=dr_reload_data())!=0 ) { + if((n = dr_reload_data()) != 0) { rpc->rpl_printf(c, "failed to load routing data"); return; } @@ -501,9 +502,7 @@ static void rpc_reload(rpc_t *rpc, void *c) } static rpc_export_t rpc_methods[] = { - {"drouting.reload", rpc_reload, rpc_reload_doc, 0}, - {0, 0, 0, 0} -}; + {"drouting.reload", rpc_reload, rpc_reload_doc, 0}, {0, 0, 0, 0}}; static inline int get_group_id(struct sip_uri *uri) @@ -511,21 +510,21 @@ static inline int get_group_id(struct sip_uri *uri) db_key_t keys_ret[1]; db_key_t keys_cmp[2]; db_val_t vals_cmp[2]; - db1_res_t* res; + db1_res_t *res; int n; /* user */ keys_cmp[0] = &drg_user_col; vals_cmp[0].type = DB1_STR; - vals_cmp[0].nul = 0; + vals_cmp[0].nul = 0; vals_cmp[0].val.str_val = uri->user; n = 1; - if (use_domain) { + if(use_domain) { keys_cmp[1] = &drg_domain_col; vals_cmp[1].type = DB1_STR; - vals_cmp[1].nul = 0; + vals_cmp[1].nul = 0; vals_cmp[1].val.str_val = uri->host; n++; } @@ -533,18 +532,19 @@ static inline int get_group_id(struct sip_uri *uri) keys_ret[0] = &drg_grpid_col; res = 0; - if ( dr_dbf.query(db_hdl,keys_cmp,0,vals_cmp,keys_ret,n,1,0,&res)<0 ) { + if(dr_dbf.query(db_hdl, keys_cmp, 0, vals_cmp, keys_ret, n, 1, 0, &res) + < 0) { LM_ERR("DB query failed\n"); goto error; } - if (RES_ROW_N(res) == 0) { + if(RES_ROW_N(res) == 0) { LM_ERR("no group for user " - "\"%.*s\"@\"%.*s\"\n", uri->user.len, uri->user.s, - uri->host.len, uri->host.s); + "\"%.*s\"@\"%.*s\"\n", + uri->user.len, uri->user.s, uri->host.len, uri->host.s); goto error; } - if (res->rows[0].values[0].nul || res->rows[0].values[0].type!=DB1_INT) { + if(res->rows[0].values[0].nul || res->rows[0].values[0].type != DB1_INT) { LM_ERR("null or non-integer group_id\n"); goto error; } @@ -553,87 +553,89 @@ static inline int get_group_id(struct sip_uri *uri) dr_dbf.free_result(db_hdl, res); return n; error: - if (res) + if(res) dr_dbf.free_result(db_hdl, res); return -1; } - -static inline str* build_ruri(struct sip_uri *uri, int strip, str *pri, - str *hostport) +static inline str *build_ruri( + struct sip_uri *uri, int strip, str *pri, str *hostport) { static str uri_str; char *p; - if (uri->user.len<=strip) { + if(uri->user.len <= strip) { LM_ERR("stripping %d makes " - "username <%.*s> null\n",strip,uri->user.len,uri->user.s); + "username <%.*s> null\n", + strip, uri->user.len, uri->user.s); return 0; } - uri_str.len = 4 /*sip:*/ + uri->user.len - strip +pri->len + - (uri->passwd.s?(uri->passwd.len+1):0) + 1/*@*/ + hostport->len + - (uri->params.s?(uri->params.len+1):0) + - (uri->headers.s?(uri->headers.len+1):0); + uri_str.len = 4 /*sip:*/ + uri->user.len - strip + pri->len + + (uri->passwd.s ? (uri->passwd.len + 1) : 0) + + 1 /*@*/ + hostport->len + + (uri->params.s ? (uri->params.len + 1) : 0) + + (uri->headers.s ? (uri->headers.len + 1) : 0); - if ( (uri_str.s=(char*)pkg_malloc( uri_str.len + 1))==0) { + if((uri_str.s = (char *)pkg_malloc(uri_str.len + 1)) == 0) { LM_ERR("no more pkg mem\n"); return 0; } p = uri_str.s; - *(p++)='s'; - *(p++)='i'; - *(p++)='p'; - *(p++)=':'; - if (pri->len) { + *(p++) = 's'; + *(p++) = 'i'; + *(p++) = 'p'; + *(p++) = ':'; + if(pri->len) { memcpy(p, pri->s, pri->len); p += pri->len; } - memcpy(p, uri->user.s+strip, uri->user.len-strip); - p += uri->user.len-strip; - if (uri->passwd.s && uri->passwd.len) { - *(p++)=':'; + memcpy(p, uri->user.s + strip, uri->user.len - strip); + p += uri->user.len - strip; + if(uri->passwd.s && uri->passwd.len) { + *(p++) = ':'; memcpy(p, uri->passwd.s, uri->passwd.len); p += uri->passwd.len; } - *(p++)='@'; + *(p++) = '@'; memcpy(p, hostport->s, hostport->len); p += hostport->len; - if (uri->params.s && uri->params.len) { - *(p++)=';'; + if(uri->params.s && uri->params.len) { + *(p++) = ';'; memcpy(p, uri->params.s, uri->params.len); p += uri->params.len; } - if (uri->headers.s && uri->headers.len) { - *(p++)='?'; + if(uri->headers.s && uri->headers.len) { + *(p++) = '?'; memcpy(p, uri->headers.s, uri->headers.len); p += uri->headers.len; } *p = 0; - if (p-uri_str.s!=uri_str.len) { + if(p - uri_str.s != uri_str.len) { LM_CRIT("difference between allocated(%d)" - " and written(%d)\n",uri_str.len,(int)(long)(p-uri_str.s)); + " and written(%d)\n", + uri_str.len, (int)(long)(p - uri_str.s)); return 0; } return &uri_str; } -static int do_routing_0(struct sip_msg* msg, char* str1, char* str2) +static int do_routing_0(struct sip_msg *msg, char *str1, char *str2) { return do_routing(msg, NULL); } -static int do_routing_1(struct sip_msg* msg, char* str1, char* str2) +static int do_routing_1(struct sip_msg *msg, char *str1, char *str2) { - return do_routing(msg, (dr_group_t*)str1); + return do_routing(msg, (dr_group_t *)str1); } -static int use_next_gw(struct sip_msg* msg) +static int use_next_gw(struct sip_msg *msg) { struct usr_avp *avp; int_str val; @@ -641,36 +643,42 @@ static int use_next_gw(struct sip_msg* msg) /* search for the first RURI AVP containing a string */ do { avp = search_first_avp(ruri_avp.type, ruri_avp.name, &val, 0); - }while (avp && (avp->flags&AVP_VAL_STR)==0 ); + } while(avp && (avp->flags & AVP_VAL_STR) == 0); - if (!avp) return -1; + if(!avp) + return -1; - if (rewrite_ruri(msg, val.s.s)==-1) { + if(rewrite_ruri(msg, val.s.s) == -1) { LM_ERR("failed to rewite RURI\n"); return -1; } destroy_avp(avp); - LM_DBG("new RURI set to <%.*s>\n", val.s.len,val.s.s); + LM_DBG("new RURI set to <%.*s>\n", val.s.len, val.s.s); /* remove the old attrs */ avp = NULL; do { - if (avp) destroy_avp(avp); + if(avp) + destroy_avp(avp); avp = search_first_avp(attrs_avp.type, attrs_avp.name, NULL, 0); - }while (avp && (avp->flags&AVP_VAL_STR)==0 ); - if (avp) destroy_avp(avp); + } while(avp && (avp->flags & AVP_VAL_STR) == 0); + if(avp) + destroy_avp(avp); return 1; } -int dr_already_choosen(rt_info_t* rt_info, int *active_gwlist, int* local_gwlist, int lgw_size, int check) +int dr_already_choosen(rt_info_t *rt_info, int *active_gwlist, + int *local_gwlist, int lgw_size, int check) { int l; - for ( l = 0; lpgwl[active_gwlist[local_gwlist[l]]].pgw == rt_info->pgwl[check].pgw ) { + for(l = 0; l < lgw_size; l++) { + if(rt_info->pgwl[active_gwlist[local_gwlist[l]]].pgw + == rt_info->pgwl[check].pgw) { LM_INFO("Gateway already chosen %.*s, local_gwlist[%d]=%d, %d\n", - rt_info->pgwl[check].pgw->ip.len, rt_info->pgwl[check].pgw->ip.s, l, local_gwlist[l], check); + rt_info->pgwl[check].pgw->ip.len, + rt_info->pgwl[check].pgw->ip.s, l, local_gwlist[l], check); return 1; } } @@ -678,17 +686,17 @@ int dr_already_choosen(rt_info_t* rt_info, int *active_gwlist, int* local_gwlist return 0; } -static int do_routing(struct sip_msg* msg, dr_group_t *drg) +static int do_routing(struct sip_msg *msg, dr_group_t *drg) { - struct to_body *from; - struct sip_uri uri; - rt_info_t *rt_info; - int grp_id; - int i, j, l, t; - str *ruri; + struct to_body *from; + struct sip_uri uri; + rt_info_t *rt_info; + int grp_id; + int i, j, l, t; + str *ruri; int_str val; struct usr_avp *avp; -#define DR_MAX_GWLIST 32 +#define DR_MAX_GWLIST 32 static int active_gwlist[DR_MAX_GWLIST]; static int local_gwlist[DR_MAX_GWLIST]; int gwlist_size; @@ -697,108 +705,110 @@ static int do_routing(struct sip_msg* msg, dr_group_t *drg) ret = -1; - if ( (*rdata)==0 || (*rdata)->pgw_l==0 ) { + if((*rdata) == 0 || (*rdata)->pgw_l == 0) { LM_DBG("empty ruting table\n"); goto error1; } /* get the username from FROM_HDR */ - if (parse_from_header(msg)!=0) { + if(parse_from_header(msg) != 0) { LM_ERR("unable to parse from hdr\n"); goto error1; } - from = (struct to_body*)msg->from->parsed; + from = (struct to_body *)msg->from->parsed; /* parse uri */ - if (parse_uri( from->uri.s, from->uri.len, &uri)!=0) { + if(parse_uri(from->uri.s, from->uri.len, &uri) != 0) { LM_ERR("unable to parse from uri\n"); goto error1; } /* get user's routing group */ - if(drg==NULL) - { - grp_id = get_group_id( &uri ); - if (grp_id<0) { + if(drg == NULL) { + grp_id = get_group_id(&uri); + if(grp_id < 0) { LM_ERR("failed to get group id\n"); goto error1; } } else { - if(drg->type==0) + if(drg->type == 0) grp_id = (int)drg->u.grp_id; - else if(drg->type==1) { + else if(drg->type == 1) { grp_id = 0; /* call get avp here */ - if((avp=search_first_avp( drg->u.avp_id.type, - drg->u.avp_id.name, &val, 0))==NULL||(avp->flags&AVP_VAL_STR)) { - LM_ERR( "failed to get group id\n"); + if((avp = search_first_avp( + drg->u.avp_id.type, drg->u.avp_id.name, &val, 0)) + == NULL + || (avp->flags & AVP_VAL_STR)) { + LM_ERR("failed to get group id\n"); goto error1; } grp_id = val.n; } else - grp_id = 0; + grp_id = 0; } - LM_DBG("using dr group %d\n",grp_id); + LM_DBG("using dr group %d\n", grp_id); /* get the number */ ruri = GET_RURI(msg); /* parse ruri */ - if (parse_uri( ruri->s, ruri->len, &uri)!=0) { + if(parse_uri(ruri->s, ruri->len, &uri) != 0) { LM_ERR("unable to parse RURI\n"); goto error1; } - /* ref the data for reading */ +/* ref the data for reading */ again: - lock_get( ref_lock ); + lock_get(ref_lock); /* if reload must be done, do un ugly busy waiting * until reload is finished */ - if (*reload_flag) { - lock_release( ref_lock ); + if(*reload_flag) { + lock_release(ref_lock); usleep(5); goto again; } *data_refcnt = *data_refcnt + 1; - lock_release( ref_lock ); + lock_release(ref_lock); /* search a prefix */ - rt_info = get_prefix( (*rdata)->pt, &uri.user , (unsigned int)grp_id); - if (rt_info==0) { - LM_DBG("no matching for prefix \"%.*s\"\n", - uri.user.len, uri.user.s); + rt_info = get_prefix((*rdata)->pt, &uri.user, (unsigned int)grp_id); + if(rt_info == 0) { + LM_DBG("no matching for prefix \"%.*s\"\n", uri.user.len, uri.user.s); /* try prefixless rules */ - rt_info = check_rt( &(*rdata)->noprefix, (unsigned int)grp_id); - if (rt_info==0) { + rt_info = check_rt(&(*rdata)->noprefix, (unsigned int)grp_id); + if(rt_info == 0) { LM_DBG("no prefixless matching for " - "grp %d\n", grp_id); + "grp %d\n", + grp_id); goto error2; } } - if (rt_info->route_idx>0 && main_rt.rlist[rt_info->route_idx]!=NULL) { + if(rt_info->route_idx > 0 && main_rt.rlist[rt_info->route_idx] != NULL) { ret = run_top_route(main_rt.rlist[rt_info->route_idx], msg, 0); - if (ret<1) { + if(ret < 1) { /* drop the action */ LM_DBG("script route %d drops routing " - "by %d\n", rt_info->route_idx, ret); + "by %d\n", + rt_info->route_idx, ret); goto error2; } ret = -1; } - gwlist_size - = (rt_info->pgwa_len>DR_MAX_GWLIST)?DR_MAX_GWLIST:rt_info->pgwa_len; - + gwlist_size = (rt_info->pgwa_len > DR_MAX_GWLIST) ? DR_MAX_GWLIST + : rt_info->pgwa_len; + // we filter out inactive gateways - for(i=0,j=0; i < gwlist_size; i++) { + for(i = 0, j = 0; i < gwlist_size; i++) { dest = rt_info->pgwl[i].pgw; - if (dest->state != KA_STATE_DOWN) { + if(dest->state != KA_STATE_DOWN) { active_gwlist[j++] = i; } } // updating gwlist_size value gwlist_size = j; - if (gwlist_size == 0) { + if(gwlist_size == 0) { LM_WARN("no gateways available (all in state down)\n"); ret = -1; goto error2; @@ -806,39 +816,34 @@ static int do_routing(struct sip_msg* msg, dr_group_t *drg) /* set gw order */ - if(sort_order>=1&&gwlist_size>1) - { + if(sort_order >= 1 && gwlist_size > 1) { j = 0; t = 0; - while(jpgwl[active_gwlist[j]].grpid!=rt_info->pgwl[active_gwlist[i]].grpid) + for(i = j + 1; i < gwlist_size; i++) + if(rt_info->pgwl[active_gwlist[j]].grpid + != rt_info->pgwl[active_gwlist[i]].grpid) break; - if(i-j==1) - { + if(i - j == 1) { local_gwlist[t++] = j; /*LM_DBG("selected gw[%d]=%d\n", j, local_gwlist[j]);*/ } else { - if(i-j==2) - { - local_gwlist[t++] = j + kam_rand()%2; - if(sort_order==1) - { - local_gwlist[t++] = j + (local_gwlist[j]-j+1)%2; + if(i - j == 2) { + local_gwlist[t++] = j + kam_rand() % 2; + if(sort_order == 1) { + local_gwlist[t++] = j + (local_gwlist[j] - j + 1) % 2; /*LM_DBG("selected gw[%d]=%d" * " gw[%d]=%d\n", j, local_gwlist[j], j+1, * local_gwlist[j+1]);*/ } } else { - local_gwlist[t++] = j + kam_rand()%(i-j); - if(sort_order==1) - { - do{ - local_gwlist[t] = j + kam_rand()%(i-j); - }while(local_gwlist[t]==local_gwlist[t-1]); + local_gwlist[t++] = j + kam_rand() % (i - j); + if(sort_order == 1) { + do { + local_gwlist[t] = j + kam_rand() % (i - j); + } while(local_gwlist[t] == local_gwlist[t - 1]); t++; /* @@ -846,9 +851,8 @@ static int do_routing(struct sip_msg* msg, dr_group_t *drg) " gw[%d]=%d.\n", j, local_gwlist[j], j+1, local_gwlist[j+1]); */ /* add the rest in this group */ - for(l=j; l1 ) { + if(t > 1) { /* check if all in the current set were already chosen */ - if (i-j <= t-1) { - for( l = j; l< i; l++) { - if ( ! dr_already_choosen(rt_info, active_gwlist, local_gwlist, t-1, active_gwlist[l]) ) + if(i - j <= t - 1) { + for(l = j; l < i; l++) { + if(!dr_already_choosen(rt_info, active_gwlist, + local_gwlist, t - 1, active_gwlist[l])) break; } - if ( l == i ) { - LM_INFO("All gateways in group from %d - %d were already used\n", j, i); + if(l == i) { + LM_INFO("All gateways in group from %d - %d were " + "already used\n", + j, i); t--; /* jump over this group, nothing to choose here */ - j=i; continue; + j = i; + continue; } } - while ( dr_already_choosen(rt_info, active_gwlist, local_gwlist, t-1, active_gwlist[local_gwlist[t-1]]) ) { - local_gwlist[t-1] = j + kam_rand()%(i-j); + while(dr_already_choosen(rt_info, active_gwlist, + local_gwlist, t - 1, + active_gwlist[local_gwlist[t - 1]])) { + local_gwlist[t - 1] = j + kam_rand() % (i - j); } } - LM_DBG("The %d gateway is %.*s [%d]\n", t, rt_info->pgwl[active_gwlist[local_gwlist[t-1]]].pgw->ip.len, - rt_info->pgwl[active_gwlist[local_gwlist[t-1]]].pgw->ip.s, local_gwlist[t-1]); + LM_DBG("The %d gateway is %.*s [%d]\n", t, + rt_info->pgwl[active_gwlist[local_gwlist[t - 1]]] + .pgw->ip.len, + rt_info->pgwl[active_gwlist[local_gwlist[t - 1]]] + .pgw->ip.s, + local_gwlist[t - 1]); } /* next group starts from i */ - j=i; + j = i; } - // sort order 0 + // sort order 0 } else { LM_DBG("sort order 0\n"); - for(i=0; i=1 ; j-- ) { + for(j = t - 1; j >= 1; j--) { /* build uri */ - ruri = build_ruri(&uri, rt_info->pgwl[active_gwlist[local_gwlist[j]]].pgw->strip, + ruri = build_ruri(&uri, + rt_info->pgwl[active_gwlist[local_gwlist[j]]].pgw->strip, &rt_info->pgwl[active_gwlist[local_gwlist[j]]].pgw->pri, &rt_info->pgwl[active_gwlist[local_gwlist[j]]].pgw->ip); - if (ruri==0) { + if(ruri == 0) { LM_ERR("failed to build avp ruri\n"); goto error2; } - LM_DBG("adding gw [%d] as avp \"%.*s\"\n", - local_gwlist[j], ruri->len, ruri->s); + LM_DBG("adding gw [%d] as avp \"%.*s\"\n", local_gwlist[j], ruri->len, + ruri->s); /* add ruri avp */ val.s = *ruri; - if (add_avp( AVP_VAL_STR|(ruri_avp.type),ruri_avp.name, val)!=0 ) { + if(add_avp(AVP_VAL_STR | (ruri_avp.type), ruri_avp.name, val) != 0) { LM_ERR("failed to insert ruri avp\n"); pkg_free(ruri->s); goto error2; @@ -927,39 +942,40 @@ static int do_routing(struct sip_msg* msg, dr_group_t *drg) pkg_free(ruri->s); /* add attrs avp */ val.s = rt_info->pgwl[active_gwlist[local_gwlist[j]]].pgw->attrs; - LM_DBG("setting attr [%.*s] as avp\n",val.s.len,val.s.s); - if (add_avp( AVP_VAL_STR|(attrs_avp.type),attrs_avp.name, val)!=0 ) { + LM_DBG("setting attr [%.*s] as avp\n", val.s.len, val.s.s); + if(add_avp(AVP_VAL_STR | (attrs_avp.type), attrs_avp.name, val) != 0) { LM_ERR("failed to insert attrs avp\n"); goto error2; } } /* use first GW in RURI */ - ruri = build_ruri(&uri, rt_info->pgwl[active_gwlist[local_gwlist[0]]].pgw->strip, + ruri = build_ruri(&uri, + rt_info->pgwl[active_gwlist[local_gwlist[0]]].pgw->strip, &rt_info->pgwl[active_gwlist[local_gwlist[0]]].pgw->pri, &rt_info->pgwl[active_gwlist[local_gwlist[0]]].pgw->ip); /* add attrs avp */ val.s = rt_info->pgwl[active_gwlist[local_gwlist[0]]].pgw->attrs; - LM_DBG("setting attr [%.*s] as for ruri\n",val.s.len,val.s.s); - if (add_avp( AVP_VAL_STR|(attrs_avp.type),attrs_avp.name, val)!=0 ) { + LM_DBG("setting attr [%.*s] as for ruri\n", val.s.len, val.s.s); + if(add_avp(AVP_VAL_STR | (attrs_avp.type), attrs_avp.name, val) != 0) { LM_ERR("failed to insert attrs avp\n"); goto error2; } /* we are done reading -> unref the data */ - lock_get( ref_lock ); + lock_get(ref_lock); *data_refcnt = *data_refcnt - 1; - lock_release( ref_lock ); + lock_release(ref_lock); /* what hev we get here?? */ - if (ruri==0) { + if(ruri == 0) { LM_ERR("failed to build ruri\n"); goto error1; } LM_DBG("setting the gw [%d] as ruri \"%.*s\"\n", active_gwlist[local_gwlist[0]], ruri->len, ruri->s); - if (msg->new_uri.s) + if(msg->new_uri.s) pkg_free(msg->new_uri.s); msg->new_uri = *ruri; msg->parsed_uri_ok = 0; @@ -968,51 +984,49 @@ static int do_routing(struct sip_msg* msg, dr_group_t *drg) return 1; error2: /* we are done reading -> unref the data */ - lock_get( ref_lock ); + lock_get(ref_lock); *data_refcnt = *data_refcnt - 1; - lock_release( ref_lock ); + lock_release(ref_lock); error1: return ret; } -static int fixup_do_routing(void** param, int param_no) +static int fixup_do_routing(void **param, int param_no) { char *s; dr_group_t *drg; pv_spec_t avp_spec; str r; - s = (char*)*param; + s = (char *)*param; - if (param_no==1) - { - if ( s==NULL || s[0]==0 ) { + if(param_no == 1) { + if(s == NULL || s[0] == 0) { LM_CRIT("empty group id definition"); return E_CFG; } - drg = (dr_group_t*)pkg_malloc(sizeof(dr_group_t)); - if(drg==NULL) - { - LM_ERR( "no more memory\n"); + drg = (dr_group_t *)pkg_malloc(sizeof(dr_group_t)); + if(drg == NULL) { + LM_ERR("no more memory\n"); return E_OUT_OF_MEM; } memset(drg, 0, sizeof(dr_group_t)); - if (s[0]=='$') { + if(s[0] == '$') { /* param is a PV (AVP only supported) */ r.s = s; r.len = strlen(s); - if (pv_parse_spec( &r, &avp_spec)==0 - || avp_spec.type!=PVT_AVP) { + if(pv_parse_spec(&r, &avp_spec) == 0 || avp_spec.type != PVT_AVP) { LM_ERR("malformed or non AVP %s AVP definition\n", s); pkg_free(drg); return E_CFG; } - if( pv_get_avp_name(0, &(avp_spec.pvp), &(drg->u.avp_id.name), - &(drg->u.avp_id.type) )!=0) { + if(pv_get_avp_name(0, &(avp_spec.pvp), &(drg->u.avp_id.name), + &(drg->u.avp_id.type)) + != 0) { LM_ERR("[%s]- invalid AVP definition\n", s); pkg_free(drg); return E_CFG; @@ -1022,74 +1036,72 @@ static int fixup_do_routing(void** param, int param_no) * this string*/ } else { while(s && *s) { - if(*s<'0' || *s>'9') { + if(*s < '0' || *s > '9') { LM_ERR("bad number\n"); pkg_free(drg); return E_UNSPEC; } - drg->u.grp_id = (drg->u.grp_id)*10+(*s-'0'); + drg->u.grp_id = (drg->u.grp_id) * 10 + (*s - '0'); s++; } pkg_free(*param); } - *param = (void*)drg; + *param = (void *)drg; } return 0; } -static int fixup_from_gw( void** param, int param_no) +static int fixup_from_gw(void **param, int param_no) { unsigned long type; int err; - if (param_no == 1 || param_no == 2) { + if(param_no == 1 || param_no == 2) { type = str2s(*param, strlen(*param), &err); - if (err == 0) { + if(err == 0) { pkg_free(*param); *param = (void *)type; return 0; } else { - LM_ERR( "bad number <%s>\n", - (char *)(*param)); + LM_ERR("bad number <%s>\n", (char *)(*param)); return E_CFG; } } return 0; } -static int strip_username(struct sip_msg* msg, int strip) +static int strip_username(struct sip_msg *msg, int strip) { struct action act; - struct run_act_ctx ra_ctx; - + struct run_act_ctx ra_ctx; + act.type = STRIP_T; act.val[0].type = NUMBER_ST; act.val[0].u.number = strip; act.next = 0; - init_run_actions_ctx(&ra_ctx); - if (do_action(&ra_ctx, &act, msg) < 0) - { - LM_ERR( "Error in do_action\n"); + init_run_actions_ctx(&ra_ctx); + if(do_action(&ra_ctx, &act, msg) < 0) { + LM_ERR("Error in do_action\n"); return -1; } return 0; } -static int is_from_gw_0(struct sip_msg* msg, char* str, char* str2) +static int is_from_gw_0(struct sip_msg *msg, char *str, char *str2) { pgw_addr_t *pgwa = NULL; - if(rdata==NULL || *rdata==NULL || msg==NULL) + if(rdata == NULL || *rdata == NULL || msg == NULL) return -1; - + pgwa = (*rdata)->pgw_addr_l; while(pgwa) { - if( (pgwa->port==0 || pgwa->port==msg->rcv.src_port) && - ip_addr_cmp(&pgwa->ip, &msg->rcv.src_ip)) + if((pgwa->port == 0 || pgwa->port == msg->rcv.src_port) + && ip_addr_cmp(&pgwa->ip, &msg->rcv.src_ip)) return 1; pgwa = pgwa->next; } @@ -1097,40 +1109,40 @@ static int is_from_gw_0(struct sip_msg* msg, char* str, char* str2) } -static int is_from_gw_1(struct sip_msg* msg, char* str, char* str2) +static int is_from_gw_1(struct sip_msg *msg, char *str, char *str2) { pgw_addr_t *pgwa = NULL; int type = (int)(long)str; - if(rdata==NULL || *rdata==NULL || msg==NULL) + if(rdata == NULL || *rdata == NULL || msg == NULL) return -1; - + pgwa = (*rdata)->pgw_addr_l; while(pgwa) { - if( type==pgwa->type && - (pgwa->port==0 || pgwa->port==msg->rcv.src_port) && - ip_addr_cmp(&pgwa->ip, &msg->rcv.src_ip) ) + if(type == pgwa->type + && (pgwa->port == 0 || pgwa->port == msg->rcv.src_port) + && ip_addr_cmp(&pgwa->ip, &msg->rcv.src_ip)) return 1; pgwa = pgwa->next; } return -1; } -static int is_from_gw_2(struct sip_msg* msg, char* str1, char* str2) +static int is_from_gw_2(struct sip_msg *msg, char *str1, char *str2) { pgw_addr_t *pgwa = NULL; int type = (int)(long)str1; int flags = (int)(long)str2; - if(rdata==NULL || *rdata==NULL || msg==NULL) + if(rdata == NULL || *rdata == NULL || msg == NULL) return -1; - + pgwa = (*rdata)->pgw_addr_l; while(pgwa) { - if( type==pgwa->type && - (pgwa->port==0 || pgwa->port==msg->rcv.src_port) && - ip_addr_cmp(&pgwa->ip, &msg->rcv.src_ip) ) { - if (flags!=0 && pgwa->strip>0) + if(type == pgwa->type + && (pgwa->port == 0 || pgwa->port == msg->rcv.src_port) + && ip_addr_cmp(&pgwa->ip, &msg->rcv.src_ip)) { + if(flags != 0 && pgwa->strip > 0) strip_username(msg, pgwa->strip); return 1; } @@ -1140,7 +1152,7 @@ static int is_from_gw_2(struct sip_msg* msg, char* str1, char* str2) } -static int goes_to_gw_1(struct sip_msg* msg, char* _type, char* _f2) +static int goes_to_gw_1(struct sip_msg *msg, char *_type, char *_f2) { pgw_addr_t *pgwa = NULL; struct sip_uri puri; @@ -1148,23 +1160,21 @@ static int goes_to_gw_1(struct sip_msg* msg, char* _type, char* _f2) str *uri; int type; - if(rdata==NULL || *rdata==NULL || msg==NULL) + if(rdata == NULL || *rdata == NULL || msg == NULL) return -1; uri = GET_NEXT_HOP(msg); type = (int)(long)_type; - if (parse_uri(uri->s, uri->len, &puri)<0){ + if(parse_uri(uri->s, uri->len, &puri) < 0) { LM_ERR("bad uri <%.*s>\n", uri->len, uri->s); return -1; } - if ( ((ip=str2ip(&puri.host))!=0) - || ((ip=str2ip6(&puri.host))!=0) - ){ + if(((ip = str2ip(&puri.host)) != 0) || ((ip = str2ip6(&puri.host)) != 0)) { pgwa = (*rdata)->pgw_addr_l; while(pgwa) { - if( (type<0 || type==pgwa->type) && ip_addr_cmp(&pgwa->ip, ip)) + if((type < 0 || type == pgwa->type) && ip_addr_cmp(&pgwa->ip, ip)) return 1; pgwa = pgwa->next; } @@ -1174,8 +1184,7 @@ static int goes_to_gw_1(struct sip_msg* msg, char* _type, char* _f2) } -static int goes_to_gw_0(struct sip_msg* msg, char* _type, char* _f2) +static int goes_to_gw_0(struct sip_msg *msg, char *_type, char *_f2) { - return goes_to_gw_1(msg, (char*)(long)-1, _f2); + return goes_to_gw_1(msg, (char *)(long)-1, _f2); } - diff --git a/src/modules/drouting/parse.h b/src/modules/drouting/parse.h index fcd5f012116..052b6720702 100644 --- a/src/modules/drouting/parse.h +++ b/src/modules/drouting/parse.h @@ -28,11 +28,11 @@ #define SEP1 ',' #define SEP_GRP ';' -#define IS_SPACE(s)\ - ((s)==' ' || (s)=='\t' || (s)=='\r' || (s)=='\n') +#define IS_SPACE(s) ((s) == ' ' || (s) == '\t' || (s) == '\r' || (s) == '\n') -#define EAT_SPACE(s)\ - while((s) && IS_SPACE(*(s))) (s)++ +#define EAT_SPACE(s) \ + while((s) && IS_SPACE(*(s))) \ + (s)++ #endif diff --git a/src/modules/drouting/prefix_tree.c b/src/modules/drouting/prefix_tree.c index 07bd518d64d..099c402dec2 100644 --- a/src/modules/drouting/prefix_tree.c +++ b/src/modules/drouting/prefix_tree.c @@ -34,57 +34,49 @@ extern int inode; extern int unode; - -static inline int -check_time( - tmrec_t *time_rec - ) +static inline int check_time(tmrec_t *time_rec) { ac_tm_t att; /* shortcut: if there is no dstart, timerec is valid */ - if (time_rec->dtstart==0) + if(time_rec->dtstart == 0) return 1; - memset( &att, 0, sizeof(att)); + memset(&att, 0, sizeof(att)); /* set current time */ - if ( ac_tm_set_time( &att, time(0) ) ) + if(ac_tm_set_time(&att, time(0))) return 0; /* does the recv_time match the specified interval? */ - if (check_tmrec( time_rec, &att, 0)!=0) + if(check_tmrec(time_rec, &att, 0) != 0) return 0; return 1; } -static inline rt_info_t* -internal_check_rt( - ptree_node_t *ptn, - unsigned int rgid - ) +static inline rt_info_t *internal_check_rt(ptree_node_t *ptn, unsigned int rgid) { int i; - int rg_pos=0; - rg_entry_t* rg=NULL; - rt_info_wrp_t* rtlw=NULL; + int rg_pos = 0; + rg_entry_t *rg = NULL; + rt_info_wrp_t *rtlw = NULL; - if((NULL==ptn) || (NULL==ptn->rg)) + if((NULL == ptn) || (NULL == ptn->rg)) return NULL; rg_pos = ptn->rg_pos; - rg=ptn->rg; - for(i=0;(irg; + for(i = 0; (i < rg_pos) && (rg[i].rgid != rgid); i++) + ; + if(i < rg_pos) { + LM_DBG("found rgid %d (rule list %p)\n", rgid, rg[i].rtlw); + rtlw = rg[i].rtlw; + while(rtlw != NULL) { if(check_time(rtlw->rtl->time_rec)) return rtlw->rtl; - rtlw=rtlw->next; + rtlw = rtlw->next; } } @@ -92,26 +84,17 @@ internal_check_rt( } -rt_info_t* -check_rt( - ptree_node_t *ptn, - unsigned int rgid - ) +rt_info_t *check_rt(ptree_node_t *ptn, unsigned int rgid) { - return internal_check_rt( ptn, rgid); + return internal_check_rt(ptn, rgid); } -rt_info_t* -get_prefix( - ptree_t *ptree, - str* prefix, - unsigned int rgid - ) +rt_info_t *get_prefix(ptree_t *ptree, str *prefix, unsigned int rgid) { rt_info_t *rt = NULL; - char *tmp=NULL; - int idx=0; + char *tmp = NULL; + int idx = 0; if(NULL == ptree) goto err_exit; @@ -120,17 +103,17 @@ get_prefix( tmp = prefix->s; /* go the tree down to the last digit in the * prefix string or down to a leaf */ - while(tmp< (prefix->s+prefix->len)) { + while(tmp < (prefix->s + prefix->len)) { idx = get_node_index(*tmp); - if (idx == -1){ + if(idx == -1) { /* unknown character in the prefix string */ goto err_exit; } - if( tmp == (prefix->s+prefix->len-1) ) { + if(tmp == (prefix->s + prefix->len - 1)) { /* last digit in the prefix string */ break; } - if( NULL == ptree->ptnode[idx].next) { + if(NULL == ptree->ptnode[idx].next) { /* this is a leaf */ break; } @@ -138,12 +121,12 @@ get_prefix( tmp++; } /* go in the tree up to the root trying to match the prefix */ - while(ptree !=NULL ) { + while(ptree != NULL) { /* is it a real node or an intermediate one */ idx = get_node_index(*tmp); - if(idx!=-1 && NULL != ptree->ptnode[idx].rg) { + if(idx != -1 && NULL != ptree->ptnode[idx].rg) { /* real node; check the constraints on the routing info*/ - if( NULL != (rt = internal_check_rt( &(ptree->ptnode[idx]), rgid))) + if(NULL != (rt = internal_check_rt(&(ptree->ptnode[idx]), rgid))) break; } tmp--; @@ -156,13 +139,9 @@ get_prefix( } -pgw_t* -get_pgw( - pgw_t* pgw_l, - long id - ) +pgw_t *get_pgw(pgw_t *pgw_l, long id) { - if(NULL==pgw_l) + if(NULL == pgw_l) goto err_exit; while(NULL != pgw_l) { if(id == pgw_l->id) { @@ -175,34 +154,29 @@ get_pgw( } -int -add_prefix( - ptree_t *ptree, - str* prefix, - rt_info_t *r, - unsigned int rg - ) +int add_prefix(ptree_t *ptree, str *prefix, rt_info_t *r, unsigned int rg) { - char* tmp=NULL; + char *tmp = NULL; int res = 0; - if(NULL==ptree) + if(NULL == ptree) goto err_exit; tmp = prefix->s; - while(tmp < (prefix->s+prefix->len)) { + while(tmp < (prefix->s + prefix->len)) { if(NULL == tmp) goto err_exit; int insert_index = get_node_index(*tmp); - if (insert_index == -1){ + if(insert_index == -1) { /* unknown character in the prefix string */ goto err_exit; } - if( tmp == (prefix->s+prefix->len-1) ) { + if(tmp == (prefix->s + prefix->len - 1)) { /* last symbol in the prefix string */ LM_DBG("adding info %p, %d at: " - "%p (%d)\n", r, rg, &(ptree->ptnode[insert_index]), insert_index); - res = add_rt_info(&(ptree->ptnode[insert_index]), r,rg); - if(res < 0 ) + "%p (%d)\n", + r, rg, &(ptree->ptnode[insert_index]), insert_index); + res = add_rt_info(&(ptree->ptnode[insert_index]), r, rg); + if(res < 0) goto err_exit; unode++; res = 1; @@ -212,7 +186,7 @@ add_prefix( if(NULL == ptree->ptnode[insert_index].next) { /* allocate new node */ INIT_PTREE_NODE(ptree, ptree->ptnode[insert_index].next); - inode+=PTREE_CHILDREN; + inode += PTREE_CHILDREN; #if 0 printf("new tree node: %p (bp: %p)\n", ptree->ptnode[insert_index].next, @@ -231,21 +205,18 @@ add_prefix( return -1; } -int -del_tree( - ptree_t* t - ) +int del_tree(ptree_t *t) { - int i,j; + int i, j; if(NULL == t) goto exit; /* delete all the children */ - for(i=0; i< PTREE_CHILDREN; i++) { + for(i = 0; i < PTREE_CHILDREN; i++) { /* shm_free the rg array of rt_info */ - if(NULL!=t->ptnode[i].rg) { - for(j=0;jptnode[i].rg_pos;j++) { + if(NULL != t->ptnode[i].rg) { + for(j = 0; j < t->ptnode[i].rg_pos; j++) { /* if non intermediate delete the routing info */ - if(t->ptnode[i].rg[j].rtlw !=NULL) + if(t->ptnode[i].rg[j].rtlw != NULL) del_rt_list(t->ptnode[i].rg[j].rtlw); } shm_free(t->ptnode[i].rg); @@ -259,61 +230,47 @@ del_tree( return 0; } -void -del_rt_list( - rt_info_wrp_t *rwl - ) +void del_rt_list(rt_info_wrp_t *rwl) { - rt_info_wrp_t* t=rwl; - while(rwl!=NULL) { - t=rwl; - rwl=rwl->next; - if ( (--t->rtl->ref_cnt)==0) + rt_info_wrp_t *t = rwl; + while(rwl != NULL) { + t = rwl; + rwl = rwl->next; + if((--t->rtl->ref_cnt) == 0) free_rt_info(t->rtl); shm_free(t); } } -void -free_rt_info( - rt_info_t *rl - ) +void free_rt_info(rt_info_t *rl) { if(NULL == rl) return; - if(NULL!=rl->pgwl) + if(NULL != rl->pgwl) shm_free(rl->pgwl); - if(NULL!=rl->time_rec) + if(NULL != rl->time_rec) tmrec_free(rl->time_rec); shm_free(rl); return; } -void -print_rt( - rt_info_t*rt - ) +void print_rt(rt_info_t *rt) { - int i=0; - if(NULL==rt) + int i = 0; + if(NULL == rt) return; printf("priority:%d list of gw:\n", rt->priority); - for(i=0;ipgwa_len;i++) - if(NULL!=rt->pgwl[i].pgw) - printf(" id:%ld pri:%.*s ip:%.*s \n", - rt->pgwl[i].pgw->id, - rt->pgwl[i].pgw->pri.len, rt->pgwl[i].pgw->pri.s, - rt->pgwl[i].pgw->ip.len, rt->pgwl[i].pgw->ip.s); + for(i = 0; i < rt->pgwa_len; i++) + if(NULL != rt->pgwl[i].pgw) + printf(" id:%ld pri:%.*s ip:%.*s \n", rt->pgwl[i].pgw->id, + rt->pgwl[i].pgw->pri.len, rt->pgwl[i].pgw->pri.s, + rt->pgwl[i].pgw->ip.len, rt->pgwl[i].pgw->ip.s); } -int -get_node_index( - char ch - ) +int get_node_index(char ch) { - switch (ch) - { + switch(ch) { case '0': case '1': case '2': diff --git a/src/modules/drouting/prefix_tree.h b/src/modules/drouting/prefix_tree.h index 221c653951f..68140ceee53 100644 --- a/src/modules/drouting/prefix_tree.h +++ b/src/modules/drouting/prefix_tree.h @@ -20,7 +20,6 @@ */ - #ifndef prefix_tree_h #define prefix_tree_h @@ -29,32 +28,34 @@ #include "../keepalive/api.h" #include "dr_time.h" -#define PTREE_CHILDREN 13 //decimal digits, '*', '#', '+' +#define PTREE_CHILDREN 13 //decimal digits, '*', '#', '+' extern int tree_size; -#define INIT_PTREE_NODE(p, n) \ -do {\ - (n) = (ptree_t*)shm_malloc(sizeof(ptree_t));\ - if(NULL == (n))\ - goto err_exit;\ - tree_size+=sizeof(ptree_t);\ - memset((n), 0, sizeof(ptree_t));\ - (n)->bp=(p);\ -}while(0); +#define INIT_PTREE_NODE(p, n) \ + do { \ + (n) = (ptree_t *)shm_malloc(sizeof(ptree_t)); \ + if(NULL == (n)) \ + goto err_exit; \ + tree_size += sizeof(ptree_t); \ + memset((n), 0, sizeof(ptree_t)); \ + (n)->bp = (p); \ + } while(0); /* list of PSTN gw */ -typedef struct pgw_addr_ { +typedef struct pgw_addr_ +{ struct ip_addr ip; unsigned short port; int type; int strip; struct pgw_addr_ *next; -}pgw_addr_t; +} pgw_addr_t; /* list of PSTN gw */ -typedef struct pgw_ { +typedef struct pgw_ +{ /* id matching the one in db */ long id; str pri; @@ -66,16 +67,18 @@ typedef struct pgw_ { ka_state state; struct pgw_ *next; -}pgw_t; +} pgw_t; /**/ -typedef struct pgw_list_ { +typedef struct pgw_list_ +{ pgw_t *pgw; - int grpid; -}pgw_list_t; + int grpid; +} pgw_list_t; /* element containing routing information */ -typedef struct rt_info_ { +typedef struct rt_info_ +{ unsigned int priority; tmrec_t *time_rec; /* array of pointers into the PSTN gw list */ @@ -88,93 +91,55 @@ typedef struct rt_info_ { int route_idx; } rt_info_t; -typedef struct rt_info_wrp_ { - rt_info_t *rtl; - struct rt_info_wrp_ *next; +typedef struct rt_info_wrp_ +{ + rt_info_t *rtl; + struct rt_info_wrp_ *next; } rt_info_wrp_t; -typedef struct rg_entry_ { +typedef struct rg_entry_ +{ unsigned int rgid; rt_info_wrp_t *rtlw; } rg_entry_t; -typedef struct ptree_node_ { +typedef struct ptree_node_ +{ unsigned int rg_len; unsigned int rg_pos; rg_entry_t *rg; struct ptree_ *next; } ptree_node_t; -typedef struct ptree_ { +typedef struct ptree_ +{ /* backpointer */ struct ptree_ *bp; ptree_node_t ptnode[PTREE_CHILDREN]; } ptree_t; -void -print_interim( - int, - int, - ptree_t* - ); - -int -del_tree( - ptree_t * - ); - -int -add_prefix( - ptree_t*, - /* prefix */ - str*, - rt_info_t *, - unsigned int - ); - -rt_info_t* -get_prefix( - ptree_t *ptree, - str* prefix, - unsigned int rgid - ); - -int -add_rt_info( - ptree_node_t*, - rt_info_t*, - unsigned int - ); - -pgw_t* -get_pgw( - pgw_t*, - long - ); - -void -del_rt_list( - rt_info_wrp_t *rl - ); - -void print_rt( - rt_info_t* - ); - -void -free_rt_info( - rt_info_t* - ); - -rt_info_t* -check_rt( - ptree_node_t *ptn, - unsigned int rgid - ); - -int -get_node_index( - char ch - ); +void print_interim(int, int, ptree_t *); + +int del_tree(ptree_t *); + +int add_prefix(ptree_t *, + /* prefix */ + str *, rt_info_t *, unsigned int); + +rt_info_t *get_prefix(ptree_t *ptree, str *prefix, unsigned int rgid); + +int add_rt_info(ptree_node_t *, rt_info_t *, unsigned int); + +pgw_t *get_pgw(pgw_t *, long); + +void del_rt_list(rt_info_wrp_t *rl); + +void print_rt(rt_info_t *); + +void free_rt_info(rt_info_t *); + +rt_info_t *check_rt(ptree_node_t *ptn, unsigned int rgid); + +int get_node_index(char ch); #endif diff --git a/src/modules/drouting/routing.c b/src/modules/drouting/routing.c index dade9a222c2..a1d32fa0ba6 100644 --- a/src/modules/drouting/routing.c +++ b/src/modules/drouting/routing.c @@ -38,12 +38,11 @@ extern int dr_force_dns; -rt_data_t* -build_rt_data( void ) +rt_data_t *build_rt_data(void) { rt_data_t *rdata; - if( NULL==(rdata=shm_malloc(sizeof(rt_data_t)))) { + if(NULL == (rdata = shm_malloc(sizeof(rt_data_t)))) { LM_ERR("no more shm mem\n"); goto err_exit; } @@ -57,78 +56,72 @@ build_rt_data( void ) } -rt_info_t* -build_rt_info( - int priority, - tmrec_t *trec, - /* script routing table index */ - int route_idx, - /* list of destinations indexes */ - char* dstlst, - pgw_t* pgw_l - ) +rt_info_t *build_rt_info(int priority, tmrec_t *trec, + /* script routing table index */ + int route_idx, + /* list of destinations indexes */ + char *dstlst, pgw_t *pgw_l) { - char *tmp=NULL; - char *ep=NULL; - rt_info_t* rt = NULL; - int *idx = NULL, *t_idx=NULL; - int n=0, idx_size=0,i, grp_idx=0; - long t=0; - pgw_t *pgw=NULL; - - if(NULL == (rt = (rt_info_t*)shm_malloc(sizeof(rt_info_t)))) { + char *tmp = NULL; + char *ep = NULL; + rt_info_t *rt = NULL; + int *idx = NULL, *t_idx = NULL; + int n = 0, idx_size = 0, i, grp_idx = 0; + long t = 0; + pgw_t *pgw = NULL; + + if(NULL == (rt = (rt_info_t *)shm_malloc(sizeof(rt_info_t)))) { LM_ERR("no more shm mem(1)\n"); goto err_exit; } memset(rt, 0, sizeof(rt_info_t)); idx_size = IDX_SIZE; - if( NULL == (idx = (int*)shm_malloc(2*idx_size*sizeof(int)))) { + if(NULL == (idx = (int *)shm_malloc(2 * idx_size * sizeof(int)))) { LM_ERR("no more shm mem(2)\n"); goto err_exit; } - memset(idx, 0, 2*idx_size*sizeof(int)); + memset(idx, 0, 2 * idx_size * sizeof(int)); rt->priority = priority; rt->time_rec = trec; rt->route_idx = route_idx; - tmp=dstlst; - n=0; + tmp = dstlst; + n = 0; /* parse the dstlst */ - while(tmp && (*tmp!=0)) { + while(tmp && (*tmp != 0)) { errno = 0; t = strtol(tmp, &ep, 10); - if (ep == tmp) { - LM_ERR("bad id '%c' (%d)[%s]\n", - *ep, (int)(ep-dstlst), dstlst); + if(ep == tmp) { + LM_ERR("bad id '%c' (%d)[%s]\n", *ep, (int)(ep - dstlst), dstlst); goto err_exit; } - if ((!IS_SPACE(*ep)) && (*ep != SEP) && (*ep != SEP1) - && (*ep != SEP_GRP) && (*ep!=0)) { - LM_ERR("bad char %c (%d) [%s]\n", - *ep, (int)(ep-dstlst), dstlst); + if((!IS_SPACE(*ep)) && (*ep != SEP) && (*ep != SEP1) && (*ep != SEP_GRP) + && (*ep != 0)) { + LM_ERR("bad char %c (%d) [%s]\n", *ep, (int)(ep - dstlst), dstlst); goto err_exit; } - if (errno == ERANGE && (t== LONG_MAX || t== LONG_MIN)) { + if(errno == ERANGE && (t == LONG_MAX || t == LONG_MIN)) { LM_ERR("out of bounds\n"); goto err_exit; } - idx[2*n]=t; - idx[2*n+1]=grp_idx; + idx[2 * n] = t; + idx[2 * n + 1] = grp_idx; if(*ep == SEP_GRP) grp_idx++; n++; /* reallocate the array which keeps the parsed indexes */ - if(n>=idx_size){ - if(NULL==((t_idx)=(int*)shm_malloc((idx_size*2*2)*sizeof(int)))) { + if(n >= idx_size) { + if(NULL == ((t_idx) = (int *)shm_malloc( + (idx_size * 2 * 2) * sizeof(int)))) { LM_ERR("out of shm\n"); goto err_exit; } - memset(t_idx+(2*idx_size), 0, 2*idx_size*sizeof(int)); - memcpy(t_idx, idx, 2*idx_size*sizeof(int)); + memset(t_idx + (2 * idx_size), 0, 2 * idx_size * sizeof(int)); + memcpy(t_idx, idx, 2 * idx_size * sizeof(int)); shm_free(idx); - idx_size*=2; - idx=t_idx; + idx_size *= 2; + idx = t_idx; } if(IS_SPACE(*ep)) EAT_SPACE(ep); @@ -136,26 +129,25 @@ build_rt_info( ep++; tmp = ep; } - if(n==0) { + if(n == 0) { LM_ERR("invalid n\n"); goto err_exit; } /* create the pgwl */ rt->pgwa_len = n; - if(NULL == - (rt->pgwl=(pgw_list_t*)shm_malloc(rt->pgwa_len*sizeof(pgw_list_t)))) { + if(NULL == (rt->pgwl = (pgw_list_t *)shm_malloc( + rt->pgwa_len * sizeof(pgw_list_t)))) { goto err_exit; } - memset(rt->pgwl, 0, rt->pgwa_len*sizeof(pgw_list_t)); + memset(rt->pgwl, 0, rt->pgwa_len * sizeof(pgw_list_t)); /* translate GW ids to GW pointers */ - for(i=0;ipgwl[i].pgw=pgw; - rt->pgwl[i].grpid=idx[2*i+1]; + rt->pgwl[i].pgw = pgw; + rt->pgwl[i].grpid = idx[2 * i + 1]; /* LM_DBG("added to gwlist [%d/%d/%p]\n", idx[2*i], idx[2*i+1], pgw); */ } @@ -164,81 +156,76 @@ build_rt_info( return rt; err_exit: - if(NULL!=idx) + if(NULL != idx) shm_free(idx); - if((NULL != rt) && - (NULL!=rt->pgwl)) - shm_free(rt->pgwl); - if(NULL!=rt) + if((NULL != rt) && (NULL != rt->pgwl)) + shm_free(rt->pgwl); + if(NULL != rt) shm_free(rt); return NULL; } -int -add_rt_info( - ptree_node_t *pn, - rt_info_t* r, - unsigned int rgid - ) +int add_rt_info(ptree_node_t *pn, rt_info_t *r, unsigned int rgid) { - rg_entry_t *trg=NULL; - rt_info_wrp_t *rtl_wrp=NULL; - rt_info_wrp_t *rtlw=NULL; - int i=0; + rg_entry_t *trg = NULL; + rt_info_wrp_t *rtl_wrp = NULL; + rt_info_wrp_t *rtlw = NULL; + int i = 0; if((NULL == pn) || (NULL == r)) goto err_exit; - if (NULL == (rtl_wrp = (rt_info_wrp_t*)shm_malloc(sizeof(rt_info_wrp_t)))) { + if(NULL == (rtl_wrp = (rt_info_wrp_t *)shm_malloc(sizeof(rt_info_wrp_t)))) { LM_ERR("no more shm mem\n"); goto err_exit; } - memset( rtl_wrp, 0, sizeof(rt_info_wrp_t)); + memset(rtl_wrp, 0, sizeof(rt_info_wrp_t)); rtl_wrp->rtl = r; - if(NULL==pn->rg) { + if(NULL == pn->rg) { /* allocate the routing groups array */ pn->rg_len = RG_INIT_LEN; - if(NULL == (pn->rg = (rg_entry_t*)shm_malloc( - pn->rg_len*sizeof(rg_entry_t)))) { + if(NULL == (pn->rg = (rg_entry_t *)shm_malloc( + pn->rg_len * sizeof(rg_entry_t)))) { /* recover the old pointer to be able to shm_free mem */ goto err_exit; } - memset( pn->rg, 0, pn->rg_len*sizeof(rg_entry_t)); - pn->rg_pos=0; + memset(pn->rg, 0, pn->rg_len * sizeof(rg_entry_t)); + pn->rg_pos = 0; } /* search for the rgid up to the rg_pos */ - for(i=0; (irg_pos) && (pn->rg[i].rgid!=rgid); i++); - if((i==pn->rg_len-1)&&(pn->rg[i].rgid!=rgid)) { + for(i = 0; (i < pn->rg_pos) && (pn->rg[i].rgid != rgid); i++) + ; + if((i == pn->rg_len - 1) && (pn->rg[i].rgid != rgid)) { /* realloc & copy the old rg */ trg = pn->rg; - if(NULL == (pn->rg = (rg_entry_t*)shm_malloc( - 2*pn->rg_len*sizeof(rg_entry_t)))) { + if(NULL == (pn->rg = (rg_entry_t *)shm_malloc( + 2 * pn->rg_len * sizeof(rg_entry_t)))) { /* recover the old pointer to be able to shm_free mem */ pn->rg = trg; goto err_exit; } - memset(pn->rg+pn->rg_len, 0, pn->rg_len*sizeof(rg_entry_t)); - memcpy(pn->rg, trg, pn->rg_len*sizeof(rg_entry_t)); - pn->rg_len*=2; - shm_free( trg ); + memset(pn->rg + pn->rg_len, 0, pn->rg_len * sizeof(rg_entry_t)); + memcpy(pn->rg, trg, pn->rg_len * sizeof(rg_entry_t)); + pn->rg_len *= 2; + shm_free(trg); } /* insert into list */ r->ref_cnt++; - if(NULL==pn->rg[i].rtlw){ + if(NULL == pn->rg[i].rtlw) { pn->rg[i].rtlw = rtl_wrp; pn->rg[i].rgid = rgid; pn->rg_pos++; goto ok_exit; } - if( r->priority > pn->rg[i].rtlw->rtl->priority) { + if(r->priority > pn->rg[i].rtlw->rtl->priority) { /* change the head of the list */ rtl_wrp->next = pn->rg[i].rtlw; pn->rg[i].rtlw = rtl_wrp; goto ok_exit; } rtlw = pn->rg[i].rtlw; - while( rtlw->next !=NULL) { + while(rtlw->next != NULL) { if(r->priority > rtlw->next->rtl->priority) { rtl_wrp->next = rtlw->next; rtlw->next = rtl_wrp; @@ -247,72 +234,70 @@ add_rt_info( rtlw = rtlw->next; } /* the smallest priority is linked at the end */ - rtl_wrp->next=NULL; - rtlw->next=rtl_wrp; + rtl_wrp->next = NULL; + rtlw->next = rtl_wrp; ok_exit: return 0; err_exit: - if (rtl_wrp) shm_free(rtl_wrp); + if(rtl_wrp) + shm_free(rtl_wrp); return -1; } -int -add_dst( - rt_data_t *r, - /* id */ - int id, - /* ip address */ - char* ip, - /* strip len */ - int strip, - /* pri prefix */ - char* pri, - /* dst type*/ - int type, - /* dst attrs*/ - char* attrs - ) +int add_dst(rt_data_t *r, + /* id */ + int id, + /* ip address */ + char *ip, + /* strip len */ + int strip, + /* pri prefix */ + char *pri, + /* dst type*/ + int type, + /* dst attrs*/ + char *attrs) { - pgw_t *pgw=NULL, *tmp=NULL; - pgw_addr_t *tmpa=NULL; - struct hostent* he; + pgw_t *pgw = NULL, *tmp = NULL; + pgw_addr_t *tmpa = NULL; + struct hostent *he; struct sip_uri uri; struct ip_addr ipa; - int l_ip,l_pri,l_attrs; -#define GWABUF_MAX_SIZE 512 + int l_ip, l_pri, l_attrs; +#define GWABUF_MAX_SIZE 512 char gwabuf[GWABUF_MAX_SIZE]; str gwas; - if (NULL==r || NULL==ip) { + if(NULL == r || NULL == ip) { LM_ERR("invalid parametres\n"); goto err_exit; } l_ip = strlen(ip); - l_pri = pri?strlen(pri):0; - l_attrs = attrs?strlen(attrs):0; + l_pri = pri ? strlen(pri) : 0; + l_attrs = attrs ? strlen(attrs) : 0; - pgw = (pgw_t*)shm_malloc(sizeof(pgw_t) + l_ip + l_pri + l_attrs); - if (NULL==pgw) { + pgw = (pgw_t *)shm_malloc(sizeof(pgw_t) + l_ip + l_pri + l_attrs); + if(NULL == pgw) { LM_ERR("no more shm mem (%u)\n", - (unsigned int)(sizeof(pgw_t)+l_ip+l_pri +l_attrs)); + (unsigned int)(sizeof(pgw_t) + l_ip + l_pri + l_attrs)); goto err_exit; } - memset(pgw,0,sizeof(pgw_t)); + memset(pgw, 0, sizeof(pgw_t)); - pgw->ip.len= l_ip; - pgw->ip.s = (char*)(pgw+1); + pgw->ip.len = l_ip; + pgw->ip.s = (char *)(pgw + 1); memcpy(pgw->ip.s, ip, l_ip); - if (pri) { + if(pri) { pgw->pri.len = l_pri; - pgw->pri.s = ((char*)(pgw+1))+l_ip; + pgw->pri.s = ((char *)(pgw + 1)) + l_ip; memcpy(pgw->pri.s, pri, l_pri); } - if (attrs) { + if(attrs) { pgw->attrs.len = l_attrs; - pgw->attrs.s = ((char*)(pgw+1))+l_ip+l_pri; + pgw->attrs.s = ((char *)(pgw + 1)) + l_ip + l_pri; memcpy(pgw->attrs.s, attrs, l_attrs); } pgw->id = id; @@ -322,60 +307,57 @@ add_dst( pgw->state = KA_STATE_UP; /* add address in the list */ - if(pgw->ip.len<5 || (strncasecmp("sip:", ip, 4) - &&strncasecmp("sips:", ip, 5))) - { - if(pgw->ip.len+4>=GWABUF_MAX_SIZE) { + if(pgw->ip.len < 5 + || (strncasecmp("sip:", ip, 4) && strncasecmp("sips:", ip, 5))) { + if(pgw->ip.len + 4 >= GWABUF_MAX_SIZE) { LM_ERR("GW address (%d) longer " - "than %d\n",pgw->ip.len+4,GWABUF_MAX_SIZE); + "than %d\n", + pgw->ip.len + 4, GWABUF_MAX_SIZE); goto err_exit; } memcpy(gwabuf, "sip:", 4); - memcpy(gwabuf+4, ip, pgw->ip.len); + memcpy(gwabuf + 4, ip, pgw->ip.len); gwas.s = gwabuf; - gwas.len = 4+pgw->ip.len; + gwas.len = 4 + pgw->ip.len; } else { gwas.s = ip; gwas.len = pgw->ip.len; } memset(&uri, 0, sizeof(struct sip_uri)); - if(parse_uri(gwas.s, gwas.len, &uri)!=0) { - LM_ERR("invalid uri <%.*s>\n", - gwas.len, gwas.s); + if(parse_uri(gwas.s, gwas.len, &uri) != 0) { + LM_ERR("invalid uri <%.*s>\n", gwas.len, gwas.s); goto err_exit; } /* note we discard the port discovered by the resolve function - we are interested only in the port that was actually configured. */ - if ((he=sip_resolvehost( &uri.host, NULL, (char*)(void*)&uri.proto))==0 ) { - if(dr_force_dns) - { - LM_ERR("cannot resolve <%.*s>\n", - uri.host.len, uri.host.s); + if((he = sip_resolvehost(&uri.host, NULL, (char *)(void *)&uri.proto)) + == 0) { + if(dr_force_dns) { + LM_ERR("cannot resolve <%.*s>\n", uri.host.len, uri.host.s); goto err_exit; } else { LM_DBG("cannot resolve <%.*s> - won't be used" - " by is_from_gw()\n", uri.host.len, uri.host.s); + " by is_from_gw()\n", + uri.host.len, uri.host.s); goto done; } } hostent2ip_addr(&ipa, he, 0); tmpa = r->pgw_addr_l; while(tmpa) { - if(tmpa->type==type && uri.port_no==tmpa->port - && ip_addr_cmp(&ipa, &tmpa->ip)) { - LM_DBG("gw ip addr [%s]:%d loaded\n", - ip_addr2a(&ipa), uri.port_no); + if(tmpa->type == type && uri.port_no == tmpa->port + && ip_addr_cmp(&ipa, &tmpa->ip)) { + LM_DBG("gw ip addr [%s]:%d loaded\n", ip_addr2a(&ipa), uri.port_no); goto done; } tmpa = tmpa->next; } - + LM_DBG("new gw ip addr [%s]\n", ip); - tmpa = (pgw_addr_t*)shm_malloc(sizeof(pgw_addr_t)); - if(tmpa==NULL) { - LM_ERR("no more shm mem (%u)\n", - (unsigned int)sizeof(pgw_addr_t)); + tmpa = (pgw_addr_t *)shm_malloc(sizeof(pgw_addr_t)); + if(tmpa == NULL) { + LM_ERR("no more shm mem (%u)\n", (unsigned int)sizeof(pgw_addr_t)); goto err_exit; } memset(tmpa, 0, sizeof(pgw_addr_t)); @@ -387,7 +369,7 @@ add_dst( r->pgw_addr_l = tmpa; done: - if(NULL==r->pgw_l) + if(NULL == r->pgw_l) r->pgw_l = pgw; else { tmp = r->pgw_l; @@ -398,57 +380,47 @@ add_dst( return 0; err_exit: - if(NULL!=pgw) + if(NULL != pgw) shm_free(pgw); return -1; } -void -del_pgw_list( - pgw_t *pgw_l - ) +void del_pgw_list(pgw_t *pgw_l) { pgw_t *t; - while(NULL!=pgw_l){ + while(NULL != pgw_l) { t = pgw_l; - pgw_l=pgw_l->next; + pgw_l = pgw_l->next; shm_free(t); } } -void -del_pgw_addr_list( - pgw_addr_t *pgw_addr_l - ) +void del_pgw_addr_list(pgw_addr_t *pgw_addr_l) { pgw_addr_t *t; - while(NULL!=pgw_addr_l){ + while(NULL != pgw_addr_l) { t = pgw_addr_l; - pgw_addr_l=pgw_addr_l->next; + pgw_addr_l = pgw_addr_l->next; shm_free(t); } } -void -free_rt_data( - rt_data_t* rt_data, - int all - ) +void free_rt_data(rt_data_t *rt_data, int all) { int j; - if(NULL!=rt_data) { + if(NULL != rt_data) { /* del GW list */ del_pgw_list(rt_data->pgw_l); - rt_data->pgw_l = 0 ; + rt_data->pgw_l = 0; /* del GW addr list */ del_pgw_addr_list(rt_data->pgw_addr_l); - rt_data->pgw_addr_l =0; + rt_data->pgw_addr_l = 0; /* del prefix tree */ del_tree(rt_data->pt); /* del prefixless rules */ - if(NULL!=rt_data->noprefix.rg) { - for(j=0;jnoprefix.rg_pos;j++) { - if(rt_data->noprefix.rg[j].rtlw !=NULL) { + if(NULL != rt_data->noprefix.rg) { + for(j = 0; j < rt_data->noprefix.rg_pos; j++) { + if(rt_data->noprefix.rg[j].rtlw != NULL) { del_rt_list(rt_data->noprefix.rg[j].rtlw); rt_data->noprefix.rg[j].rtlw = 0; } @@ -457,7 +429,9 @@ free_rt_data( rt_data->noprefix.rg = 0; } /* del top level or reset to 0 it's content */ - if (all) shm_free(rt_data); - else memset(rt_data, 0, sizeof(rt_data_t)); + if(all) + shm_free(rt_data); + else + memset(rt_data, 0, sizeof(rt_data_t)); } } diff --git a/src/modules/drouting/routing.h b/src/modules/drouting/routing.h index eae472d167a..96614b9bd54 100644 --- a/src/modules/drouting/routing.h +++ b/src/modules/drouting/routing.h @@ -32,10 +32,11 @@ #define RG_INIT_LEN 4; /* the buckets for the rt_data rg_hash */ -typedef struct hb_ { +typedef struct hb_ +{ int rgid; ptree_t *pt; - struct hb_*next; + struct hb_ *next; } hb_t; /* routing data is comprised of: @@ -43,7 +44,8 @@ typedef struct hb_ { - a hash over routing groups containing pointers to the coresponding prefix trees */ -typedef struct rt_data_ { +typedef struct rt_data_ +{ /* list of PSTN gw */ pgw_t *pgw_l; /* list of IP addr for PSTN gw */ @@ -52,63 +54,50 @@ typedef struct rt_data_ { ptree_node_t noprefix; /* hash table with routing prefixes */ ptree_t *pt; -}rt_data_t; +} rt_data_t; -typedef struct _dr_group { +typedef struct _dr_group +{ /* 0 - use grp ; 1 - use AVP */ int type; - union { + union + { unsigned int grp_id; - struct _avp_id{ + struct _avp_id + { int_str name; unsigned short type; - }avp_id; - }u; + } avp_id; + } u; } dr_group_t; /* init new rt_data structure */ -rt_data_t* -build_rt_data( void ); +rt_data_t *build_rt_data(void); /* add a PSTN gw in the list */ -int -add_dst( - rt_data_t*, - /* id */ - int , - /* ip address */ - char*, - /* strip len */ - int, - /* pri prefix */ - char*, - /* dst type*/ - int, - /* dst attrs*/ - char* - ); +int add_dst(rt_data_t *, + /* id */ + int, + /* ip address */ + char *, + /* strip len */ + int, + /* pri prefix */ + char *, + /* dst type*/ + int, + /* dst attrs*/ + char *); /* build a routing info list element */ -rt_info_t* -build_rt_info( - int priority, - tmrec_t* time, - /* ser routing table id */ - int route_id, - /* list of destinations indexes */ - char* dstlst, - pgw_t* pgw_l -); +rt_info_t *build_rt_info(int priority, tmrec_t *time, + /* ser routing table id */ + int route_id, + /* list of destinations indexes */ + char *dstlst, pgw_t *pgw_l); -void -del_pgw_list( - pgw_t *pgw_l - ); +void del_pgw_list(pgw_t *pgw_l); -void -free_rt_data( - rt_data_t*, - int - ); +void free_rt_data(rt_data_t *, int); #endif