Lighthouse has a new layout. Prefer the old one? Return to the old layout, and switch back any time from the link at the top of each page.

AMI fails to parse events if colon is contained anywhere in data

#85

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.

Reported by dimas · November 7th, 2009 @ 11:13 AM

State: resolved
Milestone: none
Assigned to: Jay Phillips Jay Phillips

Activity

  1. Jay Phillips
    Jay Phillips

    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))+;
    

    November 8th, 2009 @ 03:50 PM

  2. dimas
    dimas

    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 Unable to process UserEvent, #83 It is difficult to process events in order, #82 DBget AMI command is unusable and #74 AMI hangs waiting for response. As I understand #74 AMI hangs waiting for response and #85 AMI fails to parse events if colon is contained anywhere in data (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.

    November 8th, 2009 @ 04:14 PM

  3. Jay Phillips
    Jay Phillips
    • 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)

    November 8th, 2009 @ 05:32 PM

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.