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].

Reply via email to