<html>
<head>
<base href="https://wiki.asterisk.org/wiki">
<link rel="stylesheet" href="/wiki/s/en/2176/25/9/_/styles/combined.css?spaceKey=AST&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/Asterisk+12+Bridging+Project">Asterisk 12 Bridging Project</a></h2>
<h4>Page <b>edited</b> by <a href="https://wiki.asterisk.org/wiki/display/~mjordan">Matt Jordan</a>
</h4>
<br/>
<h4>Changes (7)</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" >A channel masquerade is a fundamental yet incredibly confusing concept in Asterisk. It exists as a way for a thread to 'take' control of a channel that happens to be on another thread. This is a critically important operation when you need to, say, move a channel from the VoiceMail application and have it start executing logic at a different place in the dialplan. <br> <br></td></tr>
<tr><td class="diff-deleted-lines" style="color:#999;background-color:#fdd;text-decoration:line-through;">{code:title="A comment from ast_do_masquerade"} <br></td></tr>
<tr><td class="diff-added-lines" style="background-color: #dfd;">{code:title=A comment from ast_do_masquerade} <br></td></tr>
<tr><td class="diff-unchanged" >        /* XXX This operation is a bit odd. We're essentially putting the guts of <br>         * the clone channel into the original channel. Start by killing off the <br></td></tr>
<tr><td class="diff-snipped" >...<br></td></tr>
<tr><td class="diff-unchanged" >h2. Why Bridging Uses Masquerades and what We can do about it <br> <br></td></tr>
<tr><td class="diff-deleted-lines" style="color:#999;background-color:#fdd;text-decoration:line-through;">{tip:title="Channel Farm"} <br></td></tr>
<tr><td class="diff-added-lines" style="background-color: #dfd;">{tip:title=Channel Farm} <br></td></tr>
<tr><td class="diff-unchanged" >"All channels are created equal, but some channels are created more equal than others." <br>{tip} <br></td></tr>
<tr><td class="diff-snipped" >...<br></td></tr>
<tr><td class="diff-unchanged" >Then, along came [ConfBridge|AST:ConfBridge 10]. <br> <br></td></tr>
<tr><td class="diff-deleted-lines" style="color:#999;background-color:#fdd;text-decoration:line-through;">{note:title="We All Do."} <br></td></tr>
<tr><td class="diff-added-lines" style="background-color: #dfd;">{note:title=We All Do} <br></td></tr>
<tr><td class="diff-unchanged" >Ignore MeetMe. <br>{note} <br></td></tr>
<tr><td class="diff-snipped" >...<br></td></tr>
<tr><td class="diff-unchanged" >* Present a sane model of the bridging world to the APIs <br> <br></td></tr>
<tr><td class="diff-changed-lines" ><span class="diff-changed-words">{tip:<span class="diff-added-chars"style="background-color: #dfd;">title=</span>A</span> word of advice} <br></td></tr>
<tr><td class="diff-unchanged" >If you're familiar with the bridging code in {{features.c}}, you probably have a good idea of how big a task this work is. When you do away with the bridging loop, lots of things break, and they aren't all obvious. CDRs break. CEL breaks. Queue Logs probably break. AMI is wonky. DTMF handling has to be tweaked significantly. Lots change. <br> <br></td></tr>
<tr><td class="diff-snipped" >...<br></td></tr>
</table>
</div> <h4>Full Content</h4>
<div class="notificationGreySide">
<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>This page is still under construction.</td></tr></table></div>
<div>
<ul>
<li><a href='#Asterisk12BridgingProject-ProjectOverview'>Project Overview</a></li>
<ul>
<li><a href='#Asterisk12BridgingProject-WhatisaMasquerade'>What is a Masquerade</a></li>
<li><a href='#Asterisk12BridgingProject-WhyBridgingUsesMasqueradesandwhatWecandoaboutit'>Why Bridging Uses Masquerades and what We can do about it</a></li>
<li><a href='#Asterisk12BridgingProject-TheFutureofMasqueradesisGrim'>The Future of Masquerades is Grim</a></li>
</ul>
<li><a href='#Asterisk12BridgingProject-RequirementsandSpecification'>Requirements and Specification</a></li>
<ul>
<li><a href='#Asterisk12BridgingProject-UseCases'>Use Cases</a></li>
<ul>
<li><a href='#Asterisk12BridgingProject-UseCase%3ABobcallsAlice'>Use Case: Bob calls Alice</a></li>
</ul>
<li><a href='#Asterisk12BridgingProject-UserStories'>User Stories</a></li>
<li><a href='#Asterisk12BridgingProject-Configuration'>Configuration</a></li>
<ul>
<li><a href='#Asterisk12BridgingProject-project.conf'>project.conf</a></li>
<li><a href='#Asterisk12BridgingProject-RealTimeschemas'>RealTime schemas</a></li>
</ul>
<li><a href='#Asterisk12BridgingProject-APIs'>APIs</a></li>
</ul>
<li><a href='#Asterisk12BridgingProject-Design'>Design</a></li>
<li><a href='#Asterisk12BridgingProject-TestPlan'>Test Plan</a></li>
<ul>
<li><a href='#Asterisk12BridgingProject-TestsforUseCase%3ABobcallsAlice'>Tests for Use Case: Bob calls Alice</a></li>
</ul>
<li><a href='#Asterisk12BridgingProject-ProjectPlanning'>Project Planning</a></li>
<ul>
<li><a href='#Asterisk12BridgingProject-JIRAIssues'>JIRA Issues</a></li>
<li><a href='#Asterisk12BridgingProject-Contributors'>Contributors</a></li>
</ul>
<li><a href='#Asterisk12BridgingProject-ReferenceInformation'>Reference Information</a></li>
</ul></div>
<h1><a name="Asterisk12BridgingProject-ProjectOverview"></a>Project Overview</h1>
<p>At <a href="/wiki/display/AST/AstriDevCon+2012" title="AstriDevCon 2012">AstriDevCon 2012</a>, one of the focus points of development was determined to be the <a href="/wiki/display/AST/Asterisk+12+API+Improvements" title="Asterisk 12 API Improvements">Asterisk APIs</a>. In particular, some common complaints were:</p>
<ul>
        <li>Asterisk changes the name of a channel during masquerades. As the name is used as the handle to the channel, this requires a lot of state replication by consumers of the APIs.</li>
        <li>Asterisk's APIs tend to expose internal implementation details (such as masquerades), when consumers of the APIs would rather not be aware of these details.</li>
</ul>
<p>Both of these topics often come back to the same problem: masquerades. But why are masquerades such a problem?</p>
<h2><a name="Asterisk12BridgingProject-WhatisaMasquerade"></a>What is a Masquerade</h2>
<p>A channel masquerade is a fundamental yet incredibly confusing concept in Asterisk. It exists as a way for a thread to 'take' control of a channel that happens to be on another thread. This is a critically important operation when you need to, say, move a channel from the VoiceMail application and have it start executing logic at a different place in the dialplan.</p>
<div class="code panel" style="border-width: 1px;"><div class="codeHeader panelHeader" style="border-bottom-width: 1px;"><b>A comment from ast_do_masquerade</b></div><div class="codeContent panelContent">
<pre class="theme: Confluence; brush: java; gutter: false">/* XXX This operation is a bit odd. We're essentially putting the guts of
         * the clone channel into the original channel. Start by killing off the
         * original channel's backend. While the features are nice, which is the
         * reason we're keeping it, it's still awesomely weird. XXX */</pre>
