Update,
I'm thinking this may be useful info, enclosed is an update. As David suggests
this appears to be a bug using Macro (and parsing), so let's try GoSub()...
--
[macro-test]
exten => s,1,NOOP(ARG1=${ARG1})
exten => s,n,NOOP(ARG2=${ARG2})
exten => s,n,NOOP(ARG3=${ARG3})
[sub-test]
exten => start,1,NOOP(ARG1=${ARG1})
same => n,NOOP(ARG2=${ARG2})
same => n,NOOP(ARG3=${ARG3})
same => n,Return()
--
Test1 code: pass ${CALLERID(name)} by itself
--
exten => 9,1,Set(CALLERID(name)=Abelbeck, Lonnie)
exten => 9,n,Macro(test,${CALLERID(name)})
exten => 9,n,GoSub(sub-test,start,1(${CALLERID(name)}))
== Output ==
-- Executing [9@default:1] Set("SIP/10.10.50.1-0000000e",
"CALLERID(name)=Abelbeck, Lonnie") in new stack
-- Executing [9@default:2] Macro("SIP/10.10.50.1-0000000e", "test,Abelbeck,
Lonnie") in new stack
-- Executing [s@macro-test:1] NoOp("SIP/10.10.50.1-0000000e", "ARG1=Abelbeck")
in new stack
-- Executing [s@macro-test:2] NoOp("SIP/10.10.50.1-0000000e", "ARG2= Lonnie")
in new stack
-- Executing [s@macro-test:3] NoOp("SIP/10.10.50.1-0000000e", "ARG3=") in new
stack
-- Executing [9@default:3] Gosub("SIP/10.10.50.1-0000000e",
"sub-test,start,1(Abelbeck, Lonnie)") in new stack
-- Executing [start@sub-test:1] NoOp("SIP/10.10.50.1-0000000e",
"ARG1=Abelbeck") in new stack
-- Executing [start@sub-test:2] NoOp("SIP/10.10.50.1-0000000e", "ARG2= Lonnie")
in new stack
-- Executing [start@sub-test:3] NoOp("SIP/10.10.50.1-0000000e", "ARG3=") in new
stack
-- Executing [start@sub-test:4] Return("SIP/10.10.50.1-0000000e", "") in new
stack
==
Note both Macro and GoSub fail in the same way, the comma in the data is parsed.
Test2 code: add quotes around "${CALLERID(name)}" when passing
--
exten => 9,1,Set(CALLERID(name)=Abelbeck, Lonnie)
exten => 9,n,Macro(test,"${CALLERID(name)}")
exten => 9,n,GoSub(sub-test,start,1("${CALLERID(name)}"))
== Output ==
-- Executing [9@default:1] Set("SIP/10.10.50.1-0000000b",
"CALLERID(name)=Abelbeck, Lonnie") in new stack
-- Executing [9@default:2] Macro("SIP/10.10.50.1-0000000b", "test,"Abelbeck,
Lonnie"") in new stack
-- Executing [s@macro-test:1] NoOp("SIP/10.10.50.1-0000000b", "ARG1="Abelbeck")
in new stack
-- Executing [s@macro-test:2] NoOp("SIP/10.10.50.1-0000000b", "ARG2= Lonnie"")
in new stack
-- Executing [s@macro-test:3] NoOp("SIP/10.10.50.1-0000000b", "ARG3=") in new
stack
-- Executing [9@default:3] Gosub("SIP/10.10.50.1-0000000b",
"sub-test,start,1("Abelbeck, Lonnie")") in new stack
-- Executing [start@sub-test:1] NoOp("SIP/10.10.50.1-0000000b",
"ARG1="Abelbeck, Lonnie"") in new stack
-- Executing [start@sub-test:2] NoOp("SIP/10.10.50.1-0000000b", "ARG2=") in new
stack
-- Executing [start@sub-test:3] NoOp("SIP/10.10.50.1-0000000b", "ARG3=") in new
stack
-- Executing [start@sub-test:4] Return("SIP/10.10.50.1-0000000b", "") in new
stack
==
Note Macro fails in the same way as Test1 with quoting but GoSub now "works"
(the comma is no longer parsed) but the downside is the "'s chars are now added
to ARG1.
Test3 code: pass ${CALLERID(name)} with URIENCODE() then URIDECODE()
--
[macro-test]
exten => s,1,NOOP(ARG1=${URIDECODE(${ARG1})})
exten => s,n,NOOP(ARG2=${ARG2})
exten => s,n,NOOP(ARG3=${ARG3})
[sub-test]
exten => start,1,NOOP(ARG1=${URIDECODE(${ARG1})})
same => n,NOOP(ARG2=${ARG2})
same => n,NOOP(ARG3=${ARG3})
same => n,Return()
exten => 9,1,Set(CALLERID(name)=Abelbeck, Lonnie)
exten => 9,n,Macro(test,${URIENCODE(${CALLERID(name)})})
exten => 9,n,GoSub(sub-test,start,1(${URIENCODE(${CALLERID(name)})}))
== Output ==
-- Executing [9@default:1] Set("SIP/10.10.50.1-00000014",
"CALLERID(name)=Abelbeck, Lonnie") in new stack
-- Executing [9@default:2] Macro("SIP/10.10.50.1-00000014",
"test,Abelbeck%2C%20Lonnie") in new stack
-- Executing [s@macro-test:1] NoOp("SIP/10.10.50.1-00000014", "ARG1=Abelbeck,
Lonnie") in new stack
-- Executing [s@macro-test:2] NoOp("SIP/10.10.50.1-00000014", "ARG2=") in new
stack
-- Executing [s@macro-test:3] NoOp("SIP/10.10.50.1-00000014", "ARG3=") in new
stack
-- Executing [9@default:3] Gosub("SIP/10.10.50.1-00000014",
"sub-test,start,1(Abelbeck%2C%20Lonnie)") in new stack
-- Executing [start@sub-test:1] NoOp("SIP/10.10.50.1-00000014", "ARG1=Abelbeck,
Lonnie") in new stack
-- Executing [start@sub-test:2] NoOp("SIP/10.10.50.1-00000014", "ARG2=") in new
stack
-- Executing [start@sub-test:3] NoOp("SIP/10.10.50.1-00000014", "ARG3=") in new
stack
-- Executing [start@sub-test:4] Return("SIP/10.10.50.1-00000014", "") in new
stack
==
Note the code is messy, but it now works with both Macro and GoSub without any
added chars to the args.
For this special case, moving the ${CALLERID(name)} call into the Macro rather
than passing as an argument is the simplest.
The moral to this story is in Asterisk 1.4 the pipe (|) character was uncommon
in the data and not much of a problem, while in Asterisk 1.8 the comma (,) is
quite common in data leading to unexpected results.
Lonnie
------------------------------------------------------------------------------
Virtualization & Cloud Management Using Capacity Planning
Cloud computing makes use of virtualization - but cloud computing
also focuses on allowing computing to be delivered as a service.
http://www.accelacomm.com/jaw/sfnl/114/51521223/
_______________________________________________
Astlinux-users mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/astlinux-users
Donations to support AstLinux are graciously accepted via PayPal to
[email protected].