[asterisk-users] Trouble applying regex to dialplan variable that contains double-quotes

Alex Villací­s Lasso a_villacis at palosanto.com
Tue Aug 9 10:18:16 CDT 2016


El 08/08/16 a las 21:34, Eric Wieling escribió:
>
> How Set handles quotes can be changed with the 'app_set' setting in the [compat] section of /etc/asterisk/asterisk.conf.  See also: https://wiki.asterisk.org/wiki/display/AST/Application_Set Perhaps you have the value left over from an old Asterisk setup.
>

I do not have any [compat] section in my /etc/asterisk/asterisk.conf file. Also the previous assignments to RX and T1 work correctly and the values are set as they appear in the dialplan. It is only the evaluation of the regex operator inside the $[ that 
gives me trouble. I thought the QUOTE() function would be the way to use a dialplan variable with special characters inside an expression, but apparently the backslash-double quote sequence is not being recognized as an escape sequence for a literal 
double-quote character in the string. See below for the actual result. So, what am I doing wrong?

> On 08/08/2016 04:31 PM, Alex Villací­s Lasso wrote:
>> I am writing a dialplan context under asterisk 11.21.0 to handle SIP message routing between registered SIP peers using chan_sip. I am having trouble with double-quotes when the source peer uses a display name, which appears in quotes before the SIP 
>> URI. I want to extract the SIP URI from MESSAGE(from) in order to (conditionally) route a failure message back to the source peer.
>>
>> My test dialplan sets up variables like these:
>>
>> exten => _X.,n,Set(RX=".*<(.+)>")
>> exten => _X.,n,Set(T1="Example name" <sip:example at example.com>)
>>
>> If I just apply the regex operator (:) on T1 using regexp RX, like this:
>>
>> exten => _X.,n,Set(FROM_SIPURI=$[${T1}:${RX}])
>>
>> ...I get this syntax error:
>>
>> [2016-08-08 15:04:02] WARNING[1653][C-00000000]: ast_expr2.fl:470 ast_yyerror: ast_yyerror():  syntax error: syntax error, unexpected ':', expecting '-' or '!' or '(' or '<token>'; Input:
>> "Example name" <sip:example at example.com>:".*<(.+)>"
>>                                         ^
>> (caret points at the colon character)
>>
>> If I enclose the T1 variable in double quotes, like this:
>>
>> exten => _X.,n,Set(FROM_SIPURI=$["${T1}":${RX}])
>>
>> ...I get this syntax error:
>>
>> [2016-08-08 15:05:40] WARNING[1653][C-00000000]: ast_expr2.fl:470 ast_yyerror: ast_yyerror():  syntax error: syntax error, unexpected '<token>', expecting $end; Input:
>> ""Example name" <sip:example at example.com>":".*<(.+)>"
>>   ^
>> (caret points at letter E)
>>
>> If I use the QUOTE() function to quote the double quotes before applying the regexp, like this:
>>
>> exten => _X.,n,Set(FROM_SIPURI=$[${QUOTE(${T1})}:${RX}])
>>
>> ... I get this syntax error:
>>
>> [2016-08-08 14:53:35] WARNING[1653][C-00000000]: ast_expr2.fl:470 ast_yyerror: ast_yyerror():  syntax error: syntax error, unexpected '<token>', expecting $end; Input:
>> "\"Example name\" <sip:example at example.com>":".*<(.+)>"
>>    ^
>> (caret points at letter E)
>>
>> Currently I am working around the issue by using REPLACE() to strip all double-quotes, but I believe this is not a correct solution. How should I write the $[ expression so that the double-quotes are handled correctly?
>>
>>
>




More information about the asterisk-users mailing list