[OpenSIPS-Users] my problems getting dialplan to work

Bradley, Todd todd.bradley at Polycom.com
Tue Jun 16 18:43:01 CEST 2009


This is really baffling.  I updated my DB table to look nearly exactly
like yours and even changed my script to look almost exactly like yours,
and still it doesn't work.

Here's the output that was logged:

Jun 16 10:35:12 [27383] DBG:dialplan:dp_get_ivalue: integer value
Jun 16 10:35:12 [27383] DBG:dialplan:dp_translate_f: dpid is 2
Jun 16 10:35:12 [27383] DBG:dialplan:dp_get_svalue: searching 78
Jun 16 10:35:12 [27383] DBG:dialplan:dp_translate_f: input is sip:061111
Jun 16 10:35:12 [27383] DBG:dialplan:translate: regex operator testing
Jun 16 10:35:12 [27383] DBG:dialplan:test_match: test string sip:061111
against a pattern (sip:06.+)
Jun 16 10:35:12 [27383] DBG:dialplan:test_match: test_match:[0]
sip:061111
Jun 16 10:35:12 [27383] DBG:dialplan:test_match: test_match:[1]
sip:061111
Jun 16 10:35:12 [27383] DBG:dialplan:translate: found a matching rule
0xb615a1f0: pr 0, match_exp (sip:06.+)
Jun 16 10:35:12 [27383] DBG:dialplan:translate: the rule's attrs are 0
Jun 16 10:35:12 [27383] DBG:dialplan:translate: the copied attributes
are: 0
Jun 16 10:35:12 [27383] DBG:dialplan:test_match: test string sip:061111
against a pattern (sip:06.+)
Jun 16 10:35:12 [27383] DBG:dialplan:test_match: test_match:[0]
sip:061111
Jun 16 10:35:12 [27383] DBG:dialplan:test_match: test_match:[1]
sip:061111
Jun 16 10:35:12 [27383] DBG:dialplan:dp_translate_f: input sip:061111
with dpid 2 => output sip:061111
The variable that went in was sip:061111
The variable that came out was sip:061111


And here is the relevant part of my route script:

                $var(x) = "sip:061111";
                dp_translate("2", "$var(x)/$var(tmp)");
                xlog("The variable that went in was $var(x)\n");
                xlog("The variable that came out was $var(tmp)\n");


And here is the data from my dialplan table:

mysql> select * from dialplan;
+----+------+----+----------+------------+-----------+------------+-----
-----------+-------+
| id | dpid | pr | match_op | match_exp  | match_len | subst_exp  |
repl_exp       | attrs |
+----+------+----+----------+------------+-----------+------------+-----
-----------+-------+
|  7 |    2 |  0 |        1 | (sip:06.+) |         0 | (sip:06.+) |
\1 at 10.47.19.24 | 0     |
+----+------+----+----------+------------+-----------+------------+-----
-----------+-------+
1 row in set (0.00 sec)



Any ideas?


Cheers,
Todd.