</div></div>
<p>The way the operation works is to take two channels and 'swap' portions of them. In the diagram below, assume that Thread A has a channel that Thread B wants to take over. Thread B creates a new channel ("Original") and starts a Masquerade operation on the channel owned by Thread A ("Clone"). Both channels are locked, and the state of the Clone channel is moved into the Original channel, while the Clone channel obtains the Original channel's state. In order to denote that the channel is about to die, a special ZOMBIE flag is put on the channel and the name renamed to Clone<ZOMBIE>. The lock is released, and the Original channel - which now has the state associated with Clone channel - executes in Thread B, while the Clone channel (which is now quite dead) see's that its dead and goes off to silently contemplate its demise in an <tt>h</tt> extension.</p>
<table width="100%">
<tr>
<td align="left" >
<table>
<caption align="bottom">
</caption>
<tr>
<td>
<img style="border: none; width: 852px;"
usemap="#gliffy-map-22478880-6696"
src="/wiki/download/attachments/22088024/Asterisk_12_Masquerades.png?version=1&modificationDate=1360364321614"
alt=""/>
</td>
</tr>
</table>
</td>
</tr>
</table>
<p>Except, of course, that this is a dramatic simplification. It's never quite that easy.</p>
<ul>
        <li>What is a channel's state? For the purposes of the operation, we consider it to be the channel's datastores, technology, and other pertinent data - but there's plenty of data that shouldn't be transferred over. That includes things like locking primitives on the channel, file descriptors, and other resources that Thread A is probably using (and depending on). Other information - such as CDR related information - sometimes can be moved, and sometimes shouldn't.</li>
        <li>The locking picture is complicated. Thread B has no idea what Thread A is doing with the channel when it tries to get the channel lock for the Clone channel. If Thread B is holding a lock and tries to get Clone's channel lock, and Thread A is holding Clone's channel lock and needs a lock held by Thread B, a deadlock occurs.</li>
        <li>Lots of things care a lot when the name of a channel is swapped out from underneath the actual channel pointer. Channel technologies care a lot, and so there are masquerade callbacks that go into the channel technologies and notify them when a masquerade occurs. This creates another locking point, complicating the locking picture further (and causing more deadlocks).</li>
