[sr-dev] git:master: modules/diaplan: dest pv is now optional in dp_translate()

Juha Heinanen jh at tutpro.com
Tue Mar 30 18:28:29 CEST 2010


Module: sip-router
Branch: master
Commit: a3080718b97361622599b3896dddb6aee7fbb273
URL:    http://git.sip-router.org/cgi-bin/gitweb.cgi/sip-router/?a=commit;h=a3080718b97361622599b3896dddb6aee7fbb273

Author: Juha Heinanen <jh at tutpro.com>
Committer: Juha Heinanen <jh at 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>
 			




More information about the sr-dev mailing list