Summary:ASTERISK-21453: New SIP Channel Driver - Implement CCSS
Reporter:Matt Jordan (mjordan)Labels:Asterisk12 NewSIP
Date Opened:2013-04-16 11:49:15Date Closed:
Versions:Frequency of
must be completed before resolvingASTERISK-27309 Feature Parity with chan_sip
is duplicated byASTERISK-27311 Call Completion Supplementary Services (CCSS) Support
is related toASTERISK-21452 New SIP Channel Driver - Create Event State Compistor resource module and implement Publish API
Description:Inclusion of Call Completion Supplementary Services requires the Publication APIs drafted on the Asterisk wiki. See [Event Subscription and Publication Design page|https://wiki.asterisk.org/wiki/display/AST/Event+Subscription+and+Publication+Design] and ASTERISK-21452 for more information.

This task is to add CCSS support for {{chan_gulp}}. This should include all of the CCSS types supported by Asterisk - Call Completion Busy Subscriber (CCBS), Call Completion No Response (CCNR), and Call Completion Not Logged In (CCNL).

CCSS was implemented relatively recently in {{chan_sip}} (Asterisk 1.8) and much of it can be ported over to {{chan_gulp}}. The primary points of change will be the interaction with the SIP stack - however, the interaction with the CCSS core should be able to be used relatively unchanged.

At a minimum, this entails:

* Create a new resource module that registers itself as an Event Publication Agent for events "call-completion", media-type "application/call-completion".
* Add the ability to send SIP NOTIFY requests with the appropriate event package for CCSS
* Register the module as a call completion agent via {{ast_cc_agent_register}}.
** During an {{init}} callback, register the channel as a channel that is attempting call completion.
** During a {{start_offer_timer}} callback, schedule a callback that will automatically fail the call completion if fired.
** During a {{stop_offer_timer}} callback, cancel the scheduled callback created in {{start_offer_timer}}
** During a {{respond}} callback, respond with either a 200 OK to the pending request or an appropriate error code. This should also send a SIP NOTIFY request containing the CCSS event package.
** During a {{status_request}} callback, convert the agent's status to a device state and return the appropriate value.
** During a {{start_monitoring}} callback, punt.
** During a {{callee_available}} callback,
* Register the module to monitor call completion via {{sip_cc_monitor_callbacks}}.
** In a {{request_cc}} callback, create a new SUBSCRIBE request for the specified URI. This *must* schedule a callback for {{ast_cc_available_timer_expire}}.
** In a {{suspend}} callback, PUBLISH a CC event as 'closed'
** In an {{unsuspend}} callback, PUBLISH a CC event as 'open'
** In a {{cancel_available_timer}} callback, cancel the monitoring. This should cancel the subscription for {{ast_cc_available_timer_expire}}.
* Add checks for CCNR when we get a 18x response to a SIP INVITE
* Add checks for CCBS when we get a 486, 600, or 603 response to a SIP INVITE