Module: sip-router Branch: master Commit: a3080718b97361622599b3896dddb6aee7fbb273 URL: http://git.sip-router.org/cgi-bin/gitweb.cgi/sip-router/?a=commit;h=a3080718...
Author: Juha Heinanen jh@tutpro.com Committer: Juha Heinanen jh@tutpro.com Date: Tue Mar 30 19:20:50 2010 +0300
modules/diaplan: dest pv is now optional in dp_translate()
- If dest pv is not given, only matching and storing of matching rule's attributes is done. - If replacement empty, dest pv is not set no matter what kind of pv it is.
---
modules/dialplan/README | 47 ++++++++++++++++--------------- modules/dialplan/dialplan.c | 31 ++++++++++++-------- modules/dialplan/doc/dialplan.xml | 2 +- modules/dialplan/doc/dialplan_admin.xml | 14 +++++---- 4 files changed, 52 insertions(+), 42 deletions(-)
diff --git a/modules/dialplan/README b/modules/dialplan/README index 8ccae7d..cf9d9d5 100644 --- a/modules/dialplan/README +++ b/modules/dialplan/README @@ -12,9 +12,9 @@ Edited by
Juha Heinanen
- Copyright � 2007-2008 voice-system.ro + Copyright © 2007-2008 voice-system.ro
- Copyright � 2008 Juha Heinanen + Copyright © 2008-2010 Juha Heinanen Revision History Revision $Revision: 1.1 $ $Date: 2007/08/30 13:16:22 $ Revision $Revision: 1.2 $ $Date: 2008/10/9 15:57 $ @@ -49,7 +49,7 @@ Juha Heinanen
6. Exported Functions
- 6.1. dp_translate(id, src/dest) + 6.1. dp_translate(id, src[/dest])
7. Exported MI Functions
@@ -106,7 +106,7 @@ Chapter 1. Admin Guide
6. Exported Functions
- 6.1. dp_translate(id, src/dest) + 6.1. dp_translate(id, src[/dest])
7. Exported MI Functions
@@ -191,7 +191,7 @@ Chapter 1. Admin Guide
The translation rules will be loaded using this database URL.
- Default value is "mysql://openser:openserrw@localhost/openser". + Default value is “mysql://openser:openserrw@localhost/openser”.
Example 1.1. Set db_url parameter ... @@ -202,7 +202,7 @@ modparam("dialplan", "db_url", "mysql://user:passwb@localhost/db")
The table's name from which to load the translation rules.
- Default value is "dialplan". + Default value is “dialplan”.
Example 1.2. Set table_name parameter ... @@ -213,7 +213,7 @@ modparam("dialplan", "table_name", "my_table")
The column name used to store the dialplan ID group.
- Default value is "dpid". + Default value is “dpid”.
Example 1.3. Set dpid_col parameter ... @@ -225,7 +225,7 @@ modparam("dialplan", "dpid_col", "column_name") The column name used to store the priority of the corresponding rule from the database row.
- Default value is "pr". + Default value is “pr”.
Example 1.4. Set pr_col parameter ... @@ -236,7 +236,7 @@ modparam("dialplan", "pr_col", "column_name")
The column name used to store the type of matching of the rule.
- Default value is "match_op". + Default value is “match_op”.
Example 1.5. Set match_op_col parameter ... @@ -247,7 +247,7 @@ modparam("dialplan", "match_op_col", "column_name")
The column name to store the rule match expression.
- Default value is "match_exp". + Default value is “match_exp”.
Example 1.6. Set match_exp_col parameter ... @@ -259,7 +259,7 @@ modparam("dialplan", "match_exp_col", "column_name") The column name to store the length of a string matching the match expression.
- Default value is "match_len". + Default value is “match_len”.
Example 1.7. Set pr_col parameter ... @@ -270,7 +270,7 @@ modparam("dialplan", "match_len_col", "column_name")
The column name to store the rule's substitution expression.
- Default value is "subst_exp". + Default value is “subst_exp”.
Example 1.8. Set pr_col parameter ... @@ -281,7 +281,7 @@ modparam("dialplan", "subst_exp_col", "column_name")
The column name to store the rule's replacement expression.
- Default value is "repl_exp". + Default value is “repl_exp”.
Example 1.9. Set repl_exp_col parameter ... @@ -293,7 +293,7 @@ modparam("dialplan", "repl_exp_col", "column_name") The column name to store the rule's attributes to be set to the message.
- Default value is "attrs". + Default value is “attrs”.
Example 1.10. Set attrs_col parameter ... @@ -306,7 +306,7 @@ modparam("dialplan", "attrs_col", "column_name") (dp_translate() succeeds). This parameter can be an AVP or a SCRIPT VAR.
- Default value is "NULL". + Default value is “NULL”.
Example 1.11. Set attrs_pvar parameter ... @@ -317,7 +317,7 @@ modparam("dialplan", "attrs_pvar", "$avp(s:dest)")
The number of rows to be fetched at once from database
- Default value is "1000". + Default value is “1000”.
Example 1.12. Set fetch_rows parameter ... @@ -326,12 +326,13 @@ modparam("dialplan", "fetch_rows", 4000)
6. Exported Functions
- 6.1. dp_translate(id, src/dest) + 6.1. dp_translate(id, src[/dest])
-6.1. dp_translate(id, src/dest) +6.1. dp_translate(id, src[/dest])
- Will try to translate the src string into dest string according to the - translation rules with dialplan ID equal to id. + Will try to translate src into dest according to the translation rules + with dialplan ID equal to id. If dest is missing, only matching and + storing of matching rule's attributes is done.
Meaning of the parameters is as follows: * id -the dialplan id of the possible matching rules. This parameter @@ -342,12 +343,12 @@ modparam("dialplan", "fetch_rows", 4000) + script var - the dialplan id is the value of an existing script variable. * src/dest - input and output of the function. If this parameter is - missing the default parameter "ruri.user/ruri.user" will be used, - thus translating the request uri. + missing the default parameter “ruri.user/ruri.user” will be used, + thus translating the request uri user part. Input parameter src can be any pseudo variable. Output parameter dest can be: + R-URI - - the string is the r-uri or r-uri username + - the string is the r-uri or r-uri user part + avp var - At input the function will get the input string from an existing avp variable. At output the function will add an avp diff --git a/modules/dialplan/dialplan.c b/modules/dialplan/dialplan.c index e102748..af090a3 100644 --- a/modules/dialplan/dialplan.c +++ b/modules/dialplan/dialplan.c @@ -267,13 +267,12 @@ static int dp_get_svalue(struct sip_msg * msg, pv_spec_t spec, str* val)
static int dp_update(struct sip_msg * msg, pv_spec_t * src, pv_spec_t * dest, - str * repl, str * attrs) + str * repl, str * attrs) { int no_change; pv_value_t val;
- no_change = ((!repl->s) || (!repl->len)) && (src->type == dest->type) - && ((src->type == PVT_RURI) || (src->type == PVT_RURI_USERNAME)); + no_change = (dest->type == PVT_NONE) || (!repl->s) || (!repl->len);
if (no_change) goto set_attr_pvar; @@ -380,7 +379,7 @@ static int dp_translate_f(struct sip_msg* msg, char* str1, char* str2)
/* first param: DPID: type: INT, AVP, SVAR * second param: SRC type: any psedo variable type - * second param: DST type: RURI, RURI_USERNAME, AVP, SVAR + * second param: DST type: RURI, RURI_USERNAME, AVP, SVAR, N/A * default value for the second param: $ru.user/$ru.user */ static int dp_trans_fixup(void ** param, int param_no){ @@ -429,21 +428,29 @@ static int dp_trans_fixup(void ** param, int param_no){ dp_par->type = DP_VAL_SPEC; } } else { - if( ((s = strchr(p, '/')) == 0) ||( *(s+1)=='\0')) - goto error; + + if (((s = strchr(p, '/')) != 0) && (*(s+1)=='\0')) + goto error; + + if (s != 0) { *s = '\0'; s++; + }
- lstr.s = p; lstr.len = strlen(p); - if(pv_parse_spec( &lstr, &dp_par->v.sp[0])==NULL) - goto error; + lstr.s = p; lstr.len = strlen(p); + if(pv_parse_spec( &lstr, &dp_par->v.sp[0])==NULL) + goto error;
+ if (s != 0) { lstr.s = s; lstr.len = strlen(s); if (pv_parse_spec( &lstr, &dp_par->v.sp[1] )==NULL) - goto error; - + goto error; verify_par_type(param_no, dp_par->v.sp[1]); + } else { + dp_par->v.sp[1].type = PVT_NONE; + } + + dp_par->type = DP_VAL_SPEC;
- dp_par->type = DP_VAL_SPEC; } *param = (void *)dp_par; diff --git a/modules/dialplan/doc/dialplan.xml b/modules/dialplan/doc/dialplan.xml index 9d7caf1..64ebe18 100644 --- a/modules/dialplan/doc/dialplan.xml +++ b/modules/dialplan/doc/dialplan.xml @@ -38,7 +38,7 @@ <holder>&voicesystem;</holder> </copyright> <copyright> - <year>2008</year> + <year>2008-2010</year> <holder>Juha Heinanen</holder> </copyright> <revhistory> diff --git a/modules/dialplan/doc/dialplan_admin.xml b/modules/dialplan/doc/dialplan_admin.xml index 8da825d..ac9a84d 100644 --- a/modules/dialplan/doc/dialplan_admin.xml +++ b/modules/dialplan/doc/dialplan_admin.xml @@ -357,11 +357,13 @@ modparam("dialplan", "fetch_rows", 4000) <section> <title> - <function moreinfo="none">dp_translate(id, src/dest)</function> + <function moreinfo="none">dp_translate(id, src[/dest])</function> </title> <para> - Will try to translate the src string into dest string according to - the translation rules with dialplan ID equal to id. + Will try to translate src into dest according to + the translation rules with dialplan ID equal to id. If dest is + missing, only matching and storing of matching rule's + attributes is done. </para> <para>Meaning of the parameters is as follows:</para> <itemizedlist> @@ -393,8 +395,8 @@ modparam("dialplan", "fetch_rows", 4000) <para> <emphasis>src/dest</emphasis> - input and output of the function. If this parameter is missing the default parameter - <quote>ruri.user/ruri.user</quote> will be used, thus translating - the request uri. + <quote>ruri.user/ruri.user</quote> will be used, thus + translating the request uri user part. </para> <para>Input parameter src can be any pseudo variable. Output parameter dest can be: @@ -403,7 +405,7 @@ modparam("dialplan", "fetch_rows", 4000) <listitem> <para><emphasis>R-URI</emphasis></para> <para> - - the string is the r-uri or r-uri username + - the string is the r-uri or r-uri user part </para> </listitem>