</ul>
<p>So, Masquerades are bad. But why are they used everywhere?</p>
<h2><a name="Asterisk12BridgingProject-WhyBridgingUsesMasqueradesandwhatWecandoaboutit"></a>Why Bridging Uses Masquerades and what We can do about it</h2>
<div class='panelMacro'><table class='tipMacro'><colgroup><col width='24'><col></colgroup><tr><td valign='top'><img src="/wiki/images/icons/emoticons/check.gif" width="16" height="16" align="absmiddle" alt="" border="0"></td><td><b>Channel Farm</b><br />"All channels are created equal, but some channels are created more equal than others."</td></tr></table></div>
<p>Not all channels get an execution thread (<tt>pbx_thread</tt>) in Asterisk. In general, an inbound channel get's a thread; outbound channels do not. As a result, a two-party bridge that is created between the two channels uses the inbound channel's <tt>pbx_thread</tt> to service frames between the two channels. Regardless of the two-party bridge type in play, this is how it works in Asterisk.</p>
<p>This made sense when most bridges were two-party bridges. They probably still are, but it's very common now to have scenarios that require a lot more than a two-party bridge. Say, for example, we want to blind transfer the outbound channel to a new dialplan extension. The outbound channel has no <tt>pbx_thread</tt> - so how can we get him there?</p>
<p>Simple! We use a Masquerade. The Masquerade creates a new channel (with a <tt>pbx_thread</tt>) and swaps the guts of the outbound channel with the new channel. The new channel (with the guts of the outbound channel) starts to execute, and the old outbound channel dies.</p>
<p>You can see what happened next: everything started to use Masquerades to get around the fact that there were channels without threads. Transfers, Asynchronous Gotos, Parking, Local channel optimization... lots of things ended up needing to use Masquerades to work around the threading model.</p>
<p>Then, along came <a href="/wiki/display/AST/ConfBridge+10" title="ConfBridge 10">ConfBridge</a>.</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><b>We All Do</b><br />Ignore MeetMe.</td></tr></table></div>
<p>ConfBridge used a brand spiffy "new" (as in Asterisk 1.6 timeframe) Bridging API developed by Joshua Colp. A bridge becomes a first class object, and no longer a state that two channels happen to find themselves in. Channels owned by a bridge object are each given a thread. Even more interesting, the Bridging API provided an abstraction above how the media of the channels in the bridge was mixed. ConfBridge, for example, used the softmix bridging technology, suitable for multiple channels in a bridge. However, there are other bridging technologies - some optimized for managing two channels (or sets of two channels). Others - such as bridging technologies developed for special purpose applications - are possible. The Bridging API itself provides safe mechanisms to move channels between bridges, merge bridges, and generally do things without the need for masquerades.</p>
<p>As a side effect, the view from the outside world of what Asterisk is doing to channels in a bridge becomes sane.</p>
<h2><a name="Asterisk12BridgingProject-TheFutureofMasqueradesisGrim"></a>The Future of Masquerades is Grim</h2>
<p>Unfortunately, there is still one reason to use a Masquerade: when you have to steal it out of an application. This occurs in situations where an attended transfer is performed and the party starting the attended transfer does not transfer the other party into a bridge but rather into an application. So they aren't going to go away completely.</p>
<p>But, a wholesale migration to the Bridging API let's us:</p>
<ul>
        <li>Do away with Masquerades in lots of situations</li>
        <li>Optimize the hell out of two party bridging</li>
        <li>Switch between two and multi-party bridging seamlessly</li>
        <li>Present a sane model of the bridging world to the APIs</li>
