AMI fails to parse events if colon is contained anywhere in data
Reported by dimas | November 7th, 2009 @ 11:13 AM
My dialplan does three actions in a row:
UserEvent(Conference!aaa+bbb);
UserEvent(Conference!aaa:ccc);
UserEvent(Conference!aaa!ddd);
(note the only difference is a character between 'aaa' and 'bbb'. I make telnet connection to AMI port and see all three events coming through:
...
Event: UserEvent
Privilege: user,all
UserEvent: Conference!aaa+bbb
...
Event: UserEvent
Privilege: user,all
UserEvent: Conference!aaa:ccc
...
Event: UserEvent
Privilege: user,all
UserEvent: Conference!aaa!ddd
...
However simple event-dumping application usign Adhearsion like this:
...
require 'adhearsion/events_support'
Adhearsion::Events.framework_theatre.start!
Adhearsion::Events.register_callback %w[asterisk manager_interface] do |event|
puts event.inspect
end
will output:
#<Adhearsion::VoIP::Asterisk::Manager::ManagerInterfaceEvent:0xb7e75510 @headers={"AppData"=>"Conference!aaa+bbb", "Channel"=>"SIP/1001-0a3ac008", "Context"=>"default", "Uniqueid"=>"1257609700.14202", "Application"=>"UserEvent", "Privilege"=>"call,all", "Priority"=>"1", "Extension"=>"111"}, @name="Newexten">
#<Adhearsion::VoIP::Asterisk::Manager::ManagerInterfaceEvent:0xb7e73e54 @headers={"Privilege"=>"user,all", "UserEvent"=>"Conference!aaa+bbb"}, @name="UserEvent">
#<Adhearsion::VoIP::Asterisk::Manager::ManagerInterfaceEvent:0xb7e72b44 @headers={"AppData: Conference!aaa"=>"ccc", "Channel"=>"SIP/1001-0a3ac008", "Context"=>"default", "Uniqueid"=>"1257609700.14202", "Application"=>"UserEvent", "Privilege"=>"call,all", "Priority"=>"2", "Extension"=>"111"}, @name="Newexten">
#<Adhearsion::VoIP::Asterisk::Manager::ManagerInterfaceEvent:0xb7e7180c @headers={"UserEvent: Conference!aaa"=>"ccc", "Privilege"=>"user,all"}, @name="UserEvent">
#<Adhearsion::VoIP::Asterisk::Manager::ManagerInterfaceEvent:0xb7e6f3a4 @headers={"AppData"=>"Conference!aaa!ddd", "Channel"=>"SIP/1001-0a3ac008", "Context"=>"default", "Uniqueid"=>"1257609700.14202", "Application"=>"UserEvent", "Privilege"=>"call,all", "Priority"=>"3", "Extension"=>"111"}, @name="Newexten">
#<Adhearsion::VoIP::Asterisk::Manager::ManagerInterfaceEvent:0xb7e6af20 @headers={"Privilege"=>"user,all", "UserEvent"=>"Conference!aaa!ddd"}, @name="UserEvent">
#<Adhearsion::VoIP::Asterisk::Manager::ManagerInterfaceEvent:0xb7e667e0 @headers={"Cause-txt"=>"Unknown", "Cause"=>"0", "Channel"=>"SIP/1001-0a3ac008", "Uniqueid"=>"1257609700.14202", "Privilege"=>"call,all"}, @name="Hangup">
As you see, unlike the first Newexten event which got
"AppData"=>"Conference!aaa+bbb"
the second one yielded
"AppData: Conference!aaa"=>"ccc"
which is totally wrong. I believe this is because a bug in the
parser - it thinks that colon ia a valid character for the
parameter name so it uses something like regexp
/^.+:.*/
to parse while it should use something like
/^[^:]+:.*/
instead.
Comments and changes to this ticket
-
Jay Phillips November 8th, 2009 @ 03:50 PM
Are you sure you're trying this on master? I remember fixing this a few months ago...
Here's the relevant code from the Ragel parser:
Key = ((alnum | print) -- (cr | lf | ":"))+;
before it was...
Key = ((alnum | print) -- (cr | lf))+;
-
dimas November 8th, 2009 @ 04:14 PM
Oops. Well, I'm sure I'm NOT trying on master - I'm using 0.8.2 which I got from gem install adhearsion.
Jay, what are you plans on releasing the new version timewise?
I currently use Adhersion in a very limited way - in fact I'm only using it as AMI/event interface but I already hit many issues with that part - #84, #83, #82 and #74. As I understand #74 and #85 (this issue) are already fixed but the official Adhersion gem is still 0.8.2 released long time ago still affected by both.Honestly, I'm not a big fan of pulling latest development branch just to fix some minor issues because my experience says trunk mmay give you more problems then solutions. So I would prefer released version unless you think it will take months.
So any plans on 0.8.3?
Thanks.
-
Jay Phillips November 8th, 2009 @ 05:32 PM
- State changed from new to resolved
Just released v0.8.3 to RubyForge. :) Give it a try.
(closing this ticket. re-open if issue still exists)
Please Sign in or create a free account to add a new ticket.
With your very own profile, you can contribute to projects, track your activity, watch tickets, receive and update tickets through your email and much more.
Create your profile
Help contribute to this project by taking a few moments to create your personal profile. Create your profile ยป
People watching this ticket
Referenced by
- 85 AMI fails to parse events if colon is contained anywhere in data Jay, what are you plans on releasing the new version time...