adhearsion/punchblock

View on GitHub
CHANGELOG.md

Summary

Maintainability
Test Coverage
# [develop](https://github.com/adhearsion/punchblock)

# [v2.7.5](https://github.com/adhearsion/punchblock/compare/v2.7.4...v2.7.5) - [2015-08-27](https://rubygems.org/gems/punchblock/versions/2.7.5)
  * Bugfix: Alternative fix for "Avoid race conditions in processing calls with interactions between them". The original fix in 2.7.4 introduced crashes relating to creating call actors at high call volume.

# [v2.7.4](https://github.com/adhearsion/punchblock/compare/v2.7.3...v2.7.4) - [2015-08-19](https://rubygems.org/gems/punchblock/versions/2.7.4)
  * YANKED
  * Bugfix: Avoid race conditions in processing calls with interactions between them

# [v2.7.3](https://github.com/adhearsion/punchblock/compare/v2.7.2...v2.7.3) - [2015-08-18](https://rubygems.org/gems/punchblock/versions/2.7.3)
  * Bugfix: Handle correct event for confirming that a component stop was completed on Asterisk 13

# [v2.7.2](https://github.com/adhearsion/punchblock/compare/v2.7.1...v2.7.2) - [2015-08-10](https://rubygems.org/gems/punchblock/versions/2.7.2)
  * Bugfix: Process joined events on Asterisk 13 in any order, avoiding Join command timeouts