</ul>
<div class='panelMacro'><table class='tipMacro'><colgroup><col width='24'><col></colgroup><tr><td valign='top'><img src="/wiki/images/icons/emoticons/check.gif" width="16" height="16" align="absmiddle" alt="" border="0"></td><td><b>A word of advice</b><br />If you're familiar with the bridging code in <tt>features.c</tt>, you probably have a good idea of how big a task this work is. When you do away with the bridging loop, lots of things break, and they aren't all obvious. CDRs break. CEL breaks. Queue Logs probably break. AMI is wonky. DTMF handling has to be tweaked significantly. Lots change.
<p>This is scary, but it's time.</p></td></tr></table></div>
<h1><a name="Asterisk12BridgingProject-RequirementsandSpecification"></a>Requirements and Specification</h1>
<p>The purpose of this section is to provide the minimum requirements the project must fulfill. This can take several forms depending on the project; project developers should choose the schemes that best fit the project they are developing. This section should also provide details about the project from an end-user perspective. This can include dialplan configuration, sample configuration files, API descriptions, etc.</p>
<p>If needed, break this section up into multiple subsections. Several subsection examples are provided below; feel free to use/remove these as your project dictates.</p>
<div class='panelMacro'><table class='infoMacro'><colgroup><col width='24'><col></colgroup><tr><td valign='top'><img src="/wiki/images/icons/emoticons/information.gif" width="16" height="16" align="absmiddle" alt="" border="0"></td><td>If sufficiently complex, subpages should be used to provide reference information. In particular, sufficiently large configuration schemas and detailed API descriptions may benefit from their own subpage.</td></tr></table></div>
<h2><a name="Asterisk12BridgingProject-UseCases"></a>Use Cases</h2>
<p>Assuming a use case approach is used, the following can be used as a model.</p>
<h3><a name="Asterisk12BridgingProject-UseCase%3ABobcallsAlice"></a>Use Case: Bob calls Alice</h3>
<p>Actor: Alice<br/>
Actor: Bob</p>
<p>Scenario:</p>
<ul>
        <li>Bob picks up his phone. He dials Alice's extension.</li>
        <li>Bob hears a ringing indication.</li>
        <li>Alice's phone rings.</li>
        <li>Alice picks up her phone.</li>
        <li>Both Bob and Alice's phones stop ringing.</li>
        <li>Both Bob and Alice can talk to each other and hear the other person.</li>
</ul>
<h2><a name="Asterisk12BridgingProject-UserStories"></a>User Stories</h2>
<p>Assuming a user story approach is used, the following can be used as a model.</p>
<ul>
        <li>As a user of a SIP phone, I want to be able to pick up my SIP phone, dial an extension, and hear a ringing indication while I wait for the other phone to be picked up.</li>
        <li>As a user of a SIP phone, I want to be able to speak with another user using a SIP phone if they answer when I call them.</li>
