Module: sip-router Branch: master Commit: 9a25e712529cb7aacbae8e64a2e1be4da3c9a8c3 URL: http://git.sip-router.org/cgi-bin/gitweb.cgi/sip-router/?a=commit;h=9a25e712...
Author: Daniel-Constantin Mierla miconda@gmail.com Committer: Daniel-Constantin Mierla miconda@gmail.com Date: Fri Jul 12 10:22:33 2013 +0200
dispatcher: allow pv in ds_is_from_list(setid) parameter
---
modules/dispatcher/README | 4 +++- modules/dispatcher/dispatcher.c | 10 ++++++++-- modules/dispatcher/doc/dispatcher_admin.xml | 4 +++- 3 files changed, 14 insertions(+), 4 deletions(-)
diff --git a/modules/dispatcher/README b/modules/dispatcher/README index 4736445..9f8e73c 100644 --- a/modules/dispatcher/README +++ b/modules/dispatcher/README @@ -829,7 +829,9 @@ failure_route[tryagain] { Parameter groupid is optional, when it is missing, then the matching will be done against all addresses in all groups. Upon a match, the variable specified by 'setid_pvname' parameter will be set to groupid - of matching address. + of matching address and the attributes will be set in variable + specified by 'attrs_pvname'. The parameter can be an integer or a + variable holding an integer value.
This function can be used from ANY_ROUTE.
diff --git a/modules/dispatcher/dispatcher.c b/modules/dispatcher/dispatcher.c index 4af6757..9cb5ed5 100644 --- a/modules/dispatcher/dispatcher.c +++ b/modules/dispatcher/dispatcher.c @@ -183,7 +183,7 @@ static cmd_export_t cmds[]={ {"ds_is_from_list", (cmd_function)w_ds_is_from_list0, 0, 0, 0, REQUEST_ROUTE|FAILURE_ROUTE|ONREPLY_ROUTE|BRANCH_ROUTE}, {"ds_is_from_list", (cmd_function)w_ds_is_from_list1, 1, - fixup_uint_null, 0, ANY_ROUTE}, + fixup_igp_null, 0, ANY_ROUTE}, {"ds_load_unset", (cmd_function)w_ds_load_unset, 0, 0, 0, ANY_ROUTE}, {"ds_load_update", (cmd_function)w_ds_load_update, 0, @@ -807,7 +807,13 @@ static int w_ds_is_from_list0(struct sip_msg *msg, char *str1, char *str2)
static int w_ds_is_from_list1(struct sip_msg *msg, char *set, char *str2) { - return ds_is_from_list(msg, (int)(long)set); + int s; + if(fixup_get_ivalue(msg, (gparam_p)set, &s)!=0) + { + LM_ERR("cannot get set id value\n"); + return -1; + } + return ds_is_from_list(msg, s); }
static int ds_parse_reply_codes() { diff --git a/modules/dispatcher/doc/dispatcher_admin.xml b/modules/dispatcher/doc/dispatcher_admin.xml index 7115225..b63a523 100644 --- a/modules/dispatcher/doc/dispatcher_admin.xml +++ b/modules/dispatcher/doc/dispatcher_admin.xml @@ -986,7 +986,9 @@ failure_route[tryagain] { Parameter groupid is optional, when it is missing, then the matching will be done against all addresses in all groups. Upon a match, the variable specified by 'setid_pvname' parameter will be set to groupid - of matching address. + of matching address and the attributes will be set in variable + specified by 'attrs_pvname'. The parameter can be an integer or a + variable holding an integer value. </para> <para> This function can be used from ANY_ROUTE.