<html>
<head>
    <base href="https://wiki.asterisk.org/wiki">
            <link rel="stylesheet" href="/wiki/s/en/2176/25/9/_/styles/combined.css?spaceKey=AST&amp;forWysiwyg=true" type="text/css">
    </head>
<body style="background: white;" bgcolor="white" class="email-body">
<div id="pageContent">
<div id="notificationFormat">
<div class="wiki-content">
<div class="email">
    <h2><a href="https://wiki.asterisk.org/wiki/display/AST/AstriDevCon+2012">AstriDevCon 2012</a></h2>
    <h4>Page <b>edited</b> by             <a href="https://wiki.asterisk.org/wiki/display/~mjordan">Matt Jordan</a>
    </h4>
        <br/>
                         <h4>Changes (1)</h4>
                                 
    
<div id="page-diffs">
                    <table class="diff" cellpadding="0" cellspacing="0">
    
            <tr><td class="diff-snipped" >...<br></td></tr>
            <tr><td class="diff-unchanged" >* Max Schroeder: Starface <br>* Octavio Luna: <br></td></tr>
            <tr><td class="diff-changed-lines" >* Alec Davis: <span class="diff-added-words"style="background-color: #dfd;">Black Diamond Technologies Ltd.</span> <br></td></tr>
            <tr><td class="diff-unchanged" >* Corey McFadden: Voneto <br>* Joshua Colp: Digium <br></td></tr>
            <tr><td class="diff-snipped" >...<br></td></tr>
    
            </table>
    </div>                            <h4>Full Content</h4>
                    <div class="notificationGreySide">
        <div>
<ul>
    <li><a href='#AstriDevCon2012-Introduction'>Introduction</a></li>
    <li><a href='#AstriDevCon2012-Participants'>Participants</a></li>
<ul>
    <li><a href='#AstriDevCon2012-Developers%2FContributorsPresent'>Developers/Contributors Present</a></li>
    <li><a href='#AstriDevCon2012-DevelopersParticipatingvia%23astridevcon'>Developers Participating via #astridevcon</a></li>
</ul>
    <li><a href='#AstriDevCon2012-Agenda'>Agenda</a></li>
    <li><a href='#AstriDevCon2012-Notes'>Notes</a></li>
<ul>
    <li><a href='#AstriDevCon2012-Policies'>Policies</a></li>
    <li><a href='#AstriDevCon2012-ChannelDrivers'>Channel Drivers</a></li>
    <li><a href='#AstriDevCon2012-Core'>Core</a></li>
    <li><a href='#AstriDevCon2012-APIs'>APIs</a></li>
    <li><a href='#AstriDevCon2012-Review'>Review</a></li>
<ul>
    <li><a href='#AstriDevCon2012-AstriDevCon2011ProjectsAST%3AAstriDevCon2011'> AstriDevCon 2011 Projects</a></li>
    <li><a href='#AstriDevCon2012-ProjectsDiscussed'>Projects Discussed</a></li>
</ul>
</ul>
    <li><a href='#AstriDevCon2012-AgreedUponGoals'>Agreed Upon Goals</a></li>
</ul></div>

<h1><a name="AstriDevCon2012-Introduction"></a>Introduction</h1>

<p>AstriDevCon 2012 was held on Monday, October 22nd. It was held on the day prior to AstriCon at the same location. A group of active development community members met and discussed a number of topics.</p>

<p>Much thanks to Jared Smith and BlueHost for sponsoring the event!</p>

<h1><a name="AstriDevCon2012-Participants"></a>Participants</h1>