# [v2.7.1](https://github.com/adhearsion/punchblock/compare/v2.7.0...v2.7.1) - [2015-07-14](https://rubygems.org/gems/punchblock/versions/2.7.1)
  * Bugfix: Ensure components are deregistered from asterisk translator once the call is ended ([#250](https://github.com/adhearsion/punchblock/pull/250))

# [v2.7.0](https://github.com/adhearsion/punchblock/compare/v2.6.0...v2.7.0) - [2015-06-09](https://rubygems.org/gems/punchblock/versions/2.7.0)
  * Feature: Support for Asterisk 13 (AMI v2)
  * Feature: Pass all possible MRCP recognition headers through Asterisk [#244](https://github.com/adhearsion/punchblock/pull/244)
  * Bugfix: Handle an illegal AMI response by Asterisk as a failure with code -1
  * Bugfix: Ensure a useful error is raised when attempting to join to a call which doesn't exist [#529](https://github.com/adhearsion/adhearsion/issues/529)
  * Bugfix: Support SSML in MRCPRecog case on Asterisk. This is the case where a prompt component wants to render using Asterisk and recognise using UniMRCP. This worked fine with a uri-list which already has test coverage, but threw (and silently swallowed) an exception for an SSML doc (as provided by Adhearsion) resulting in a hung call with no audio, and then a timeout exception in Adhearsion. [#241](https://github.com/adhearsion/punchblock/pull/241)

# [v2.6.0](https://github.com/adhearsion/punchblock/compare/v2.5.3...v2.6.0) - [2015-02-01](https://rubygems.org/gems/punchblock/versions/2.6.0)
  * Feature: Support recognition-timeout settings on UniMRCP-based ASR on Asterisk ([#228](https://github.com/adhearsion/punchblock/pull/228))
  * Feature: Implement redirect command on Asterisk ([#219](https://github.com/adhearsion/punchblock/pull/219))
  * Feature: Allow arbitrary media headers ([#237](https://github.com/adhearsion/punchblock/pull/237))
  * Bugfix: Complete 1-to-1 mapping of UniMRCP RECOG_COMPLETION_CAUSE values to Punchblock::Complete events

# [v2.5.3](https://github.com/adhearsion/punchblock/compare/v2.5.2...v2.5.3) - [2014-09-22](https://rubygems.org/gems/punchblock/versions/2.5.3)
  * Bugfix: Prevent Asterisk translator death due to dead DTMF recognizers ([#221](https://github.com/adhearsion/punchblock/pull/221), [adhearsion/adhearsion#479](https://github.com/adhearsion/adhearsion/issues/479))
  * Bugfix: Be more intelligent about only stripping true file extensions off filenames for playback on Asterisk ([adhearsion/adhearsion#482](https://github.com/adhearsion/adhearsion/issues/482))
  * Bugfix: Handle a corner case crash where a recognition request is interrupted directly after a successful recognition has completed
  * Bugfix: Avoid cases where executing AGI commands (reported as sending SIP messages) might block indefinitely due to a race condition in fetching their response value

# [v2.5.2](https://github.com/adhearsion/punchblock/compare/v2.5.1...v2.5.2) - [2014-04-03](https://rubygems.org/gems/punchblock/versions/2.5.2)
  * Bugfix: No longer confound start and stop beeps on record commands (#220)

# [v2.5.1](https://github.com/adhearsion/punchblock/compare/v2.5.0...v2.5.1) - [2014-03-31](https://rubygems.org/gems/punchblock/versions/2.5.1)
  * Bugfix: Ensure DTMF recognisers get shut down when finishing
  * Bugfix: Hangup reason on Asterisk was `:hangup`, should be `:hungup`. See [the Rayo spec](http://xmpp.org/extensions/xep-0327.html#def-end-reason).

# [v2.5.0](https://github.com/adhearsion/punchblock/compare/v2.4.2...v2.5.0) - [2014-03-05](https://rubygems.org/gems/punchblock/versions/2.5.0)
  * Feature: Support language, sensitivity and minimum confidence on UniMRCP-based ASR on Asterisk
  * Feature: Support sending messages to calls (eg SIP MESSAGE) on Asterisk

# [v2.4.2](https://github.com/adhearsion/punchblock/compare/v2.4.0...v2.4.2) - [2014-03-04](https://rubygems.org/gems/punchblock/versions/2.4.2)
  * Bugfix: Rayo events should not include their timestamp in comparison. This is not useful in applications, and makes testing more difficult.

Note: 2.4.1 was not released due to a tagging mishap. Its contents was released as 2.4.2.

# [v2.4.0](https://github.com/adhearsion/punchblock/compare/v2.3.1...v2.4.0) - [2014-03-01](https://rubygems.org/gems/punchblock/versions/2.4.0)
  * Feature: Add support for requesting calls with a specific URI
  * Feature: Allow generation of a random call URI for a client
  * Feature: Rayo events should be timestamped with dispatch or receipt time (#213)

# [v2.3.1](https://github.com/adhearsion/punchblock/compare/v2.3.0...v2.3.1) - [2014-02-13](https://rubygems.org/gems/punchblock/versions/2.3.1)
  * Bugfix: Ensure commands can be associated on the wire even before they're executed
  * Bugfix: Ensure a command is always transitioned to is requested state prior to receiving a response

# [v2.3.0](https://github.com/adhearsion/punchblock/compare/v2.2.2...v2.3.0) - [2014-01-30](https://rubygems.org/gems/punchblock/versions/2.3.0)
  * Feature: Add input-timers-started event
  * Feature: Allow client to send XMPP messages through Blather
  * Bugfix: Ensure that max duration expiration of Asterisk recordings does not crash the translator when it extends past the call's destruction

# [v2.2.2](https://github.com/adhearsion/punchblock/compare/v2.2.1...v2.2.2) - [2014-01-21](https://rubygems.org/gems/punchblock/versions/2.2.2)
  * Bugfix: Delay sending Answered event on call until AsyncAGI is invoked

# [v2.2.1](https://github.com/adhearsion/punchblock/compare/v2.2.0...v2.2.1) - [2014-01-17](https://rubygems.org/gems/punchblock/versions/2.2.1)
  * Bugfix: `Punchblock::Event::Complete::Reason` is now a `Punchblock::Event`

# [v2.2.0](https://github.com/adhearsion/punchblock/compare/v2.1.1...v2.2.0) - [2014-01-15](https://rubygems.org/gems/punchblock/versions/2.2.0)
  * Feature: Support Rayo CPA and Fax specifications
  * Feature: Implement a simple filter for AMI events -> Rayo events in `Punchblock::Translator::Asterisk.event_filter=`
  * Feature: Output on Asterisk supports a new `:native_or_unimrcp` renderer which allows for fallback of output rendering from Asterisk native when possible, to a TTS engine when it's not.
  * Feature: Support output `repeat-times` on Asterisk.
  * Bugfix: Remove per-call/component actors from Asterisk translator for performance/stability super-charge

# [v2.1.1](https://github.com/adhearsion/punchblock/compare/v2.1.0...v2.1.1) - [2013-12-19](https://rubygems.org/gems/punchblock/versions/2.1.1)
  * Bugfix: Allow sending string SSML docs via Rayo
  * Bugfix: Ensure that joined calls on Asterisk do not have implicitly linked lifecycles. Previously, joinees would be hungup when the joiner exited the bridge.

# [v2.1.0](https://github.com/adhearsion/punchblock/compare/v2.0.2...v2.1.0) - [2013-11-12](https://rubygems.org/gems/punchblock/versions/2.1.0)
  * Feature: Support RubySpeech builtin grammars on Asterisk and FreeSWITCH
  * Update: Update to stable release of Virtus

# [v2.0.2](https://github.com/adhearsion/punchblock/compare/v2.0.1...v2.0.2) - [2013-10-17](https://rubygems.org/gems/punchblock/versions/2.0.2)
  * Bugfix: Reject commands against components which have finished on Asterisk, and garbage collect them
  * Bugfix: Register/lookup components by their full URI rather than component ID since the component ID may only be unique per call
  * Bugfix: Hold back Virtus dependency to avoid API-breaking changes

# [v2.0.1](https://github.com/adhearsion/punchblock/compare/v2.0.0...v2.0.1) - [2013-09-17](https://rubygems.org/gems/punchblock/versions/2.0.1)
  * Bugfix: Allow audio file URIs with file extensions on Asterisk
  * Bugfix: Input timers were being started before output finished on Asterisk composed prompts
  * Bugfix: Input initial timers were being started on Asterisk composed prompts even if the prompt was barged
  * Bugfix: Output was being interrupted on Asterisk composed prompts at every DTMF keypress, even if the output was already finished

# [v2.0.0](https://github.com/adhearsion/punchblock/compare/v1.9.4...v2.0.0) - [2013-08-29](https://rubygems.org/gems/punchblock/versions/2.0.0)
  * Feature: Compliance with v0.2 of the published Rayo spec (http://xmpp.org/extensions/xep-0327.html)
  * Feature: Add support for Rayo Prompt component
  * Feature: Added FS support for initial timeout and final timeout on Record
  * Change: Models are now plain ruby objects, not XML nodes, and are imported from/exported to XML when necessary for communicating over XMPP.
  * Change: `#headers` and AMI `#attributes` now do not have their names modified. A header of `'Call-ID'` will no longer be modified to `:call_id`.
  * Change: AMI Events/Actions now have `#headers(=)` rather than `#attributes(=)`
  * Change: Remove event queue
  * Change: Removed `media_engine` and `default_voice` settings
  * Bugfix: Reconnect dead Asterisk streams correctly
  * Bugfix: Include AMI response text_body in AMI component complete events
  * Bugfix: Avoid crashing translators (Asterisk or FreeSWITCH) by instructing them to call back to terminated Call objects
  * Bugfix: Detect MRCPSynth failure in output component
  * Bugfix: Handle AMI errors indicating dead channels correctly

# [v1.9.4](https://github.com/adhearsion/punchblock/compare/v1.9.3...v1.9.4) - [2013-06-08](https://rubygems.org/gems/punchblock/versions/1.9.4)
  * Bugfix: Finish more setup before sending output ref on Asterisk
  * Bugfix: Allow early media TTS on Asterisk in addition to audio playback
  * Bugfix: Correctly mark Asterisk calls as answered after successfully executing an answer command

# [v1.9.3](https://github.com/adhearsion/punchblock/compare/v1.9.2...v1.9.3) - [2013-05-16](https://rubygems.org/gems/punchblock/versions/1.9.3)
  * Bugfix: Improve error messages when trying to execute stop commands on components in an invalid state

# [v1.9.2](https://github.com/adhearsion/punchblock/compare/v1.9.1...v1.9.2) - [2013-05-10](https://rubygems.org/gems/punchblock/versions/1.9.2)
  * Bugfix: We were raising an exception on connection shutdown due to waiting for the connection to end incorrectly.
  * Bugfix/Perf: FreeSWITCH Call actors were being kept alive after hangup for no reason
  * Bugfix/Perf: FreeSWITCH component complete events were looping out of the actor
  * Perf: We were wasting CPU cycles listening to all ES events when we really don't need to

# [v1.9.1](https://github.com/adhearsion/punchblock/compare/v1.9.0...v1.9.1) - [2013-05-08](https://rubygems.org/gems/punchblock/versions/1.9.1)
  * Bugfix: AMI errors indicating dead channels were not being handled correctly
  * Bugfix: We were broken on Celluloid 0.14 due to changes in block execution semantics between actors

# [v1.9.0](https://github.com/adhearsion/punchblock/compare/v1.8.2...v1.9.0) - [2013-05-03](https://rubygems.org/gems/punchblock/versions/1.9.0)
  * Feature: Use RubyAMI 2.0 with a single AMI connection.
  * Feature: Cache channel variables on Asterisk calls.
  * Feature: Allow optional sending of end event when breaking from AsyncAGI on Asterisk. This enables dialplan handback. Only triggers if the channel variable 'PUNCHBLOCK_END_ON_ASYNCAGI_BREAK' is set.
  * Bugfix: Avoid DTMF recognizer failures and race conditions by bringing DTMFRecognizer back into the Input component actor.
  * Bugfix: Catch Asterisk AMI errors in all cases and fail accordingly, instead of ploughing ahead in the face of adversity.
  * Bugfix: Improve performance of Asterisk implementation by no longer spinning up a component actor for AGI command execution.

# [v1.8.2](https://github.com/adhearsion/punchblock/compare/v1.8.1...v1.8.2) - [2013-04-19](https://rubygems.org/gems/punchblock/versions/1.8.2)
  * Bugfix: Input initial timeout was being set as a float rather than an integer

# [v1.8.2](https://github.com/adhearsion/punchblock/compare/v1.8.1...v1.8.2) - [2013-04-19](https://rubygems.org/gems/punchblock/versions/1.8.2)
  * Bugfix: Input initial timeout was being set as a float rather than an integer

# [v1.8.1](https://github.com/adhearsion/punchblock/compare/v1.8.0...v1.8.1) - [2013-03-25](https://rubygems.org/gems/punchblock/versions/1.8.1)
  * Bugfix: FreeSWITCH was requiring a from attribute on a dial command
  * Bugfix: Asterisk translator now properly checks for existence of the recordings directory
  * Bugfix: Components should transition state before unblocking
  * Bugfix: Asterisk joins are now more robustly responded to when the join begins
  * Bugfix: On FreeSWITCH, only events relating to bridge start/end should be delivered to bridged calls
  * Bugfix: On FreeSWITCH, a voice value on an audio-only output component should not prevent execution
  * Bugfix: XMPP Ping should be an IQ get, not set
  * Bugfix: Stop command should be in Rayo ext namespace
  * Bugfix: XMPP specs were mistakenly resetting the logger object for other tests.
  * CS: Avoid Celluloid deprecation warnings

# [v1.8.0](https://github.com/adhearsion/punchblock/compare/v1.7.1...v1.8.0) - [2013-01-10](https://rubygems.org/gems/punchblock/versions/1.8.0)
  * Feature: Join command now enforces a list of valid direction attribute values
  * Feature: Added support for media direction to the Record component
  * Feature: Record direction support on FS
  * Bugfix: Fixed answering during early media on FS
  * Bugfix: Doing multiple recordings on Asterisk during the lifetime of a call was crashing Punchblock

# [v1.7.1](https://github.com/adhearsion/punchblock/compare/v1.7.0...v1.7.1) - [2012-12-17](https://rubygems.org/gems/punchblock/versions/1.7.1)
  * Bugfix: Deal with nil media engines on FS/* properly

# [v1.7.0](https://github.com/adhearsion/punchblock/compare/v1.6.1...v1.7.0) - [2012-12-13](https://rubygems.org/gems/punchblock/versions/1.7.0)
  * Feature: Support for the renderer attribute added to the Output component.
  * Feature: FreeSWITCH and Asterisk translators now use the :renderer attribute on Output
  * Bugfix: Fixed scenario where executing the ANSWER application on FreeSWITCH on an already answered call caused FS to stop accepting commands.
  * Bugfix: Plug a severe memory leak
  * Bugfix: Raise an error immediately if trying to execute an invalid media engine on Asterisk
  * Bugfix: Handle a wider variety of types when configuring media engines on Asterisk and FreeSWITCH, such as Strings instead of Symbols

# [v1.6.1](https://github.com/adhearsion/punchblock/compare/v1.6.0...v1.6.1) - [2012-11-14](https://rubygems.org/gems/punchblock/versions/1.6.1)
  * Bugfix: Safer component attribute writer conversion

# [v1.6.0](https://github.com/adhearsion/punchblock/compare/v1.5.3...v1.6.0) - [2012-11-14](https://rubygems.org/gems/punchblock/versions/1.6.0)
  * Feature: Set dial headers on FreeSWITCH originate command (SIP only)
  * Feature: Set dial headers on Asterisk originate command (SIP only)
  * Bugfix: Headers were being re-written downcased and with underscores
  * Bugfix: Ensure all numeric component attributes are written as the correct type

# [v1.5.3](https://github.com/adhearsion/punchblock/compare/v1.5.2...v1.5.3) - [2012-11-01](https://rubygems.org/gems/punchblock/versions/1.5.3)
  * Doc: Add link to docs for unrenderable doc error

# [v1.5.2](https://github.com/adhearsion/punchblock/compare/v1.5.1...v1.5.2) - [2012-10-25](https://rubygems.org/gems/punchblock/versions/1.5.2)
  * Bugfix: Use correct GRXML content type
  * Bugfix: Fix UniMRCP for documents containing commas
  * Bugfix: Bump Celluloid dependency to avoid issues with serialising AMI

# [v1.5.1](https://github.com/adhearsion/punchblock/compare/v1.5.0...v1.5.1) - [2012-10-11](https://rubygems.org/gems/punchblock/versions/1.5.1)
  * Update: Bump Celluloid dependency
  * Bugfix: Input grammars referenced by URL now no longer specify a content type
  * Bugfix: FreeSWITCH `Dial#from` values now parsed more flexibly

# [v1.5.0](https://github.com/adhearsion/punchblock/compare/v1.4.1...v1.5.0) - [2012-10-01](https://rubygems.org/gems/punchblock/versions/1.5.0)
  * Feature: Input component now supports grammar URLs
  * Bugfix: Hanging up Asterisk calls now correctly specifies normal clearing cause
  * Doc: Fix a bunch of API documentation

# [v1.4.1](https://github.com/adhearsion/punchblock/compare/v1.4.0...v1.4.1) - [2012-09-06](https://rubygems.org/gems/punchblock/versions/1.4.1)
  * Bugfix: Cleaning up DTMF handlers for input components with a dead call should not crash on FreeSWITCH
  * Bugfix: Reduced a race condition on FreeSWITCH when dispatching events from calls to dead components
  * Bugfix: Events relevant to bridged channels were not being routed to the call
  * Bugfix: Components using #stop_by_redirect now return an error response if stopped when they are complete
  * Bugfix: Hold back ruby_ami and ruby_fs dependencies pending fixes for Celluloid 0.12.0

# [v1.4.0](https://github.com/adhearsion/punchblock/compare/v1.3.0...v1.4.0) - [2012-08-07](https://rubygems.org/gems/punchblock/versions/1.4.0)
  * Feature: FreeSWITCH support (mostly complete, experimental, proceed with caution)
  * Bugfix: Report the correct caller ID in offers from Asterisk
  * Bugfix: Strip out caller ID name from dial commands on Asterisk

# [v1.3.0](https://github.com/adhearsion/punchblock/compare/v1.2.0...v1.3.0) - [2012-07-22](https://rubygems.org/gems/punchblock/versions/1.3.0)
  * Change: Asterisk output now uses Playback rather than STREAM FILE
  * Feature: The recordings dir is now checked for existence on startup, and logs an error if it is not there. Asterisk only.
  * Feature: Punchblock now logs an error if it was unable to add the redirect context on Asterisk on startup.
  * Feature: Output component now exposes #recording and #recording_uri for easy access to record results.
  * Feature: Early media support for Asterisk, using Progress to start an early media session
  * Feature: Output component on Asterisk now supports early media. If the line is not answered, it runs Progress followed by Playback with noanswer.
  * Feature: Record component on Asterisk now raises if called on an unanswered call
  * Feature: Input component on Asterisk works the same whether the call is answered or unanswered
  * Feature: AMI events are emitted to the relevant calls
  * Feature: Simpler method of getting hold of a new client/connection
  * Bugfix: AMI events are processed in order by the translator
  * Bugfix: Asterisk calls and components are removed from registries when they die
  * Bugfix: Commands for unknown calls/components respond with the correct `:item_not_found` name
  * Bugfix: AMI events relevant to a particular call are emitted by that call to the client
  * Bugfix: Asterisk calls send an error complete event for their dying components
  * Bugfix: Asterisk translator sends an error end event for its dying calls
  * Bugfix: Use the primitive version of AGI ANSWER, rather than an app
  * Bugfix: Outbound calls which never begin progress on Asterisk end with an error
  * Bugfix: Asterisk now responds correctly to unjoin commands
  * Bugfix: Allow nil reject reasons
  * Bugfix: Asterisk translator now does NOT answer the call automatically when Output, Input or Record are used.

# [v1.2.0](https://github.com/adhearsion/punchblock/compare/v1.1.0...v1.2.0) - [2012-04-29](https://rubygems.org/gems/punchblock/versions/1.2.0)
  * Feature: Basic support for record component on Asterisk, using MixMonitor. Currently unsupported options include: start_paused, initial_timeout, final_timeout. Hints are additionally not supported, and recordings are stored on the * machine's local filesystem.

# [v1.1.0](https://github.com/adhearsion/punchblock/compare/v1.0.0...v1.1.0) - [2012-04-26](https://rubygems.org/gems/punchblock/versions/1.1.0)
  * Feature: Implement Reject on Asterisk
  * Bugfix: No longer generate warnings
  * Bugfix: Set 'to' attribute on an offer from Asterisk to something useful if the dnid is 'unknown'
  * Bugfix: Include caller ID name in 'from' attribute on an offer from Asterisk
  * Bugfix: Removed media engine switching on Asterisk Input component - fixes broken input when using app_swift or unimrcp for output
  * Update: Better dependency version fixing

# [v1.0.0](https://github.com/adhearsion/punchblock/compare/v0.12.0...v1.0.0) - [2012-04-11](https://rubygems.org/gems/punchblock/versions/1.0.0)
  * Stable release :D
  * Bugfix: Any issue in compiling an output document into executable elements on Asterisk should return an unrenderable doc error

# [v0.12.0](https://github.com/adhearsion/punchblock/compare/v0.11.0...v0.12.0) - [2012-03-30](https://rubygems.org/gems/punchblock/versions/0.12.0)
  * API Change: `#call_id` and `#mixer_name` attributes changed to `#target_call_id` and `#target_mixer_name`
  * API Change: `#other_call_id` attributes changed to `#call_id` to better align with Rayo

# [v0.11.0](https://github.com/adhearsion/punchblock/compare/v0.10.0...v0.11.0) - [2012-03-29](https://rubygems.org/gems/punchblock/versions/0.11.0)
  * Feature: Input & Output components on Asterisk now responds to a Stop command
  * Feature: started/stopped-speaking events are now handled
  * Bugfix: Asterisk output component considers an SSML doc w/ a string node w/o spaces to be a filename
  * Bugfix: `ProtocolError` should behave like a normal exception, just with extra attributes

# [v0.10.0](https://github.com/adhearsion/punchblock/compare/v0.9.2...v0.10.0) - [2012-03-19](https://rubygems.org/gems/punchblock/versions/0.10.0)
  * Feature: app_swift is now supported on Asterisk with a media_engine type of :swift
  * Feature: Asterisk calls now support the Join API
  * Feature: On Asterisk, Punchblock creates a context and extension to redirect calls to
  * Bugfix: Unjoining calls now redirects both legs
  * Bugfix: Unlink events on Asterisk correctly send Unjoin Punchblock events
  * Bugfix: The Asterisk translator now ignores calls to 'h' or of type 'Kill'
  * Bugfix: Handle more XMPP connection errors gracefully
  * Bugfix: The XMPP connection ready event is now available to external handlers
  * Bugfix: The Asterisk connection now passes the `:media_engine` option down to the translator
  * Bugfix: Connections now always respond to `#connected?`
  * Bugfix: Connection termination handled gracefully on Asterisk

# [v0.9.2](https://github.com/adhearsion/punchblock/compare/v0.9.1...v0.9.2) - [2012-02-18](https://rubygems.org/gems/punchblock/versions/0.9.2)
  * Feature: Asterisk calls receiving media commands are implicitly answered
  * Bugfix: Unrenderable output documents on Asterisk should return a sensible error
  * Bugfix: Log the target of commands correctly
  * Bugfix: Do not wrap exceptions in ProtocolError

# [v0.9.1](https://github.com/adhearsion/punchblock/compare/v0.9.0...v0.9.1) - [2012-01-30](https://rubygems.org/gems/punchblock/versions/0.9.1)
  * Bugfix: Closing an disconnected XMPP connection is a no-op

# [v0.9.0](https://github.com/adhearsion/punchblock/compare/v0.8.4...v0.9.0) - [2012-01-30](https://rubygems.org/gems/punchblock/versions/0.9.0)
  * Bugfix: Remove the rest of the deprecated Tropo components (conference)
  * Feature: Outbound dials on Asterisk now respect the dial timeout
  * Bugfix: Registering stanza handlers on an XMPP connection now sets them in the correct order such that they do not override the internally defined handlers

# [v0.8.4](https://github.com/adhearsion/punchblock/compare/v0.8.3...v0.8.4) - [2012-01-19](https://rubygems.org/gems/punchblock/versions/0.8.4)
  * Bugfix: End, Ringing & Answered events are allowed to have headers
  * Feature: Dial commands may have an optional timeout

# [v0.8.3](https://github.com/adhearsion/punchblock/compare/v0.8.2...v0.8.3) - [2012-01-17](https://rubygems.org/gems/punchblock/versions/0.8.3)
  * Feature: Return an error when trying to execute a command for unknown calls/components or when not understood
  * Feature: Log calls/translator shutting down
  * Feature: Calls and components should log their IDs
  * Feature: Components marked as internal should send events directly to the component node
  * Bugfix: Fix Asterisk Call and Component logger IDs
  * Bugfix: Fix a stupidly high log level
  * Bugfix: AGI commands executed by a call/component that are a translation of a Rayo command should be marked internal
  * Bugfix: Asterisk components should sent events via the connection
  * Bugfix: Shutting down an asterisk connection should do a cascading shutdown of the translator and all of its calls
  * Bugfix: Component actors should be terminated once they've sent a complete event
  * Bugfix: Component events should be sent with the call ID
  * Bugfix: AMIAction components do not have a call
  * Bugfix: Add test coverage for comparison of complete events
  * Bugfix: A call being hung up should terminate the call actor
  * Bugfix: Fix a mock expectation error in a test

# [v0.8.2](https://github.com/adhearsion/punchblock/compare/v0.8.1...v0.8.2) - [2012-01-10](https://rubygems.org/gems/punchblock/versions/0.8.2)
  * Feature: Support outbound dial on Asterisk
  * Bugfix: Asterisk hangup causes should map to correct Rayo End reason

# [v0.8.1](https://github.com/adhearsion/punchblock/compare/v0.8.0...v0.8.1) - [2012-01-09](https://rubygems.org/gems/punchblock/versions/0.8.1)
  * Feature: Support DTMF Input components on Asterisk

# [v0.8.0](https://github.com/adhearsion/punchblock/compare/v0.7.2...v0.8.0) - [2012-01-06](https://rubygems.org/gems/punchblock/versions/0.8.0)
  * Feature: Expose Blather's connection timeout config when creating a Connection::XMPP
  * Bugfix: Remove some deprecated Tropo extension components
  * Bugfix: Remove reconnection logic since it really belongs in the consumer
  * Feature: Raise a DisconnectedError when a disconnection is detected

# [v0.7.2](https://github.com/adhearsion/punchblock/compare/v0.7.1...v0.7.2) - [2011-12-28](https://rubygems.org/gems/punchblock/versions/0.7.2)
  * Feature: Allow sending commands to mixers easily
  * Feature: Allow configuration of Rayo XMPP domains (root, call and mixer)
  * Feature: Log Blather messages to the trace log level
  * Feature: Return an error when trying to execute an Output on Asterisk with unsupported options set
  * Feature: Add basic support for media output via MRCPSynth on Asterisk
  * API change: Rename mixer_id to mixer_name to align with change to Rayo
  * Bugfix: Handle and expose RubySpeech GRXML documents on Input/Ask properly
  * Bugfix: Compare ProtocolErrors correctly
  * Bugfix: Asterisk media output should default to Asterisk native output (STREAM FILE)
  * Bugfix: An Output node's default max_time value should be nil rather than zero

# [v0.7.1](https://github.com/adhearsion/punchblock/compare/v0.7.0...v0.7.1) - [2011-11-24](https://rubygems.org/gems/punchblock/versions/0.7.1)
  * [FEATURE] Add `Connection#not_ready!`, to instruct the server not to send any more offers.
  * [BUGFIX] Translate all exceptions raised by the XMPP connection into a ProtocolError
  * [UPDATE] Blather dependency to >= 0.5.9

# [v0.7.0](https://github.com/adhearsion/punchblock/compare/v0.6.2...v0.7.0) - [2011-11-22](https://rubygems.org/gems/punchblock/versions/0.7.0)
  * Bugfix: Some spec mistakes
  * Feature: Allow execution of actions against global components on Asterisk
  * API change: The console has been removed
  * API change: Components no longer expose a FutureResource at #complete_event, and instead wrap its API in the same way as #response and #response=. Any consumer code which does some_component.complete_event.resource or some_component.complete_event.resource= should now use some_component.complete_event and some_component.complete_event=
  * Feature: Added the max-silence attribute to the Input component
  * Bugfix: Bump the Celluloid dependency to avoid spec failures on JRuby and monkey-patching for mockability
  * API change: Event handlers registered on components are no longer triggered by incoming events internally to Punchblock. These events must be consumed via a Client's event handlers or event queue and manually triggered on a component using ComponentNode#trigger_event_handler

# [v0.6.2](https://github.com/adhearsion/punchblock/compare/v0.6.1...v0.6.2)
  # Feature: Added basic support for running Punchblock apps on Asterisk. Calls coming in to AsyncAGI result in the client receiving an Offer, hangup events are sent, and accept/answer/hangup commands work.
  # API change: The logger is now set using Punchblock.logger= rather than as a hash key to Connection.new

# [v0.6.1](https://github.com/adhearsion/punchblock/compare/v0.6.0...v0.6.1)
  * Feature: Allow instructing the connection we are ready. An XMPP connection will send initial presence with a status of 'chat' to the rayo domain
  * Bugfix: When running on Asterisk, two FullyBooted events will now trigger a connected event
  * Bugfix: No longer ignore offers from the specified rayo domain on XMPP connections
  * Feature: Tag all event objects with the XMPP domain they came from

# [v0.6.0](https://github.com/adhearsion/punchblock/compare/v0.5.1...v0.6.0)
  * API change: Punchblock consumers now need to instantiate both a Connection and a Client (see the punchblock-console gem for an example)
  * Feature: Added a Connection for Asterisk, utilising RubyAMI to open an AMI connection to Asterisk, and allowing AMI actions to be executed. AMI events are handled by the client event handler.
  * Deprecation: The punchblock-console and the associated DSL are now deprecated and the punchblock-console gem should be used instead

# [v0.5.1](https://github.com/adhearsion/punchblock/compare/v0.5.0...v0.5.1)
  API change: Connections now raise a Punchblock::Connection::Connected instance as an event, rather than the class itself

# [v0.5.0](https://github.com/adhearsion/punchblock/compare/v0.4.3...v0.5.0)
  * Refactoring/API change: Client and connection level concerns are now separated, and one must create a Connection to be passed to a Client on creation. Client now has the choice between an event queue and guarded event handlers.

# [v0.4.3](https://github.com/adhearsion/punchblock/compare/v0.4.2...v0.4.3)
  * Feature: Support for meta-data on recordings (size & duration)
  * Feature: Allow specifying all of Blather's setup options (required to use PB as an XMPP component)
  * Bugfix: Rayo events are discarded if they don't come from the specified domain
  * Bugfix: Component execution in the sample DSL now doesn't expect events on the main queue

# [v0.4.2](https://github.com/adhearsion/punchblock/compare/v0.4.1...v0.4.2)
  * Bugfix: Conference complete event was not being handled

# [v0.4.1](https://github.com/adhearsion/punchblock/compare/v0.4.0...v0.4.1)
  * Feature/API change: Components no longer have an event queue, but instead it is possible to define guarded event handlers via #register_event_handler

# v0.4.0
  * First public release