</ul>
<h2><a name="Asterisk12BridgingProject-Configuration"></a>Configuration</h2>
<h3><a name="Asterisk12BridgingProject-project.conf"></a>project.conf</h3>
<h4><a name="Asterisk12BridgingProject-%5Cgeneral%5C"></a>[general]</h4>
<div class='table-wrap'>
<table class='confluenceTable'><tbody>
<tr>
<th class='confluenceTh'> Parameter </th>
<th class='confluenceTh'> Description </th>
<th class='confluenceTh'> Type </th>
<th class='confluenceTh'> Default Value </th>
</tr>
<tr>
<td class='confluenceTd'> foo </td>
<td class='confluenceTd'> Turns feature foo on or off </td>
<td class='confluenceTd'> Boolean </td>
<td class='confluenceTd'> True </td>
</tr>
<tr>
<td class='confluenceTd'> bar </td>
<td class='confluenceTd'> A comma delineated list of bar items (pun intended?) </td>
<td class='confluenceTd'> String </td>
<td class='confluenceTd'> </td>
</tr>
</tbody></table>
</div>
<h3><a name="Asterisk12BridgingProject-RealTimeschemas"></a>RealTime schemas</h3>
<h2><a name="Asterisk12BridgingProject-APIs"></a>APIs</h2>
<p>Add an entry for each Application, Function, AMI command, AMI event, AGI command, CLI command, or other external way of interacting with the features provided by the project. Different APIs require different sets of documentation; in general, sufficient documentation should be provided to create the standard XML documentation for that particular item.</p>
<h1><a name="Asterisk12BridgingProject-Design"></a>Design</h1>
<p>For sufficiently complex projects, a high level design may be needed to illustrate how the project plugs into the overall Asterisk architecture. Sufficiently detailed design of the project should be provided such that newcomers to the Asterisk project are provided a conceptual view of the construction of the implementation.</p>
<p>Note that the design should be independent of the implementation, i.e., if the code is not drastically changed, it should not require updates to this section.</p>
<h1><a name="Asterisk12BridgingProject-TestPlan"></a>Test Plan</h1>
<p>Project should include automated testing, using either the Asterisk Unit Test Framework or the Asterisk Test Suite. Automated testing not only helps collaborators and reviewers verify functionality, but also helps to future proof new functionality against breaking changes in the future. A test plan maps Use Cases, User Stories, or specific APIs to tests that exercise that functionality. Test plans should be broken up by specific pieces of functionality, and should enumerate the tests for each function.</p>
<p>Each test description should provide, at a minimum, the name of the test, the test level (Unit, Integration, or System), and a description of what the test covers. For System level tests (which implies manual testing), a detailed description should be provided such that the test is reproducible by any third party.</p>
<h2><a name="Asterisk12BridgingProject-TestsforUseCase%3ABobcallsAlice"></a>Tests for Use Case: Bob calls Alice</h2>
<div class='table-wrap'>
<table class='confluenceTable'><tbody>
<tr>
<th class='confluenceTh'> Test </th>
<th class='confluenceTh'> Level </th>
<th class='confluenceTh'> Description </th>
</tr>
<tr>
<td class='confluenceTd'> sip_basic_call </td>
<td class='confluenceTd'> Integration </td>
<td class='confluenceTd'> Test a basic call scenario between two SIP UAs and Asterisk </td>
</tr>
<tr>
<td class='confluenceTd'> sip_uri_parse_nominal </td>
<td class='confluenceTd'> Unit </td>
<td class='confluenceTd'> Nominal parsing of SIP URIs </td>
</tr>
<tr>
<td class='confluenceTd'> sip_uri_parse_off_nominal </td>
<td class='confluenceTd'> Unit </td>
<td class='confluenceTd'> Tests that ensure that off nominal SIP URIs are handled properly </td>
</tr>
<tr>
<td class='confluenceTd'> sip_invite_request_test_nominal </td>
<td class='confluenceTd'> Unit </td>
<td class='confluenceTd'> Test INVITE request handling </td>
</tr>
</tbody></table>
</div>
<h1><a name="Asterisk12BridgingProject-ProjectPlanning"></a>Project Planning</h1>
<p>Provide links to the appropriate JIRA issues tracking work related to the project using the {jiraissues} macro (for more information on its usage, see <a href="https://confluence.atlassian.com/display/DOC/JIRA+Issues+Macro" class="external-link" rel="nofollow">JIRA Issues Macro</a>). The sample below uses a public Triage filter - you will need to set up a JIRA issue filter for the macro to pull issues from that is shared with the <b>Public</b> group.</p>
<h2><a name="Asterisk12BridgingProject-JIRAIssues"></a>JIRA Issues</h2>
<div class='panelMacro'><table class='infoMacro'><colgroup><col width='24'><col></colgroup><tr><td valign='top'><img src="/wiki/images/icons/emoticons/information.gif" width="16" height="16" align="absmiddle" alt="" border="0"></td><td>The configuration of Jira/Confluence still needs a few tweaks to show the issues in the macro below. --Matt</td></tr></table></div>
<p>
<table cellspacing="0" class="grid" style="width: 100%">
<tr>
<th colspan="11" style="text-align: left; ">
<a rel="nofollow" href="https://issues.asterisk.org/jira/secure/IssueNavigator.jspa?requestId=11822&tempMax=1000">JIRA Issues</a> (10 issues) </th>
</tr>
<tr>
<th style="text-align: left; text-transform: capitalize;">Type</th>
<th style="text-align: left; text-transform: capitalize;">Key</th>
<th style="text-align: left; text-transform: capitalize;">Summary</th>
<th style="text-align: left; text-transform: capitalize;">Assignee</th>
<th style="text-align: left; text-transform: capitalize;">Reporter</th>
<th style="text-align: left; text-transform: capitalize;">Priority</th>
<th style="text-align: left; text-transform: capitalize;">Status</th>
<th style="text-align: left; text-transform: capitalize;">Resolution</th>
<th style="text-align: left; text-transform: capitalize;">Created</th>
<th style="text-align: left; text-transform: capitalize;">Updated</th>
<th style="text-align: left; text-transform: capitalize;">Due</th>
</tr>
<tr class="rowNormal">
<td nowrap="true">
<a href="https://issues.asterisk.org/jira/browse/ASTERISK-21047"><img src="https://issues.asterisk.org/jira/images/icons/bug.gif" alt="Bug" border="0" /></a>
</td>
<td nowrap="true">
<a href="https://issues.asterisk.org/jira/browse/ASTERISK-21047">ASTERISK-21047</a>
</td>
<td >
<a href="https://issues.asterisk.org/jira/browse/ASTERISK-21047">asterisk crashes during an attended transfer</a>
</td>
<td nowrap="true">
Unassigned
</td>
<td nowrap="true">
piero ferraresso
</td>
<td nowrap="true">
<img src="https://issues.asterisk.org/jira/images/icons/priority_critical.gif" alt="Critical" border="0" />
</td>
<td nowrap="true">
<img src="https://issues.asterisk.org/jira/images/icons/status_document.gif" alt="" border="0" /> Triage
</td>
<td nowrap="true">
<font color="990000">Unresolved</font>
</td>
<td nowrap="true">
Feb 07, 2013
</td>
<td nowrap="true">
Feb 08, 2013
</td>
<td nowrap="true">
</td>
</tr>
<tr class="rowAlternate">
<td nowrap="true">
<a href="https://issues.asterisk.org/jira/browse/ASTERISK-21046"><img src="https://issues.asterisk.org/jira/images/icons/bug.gif" alt="Bug" border="0" /></a>
</td>
<td nowrap="true">
<a href="https://issues.asterisk.org/jira/browse/ASTERISK-21046">ASTERISK-21046</a>
</td>
<td >
<a href="https://issues.asterisk.org/jira/browse/ASTERISK-21046">res_xmpp refcount issue</a>
</td>
<td nowrap="true">
Unassigned
</td>
<td nowrap="true">
marcelloceschia
</td>
<td nowrap="true">
<img src="https://issues.asterisk.org/jira/images/icons/priority_critical.gif" alt="Critical" border="0" />
</td>
<td nowrap="true">
<img src="https://issues.asterisk.org/jira/images/icons/status_document.gif" alt="" border="0" /> Triage
</td>
<td nowrap="true">
<font color="990000">Unresolved</font>
</td>
<td nowrap="true">
Feb 07, 2013
</td>
<td nowrap="true">
Feb 07, 2013
</td>
<td nowrap="true">
</td>
</tr>
<tr class="rowNormal">
<td nowrap="true">
<a href="https://issues.asterisk.org/jira/browse/ASTERISK-21045"><img src="https://issues.asterisk.org/jira/images/icons/bug.gif" alt="Bug" border="0" /></a>
</td>
<td nowrap="true">
<a href="https://issues.asterisk.org/jira/browse/ASTERISK-21045">ASTERISK-21045</a>
</td>
<td >
<a href="https://issues.asterisk.org/jira/browse/ASTERISK-21045">Session refresh reinvites an in progress T.38 dialog back to G.711</a>
</td>
<td nowrap="true">
Unassigned
</td>
<td nowrap="true">
Trevor Peirce
</td>
<td nowrap="true">
<img src="https://issues.asterisk.org/jira/images/icons/priority_minor.gif" alt="Minor" border="0" />
</td>
<td nowrap="true">
<img src="https://issues.asterisk.org/jira/images/icons/status_document.gif" alt="" border="0" /> Triage
</td>
<td nowrap="true">
<font color="990000">Unresolved</font>
</td>
<td nowrap="true">
Feb 06, 2013
</td>
<td nowrap="true">
Feb 06, 2013
</td>
<td nowrap="true">
</td>
</tr>
<tr class="rowAlternate">
<td nowrap="true">
<a href="https://issues.asterisk.org/jira/browse/ASTERISK-21042"><img src="https://issues.asterisk.org/jira/images/icons/bug.gif" alt="Bug" border="0" /></a>
</td>
<td nowrap="true">
<a href="https://issues.asterisk.org/jira/browse/ASTERISK-21042">ASTERISK-21042</a>
</td>
<td >
<a href="https://issues.asterisk.org/jira/browse/ASTERISK-21042">pbx_spool: callfile variables overriding/lost in __ast_request_and_dial()</a>
</td>
<td nowrap="true">
Unassigned
</td>
<td nowrap="true">
Roman S.
</td>
<td nowrap="true">
<img src="https://issues.asterisk.org/jira/images/icons/priority_trivial.gif" alt="Trivial" border="0" />
</td>
<td nowrap="true">
<img src="https://issues.asterisk.org/jira/images/icons/status_document.gif" alt="" border="0" /> Triage
</td>
<td nowrap="true">
<font color="990000">Unresolved</font>
</td>
<td nowrap="true">
Feb 06, 2013
</td>
<td nowrap="true">
Feb 06, 2013
</td>
<td nowrap="true">
</td>
</tr>
<tr class="rowNormal">
<td nowrap="true">
<a href="https://issues.asterisk.org/jira/browse/ASTERISK-21041"><img src="https://issues.asterisk.org/jira/images/icons/bug.gif" alt="Bug" border="0" /></a>
</td>
<td nowrap="true">
<a href="https://issues.asterisk.org/jira/browse/ASTERISK-21041">ASTERISK-21041</a>
</td>
<td >
<a href="https://issues.asterisk.org/jira/browse/ASTERISK-21041">segfault at b ip 00007f4dd3a2abd0 sp 00007f4dacb58408 error 4 in libc-2.11.3.so[7f4dd39ab000+159000]</a>
</td>
<td nowrap="true">
Unassigned
</td>
<td nowrap="true">
Benjamin
</td>
<td nowrap="true">
<img src="https://issues.asterisk.org/jira/images/icons/priority_critical.gif" alt="Critical" border="0" />
</td>
<td nowrap="true">
<img src="https://issues.asterisk.org/jira/images/icons/status_document.gif" alt="" border="0" /> Triage
</td>
<td nowrap="true">
<font color="990000">Unresolved</font>
</td>
<td nowrap="true">
Feb 06, 2013
</td>
<td nowrap="true">
Feb 06, 2013
</td>
<td nowrap="true">
</td>
</tr>
<tr class="rowAlternate">
<td nowrap="true">
<a href="https://issues.asterisk.org/jira/browse/ASTERISK-21040"><img src="https://issues.asterisk.org/jira/images/icons/bug.gif" alt="Bug" border="0" /></a>
</td>
<td nowrap="true">
<a href="https://issues.asterisk.org/jira/browse/ASTERISK-21040">ASTERISK-21040</a>
</td>
<td >
<a href="https://issues.asterisk.org/jira/browse/ASTERISK-21040">Deadlock</a>
</td>
<td nowrap="true">
Unassigned
</td>
<td nowrap="true">
Andrew Nowrot
</td>
<td nowrap="true">
<img src="https://issues.asterisk.org/jira/images/icons/priority_major.gif" alt="Major" border="0" />
</td>
<td nowrap="true">
<img src="https://issues.asterisk.org/jira/images/icons/status_document.gif" alt="" border="0" /> Triage
</td>
<td nowrap="true">
<font color="990000">Unresolved</font>
</td>
<td nowrap="true">
Feb 06, 2013
</td>
<td nowrap="true">
Feb 06, 2013
</td>
<td nowrap="true">
</td>
</tr>
<tr class="rowNormal">
<td nowrap="true">
<a href="https://issues.asterisk.org/jira/browse/ASTERISK-21011"><img src="https://issues.asterisk.org/jira/images/icons/bug.gif" alt="Bug" border="0" /></a>
</td>
<td nowrap="true">
<a href="https://issues.asterisk.org/jira/browse/ASTERISK-21011">ASTERISK-21011</a>
</td>
<td >
<a href="https://issues.asterisk.org/jira/browse/ASTERISK-21011">Asterisk to Asterisk IAX2 trunk registration does not register</a>
</td>
<td nowrap="true">
David Brillert
</td>
<td nowrap="true">
David Brillert
</td>
<td nowrap="true">
<img src="https://issues.asterisk.org/jira/images/icons/priority_major.gif" alt="Major" border="0" />
</td>
<td nowrap="true">
<img src="https://issues.asterisk.org/jira/images/icons/status_document.gif" alt="" border="0" /> Triage
</td>
<td nowrap="true">
<font color="990000">Unresolved</font>
</td>
<td nowrap="true">
Jan 29, 2013
</td>
<td nowrap="true">
Feb 07, 2013
</td>
<td nowrap="true">
</td>
</tr>
<tr class="rowAlternate">
<td nowrap="true">
<a href="https://issues.asterisk.org/jira/browse/ASTERISK-21009"><img src="https://issues.asterisk.org/jira/images/icons/bug.gif" alt="Bug" border="0" /></a>
</td>
<td nowrap="true">
<a href="https://issues.asterisk.org/jira/browse/ASTERISK-21009">ASTERISK-21009</a>
</td>
<td >
<a href="https://issues.asterisk.org/jira/browse/ASTERISK-21009">xmpp_pubsub_unsubscribe: Could not create IQ when creating pubsub unsubscription on client</a>
</td>
<td nowrap="true">
Rusty Newton
</td>
<td nowrap="true">
marcelloceschia
</td>
<td nowrap="true">
<img src="https://issues.asterisk.org/jira/images/icons/priority_major.gif" alt="Major" border="0" />
</td>
<td nowrap="true">
<img src="https://issues.asterisk.org/jira/images/icons/status_document.gif" alt="" border="0" /> Triage
</td>
<td nowrap="true">
<font color="990000">Unresolved</font>
</td>
<td nowrap="true">
Jan 29, 2013
</td>
<td nowrap="true">
Feb 07, 2013
</td>
<td nowrap="true">
</td>
</tr>
<tr class="rowNormal">
<td nowrap="true">
<a href="https://issues.asterisk.org/jira/browse/ASTERISK-20982"><img src="https://issues.asterisk.org/jira/images/icons/bug.gif" alt="Bug" border="0" /></a>
</td>
<td nowrap="true">
<a href="https://issues.asterisk.org/jira/browse/ASTERISK-20982">ASTERISK-20982</a>
</td>
<td >
<a href="https://issues.asterisk.org/jira/browse/ASTERISK-20982">xmpp Segfault when delete node using cli</a>
</td>
<td nowrap="true">
Rusty Newton
</td>
<td nowrap="true">
marcelloceschia
</td>
<td nowrap="true">
<img src="https://issues.asterisk.org/jira/images/icons/priority_major.gif" alt="Major" border="0" />
</td>
<td nowrap="true">
<img src="https://issues.asterisk.org/jira/images/icons/status_document.gif" alt="" border="0" /> Triage
</td>
<td nowrap="true">
<font color="990000">Unresolved</font>
</td>
<td nowrap="true">
Jan 24, 2013
</td>
<td nowrap="true">
Feb 08, 2013
</td>
<td nowrap="true">
</td>
</tr>
<tr class="rowAlternate">
<td nowrap="true">
<a href="https://issues.asterisk.org/jira/browse/ASTERISK-20748"><img src="https://issues.asterisk.org/jira/images/icons/bug.gif" alt="Bug" border="0" /></a>
</td>
<td nowrap="true">
<a href="https://issues.asterisk.org/jira/browse/ASTERISK-20748">ASTERISK-20748</a>
</td>
<td >
<a href="https://issues.asterisk.org/jira/browse/ASTERISK-20748">Asterisk system didn't accept some dtmf digits when It called by a external PBX phone</a>
</td>
<td nowrap="true">
Ankit Mittal
</td>
<td nowrap="true">
Ankit Mittal
</td>
<td nowrap="true">
<img src="https://issues.asterisk.org/jira/images/icons/priority_major.gif" alt="Major" border="0" />
</td>
<td nowrap="true">
<img src="https://issues.asterisk.org/jira/images/icons/status_document.gif" alt="" border="0" /> Triage
</td>
<td nowrap="true">
<font color="990000">Unresolved</font>
</td>
<td nowrap="true">
Nov 28, 2012
</td>
<td nowrap="true">
Feb 06, 2013
</td>
<td nowrap="true">
</td>
</tr>
</table>
</p>
<h2><a name="Asterisk12BridgingProject-Contributors"></a>Contributors</h2>
<div class='table-wrap'>
<table class='confluenceTable'><tbody>
<tr>
<th class='confluenceTh'> Name </th>
<th class='confluenceTh'> E-mail Address </th>
</tr>
<tr>
<td class='confluenceTd'> <a href="/wiki/display/~mjordan" class="confluence-userlink" data-username="mjordan" >Matt Jordan</a> </td>
<td class='confluenceTd'> mjordan@digium.com </td>
</tr>
</tbody></table>
</div>
<h1><a name="Asterisk12BridgingProject-ReferenceInformation"></a>Reference Information</h1>
<p>Include links to code reviews, asterisk-dev mailing list discussions, and any other related information.</p>
</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/Asterisk+12+Bridging+Project">View Online</a>
|
<a href="https://wiki.asterisk.org/wiki/pages/diffpagesbyversion.action?pageId=22088024&revisedVersion=10&originalVersion=9">View Changes</a>
|
<a href="https://wiki.asterisk.org/wiki/display/AST/Asterisk+12+Bridging+Project?showComments=true&showCommentArea=true#addcomment">Add Comment</a>
</div>
</div>
</div>
</div>
</div>
</body>
</html>