> -----Original Message-----
> From: users-bounces at lists.opensips.org 
> [mailto:users-bounces at lists.opensips.org] On Behalf Of 
> Bogdan-Andrei Iancu
> Sent: Tuesday, June 16, 2009 10:14 AM
> To: Bradley, Todd
> Cc: users at lists.opensips.org
> Subject: Re: [OpenSIPS-Users] my problems getting dialplan to work
> 
> Hi Todd,
> 
> The attr column is not user in t matching / replacement 
> process - it is a simply opaque string (with no special 
> meaning) that will be automatically pushed into script (via 
> some PV) if the rule matches.
> 
> If this still does not work for you, please post the opensips 
> log (like last one).
> 
> Regards,
> Bogdan
> 
> Bradley, Todd wrote:
> > Thanks, Bogdan.  At first I definitely had my repl_exp expression 
> > wrong due to the backslash being interpreted wrong.  But I 
> fixed that 
> > and I think it's right now.  Here's what I get:
> >
> > mysql> select * from dialplan;
> > 
> +----+------+----+----------+------------+-----------+------------+---
> > 
> +----+------+----+----------+------------+-----------+------------+--
> > -----------+-------+
> > | id | dpid | pr | match_op | match_exp  | match_len | subst_exp  |
> > repl_exp       | attrs |
> > 
> +----+------+----+----------+------------+-----------+------------+---
> > 
> +----+------+----+----------+------------+-----------+------------+--
> > -----------+-------+
> > |  7 |    2 |  2 |        1 | (sip:06.+) |         0 | (sip:06.+) |
> > \1 at 10.47.19.24 |       |
> > 
> +----+------+----+----------+------------+-----------+------------+---
> > 
> +----+------+----+----------+------------+-----------+------------+--
> > -----------+-------+
> > 1 row in set (0.00 sec)
> >
> >
> > The only possibly relevant difference I see is that you have a 0 in 
> > your attrs column, where I have a blank.  Otherwise, it looks like 
> > everything's fine, doesn't it?  I couldn't figure out what 
> the attrs 
> > column was for, so I didn't insert anything into it.  
> According to the 
> > docs, it's a "General attributes string to be returned in 
> case of rule 
> > matching" and it's a string.  Could you help explain what it's for?
> >
> >
> > Cheers,
> > Todd.
> >
> >
> >
> >
> >   
> >> -----Original Message-----
> >> From: users-bounces at lists.opensips.org 
> >> [mailto:users-bounces at lists.opensips.org] On Behalf Of 
> Bogdan-Andrei 
> >> Iancu
> >> Sent: Monday, June 15, 2009 6:28 PM
> >> To: Bradley, Todd
> >> Cc: users at lists.opensips.org
> >> Subject: Re: [OpenSIPS-Users] my problems getting dialplan to work
> >>
> >> Hi Bradley,
> >>
> >> I re-made your case with:
> >>
> >> mysql> select * from dialplan;
> >> +----+------+----+----------+------------+-----------+--------
> >> ----+----------------+-------+
> >> | id | dpid | pr | match_op | match_exp  | match_len | subst_exp  |
> >> repl_exp       | attrs |
> >> +----+------+----+----------+------------+-----------+--------
> >> ----+----------------+-------+
> >> |  1 |    1 |  0 |        1 | (sip:06.+) |         0 | 
> (sip:06.+) | 
> >> \1 at 10.47.19.24 | 0     |
> >> +----+------+----+----------+------------+-----------+--------
> >> ----+----------------+-------+
> >> 1 row in set (0.00 sec)
> >>
> >> and in script:
> >>
> >>     $var(x) = "sip:061111";
> >>     dp_translate("1", "$var(x)/$var(tmp)");
> >>     xlog("-------------$var(tmp)\n");
> >>
> >>
> >> The output was:
> >>
> >> Jun 16 03:22:34 [7921] DBG:dialplan:dp_get_ivalue: integer 
> value Jun 
> >> 16 03:22:34 [7921] DBG:dialplan:dp_translate_f:
> >> dpid is 1 Jun 16 03:22:34 [7921] DBG:dialplan:dp_get_svalue: 
> >> searching 78 Jun 16 03:22:34 [7921]
> >> DBG:dialplan:dp_translate_f: input is sip:061111 Jun 16
> >> 03:22:34 [7921] DBG:dialplan:translate: regex operator 
> testing Jun 16 
> >> 03:22:34 [7921] DBG:dialplan:test_match: test string sip:061111 
> >> against a pattern (sip:06.+) Jun 16
> >> 03:22:34 [7921] DBG:dialplan:test_match: test_match:[0]
> >> sip:061111 Jun 16 03:22:34 [7921] DBG:dialplan:test_match: 
> >> test_match:[1] sip:061111 Jun 16 03:22:34 [7921]
> >> DBG:dialplan:translate: found a matching rule
> >> 0xb56744c0: pr 0, match_exp (sip:06.+) Jun 16 03:22:34 [7921] 
> >> DBG:dialplan:test_match: test string
> >> sip:061111 against a pattern (sip:06.+) Jun 16 03:22:34 [7921] 
> >> DBG:dialplan:test_match: test_match:[0] sip:061111 Jun
> >> 16 03:22:34 [7921] DBG:dialplan:test_match: test_match:[1]
> >> sip:061111 Jun 16 03:22:34 [7921]
> >> DBG:dialplan:dp_translate_f: input sip:061111 with dpid 1 
> => output 
> >> sip:061111 at 10.47.19.24
> >> -------------sip:061111 at 10.47.19.24
> >>
> >> Which looks pretty ok ...
> >>
> >> Maybe there is something something in the correct data in DB.....
> >>
> >> Regards,
> >> Bogdan
> >>
> >>
> >> Bradley, Todd wrote:
> >>     
> >>> Hi, I'm new to openSIPS and am trying to set it up with the
> >>>       
> >> dialplan
> >>     
> >>> module, but I've had a couple problems I can't figure out.
> >>>  
> >>> The first problem is related to how dp_translate is doing regexp 
> >>> replacements. I have code like this in my route method:
> >>>  
> >>> if (is_method("INVITE")) {
> >>> 	xlog("To user is: $tu\n");
> >>> 	xlog("ruri.user is: $ruri.user\n");
> >>> 	xlog("avp(s:dest) is: $avp(s:dest)\n");
> >>> 	dp_translate("1", "$tu/$var(tmp)");
> >>> 	xlog("The variable that came out was $var(tmp)\n");
> >>>  	setflag(1); # do accounting
> >>> }
> >>>  
> >>> And my dialplan DB table has this row for dpid 1: 
> >>> match_exp=(^06.+)
> >>> subst_exp=(^06.+)
> >>> repl_exp=\1 at 10.47.19.24
> >>>  
> >>> When I send in a SIP INVITE that is to "sip:061111", I expect the 
> >>> dp_translate to convert this to "sip:061111 at 10.47.19.24".
> >>>       
> >> But I just
> >>     
> >>> get "sip:061111" back. Here's the output:
> >>>  
> >>> To user is: sip:061111
> >>> ruri.user is: <null>
> >>> avp(s:dest) is: <null>
> >>> Jun 12 13:48:55 [29901] DBG:dialplan:dp_get_ivalue: integer
> >>>       
> >> value Jun
> >>     
> >>> 12 13:48:55 [29901] DBG:dialplan:dp_translate_f: dpid is 2 Jun 12
> >>> 13:48:55 [29901] DBG:dialplan:dp_get_svalue: searching 22 Jun 12
> >>> 13:48:55 [29901] DBG:dialplan:dp_translate_f: input is sip:061111
> >>>
> >>> Jun 12 13:48:55 [29901] DBG:dialplan:translate: regex
> >>>       
> >> operator testing
> >>     
> >>> Jun 12 13:48:55 [29901] DBG:dialplan:test_match: test string
> >>> sip:061111 against a pattern (sip:06.+) Jun 12 13:48:55 [29901]
> >>> DBG:dialplan:test_match: test_match:[0]
> >>> sip:061111
> >>> Jun 12 13:48:55 [29901] DBG:dialplan:test_match: test_match:[1]
> >>> sip:061111
> >>> Jun 12 13:48:55 [29901] DBG:dialplan:translate: found a
> >>>       
> >> matching rule
> >>     
> >>> 0xb610c1f0: pr 2, match_exp (sip:06.+) Jun 12 13:48:55 [29901]
> >>> DBG:dialplan:test_match: test string sip:061111 against a pattern
> >>> (sip:06.+) Jun 12 13:48:55 [29901] DBG:dialplan:test_match: 
> >>> test_match:[0]
> >>> sip:061111
> >>> Jun 12 13:48:55 [29901] DBG:dialplan:test_match: test_match:[1]
> >>> sip:061111
> >>> Jun 12 13:48:55 [29901] DBG:dialplan:dp_translate_f: input
> >>>       
> >> sip:061111
> >>     
> >>> with dpid 2 => output sip:061111 The variable that came out was
> >>> sip:061111
> >>>  
> >>> So it looks like \1 is indeed replaced with the part that
> >>>       
> >> matches the
> >>     
> >>> regexp, but the rest of my replacement string (the "@10.47.19.24" 
> >>> part) is ignored. Why is that? What am I doing wrong?
> >>>  
> >>> And my second question is this: Once I fix my first mistake, what 
> >>> should I do to make use of this? The behavior I want is
> >>>       
> >> that when the
> >>     
> >>> proxy gets an INVITE to 061111, it fills in the rest of 
> the address 
> >>> and then routes it along. In this case, it should pass it 
> along to 
> >>> 061111 at 10.47.19.24.
> >>>  
> >>> Here's where my newness to openSIPS is coming to light, I
> >>>       
> >> think. When
> >>     
> >>> I read the documentation for the dialplan module 
> >>> 
> (http://www.opensips.org/html/docs/modules/1.5.x/dialplan.html), it 
> >>> has an example that leads me to believe I should be able to
> >>>       
> >> just do this:
> >>     
> >>>  
> >>> dp_translate("2", "$avp(s:dest)/$avp(s:dest)");
> >>>  
> >>> But $avp(s:dest) is null, as you can see from the output
> >>>       
> >> above. What
> >>     
> >>> SHOULD I have in my route script to do what I'm trying to do?
> >>>  
> >>>  
> >>> Thanks,
> >>> Todd. 
> >>>
> >>> ps.  I originally posted this question last week to the
> >>>       
> >> OpenSIPS web
> >>     
> >>> forum, but then realized that nobody really reads the 
> forum and all 
> >>> the action is over here on the users email list.  So 
> sorry for the 
> >>> sort-of duplication.
> >>>
> >>> _______________________________________________
> >>> Users mailing list
> >>> Users at lists.opensips.org
> >>> http://lists.opensips.org/cgi-bin/mailman/listinfo/users
> >>>
> >>>   
> >>>       
> >> _______________________________________________
> >> Users mailing list
> >> Users at lists.opensips.org
> >> http://lists.opensips.org/cgi-bin/mailman/listinfo/users
> >>
> >>     
> >
> > _______________________________________________
> > Users mailing list
> > Users at lists.opensips.org
> > http://lists.opensips.org/cgi-bin/mailman/listinfo/users
> >
> >   
> 
> 
> _______________________________________________
> Users mailing list
> Users at lists.opensips.org
> http://lists.opensips.org/cgi-bin/mailman/listinfo/users
> 



More information about the Users mailing list