[asterisk-dev] [Code Review] Add replacement for SIP_CAUSE

opticron reviewboard at asterisk.org
Tue Mar 20 10:43:37 CDT 2012


-----------------------------------------------------------
This is an automatically generated e-mail. To reply, visit:
https://reviewboard.asterisk.org/r/1822/
-----------------------------------------------------------

(Updated March 20, 2012, 10:43 a.m.)


Review request for Asterisk Developers.


Changes
-------

Added dialplan example for those unfamiliar with SIP_CAUSE.


Summary (updated)
-------

Add PVT_CAUSE as a drop-in replacement for SIP_CAUSE that does not incur the overhead of the MASTER_CHANNEL dialplan function.  This feature uses control frames to pass the data and creates a mechanism by which any channel driver can report cause information.  This implementation includes only SIP, but implementations for other channel drivers will be available in the next month.


This addresses bug SWP-4221.
    https://issues.asterisk.org/jira/browse/SWP-4221


Diffs
-----

  trunk/apps/app_dial.c 359891 
  trunk/channels/chan_sip.c 359891 
  trunk/include/asterisk/frame.h 359891 
  trunk/main/channel.c 359891 
  trunk/main/features.c 359891 

Diff: https://reviewboard.asterisk.org/r/1822/diff


Testing (updated)
-------

Verified that this functions identically to SIP_CAUSE in single-channel dials, forked dials, and forked dials behind a local dial.

Sample dialplan:
[foo]
exten => s,1,Dial(SIP/bar)
 
exten => h,1,noop()
exten => h,n,set(PVT_CAUSE_STRING=${HASHKEYS(PVT_CAUSE)})
; start loop
exten => h,n(pvt_begin),noop()
 
; check exit condition (no more array to check)
exten => h,n,gotoif($[${LEN(${PVT_CAUSE_STRING})} = 0]?pvt_exit)
 
; pull the next item
exten => h,n,set(ARRAY(item)=${PVT_CAUSE_STRING})
exten => h,n,set(PVT_CAUSE_STRING=${PVT_CAUSE_STRING:${LEN(${item})}})
 
; display the channel ID and cause code
exten => h,n,noop(got channel ID ${item} with pvt cause ${HASH(PVT_CAUSE,${item})})
 
; check exit condition (no more array to check)
exten => h,n,gotoif($[${LEN(${PVT_CAUSE_STRING})} = 0]?pvt_exit)
 
; we still have entries to process, so strip the leading comma
exten => h,n,set(PVT_CAUSE_STRING=${PVT_CAUSE_STRING:1})
; go back to the beginning of the loop
exten => h,n,goto(pvt_begin)
exten => h,n(pvt_exit),noop(All PVT_CAUSE entries processed)


Thanks,

opticron

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.digium.com/pipermail/asterisk-dev/attachments/20120320/33ce6bcb/attachment.htm>


More information about the asterisk-dev mailing list