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

Alex Villací­s Lasso a_villacis at palosanto.com
Mon Aug 8 15:31:50 CDT 2016


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