Module: sip-router Branch: master Commit: d8990997b914b4f806da703b58791db57ff041ae URL: http://git.sip-router.org/cgi-bin/gitweb.cgi/sip-router/?a=commit;h=d8990997...
Author: Raul Alexis Betancor Santana rabs@dimension-virtual.com Committer: Raul Alexis Betancor Santana rabs@dimension-virtual.com Date: Sun Jan 3 06:20:55 2010 +0000
modules_k/drouting: Merging changes with recent OpenSIPS module
- routeid field of database table ?dr_rules? as string, not as int
Patch provided by Andrey 'Krieger' Utkin andrey.utkin@wildix.com FS#24
---
modules_k/drouting/dr_load.c | 30 +++++++++++++++++++++--------- 1 files changed, 21 insertions(+), 9 deletions(-)
diff --git a/modules_k/drouting/dr_load.c b/modules_k/drouting/dr_load.c index 3d833d9..a8b6f05 100644 --- a/modules_k/drouting/dr_load.c +++ b/modules_k/drouting/dr_load.c @@ -34,6 +34,7 @@
#include "../../dprint.h" +#include "../../route.h" //#include "../../db/db.h" #include "../../mem/shm_mem.h"
@@ -280,7 +281,7 @@ 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[4]; + char * str_vals[5]; str tmp; db_key_t columns[7]; db1_res_t* res; @@ -509,31 +510,41 @@ rt_data_t* dr_load_routing_info( db_func_t *dr_dbf, db1_con_t* db_hdl, 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_INT, 1, 0); - int_vals[3] = VAL_INT (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[3] = (char*)VAL_STRING(ROW_VALUES(row)+6); + str_vals[4] = (char*)VAL_STRING(ROW_VALUES(row)+6); /* parse the time definition */ 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]); continue; } + /* lookup for the script route ID */ + if (str_vals[3][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[3][0]=='#') { - s_id.s = str_vals[3]+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[3]=get_tmp_gw_list(id))==NULL ) { + (str_vals[4]=get_tmp_gw_list(id))==NULL ) { LM_ERR("invalid reference to a GW list <%s> -> skipping\n", - str_vals[3]); + str_vals[4]); continue; } } /* build the routing rule */ if ((ri = build_rt_info( int_vals[2], time_rec, int_vals[3], - str_vals[3], rdata->pgw_l))== 0 ) { + 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 ); @@ -573,5 +584,6 @@ error: dr_dbf->free_result(db_hdl, res); if (rdata) free_rt_data( rdata, 1 ); + rdata = NULL; return 0; }