<div class='panelMacro'><table class='noteMacro'><colgroup><col width='24'><col></colgroup><tr><td valign='top'><img src="/wiki/images/icons/emoticons/warning.gif" width="16" height="16" align="absmiddle" alt="" border="0"></td><td>Unfortunately, my list of developers present got eaten by the cleaning crew (through no fault of their own, that's what I get for leaving it behind in a stack of scribbled papers!)  If I miss your name and/or company on here, let me know and I'll be sure to correct the list below.  &#8211; Matt</td></tr></table></div>

<h2><a name="AstriDevCon2012-Developers%2FContributorsPresent"></a>Developers/Contributors Present</h2>

<ul>
        <li>Rusty Newton: Digium</li>
        <li>Matt Jordan: Digium</li>
        <li>Paul Belanger: PolyBeacon</li>
        <li>Leif Madsen: CoreDial</li>
        <li>Jared Smith: BlueHost</li>
        <li>Nicolas Bouliane: Avencall</li>
        <li>Mark Murawski: Intellasoft</li>
        <li>Sylvain Bolly: Avencall</li>
        <li>Xavier Carcelle: Avencall</li>
        <li>Nir Simionovich: Greenfield Technologies</li>
        <li>Eric Klein: Greenfield Technologies</li>
        <li>David Faulk: Digium</li>
        <li>Max Schroeder: Starface</li>
        <li>Octavio Luna:</li>
        <li>Alec Davis: Black Diamond Technologies Ltd.</li>
        <li>Corey McFadden: Voneto</li>
        <li>Joshua Colp: Digium</li>
        <li>Shaun Ruffell: Digium</li>
        <li>Jason Parker: Digium</li>
        <li>Matthew Frederickson: Digium</li>
        <li>Malcolm Davenport: Digium</li>
        <li>Steve Sokol: Digium</li>
        <li>Michael Spiceland: Digium</li>
        <li>David Lee: Digium</li>
        <li>Kinsey Moore: Digium</li>
        <li>Mark Michelson: Digium</li>
        <li>Bryan Johns: Digium</li>
        <li>Sean McCord: Ulexus</li>
        <li>BJ Weschke: BTWTech</li>
        <li>Clod Patry: ConnectIT Networks</li>
        <li>Tim Panton: Voxeo Labs</li>
        <li>James Body: Truphone</li>
</ul>


<h2><a name="AstriDevCon2012-DevelopersParticipatingvia%23astridevcon"></a>Developers Participating via #astridevcon</h2>

<ul>
        <li>Tzafrir Cohen: Xorcom</li>
        <li>Ben Klang: Mojo Lingo/Adhearsion</li>
        <li>Ben Langfeld: Adhearsion</li>
</ul>


<h1><a name="AstriDevCon2012-Agenda"></a>Agenda</h1>

<p>After introductions, an agenda, consisting of topic areas and specific items, was developed and agreed upon.  In order to ensure that all topics had some discussion, each of the major topics was limited to an agreed upon amount of time.  The following broad areas were discussed:</p>
<ul>
        <li>Policies (1 hour)</li>
        <li>Channel Drivers (2 hours)</li>
        <li>Core (1 hour)</li>
        <li>APIs (1 hour)</li>
        <li>Review of past work and existing work (1 hour)</li>
</ul>


<h1><a name="AstriDevCon2012-Notes"></a>Notes</h1>

<p>Please remember that these notes merely represent the items that were discussed, and, by themselves, do not constitute policies or project proposals.</p>

<h2><a name="AstriDevCon2012-Policies"></a>Policies</h2>

<ul>
        <li>Release Branches - what is an allowed patch in a release branch.  Historically, we've had the policy that no new features should be allowed in release branches - should we revisit that decision?  Pros and cons were discussed.  The general consensus reached was that this should not be changed.
        <ul>
                <li>We discovered that this policy was never written down in a clear, concise way.  <b>Action to take: We need to craft a written policy for no new features in Release Branches and make it available on the Asterisk wiki.</b>
                <ul>
                        <li>We tried to find situations in which it might be possible to have a new feature included in a release branch.  The only way it would be reasonable is if it did not, in any way, impact existing code.  That would imply that the new feature would have to exist in a stand alone module, and be disabled by default.</li>
                </ul>
                </li>
        </ul>
        </li>
        <li>Git - should we moved to Git?  There are a few reasons why a move to Git would be advantageous for the Asterisk project:
        <ol>
                <li>Easier merge paths between branches (which will get more complicated with the EOL of Asterisk 10 in December)</li>
                <li>Potential process improvements that would allow verified code to be merged quicker into branches/trunk</li>
        </ol>
        <ul>
                <li>Asterisk is a large project to move to Git.  It may be better to start with DAHDI (they really already use it extensively, and Subversion is a formality) or the Asterisk Test Suite (smaller project, one branch, fewer users)</li>
                <li>One of the complications of moving Asterisk to Git is menuselect.  Since no other projects (we think) use menuselect at this time, we should move menuselect into Asterisk (barring any technical barriers that arise)</li>
        </ul>
        </li>
        <li>Other Development Tools
        <ul>
                <li>Review Board/Code Reviews
                <ul>
                        <li>Someone asked "what allows a Ship It?"  While there isn't a 'definition' for what constitutes acceptable code, there are some guidelines that reviewers should follow when performing a code review, as well as actions that submitters can take to help code receive a 'Ship It'.  <b>Action to take: document a check-list for reviewers</b>.  Some areas discussed included:
                        <ul>
                                <li>The higher the complexity, the more likely the need for automated testing or some other verification that the code is well tested.  This can include several other items, that may be part of the same review or separate reviews:
                                <ul>
                                        <li>Unit Testing via the Asterisk Unit Test Framework</li>
                                        <li>Asterisk Test Suite tests</li>
                                </ul>
                                </li>
                                <li>The code needs to satisfy requirements for merging:
                                <ul>
                                        <li>The code must follow the coding guidelines</li>
                                        <li>The code should be well documented, and - if the item is a new feature or alters existing behavior - it should have sufficient documentation.  This includes:
                                        <ul>
                                                <li>New config options in the sample config</li>
                                                <li>Doxygen comments</li>
                                                <li>Wiki docs for usage (if a new feature)</li>
                                        </ul>
                                        </li>
                                </ul>
                                </li>
                        </ul>
                        </li>
                        <li>In general, submitters should wait 24hr for others to review after receiving a 'Ship It'.  Not everyone lives in the same time zone!
                        <ul>
                                <li>If, for whatever reason, the patch has some time constraint and has to be merged sooner than 24 hours later, it should receive at least 2 ship its.  This may only cover a hypothetical scenario, and may not need to be part of any written guideline.</li>
                        </ul>
                        </li>
                </ul>
                </li>
        </ul>
        </li>
        <li>Feature branches - may be nice to have a page on the wiki for 'team branches' of features not merged for a particular version.  This will let the Asterisk Test Suite be pointed at the branch, make it known that its available, etc. <b>Action to take: make a space on the Asterisk wiki for the documentation of feature branches that are available</b></li>
        <li>Testing
        <ul>
                <li>We need to publicize (better) the tools available for use.  These tools should be made for use by everyone contributing to the Asterisk project.</li>
                <li>Publicize what is tested - and at what level (unit, integration, system).  Some automated mechanism that publishes the tests would be best, as that would prevent the documentation from getting out of sync with the tests. <b>Action taken: have the Unit Tests and Test Suite tests be documented on the Asterisk wiki</b></li>
                <li>What is tested by Digium before a major release?
                <ul>
                        <li>Asterisk testsuite</li>
                        <li>Manual tests (system level)</li>
                        <li>Testing is primarily core support level</li>
                        <li>Minimal (or none) testing of extended support level</li>
                </ul>
                </li>
        </ul>
        </li>
        <li>What do we feel would be needed at a policy level regarding a "phone home" Data Capture module?
        <ul>
                <li>It must be "non evil", phone home</li>
                <li>It should contain no personal info</li>
                <li>It should tag a system by a unique ID, and you should know your own unique ID</li>
                <li>You should be able to query all gathered data</li>
                <li>It should be OPT OUT - easily turned off.  We discussed OPT IN, but everyone agreed that OPT IN systems rarely get the kind of participation needed for them to be worthwhile.</li>
                <li>It must be well publicized, in a variety of ways:
                <ul>
                        <li>It must publicize where data is sent, and allow the user to control where data is sent.  Valid options could be:
                        <ul>
                                <li>Digium only</li>
                                <li>Somewhere else only (that is, if you have multiple systems, you can have it send data only to your own service)</li>
                                <li>Digium+somewhere else</li>
                        </ul>
                        </li>
                        <li>You should be able to control what data is sent.  Valid data that is sent could include:
                        <ul>
                                <li>Modules being used/versions</li>
                                <li>Calls processed</li>
                                <li>Registered endpoints</li>
                                <li>Technologies used</li>
                                <li>Uptime</li>
                        </ul>
                        </li>
                        <li>Open data transfer message format (the message specification for what data is sent should be publicized)</li>
                        <li>Well documented message specification, i.e., should not require reverse engineering the module</li>
                        <li>A separate module should control the sending</li>
                        <li>CLI warning should be displayed <b>as the last message before the prompt</b> instructing the user that data is being sent, and how to turn it off.</li>
                </ul>
                </li>
        </ul>
        </li>
        <li>Project pages.  All major projects should have a project page on the Asterisk wiki where people can go and learn what active projects are currently being worked on.  The project pages are <b>not</b> a place for discussion, but rather a focal point for resources related to that project.
        <ul>
                <li>This page should link to any major asterisk-dev list discussions.</li>
                <li>Announce on mailing list when a project is kicked off - provide links to wiki for more detail</li>
                <li>Page should include requirements, high level design, links to JIRA issues for tasking, links to code reviews, outstanding tasks, etc.</li>
        </ul>
        </li>
        <li>Mailing list policies
        <ul>
                <li>We currently require all mailing list discussions to be conducted only through the mailman server, i.e., you can't CC the mailing list.  This can make it difficult if a particular mailing list is not one that you interact with on a constant basis.  A proposal was made to not require mailing list discussions to be conducted only through mailman server.</li>
                <li>Counter-argument: the configuration would most likely need need tweaks for duplicate messages, and allowing conversations to CC a mailing list might mean that conversations fall off of the list easier (or never get put on it in the first place)</li>
                <li><b>We didn't seem to come to a conclusion on this issue.  If anyone feels like this needs more discussion, please start a policy discussion on the asterisk-dev list.</b></li>
        </ul>
        </li>
</ul>


<h2><a name="AstriDevCon2012-ChannelDrivers"></a>Channel Drivers</h2>
<ul>
        <li>SIP Channel driver.  It has issues.  As of October of 2012, ~25% of the open issues in JIRA are against <tt>chan_sip</tt>.  While that can be attributed to its usage, it can also be attributed to its design.  A poll was taken of the attendees if anyone liked to maintain <tt>chan_sip</tt>; no one raised their hand.
        <ul>
                <li>The current SIP channel driver has huge tracts of code (31000 in 1.8; 34000 lines in trunk (which means we aren't actively making it better))
                <ul>
                        <li>The design has a lack of stack-based structuring.  This makes means there is no transport layer; no transaction layer; no application layer; logic flows between all layers in the channel driver often on different code paths with little discernible logic as to why.</li>
                        <li>Bugfixes very often create more bugs, even with experienced Asterisk devs.</li>
                        <li>Unapproachable for new developers.  This limits who can come in and contribute bug fixes, which is a very bad state for an open source project.</li>
                </ul>
                </li>
        </ul>
        </li>
        <li>Can we refactor the existing <tt>chan_sip</tt>?  This was discussed a bit, but given the following, it was not an approach that received a lot of support:
        <ol>
                <li>Many have tried, all have failed</li>
                <li>It increases the risk of the project failing - even if a new SIP channel driver were written that did not meet all objectives, the existing one would still provide functionality.  If we refactor it, we lose that safety net.</li>
        </ol>
        </li>
        <li><b>Project proposed: build a new parallel channel driver</b>
        <ul>
                <li>What should the driver provide?
                <ul>
                        <li>It must provide basic B2BUA capabilities</li>
                        <li>Registrar</li>
                        <li>Subscription</li>
                        <li>More (but not a proxy)?  <em>It was noted that it does not have to provide the above capabilities either - if it is built in a modular fashion, portions (such as registrar) could be removed</em></li>
                </ul>
                </li>
                <li>Services provided should be built in separate modules for flexibility and ease of maintenance</li>
                <li>Use a GPL SIP stack - don't reinvent the wheel.
                <ul>
                        <li>PJSIP, Sofia? Others?  While we naturally leaned towards PJSIP, given Digium's experience with it on Asterisk SCF, this should first be discussed on the asterisk-dev list.</li>
                        <li>If possible, try to have someone full time on the stack library development team.</li>
                        <li>Pick a version of the stack for a branch of Asterisk.  This will keep the stack in line with that version to prevent churn if the stack is upgraded in a release branch.</li>
                        <li>Testing.  Will be a huge effort, as we have to guarantee interoperability as much as possible.  Should develop specific test scenarios and build out tests against the current SIP channel driver and then run them against the new one.
                        <ul>
                                <li>Plan to do interop testing at SIPit when possible</li>
                                <li><b>Action taken: Build out a list of scenarios for SIP tests to be created in the Asterisk Test Suite to ensure that basic functionality works in a new SIP channel driver</b></li>
                        </ul>
                        </li>
                </ul>
                </li>
                <li>Data Access Layer
                <ul>
                        <li>We must support Legacy configs.  Someone should be able to taken an existing <tt>sip.conf</tt> and use the new SIP channel driver.  A new configuration schema can also be defined, and we can implement a mechanism of exporting the in-memory objects to create a new SIP config file.</li>
                </ul>
                </li>
                <li>Need to agree upon a set of functionality to have implemented for Asterisk 12.</li>
                <li>The channel driver must provide layers of abstraction - modular in nature.</li>
        </ul>
        </li>
        <li>New SCCP Channel driver
        <ul>
                <li>SCCP being developed by Avencall team.  Very interested in replacing the existing <tt>chan_skinny</tt>.
                <ul>
                        <li>Asked to provide a team branch for Asterisk 1.8.  Asterisk Test Suite can be pointed at the team branch.</li>
                        <li>Forward port to trunk</li>
                        <li>Double check feature parity with chan_skinny</li>
                        <li>Work with Damien Wedhorn (current maintainer of chan_skinny) to determine feature set</li>
                        <li>Find ways to integrate development processes with Asterisk.  This includes testing, project pages, etc.</li>
                </ul>
                </li>
        </ul>
        </li>
        <li>chan_rtp - or find a way to expose creating a media stream without signalling
        <ul>
                <li>RTP API exists and is implemented as a resource module.</li>
                <li>Expose RTP functionality without requiring signalling?</li>
        </ul>
        </li>
        <li><tt>chan_agent</tt>, or the future of it.
        <ul>
                <li>Current implementation is buggy and prone to problems.  Multiple folks have experienced memory corruptions with no resolution (yet).</li>
                <li>Should we get rid of it?  You <em>technically</em> can do everything without it.  However, its existence makes abstraction of the agent easy (doable without chan_agent, but hard).</li>
                <li>On that same note, can we replace app_queue with tiny pieces?</li>
                <li>We noted that we could have further discussion on this within APIs</li>
        </ul>
        </li>
</ul>


<h2><a name="AstriDevCon2012-Core"></a>Core</h2>
<ul>
        <li>Console logging, specifically, a defined formatting - kobaz has done some work on this and may be getting closer to being able to have it reviewed</li>
        <li>Scalability
        <ul>
                <li>What is the ability to scale?  What aspects does Asterisk struggle with?
                <ul>
                        <li>RT</li>
                        <li>Should we use an API that provides federation?</li>
                        <li>Should we expose a UUID for an Asterisk instance from AMI or other interfaces?
                        <ul>
                                <li>Note: you can already expose the system name out of system.conf</li>
                        </ul>
                        </li>
                        <li>Scalability would be helped by having multiple data storage backends for ASTDB (and not resident on the same machine)</li>
                        <li>Media storage as a resource</li>
                </ul>
                </li>
        </ul>
        </li>
        <li>Monolithic App breakup
        <ul>
                <li>Queues</li>
                <li>VoiceMail</li>
        </ul>
        </li>
        <li>CDRs (cannot kill with fire)
        <ul>
                <li>Core problem with CDRs: what is a call?  How do you define a call when there are multiple endpoints involved in a call?  Currently, Asterisk does not defined this behavior and this makes CDRs in transfers (and other situations) difficult.  CEL helps, but requires consumers to developer their own notion, which is a lot of work.  One thing that came up here was the idea that a channel should have a UUID that survives masquerades; this at least would make the entire channel lifetime known.  Deferred to API discussion, as modifying CDR behavior needs to reflect core changes.</li>
        </ul>
        </li>
</ul>


<h2><a name="AstriDevCon2012-APIs"></a>APIs </h2>
<ul>
        <li>Manager
        <ul>
                <li>Several known problems:
                <ul>
                        <li>Tracking calls in transfer scenarios (or really, any masquerade - parking, etc.)
                        <ul>
                                <li>Calls boils down to channel tracking - Asterisk would have a difficult time defining a 'call'.</li>
                                <li>Need a UUID per channel that survives the masquerade process.</li>
                        </ul>
                        </li>
                        <li>It was brought up that there is no specification for AMI (documenting actions/events is nice, but doesn't cover order of events or when events can occur).  However, it was asked whether or not it is worth specifying a broken protocol or implementing a specified, consistent protocol with other proven implementations, which provides additional features (multi-tennancy, real security, federation, load balancing)?   One example of this would be <a href="http://rayo.org/xep" class="external-link" rel="nofollow">RAYO</a>
                        <ul>
                                <li>At the same time, is AMI deficient, or broken?  If it is broken, is that a fault with AMI, or a fault with the core of Asterisk not providing consistent and predicable state to build an interface on top of?  Even if we build out a new interface, the core problems will have to be resolved.</li>
                        </ul>
                        </li>
                        <li>Events lack documentation (Asterisk 11 has added them, but they aren't complete yet)
                        <ul>
                                <li>One idea: register events.  Make it so unregistered events never get sent out (configuration item)
                                <ul>
                                        <li>Prevent unregistered events from going out, log error</li>
                                </ul>
                                </li>
                                <li>Add Accurate timestamping to events to reorder them or to build a transaction model on the client side</li>
                                <li>Add "Meta events" that can combine multiple events</li>
                                <li>Efficiency.  Asterisk sends a lot of AMI events that you might not care about, and we only have coarse granularity to turn them off.  A publish/subscribe model would alleviate a lot of this (interesting note: Dan Jenkins of Holiday Extras during his talk at AstriCon noted that they ran into performance problems with AMI, and ended up opening 6 simultaneous connections with various classes disabled, and then built a model of the system on top of that.  That's awesome, but quite the workaround that shouldn't be necessary)</li>
                                <li>Documentation - more the better.</li>
                                <li>Channel lifetime needs to be known by anyone who builds a system on top of AMI.  Again, this points back to masquerades.</li>
                        </ul>
                        </li>
                </ul>
                </li>
        </ul>
        </li>
        <li>AsyncAGI
        <ul>
                <li>No ability to rescue a channel dumped into AsyncAGI without a response.</li>
                <li>Global scope, races if multiple AMI users are listening to AsyncAGI.  May need a way to tie a channel dumped into AsyncAGI with a specific AMI instance.</li>
        </ul>
        </li>
        <li>Asynchronous media control.  Not easily possible, as redirect actions sent to a channel in AsyncAGI can be 'buggy'.  Should be able to pause, resume, stop, rewind, and otherwise have fine grained control over media being played to a channel.
        <ul>
                <li>External Message Bus
                <ul>
                        <li>Could be multi-cast</li>
                </ul>
                </li>
        </ul>
        </li>
        <li>Consistency of APIs.  This is fairly poor, as there are lots of things you can't do in AMI that you can in dialplan, or things that you can't do in AGI that you can do in dialplan.  Things that are available in one place should be available in all places, if it makes sense to do so.  Certain operations (such as Originate) end up being implemented in multiple locations as well, when there should merely be ways of initiating a single operation.
        <ul>
                <li>This discussion brought up breaking up coarse granular operations into finer grained operations.  This included:
                <ul>
                        <li>Bridge as an object to be manipulated.</li>
                        <li>Lightweight Dial (that is, something that only dials and does not bridge).</li>
                        <li>Break up Queues; VoiceMail.  What functionality is really needed for these if you have fine grained control over bridging and dialing?  More research needs to be done into what exactly <b>must</b> be provided by Asterisk.  "Business logic" in both cases should not be hard coded.</li>
                </ul>
                </li>
        </ul>
        </li>
        <li>MSRP support.  No current actions taken.</li>
        <li>Compliance/Regression tests with API consumers (such as Adhearsion) - this would be great to have automated in the Test Suite.</li>
        <li>SLA - Need to explore SLA using ConfBridge.  This would remove the last set of functionality dependent on MeetMe/DAHDI.</li>
</ul>


<h2><a name="AstriDevCon2012-Review"></a>Review</h2>

<p>We discussed prior proposed projects, what was done for Asterisk 11, and what might make sense in Asterisk 12.  The listing below is pulled from the AstriDevCon 2011 Projects; items committed are crossed out.</p>

<div class='panelMacro'><table class='noteMacro'><colgroup><col width='24'><col></colgroup><tr><td valign='top'><img src="/wiki/images/icons/emoticons/warning.gif" width="16" height="16" align="absmiddle" alt="" border="0"></td><td>If someone feels that some aspect of a project that was committed was not fully finished in Asterisk 11, please let me know and I'll make a note on the project. &#8211; Matt</td></tr></table></div>

<h3><a name="AstriDevCon2012-AstriDevCon2011ProjectsAST%3AAstriDevCon2011"></a><a href="/wiki/display/AST/AstriDevCon+2011" title="AstriDevCon 2011">AstriDevCon 2011 Projects</a></h3>

<h5><a name="AstriDevCon2012-%28P0%29"></a>(P0)</h5>

<ul>
        <li>SIP path support (Olle)
        <ul>
                <li>(first generation of code exists, needs more work, simple patch, going to get it done, needs an extra field in astdb; helps when there are 2 or more load balancing proxies in front of asterisk, when you'd like the call to be able to get back to Asterisk; see <a href="https://reviewboard.asterisk.org/r/991/" class="external-link" rel="nofollow">https://reviewboard.asterisk.org/r/991/</a>)</li>
                <li><a href="https://issues.asterisk.org/view.php?id=18223" class="external-link" rel="nofollow">https://issues.asterisk.org/view.php?id=18223</a></li>
                <li><b>Review 2011</b>: No change since 2010</li>
        </ul>
        </li>
        <li>Group variables (Kobaz)
        <ul>
                <li>(on review board, in progress)</li>
                <li><b>Review 2011</b>: Code written and then re-written this year, tested in production for a year. Feels good code wise. Some suggestions on reviewboard and should be converted to ao2.
                <ul>
                        <li>Goal to commit for Asterisk 11</li>
                        <li><a href="http://reviewboard.asterisk.org/r/464" class="external-link" rel="nofollow">http://reviewboard.asterisk.org/r/464</a></li>
                        <li><a href="https://issues.asterisk.org/jira/browse/ASTERISK-15439" class="external-link" rel="nofollow">https://issues.asterisk.org/jira/browse/ASTERISK-15439</a></li>
                </ul>
                </li>
        </ul>
        </li>
        <li><del>Pre-Dial (Kobaz) <a href="/wiki/pages/createpage.action?spaceKey=AST&amp;title=Finished%2C+Committed&amp;linkCreation=true&amp;fromPageId=21463921" class="createlink">Finished, Committed</a></del>
        <ul>
                <li><del>(I think it's done.  Been in production for 12+months with no hiccups.  Needs review&#33;)</del></li>
                <li><del><b>Review 2011</b>: Very happy with the way it is. Uploaded latest diff against trunk.</del>
                <ul>
                        <li><del>Goal to commit for Asterisk 11</del></li>
                        <li><a href="https://reviewboard.asterisk.org/r/1229/" class="external-link" rel="nofollow">https://reviewboard.asterisk.org/r/1229/</a></li>
                        <li><a href="https://issues.asterisk.org/jira/browse/ASTERISK-19548" class="external-link" rel="nofollow">https://issues.asterisk.org/jira/browse/ASTERISK-19548</a></li>
                </ul>
                </li>
        </ul>
        </li>
        <li><del>Hangup Handlers (Kobaz) <a href="/wiki/pages/createpage.action?spaceKey=AST&amp;title=Finished%2C+Committed&amp;linkCreation=true&amp;fromPageId=21463921" class="createlink">Finished, Committed</a></del>
        <ul>
                <li><del>(Needs to be updated to use the same gosub parse/exec as PreDial uses)</del></li>
                <li><del><b>Review 2011</b>:</del>
                <ul>
                        <li><del>Goal to commit for Asterisk 11</del></li>
                        <li><a href="https://reviewboard.asterisk.org/r/1230" class="external-link" rel="nofollow">https://reviewboard.asterisk.org/r/1230</a></li>
                </ul>
                </li>
        </ul>
        </li>
        <li>Distributed extension state using SIP (Olle)
        <ul>
                <li>(resources in place, doing it, 1.4 done before Christmas, project pinana)</li>
                <li><b>Review 2011</b>: No changes known. Idle.</li>
        </ul>
        </li>
        <li><del>Manager event docs (Paul Belanger)</del>
        <ul>
                <li><b>Review 2011</b>: <del>Code was created and working, but did not pass code review. Talked about it again a couple of months ago, and some work done.</del>
                <ul>
                        <li><del>About a day or two to get the framework completed</del></li>
                        <li><del>Then just need to insert the documentation into the code and then it could be completed.</del></li>
                </ul>
                </li>
        </ul>
        </li>
        <li>Cross-platform documentation (Ben Klang)
        <ul>
                <li>(caveats for using Asterisk on operating system xyz; pull a PDF of the Wiki documentation into the source, don't forget to include basic installation information, and do it all in .txt - Ben)</li>
                <li><b>Review 2011</b>: Documentation updated for Solaris. Is on the wiki, and just needs to be put into a better location. Leif will help restructure part of the wiki to make the Linux and Solaris documentation (and other operating systems) a better format.</li>
        </ul>
        </li>
        <li><del>Fix libs to optionally init OpenSSL (Digium)</del>
        <ul>
                <li><del>(or use existing tools; sort of a bug)</del></li>
                <li><b>Review 2011</b>: <del>Code on reviewboard, need to confirm that the code solves the problem, confirmed it doesn't cause harm</del>
                <ul>
                        <li><del>Testing required on multiple platforms and libraries</del></li>
                </ul>
                </li>
        </ul>
        </li>
        <li><del>Make ast_channel an opaque type (Digium)</del>
        <ul>
                <li><b>Review 2011</b>: <del>Large project and has not been started. Should not be on P0.</del></li>
        </ul>
        </li>
</ul>


<h5><a name="AstriDevCon2012-%28P1%29"></a>(P1)</h5>

<ul>
        <li><del>Who hung up? (there's a branch, shouldn't take too much time - Olle)</del>
        <ul>
                <li><b>Review 2011</b>: <del>Jason Parker thinks something like that may have been committed a few months ago by Jeffrey C. Ollie. Will need to review to see if anything has actually been done there.</del>
                <ul>
                        <li><del>Kobaz has a 2-3 line code change that simply adds events to Softhangup() and Hangup()</del></li>
                        <li><del>On a failed call, there is no access to the causecodes &#8211; would be powerful if we had access to it</del>
                        <ul>
                                <li><del>Would need to develop some code that created a generic layer to convert between channel drivers (each does it different)</del></li>
                                <li><del>Need to investigate if there are any CEL events already created that will give some of that information</del></li>
                        </ul>
                        </li>
                </ul>
                </li>
        </ul>
        </li>
        <li><del><a href="/wiki/display/AST/Media+Overhaul" title="Media Overhaul">Codecs (SILK, OPUS), Media Negotiation</a></del> (Digium)
        <ul>
                <li><b>Review 2011</b>: <del>Every version of Asterisk had a fixed bitfield, and we needed to be conscious about adding new codecs (limited). Project was to remove that limitation. Reworked how media formats are represented in Asterisk. Integration of codecs like SILK and CELT. Helps with better support for video as well.</del>
                <ul>
                        <li><del>Framework in place</del></li>
                        <li><del>Need to now start using the framework to help add functionality to Asterisk</del></li>
                        <li><del>For Asterisk 11, would be nice to add re-invite support so that clients and re-negotiate resolutions (for video). End-to-end negotiation. Framework in place to do that, just need to add the functionality.</del></li>
                </ul>
                </li>
        </ul>
        </li>
        <li>RTCP (Olle)
        <ul>
                <li>Pinefrog; Work to be done - Ported to trunk, added to CEL</li>
                <li><b>Review 2011</b>: Idle</li>
        </ul>
        </li>
        <li><del>Conferencing that supports a new magic media</del> (Digium)
        <ul>
                <li><b>Review 2011</b>: Completed and in Asterisk 10. Updated ConfBridge() application which was pretty much re-written. Now supports high resolution codecs and voice activity video switching within ConfBridge().</li>
                <li><del>higher sampling rates</del></li>
                <li><b>Review 2011</b>: Part of the codec negotiation framworks.</li>
        </ul>
        </li>
</ul>


<h5><a name="AstriDevCon2012-%28P2%29"></a>(P2)</h5>

<ul>
        <li>Async DNS (TCP DNS and use a good resolver)
        <ul>
                <li><b>Review 2011</b>: No change known.</li>
        </ul>
        </li>
        <li>Named ACLs (deluxepine)
        <ul>
                <li><b>Review 2011</b>: Idle</li>
        </ul>
        </li>
        <li><a href="/wiki/display/AST/SIP+Security+Events" title="SIP Security Events"><del>SIP Security Events</del></a>
        <ul>
                <li><b>Review 2011</b>: <del>Additional work was updated and put into Asterisk 10. Only reported manager authentication events prior to Asterisk 10.</del>
                <ul>
                        <li><del>Prior to Asterisk 10 relaxed policy a bit and added chan_sip security events (only for inbound registration).</del></li>
                        <li><del>Additional work needed throughout Asterisk to add more events.</del></li>
                        <li><del>Added to Asterisk 10. Reference:&nbsp;<a href="https://issues.asterisk.org/jira/browse/ASTERISK-18264" class="external-link" rel="nofollow">https://issues.asterisk.org/jira/browse/ASTERISK-18264</a></del></li>
                </ul>
                </li>
        </ul>
        </li>
        <li><del>Light weight means of holding NAT open in SIP (less complex than current qualify, Consider it done)</del>
        <ul>
                <li><b>Review 2011</b>: <del>No change.</del></li>
        </ul>
        </li>
        <li><del>IPv6 for the restivus</del> (IAX, <del>Jabber/XMPP/Gtalk, Manager, etc.)</del>
        <ul>
                <li><b>Review 2011</b>: <del>No change.</del></li>
        </ul>
        </li>
        <li><del>ConfBridge feature complete with MeetMe</del>
        <ul>
                <li><b>Review 2011</b>: Not entirely true, but very close.</li>
        </ul>
        </li>
        <li>Support sound file containers (matroska)
        <ul>
                <li><b>Review 2011</b>: Suggestion to have (media) files used by Asterisk not just headerless files, so you could actually do things properly, like storing G729 that contains silent suppression information.
                <ul>
                        <li>No change in Asterisk, but has been getting worked on for Asterisk SCF. Very complicated. Matroska is just a framework. Once stable for Asterisk SCF, we can consider building it for Asterisk as well.</li>
                </ul>
                </li>
        </ul>
        </li>
        <li>RTMP client channel driver
        <ul>
                <li><b>Review 2011</b>: No change.</li>
        </ul>
        </li>
</ul>


<h5><a name="AstriDevCon2012-%28P3%29"></a>(P3)</h5>

<ul>
        <li><del>Unique identifier for filtering log data to a call</del>
        <ul>
                <li><del>(finishing what was already begun w/ Clod's project, CLI filtering; should take a look at what Stephan from Unlimitel.ca's created)</del></li>
                <li><b>Review 2011</b>: <del>Claude's patch was only for CLI filtering.</del>
                <ul>
                        <li><del>Discussion about in the logger.conf to change the configuration so that the 'core set verbose 5' (or debug, etc) that it does not affect all the configuration files when you just want to change the verbosity on the console. (<a href="https://issues.asterisk.org/jira/browse/ASTERISK-18352" class="external-link" rel="nofollow">https://issues.asterisk.org/jira/browse/ASTERISK-18352</a>)</del></li>
                        <li>Configuration could be under a header, and then create your own filters for channels, and what verbosity,debug,etc. is output to a log file and console per file</li>
                        <li><b>Take Away</b>: Need to have a discussion of what people would want and need (requirements gathering), and then we can investigate how difficult it would be to implement, and what the order of implementation.</li>
                </ul>
                </li>
        </ul>
        </li>
</ul>


<h5><a name="AstriDevCon2012-%28P4%2CSimon%27sfeatures%29"></a>(P4, Simon's features)</h5>

<ul>
        <li>Multiple SIP Sockets
        <ul>
                <li>(Listen on multiple ports or on multiple interfaces, but not all; also set binding for RTP)...alternate idea / solution would be to make Asterisk capable of loading multiple SIP profiles, it might be easier</li>
                <li><b>Review 2011</b>: No change.</li>
        </ul>
        </li>
        <li>Multiple DNS results
        <ul>
                <li>(need to be able to traverse a list of DNS results, rather than just getting back one result)</li>
                <li><b>Review 2011</b>: Some work has been done, but chan_sip (or others) has not been enhanced to take advantage of that.</li>
        </ul>
        </li>
        <li><del>ICE-lite</del>
        <ul>
                <li><del>(no code, responding correctly to ICE connectivity checks (STUN multiplexed on the RTP port) and understanding the SDP); it makes NAT traversal work for clients that do ICE; also addressed lightweight NAT refresh)</del></li>
                <li><b>Review 2011</b>: <del>No change or progress. No one has tried to work on it. Appears to be very little deployment.</del></li>
        </ul>
        </li>
</ul>


<h5><a name="AstriDevCon2012-%28P5%29"></a>(P5)</h5>

<ul>
        <li><del>AstDB replacement</del> SQLite
        <ul>
                <li><b>Review 2011</b>: <del>Have initial support implemented for Asterisk 10. Backend is being used. Terry is continuing to work on additional functionality in trunk.</del></li>
        </ul>
        </li>
        <li>SIP identity
        <ul>
                <li>(on reviewboard; needs to be forward ported; important for organizations w/ federated identities; a requirement for DTLS SRTP; not widely deployed)</li>
                <li><b>Review 2011</b>: No change.\</li>
        </ul>
        </li>
</ul>


<h5><a name="AstriDevCon2012-%28P6%29"></a>(P6)</h5>

<ul>
        <li>Structured identifiers for errors
        <ul>
                <li>(tag an error message with a unique string, specific to the error message and where it came from; should be alphanumeric to keep them short)</li>
                <li><b>Review 2011</b>: No change. Nice to have feature, but someone needs to take it on as a personal project. Essentially building a knowledge base. Would have to research what a code would look like, then pick 10, start with those, and continue to expand over time.</li>
        </ul>
        </li>
        <li>AMI SetVar, Context limits
        <ul>
                <li>(there's code already...Olle has it)</li>
                <li><b>Review 2011</b>: Idle.</li>
        </ul>
        </li>
        <li><del>AMI filters on demand</del>
        <ul>
                <li><b>Review 2011</b>: Created by Kobaz and is part of Asterisk 10. Allows you to add filters per session and not globally.</li>
        </ul>
        </li>
        <li><del>DTLS SRTP</del>
        <ul>
                <li><del>(not likely to be widely deployed in the next 12 months)</del></li>
                <li><b>Review 2011</b>: <del>No progress has been made. Only one library has it, and is not very mature. Not really up to the Asterisk project to solve the problem. Future consideration.</del></li>
        </ul>
        </li>
</ul>


<h5><a name="AstriDevCon2012-%28P7%2Cnotkobaz%29"></a>(P7, not kobaz)</h5>

<ul>
        <li>Write a Specification for AMI (not kobaz)
        <ul>
                <li><b>Review 2011</b>: Goes hand-in-hand with the event documentation. Make it so that we do no break AMI versions &#8211; no changes within the same version. We can do this since we do have the ability to version the AMI commands.</li>
        </ul>
        </li>
        <li>Multiple TLS server certs
        <ul>
                <li>(1 socket, requires support by OpenSSL; simpler to implement than multiple SIP profiles; don't know if any clients use it yet; needs more research)</li>
                <li><b>Review 2011</b>: Currently no SIP end points that support the mechanism, and some discussion on SIP lists say that an RFC should be written. Not very difficult to do on the server side of things. Could be done between Asterisk to Asterisk since we'd implement both the client and the server.</li>
        </ul>
        </li>
</ul>


<h5><a name="AstriDevCon2012-%28P8%2Cnicetohave%29"></a>(P8, nice to have)</h5>

<ul>
        <li>Make resource modules that talk to DBs attempt reconnects
        <ul>
                <li><b>Review 2011</b>: Added reconnect support to res_config_postgres by Kobaz. Already part of res_odbc. Other native drivers should have it added. Could abstract the reconnection support so that we don't duplicate code. Some work done, more work still possible.</li>
        </ul>
        </li>
        <li>Apple's new file streaming format, derived from .m3u
        <ul>
                <li><b>Review 2011</b>: No changes known.</li>
        </ul>
        </li>
        <li><del>Make MixMonitor and Monitor feature compatible</del>
        <ul>
                <li><b>Review 2011</b>: Done in Asterisk 10 (per David Vossel)
                <ul>
                        <li>Some discussion should be done to move res_monitor to 'extended' or 'deprecated' support level. MixMonitor() likely is now feature complete for Monitor(), especially since MixMonitor() has been implemented in a more friendly manner (in terms of I/O and threading).</li>
                </ul>
                </li>
        </ul>
        </li>
</ul>



<h5><a name="AstriDevCon2012-%28P%3F%2CResearchRequired%29"></a>(P?, Research Required)</h5>

<ul>
        <li>New app_queue (as if?  no, seriously? talking about this scares Russell)
        <ul>
                <li><b>Review 2011</b>: Suggested by Kevin that we could have a single box that handles no media, and just does the signalling. Since the agents can be distributed with distributed device state, all registrations would be remote from the queue server. There needs to be an atomic server that would handle the decision making.
                <ul>
                        <li>Gregory (irroot) &#8211; additional skills based routing code and features.</li>
                </ul>
                </li>
        </ul>
        </li>
        <li>Identify and fix all bugs in AMI
        <ul>
                <li><b>Review 2011</b>: In progress.</li>
        </ul>
        </li>
        <li>Broadsoft or Dialog Info shared line appearance (SLA) support
        <ul>
                <li>(Tabled for later discussion)</li>
                <li><b>Review 2011</b>: Licensing issues. Code written using documentation that is marked as confidential. No situation change. Unable to merge code.</li>
        </ul>
        </li>
        <li><del>LDAP from within the dialplan</del>
        <ul>
                <li>(we may already have it, needs research to see if the realtime driver does what's desired - Leif)</li>
                <li><b>Review 2011</b>: Yes you can already do this using dialplan functions. REALTIME_FIELD and REALTIME_HASH, etc..</li>
        </ul>
        </li>
        <li>Device state normalization
        <ul>
                <li><b>Review 2011</b>: Unknown what this means. Could be different channel drivers report different types of information. No change.</li>
        </ul>
        </li>
        <li>Anything DB over HTTP(s) with failover handling
        <ul>
                <li><b>Review 2011</b>: Unknown what this is.</li>
        </ul>
        </li>
        <li>Use a channel as a MoH Source
        <ul>
                <li><b>Review 2011</b>: Still a neat idea.</li>
        </ul>
        </li>
        <li>Kill Masquerades
        <ul>
                <li><b>Review 2011</b>: With fire&#33; (Kevin)</li>
        </ul>
        </li>
        <li>Bridging thread pool
        <ul>
                <li><b>Review 2011</b>: If you have 200 calls up, you have 200 threads up just polling, when you could just have 10 that each handle 20 bridges, and then you reduce context switching. (That's the idea.) Code not likely flexible enough to do this. Could be done... (Kevin)</li>
        </ul>
        </li>
        <li>Threadify chan_sip
        <ul>
                <li><b>Review 2011</b>: This would cause an entire re-write on chan_sip, so this is not possible unless a new channel driver were written.</li>
        </ul>
        </li>
        <li>Export ISDN ROSE information up to Asterisk channels
        <ul>
                <li><b>Review 2011</b>: Not much was really discussed on this as there has not been much requirement for it.</li>
        </ul>
        </li>
</ul>


<h3><a name="AstriDevCon2012-ProjectsDiscussed"></a>Projects Discussed</h3>

<ul>
        <li>Group variables (Kobaz)
        <ul>
                <li>(on review board, in progress)</li>
                <li>Code written and then re-written last year; has been in production for some time.</li>
                <li>Kobaz to take a look at getting the review refreshed
                <ul>
                        <li><a href="http://reviewboard.asterisk.org/r/464" class="external-link" rel="nofollow">http://reviewboard.asterisk.org/r/464</a></li>
                        <li><a href="https://issues.asterisk.org/jira/browse/ASTERISK-15439" class="external-link" rel="nofollow">https://issues.asterisk.org/jira/browse/ASTERISK-15439</a></li>
                </ul>
                </li>
        </ul>
        </li>
        <li>RTCP (Olle)
        <ul>
                <li>Pinefrog; Work to be done - Ported to trunk, added to CEL</li>
                <li>Mentioned that this would be really nice to have.</li>
        </ul>
        </li>
        <li>Async DNS (TCP DNS and use a good resolver)
        <ul>
                <li>Many people mentioned that having asynchronous DNS and supporting multpile srv records would resolve a lot of issues with Asterisk behind SIP proxies.  This would be a good project for Asterisk 12.</li>
        </ul>
        </li>
        <li>Named ACLs (deluxepine)
        <ul>
                <li>Named ACLs committed for Asterisk 11; however, this did not fully capture all of the use cases of Olle's deluxepine branch.</li>
                <li>For folks interested in security, this may be worth looking into.</li>
        </ul>
        </li>
        <li>IPv6 Support for chan_iax2</li>
        <li>Call-ID Logging Filtering
        <ul>
                <li>Make use of the call-id that is tagged with channels through other mechanisms (CLI filtering, etc.)</li>
        </ul>
        </li>
</ul>


<h1><a name="AstriDevCon2012-AgreedUponGoals"></a>Agreed Upon Goals</h1>

<p>After much discussion, the attendees agreed that two broad areas needed to be addressed for Asterisk 12.  While many other projects should also receive attention, these two goals should be the focus of the Asterisk developer community.  These are:</p>
<ul>
        <li>Overhaul the SIP functionality in Asterisk.</li>
        <li>Make the APIs exposed by Asterisk consistent and easier to build applications on top of.</li>
</ul>

    </div>
        <div id="commentsSection" class="wiki-content pageSection">
        <div style="float: right;" class="grey">
                        <a href="https://wiki.asterisk.org/wiki/users/removespacenotification.action?spaceKey=AST">Stop watching space</a>
            <span style="padding: 0px 5px;">|</span>
                <a href="https://wiki.asterisk.org/wiki/users/editmyemailsettings.action">Change email notification preferences</a>
</div>
        <a href="https://wiki.asterisk.org/wiki/display/AST/AstriDevCon+2012">View Online</a>
        |
        <a href="https://wiki.asterisk.org/wiki/pages/diffpagesbyversion.action?pageId=21463921&revisedVersion=13&originalVersion=12">View Changes</a>
                |
        <a href="https://wiki.asterisk.org/wiki/display/AST/AstriDevCon+2012?showComments=true&amp;showCommentArea=true#addcomment">Add Comment</a>
            </div>
</div>
</div>
</div>
</div>
</body>
</html>