[-]
[+]
|
Changed |
asterisk.spec
|
|
[-]
[+]
|
Deleted |
asterisk-1.4.38.tar.bz2/asterisk-1.4.38-summary.html
^
|
@@ -1,363 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head><meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" /><title>Release Summary - asterisk-1.4.38</title></head>
-<body>
-<h1 align="center"><a name="top">Release Summary</a></h1>
-<h3 align="center">asterisk-1.4.38</h3>
-<h3 align="center">Date: 2010-12-02</h3>
-<h3 align="center"><asteriskteam@digium.com></h3>
-<hr/>
-<h2 align="center">Table of Contents</h2>
-<ol>
- <li><a href="#summary">Summary</a></li>
- <li><a href="#contributors">Contributors</a></li>
- <li><a href="#issues">Closed Issues</a></li>
- <li><a href="#commits">Other Changes</a></li>
- <li><a href="#diffstat">Diffstat</a></li>
-</ol>
-<hr/>
-<a name="summary"><h2 align="center">Summary</h2></a>
-<center><a href="#top">[Back to Top]</a></center><br/><p>This release includes only bug fixes. The changes included were made only to address problems that have been identified in this release series. Users should be able to safely upgrade to this version if this release series is already in use. Users considering upgrading from a previous release series are strongly encouraged to review the UPGRADE.txt document as well as the CHANGES document for information about upgrading to this release series.</p>
-<p>The data in this summary reflects changes that have been made since the previous release, asterisk-1.4.37.</p>
-<hr/>
-<a name="contributors"><h2 align="center">Contributors</h2></a>
-<center><a href="#top">[Back to Top]</a></center><br/><p>This table lists the people who have submitted code, those that have tested patches, as well as those that reported issues on the issue tracker that were resolved in this release. For coders, the number is how many of their patches (of any size) were committed into this release. For testers, the number is the number of times their name was listed as assisting with testing a patch. Finally, for reporters, the number is the number of issues that they reported that were closed by commits that went into this release.</p>
-<table width="100%" border="0">
-<tr>
-<td width="33%"><h3>Coders</h3></td>
-<td width="33%"><h3>Testers</h3></td>
-<td width="33%"><h3>Reporters</h3></td>
-</tr>
-<tr valign="top">
-<td>
-14 tilghman<br/>
-10 jpeeler<br/>
-9 rmudgett<br/>
-4 dvossel<br/>
-4 twilson<br/>
-3 alecdavis<br/>
-3 pabelanger<br/>
-3 russell<br/>
-2 mnicholson<br/>
-2 qwell<br/>
-1 bbryant<br/>
-1 camsown<br/>
-1 kuj<br/>
-1 lmadsen<br/>
-1 mdu113<br/>
-1 oej<br/>
-1 RadicAlish<br/>
-1 schmitds<br/>
-1 sruffell<br/>
-1 tbelder<br/>
-</td>
-<td>
-3 alecdavis<br/>
-3 ramonpeek<br/>
-2 davidw<br/>
-1 camsown<br/>
-1 dpetersen<br/>
-1 jamicque<br/>
-1 jmls<br/>
-1 jtodd<br/>
-1 kuj<br/>
-1 lmadsen<br/>
-1 mdu113<br/>
-1 pabelanger<br/>
-1 qwell<br/>
-1 RadicAlish<br/>
-1 rmudgett<br/>
-1 schmidts<br/>
-1 seanbright<br/>
-1 tbelder<br/>
-1 wdoekes<br/>
-1 zerohalo<br/>
-</td>
-<td>
-3 jmls<br/>
-2 davidw<br/>
-1 amorsen<br/>
-1 antonio<br/>
-1 camsown<br/>
-1 dpetersen<br/>
-1 jamicque<br/>
-1 kuj<br/>
-1 kwemheuer<br/>
-1 lftsy<br/>
-1 mdu113<br/>
-1 netfuse<br/>
-1 pabelanger<br/>
-1 RadicAlish<br/>
-1 rain<br/>
-1 ramonpeek<br/>
-1 schmidts<br/>
-1 seanbright<br/>
-1 shin-shoryuken<br/>
-1 tbelder<br/>
-1 tzafrir<br/>
-1 wdoekes<br/>
-1 zerohalo<br/>
-</td>
-</tr>
-</table>
-<hr/>
-<a name="issues"><h2 align="center">Closed Issues</h2></a>
-<center><a href="#top">[Back to Top]</a></center><br/><p>This is a list of all issues from the issue tracker that were closed by changes that went into this release.</p>
-<h3>Category: Applications/app_dial</h3><br/>
-<a href="https://issues.asterisk.org/view.php?id=16946">#16946</a>: Call that clears in same app_dial poll as answer is reported as NOANSWER but NORMAL_CLEARING<br/>
-Revision: <a href="http://svn.digium.com/view/asterisk/branches/1.4?view=revision&revision=291577">291577</a><br/>
-Reporter: davidw<br/>
-Coders: twilson<br/>
-<br/>
-<h3>Category: Applications/app_meetme</h3><br/>
-<a href="https://issues.asterisk.org/view.php?id=17908">#17908</a>: [patch] MeetMe PIN handling broken<br/>
-Revision: <a href="http://svn.digium.com/view/asterisk/branches/1.4?view=revision&revision=287758">287758</a><br/>
-Reporter: kuj<br/>
-Testers: kuj<br/>
-Coders: kuj<br/>
-<br/>
-<h3>Category: Applications/app_voicemail</h3><br/>
-<a href="https://issues.asterisk.org/view.php?id=18240">#18240</a>: [patch] VoicemailMain Exits Without Warning<br/>
-Revision: <a href="http://svn.digium.com/view/asterisk/branches/1.4?view=revision&revision=294903">294903</a><br/>
-Reporter: netfuse<br/>
-Testers: pabelanger<br/>
-Coders: alecdavis<br/>
-<br/>
-<h3>Category: Applications/app_voicemail/ODBC</h3><br/>
-<a href="https://issues.asterisk.org/view.php?id=17803">#17803</a>: [patch] [regression] Forwarding a voicemail with a prepended message does not work<br/>
-Revision: <a href="http://svn.digium.com/view/asterisk/branches/1.4?view=revision&revision=289873">289873</a><br/>
-Reporter: dpetersen<br/>
-Testers: dpetersen<br/>
-Coders: tilghman<br/>
-<br/>
-<h3>Category: CDR/General</h3><br/>
-<a href="https://issues.asterisk.org/view.php?id=17569">#17569</a>: [patch] cdr->src variable is not set anymore in destination channels<br/>
-Revision: <a href="http://svn.digium.com/view/asterisk/branches/1.4?view=revision&revision=289177">289177</a><br/>
-Reporter: tbelder<br/>
-Testers: tbelder<br/>
-Coders: tbelder<br/>
-<br/>
-<h3>Category: CDR/cdr_pgsql</h3><br/>
-<a href="https://issues.asterisk.org/view.php?id=16940">#16940</a>: [patch] Problem inserting CDR records when certain characters are used<br/>
-Revision: <a href="http://svn.digium.com/view/asterisk/branches/1.4?view=revision&revision=288265">288265</a><br/>
-Reporter: jamicque<br/>
-Testers: jamicque<br/>
-Coders: tilghman<br/>
-<br/>
-<h3>Category: Channels/chan_dahdi</h3><br/>
-<a href="https://issues.asterisk.org/view.php?id=16847">#16847</a>: [patch] Deadlock between dahdi_exception and dahdi_indicate<br/>
-Revision: <a href="http://svn.digium.com/view/asterisk/branches/1.4?view=revision&revision=291643">291643</a><br/>
-Reporter: shin-shoryuken<br/>
-Testers: alecdavis, rmudgett<br/>
-Coders: rmudgett<br/>
-<br/>
-<a href="https://issues.asterisk.org/view.php?id=17270">#17270</a>: getting warning message every 4 seconds<br/>
-Revision: <a href="http://svn.digium.com/view/asterisk/branches/1.4?view=revision&revision=294821">294821</a><br/>
-Reporter: jmls<br/>
-Coders: rmudgett<br/>
-<br/>
-<h3>Category: Channels/chan_iax2</h3><br/>
-<a href="https://issues.asterisk.org/view.php?id=17919">#17919</a>: [patch] schedule_delivery calls ast_bridged_channel() on an unlocked channel<br/>
-Revision: <a href="http://svn.digium.com/view/asterisk/branches/1.4?view=revision&revision=288192">288192</a><br/>
-Reporter: rain<br/>
-Coders: rmudgett<br/>
-<br/>
-<h3>Category: Channels/chan_sip/General</h3><br/>
-<a href="https://issues.asterisk.org/view.php?id=16382">#16382</a>: [patch] SIP OPTIONS qualify message forever<br/>
-Revision: <a href="http://svn.digium.com/view/asterisk/branches/1.4?view=revision&revision=294688">294688</a><br/>
-Reporter: lftsy<br/>
-Testers: zerohalo<br/>
-Coders: jpeeler<br/>
-<br/>
-<a href="https://issues.asterisk.org/view.php?id=17892">#17892</a>: [patch] contact header does not get ast_uri_encoded value from p->exten, but dialplan does<br/>
-Revision: <a href="http://svn.digium.com/view/asterisk/branches/1.4?view=revision&revision=289699">289699</a><br/>
-Reporter: wdoekes<br/>
-Testers: wdoekes<br/>
-Coders: jpeeler<br/>
-<br/>
-<a href="https://issues.asterisk.org/view.php?id=18123">#18123</a>: rtautoclear = no or rtautoclear = 0 not respected in sip.conf<br/>
-Revision: <a href="http://svn.digium.com/view/asterisk/branches/1.4?view=revision&revision=293722">293722</a><br/>
-Reporter: zerohalo<br/>
-Coders: jpeeler<br/>
-<br/>
-<a href="https://issues.asterisk.org/view.php?id=18176">#18176</a>: [patch] record priv-recordintro as sln, not gsm<br/>
-Revision: <a href="http://svn.digium.com/view/asterisk/branches/1.4?view=revision&revision=292411">292411</a><br/>
-Reporter: pabelanger<br/>
-Coders: pabelanger<br/>
-<br/>
-<h3>Category: Channels/chan_sip/Subscriptions</h3><br/>
-<a href="https://issues.asterisk.org/view.php?id=17785">#17785</a>: [patch] Encoded URI in a subscription does not work<br/>
-Revision: <a href="http://svn.digium.com/view/asterisk/branches/1.4?view=revision&revision=288112">288112</a><br/>
-Reporter: ramonpeek<br/>
-Testers: ramonpeek<br/>
-Coders: tilghman<br/>
-<br/>
-<a href="https://issues.asterisk.org/view.php?id=17950">#17950</a>: iterate through all ao2_sip dialogs on every subscribe is slow, and not needed<br/>
-Revision: <a href="http://svn.digium.com/view/asterisk/branches/1.4?view=revision&revision=289622">289622</a><br/>
-Reporter: schmidts<br/>
-Testers: schmidts<br/>
-Coders: schmitds<br/>
-<br/>
-<h3>Category: Channels/chan_sip/T.38</h3><br/>
-<a href="https://issues.asterisk.org/view.php?id=16647">#16647</a>: [patch] Session failure with specific SDP-Content (one media specific c= line, no session specific c= line)<br/>
-Revision: <a href="http://svn.digium.com/view/asterisk/branches/1.4?view=revision&revision=288412">288412</a><br/>
-Reporter: kwemheuer<br/>
-Coders: mnicholson<br/>
-<br/>
-<h3>Category: Core/BuildSystem</h3><br/>
-<a href="https://issues.asterisk.org/view.php?id=17314">#17314</a>: [patch] ./configure --with-pri=LIBPATH does not use libpri from LIBPRI_PATH<br/>
-Revision: <a href="http://svn.digium.com/view/asterisk/branches/1.4?view=revision&revision=290750">290750</a><br/>
-Reporter: tzafrir<br/>
-Coders: qwell<br/>
-<br/>
-<h3>Category: Core/General</h3><br/>
-<a href="https://issues.asterisk.org/view.php?id=16057">#16057</a>: [patch] Asterisk crashes with "Fixup failed on channel XXX, strange things may happen."<br/>
-Revision: <a href="http://svn.digium.com/view/asterisk/branches/1.4?view=revision&revision=287682">287682</a><br/>
-Reporter: amorsen<br/>
-Testers: ramonpeek, davidw, alecdavis<br/>
-Coders: alecdavis<br/>
-<br/>
-<a href="https://issues.asterisk.org/view.php?id=17363">#17363</a>: [patch] Redirecting ;1 side of local channel during optimisation causes double free of ;1 side and crash<br/>
-Revision: <a href="http://svn.digium.com/view/asterisk/branches/1.4?view=revision&revision=287684">287684</a><br/>
-Reporter: davidw<br/>
-Testers: ramonpeek, davidw, alecdavis<br/>
-Coders: alecdavis<br/>
-<br/>
-<a href="https://issues.asterisk.org/view.php?id=17698">#17698</a>: CTRL-C from asterisk -vvvvvvvvc has strange results<br/>
-Revision: <a href="http://svn.digium.com/view/asterisk/branches/1.4?view=revision&revision=290862">290862</a><br/>
-Reporter: jmls<br/>
-Coders: jpeeler<br/>
-<br/>
-<h3>Category: Core/ManagerInterface</h3><br/>
-<a href="https://issues.asterisk.org/view.php?id=17987">#17987</a>: [regression] Newchannel event is missing during masquerading process<br/>
-Revision: <a href="http://svn.digium.com/view/asterisk/branches/1.4?view=revision&revision=289094">289094</a><br/>
-Reporter: RadicAlish<br/>
-Testers: RadicAlish<br/>
-Coders: RadicAlish<br/>
-<br/>
-<h3>Category: Core/PBX</h3><br/>
-<a href="https://issues.asterisk.org/view.php?id=18165">#18165</a>: [patch] hint state changes deadlock problem<br/>
-Revision: <a href="http://svn.digium.com/view/asterisk/branches/1.4?view=revision&revision=294384">294384</a><br/>
-Reporter: antonio<br/>
-Coders: jpeeler<br/>
-<br/>
-<h3>Category: PBX/General</h3><br/>
-<a href="https://issues.asterisk.org/view.php?id=17882">#17882</a>: Crash in ast_frame_free<br/>
-Revision: <a href="http://svn.digium.com/view/asterisk/branches/1.4?view=revision&revision=288005">288005</a><br/>
-Reporter: seanbright<br/>
-Testers: seanbright<br/>
-Coders: bbryant<br/>
-<br/>
-<h3>Category: Resources/res_agi</h3><br/>
-<a href="https://issues.asterisk.org/view.php?id=17970">#17970</a>: [patch] res_agi.c:handle_getvariablefull() failes to unlock channel if given channel name of the channel that AGI is running on<br/>
-Revision: <a href="http://svn.digium.com/view/asterisk/branches/1.4?view=revision&revision=289500">289500</a><br/>
-Reporter: mdu113<br/>
-Testers: mdu113<br/>
-Coders: mdu113<br/>
-<br/>
-<h3>Category: Resources/res_jabber</h3><br/>
-<a href="https://issues.asterisk.org/view.php?id=17387">#17387</a>: [patch] Memory corruption from iksemel<br/>
-Revision: <a href="http://svn.digium.com/view/asterisk/branches/1.4?view=revision&revision=290392">290392</a><br/>
-Reporter: jmls<br/>
-Testers: jmls<br/>
-Coders: tilghman<br/>
-<br/>
-<h3>Category: Sounds</h3><br/>
-<a href="https://issues.asterisk.org/view.php?id=17426">#17426</a>: [patch] Australian Accent core sounds submission<br/>
-Revision: <a href="http://svn.digium.com/view/asterisk/branches/1.4?view=revision&revision=292222">292222</a><br/>
-Reporter: camsown<br/>
-Testers: camsown, lmadsen, jtodd, qwell<br/>
-Coders: camsown, lmadsen<br/>
-<br/>
-<hr/>
-<a name="commits"><h2 align="center">Commits Not Associated with an Issue</h2></a>
-<center><a href="#top">[Back to Top]</a></center><br/><p>This is a list of all changes that went into this release that did not directly close an issue from the issue tracker. The commits may have been marked as being related to an issue. If that is the case, the issue numbers are listed here, as well.</p>
-<table width="100%" border="1">
-<tr><td><b>Revision</b></td><td><b>Author</b></td><td><b>Summary</b></td><td><b>Issues Referenced</b></td></tr><tr><td><a href="http://svn.digium.com/view/asterisk/branches/1.4?view=revision&revision=287933">287933</a></td><td>tilghman</td><td>Less than zero is an error, not any non-zero value.</td>
-<td></td></tr><tr><td><a href="http://svn.digium.com/view/asterisk/branches/1.4?view=revision&revision=288116">288116</a></td><td>tilghman</td><td>Underquoted definition of stringfield macro.</td>
-<td></td></tr><tr><td><a href="http://svn.digium.com/view/asterisk/branches/1.4?view=revision&revision=288266">288266</a></td><td>tilghman</td><td>Document addition of encoding parameter.</td>
-<td><a href="https://issues.asterisk.org/view.php?id=16940">#16940</a></td></tr><tr><td><a href="http://svn.digium.com/view/asterisk/branches/1.4?view=revision&revision=288339">288339</a></td><td>russell</td><td>Fix a 100% CPU consumption problem when setting console=yes in asterisk.conf.</td>
-<td></td></tr><tr><td><a href="http://svn.digium.com/view/asterisk/branches/1.4?view=revision&revision=288343">288343</a></td><td>dvossel</td><td>During check_pendings, if the dialog is terminated with a CANCEL, change the invitestate to INV_CANCEL like in sip_hangup.</td>
-<td></td></tr><tr><td><a href="http://svn.digium.com/view/asterisk/branches/1.4?view=revision&revision=288416">288416</a></td><td>dvossel</td><td>RFC3261 section 12.2 explicitly says out of order requests are responded with a 500 Server Internal Error response.</td>
-<td></td></tr><tr><td><a href="http://svn.digium.com/view/asterisk/branches/1.4?view=revision&revision=288499">288499</a></td><td>twilson</td><td>Don't let a Local channel get bridged to itself</td>
-<td></td></tr><tr><td><a href="http://svn.digium.com/view/asterisk/branches/1.4?view=revision&revision=288636">288636</a></td><td>tilghman</td><td>Solaris compatibility fixes</td>
-<td></td></tr><tr><td><a href="http://svn.digium.com/view/asterisk/branches/1.4?view=revision&revision=288746">288746</a></td><td>twilson</td><td>Don't fail a masquerade if it is already being hung up</td>
-<td></td></tr><tr><td><a href="http://svn.digium.com/view/asterisk/branches/1.4?view=revision&revision=289338">289338</a></td><td>qwell</td><td>Allow a manager originate to succeed on forwarded devices.</td>
-<td></td></tr><tr><td><a href="http://svn.digium.com/view/asterisk/branches/1.4?view=revision&revision=289424">289424</a></td><td>russell</td><td>Fix a crash in app_sms.</td>
-<td></td></tr><tr><td><a href="http://svn.digium.com/view/asterisk/branches/1.4?view=revision&revision=289703">289703</a></td><td>pabelanger</td><td>Disable debugging by default</td>
-<td></td></tr><tr><td><a href="http://svn.digium.com/view/asterisk/branches/1.4?view=revision&revision=289797">289797</a></td><td>jpeeler</td><td>Change RFC2833 DTMF event duration on end to report actual elapsed time.</td>
-<td></td></tr><tr><td><a href="http://svn.digium.com/view/asterisk/branches/1.4?view=revision&revision=289949">289949</a></td><td>oej</td><td>Add documentation for undocumented option to AMI action originate</td>
-<td></td></tr><tr><td><a href="http://svn.digium.com/view/asterisk/branches/1.4?view=revision&revision=290100">290100</a></td><td>tilghman</td><td>Automatically re-run configure test for menuselect, when the relevant makeopts settings change.</td>
-<td></td></tr><tr><td><a href="http://svn.digium.com/view/asterisk/branches/1.4?view=revision&revision=290177">290177</a></td><td>tilghman</td><td>Fixing Mac OS X auto-builder.</td>
-<td></td></tr><tr><td><a href="http://svn.digium.com/view/asterisk/branches/1.4?view=revision&revision=290323">290323</a></td><td>rmudgett</td><td>Merged revision 258974 from</td>
-<td></td></tr><tr><td><a href="http://svn.digium.com/view/asterisk/branches/1.4?view=revision&revision=291109">291109</a></td><td>rmudgett</td><td>Add missing unlock to an exception condition in reload_config().</td>
-<td></td></tr><tr><td><a href="http://svn.digium.com/view/asterisk/branches/1.4?view=revision&revision=291263">291263</a></td><td>tilghman</td><td>Oops, incorrect range (although unallocated at ARIN)</td>
-<td></td></tr><tr><td><a href="http://svn.digium.com/view/asterisk/branches/1.4?view=revision&revision=291392">291392</a></td><td>russell</td><td>Lock pvt so pvt->owner can't disappear when queueing up a frame.</td>
-<td></td></tr><tr><td><a href="http://svn.digium.com/view/asterisk/branches/1.4?view=revision&revision=291862">291862</a></td><td>twilson</td><td>Don't access o->next after freeing o on unload</td>
-<td></td></tr><tr><td><a href="http://svn.digium.com/view/asterisk/branches/1.4?view=revision&revision=291938">291938</a></td><td>pabelanger</td><td>Clean up formatting.</td>
-<td></td></tr><tr><td><a href="http://svn.digium.com/view/asterisk/branches/1.4?view=revision&revision=292223">292223</a></td><td>jpeeler</td><td>Fix improper operator key acceptance and clean up temp recording files.</td>
-<td></td></tr><tr><td><a href="http://svn.digium.com/view/asterisk/branches/1.4?view=revision&revision=292866">292866</a></td><td>dvossel</td><td>This patch turns chan_local pvts into astobj2 objects.</td>
-<td></td></tr><tr><td><a href="http://svn.digium.com/view/asterisk/branches/1.4?view=revision&revision=293004">293004</a></td><td>jpeeler</td><td>Fix inprocess_container in voicemail to correctly restrict max messages.</td>
-<td></td></tr><tr><td><a href="http://svn.digium.com/view/asterisk/branches/1.4?view=revision&revision=293194">293194</a></td><td>tilghman</td><td>"!00" evaluated as false, which is incorrect. Fixing.</td>
-<td></td></tr><tr><td><a href="http://svn.digium.com/view/asterisk/branches/1.4?view=revision&revision=293339">293339</a></td><td>rmudgett</td><td>Remove some code that serves no purpose.</td>
-<td></td></tr><tr><td><a href="http://svn.digium.com/view/asterisk/branches/1.4?view=revision&revision=293416">293416</a></td><td>rmudgett</td><td>Remove some more code that serves no purpose.</td>
-<td></td></tr><tr><td><a href="http://svn.digium.com/view/asterisk/branches/1.4?view=revision&revision=293639">293639</a></td><td>rmudgett</td><td>Make warning message have more useful information in it.</td>
-<td></td></tr><tr><td><a href="http://svn.digium.com/view/asterisk/branches/1.4?view=revision&revision=293805">293805</a></td><td>rmudgett</td><td>Party A in an analog 3-way call would continue to hear ringback after party C answers.</td>
-<td></td></tr><tr><td><a href="http://svn.digium.com/view/asterisk/branches/1.4?view=revision&revision=293922">293922</a></td><td>dvossel</td><td>Fixes ringback tone on feature semi-attended transfer</td>
-<td></td></tr><tr><td><a href="http://svn.digium.com/view/asterisk/branches/1.4?view=revision&revision=293968">293968</a></td><td>sruffell</td><td>codecs/codec_dahdi: Prevent "choppy" audio when receiving unexpected frame sizes.</td>
-<td></td></tr><tr><td><a href="http://svn.digium.com/view/asterisk/branches/1.4?view=revision&revision=294163">294163</a></td><td>mnicholson</td><td>Modify our handling of 491 responses to drop any pending reinvite retry scheduler entries if we get a new 491.</td>
-<td></td></tr><tr><td><a href="http://svn.digium.com/view/asterisk/branches/1.4?view=revision&revision=294641">294641</a></td><td>jpeeler</td><td>One small addition to 294384 found while very carefully merging to 1.6.</td>
-<td></td></tr><tr><td><a href="http://svn.digium.com/view/asterisk/branches/1.4?view=revision&revision=294739">294739</a></td><td>jpeeler</td><td>I didn't mean to merge this, sorry</td>
-<td></td></tr><tr><td><a href="http://svn.digium.com/view/asterisk/branches/1.4?view=revision&revision=295026">295026</a></td><td>tilghman</td><td>Create test verifying results of expression parser</td>
-<td></td></tr><tr><td><a href="http://svn.digium.com/view/asterisk/branches/1.4?view=revision&revision=295031">295031</a></td><td>tilghman</td><td>Err, oops. Made it const to verify that it wasn't altered, but forgot to revert before commit.</td>
-<td></td></tr></table>
-<hr/>
-<a name="diffstat"><h2 align="center">Diffstat Results</h2></a>
-<center><a href="#top">[Back to Top]</a></center><br/><p>This is a summary of the changes to the source code that went into this release that was generated using the diffstat utility.</p>
-<pre>
-UPGRADE.txt | 5
-apps/app_dial.c | 2
-apps/app_meetme.c | 18 -
-apps/app_sms.c | 6
-apps/app_voicemail.c | 166 +++++++----
-autoconf/ast_ext_lib.m4 | 1
-cdr/cdr_pgsql.c | 25 +
-channels/chan_dahdi.c | 372 ++++++++++++++++++--------
-channels/chan_iax2.c | 220 +++++++++------
-channels/chan_local.c | 313 ++++++++++++----------
-channels/chan_oss.c | 9
-channels/chan_sip.c | 158 +++++++----
-codecs/codec_dahdi.c | 8
-configs/cdr_pgsql.conf.sample | 1
-configs/gtalk.conf.sample | 24 -
-configs/jabber.conf.sample | 30 +-
-configure.ac | 18 +
-contrib/valgrind.supp | 2
-include/asterisk.h | 1
-include/asterisk/autoconfig.h.in | 53 +--
-include/asterisk/channel.h | 13
-include/asterisk/compat.h | 4
-include/asterisk/rtp.h | 1
-include/asterisk/stringfields.h | 4
-main/acl.c | 4
-main/ast_expr2.c | 540 ++++++++++++++++++++++++---------------
-main/ast_expr2.h | 67 +---
-main/ast_expr2.y | 4
-main/asterisk.c | 14 -
-main/asterisk.exports | 1
-main/channel.c | 62 +++-
-main/manager.c | 1
-main/pbx.c | 301 ++++++++++++++-------
-main/rtp.c | 16 +
-main/strcompat.c | 13
-res/res_agi.c | 2
-res/res_features.c | 5
-res/res_jabber.c | 11
-sounds/Makefile | 17 -
-sounds/sounds.xml | 14 -
-tests/test_expr.c | 191 +++++++++++++
-41 files changed, 1787 insertions(+), 930 deletions(-)
-</pre><br/>
-<hr/>
-</body>
-</html>
|
[-]
[+]
|
Deleted |
asterisk-1.4.38.tar.bz2/asterisk-1.4.38-summary.txt
^
|
@@ -1,476 +0,0 @@
- Release Summary
-
- asterisk-1.4.38
-
- Date: 2010-12-02
-
- <asteriskteam@digium.com>
-
- ----------------------------------------------------------------------
-
- Table of Contents
-
- 1. Summary
- 2. Contributors
- 3. Closed Issues
- 4. Other Changes
- 5. Diffstat
-
- ----------------------------------------------------------------------
-
- Summary
-
- [Back to Top]
-
- This release includes only bug fixes. The changes included were made only
- to address problems that have been identified in this release series.
- Users should be able to safely upgrade to this version if this release
- series is already in use. Users considering upgrading from a previous
- release series are strongly encouraged to review the UPGRADE.txt document
- as well as the CHANGES document for information about upgrading to this
- release series.
-
- The data in this summary reflects changes that have been made since the
- previous release, asterisk-1.4.37.
-
- ----------------------------------------------------------------------
-
- Contributors
-
- [Back to Top]
-
- This table lists the people who have submitted code, those that have
- tested patches, as well as those that reported issues on the issue tracker
- that were resolved in this release. For coders, the number is how many of
- their patches (of any size) were committed into this release. For testers,
- the number is the number of times their name was listed as assisting with
- testing a patch. Finally, for reporters, the number is the number of
- issues that they reported that were closed by commits that went into this
- release.
-
- Coders Testers Reporters
- 14 tilghman 3 alecdavis 3 jmls
- 10 jpeeler 3 ramonpeek 2 davidw
- 9 rmudgett 2 davidw 1 amorsen
- 4 dvossel 1 camsown 1 antonio
- 4 twilson 1 dpetersen 1 camsown
- 3 alecdavis 1 jamicque 1 dpetersen
- 3 pabelanger 1 jmls 1 jamicque
- 3 russell 1 jtodd 1 kuj
- 2 mnicholson 1 kuj 1 kwemheuer
- 2 qwell 1 lmadsen 1 lftsy
- 1 bbryant 1 mdu113 1 mdu113
- 1 camsown 1 pabelanger 1 netfuse
- 1 kuj 1 qwell 1 pabelanger
- 1 lmadsen 1 RadicAlish 1 RadicAlish
- 1 mdu113 1 rmudgett 1 rain
- 1 oej 1 schmidts 1 ramonpeek
- 1 RadicAlish 1 seanbright 1 schmidts
- 1 schmitds 1 tbelder 1 seanbright
- 1 sruffell 1 wdoekes 1 shin-shoryuken
- 1 tbelder 1 zerohalo 1 tbelder
- 1 tzafrir
- 1 wdoekes
- 1 zerohalo
-
- ----------------------------------------------------------------------
-
- Closed Issues
-
- [Back to Top]
-
- This is a list of all issues from the issue tracker that were closed by
- changes that went into this release.
-
- Category: Applications/app_dial
-
- #16946: Call that clears in same app_dial poll as answer is reported as
- NOANSWER but NORMAL_CLEARING
- Revision: 291577
- Reporter: davidw
- Coders: twilson
-
- Category: Applications/app_meetme
-
- #17908: [patch] MeetMe PIN handling broken
- Revision: 287758
- Reporter: kuj
- Testers: kuj
- Coders: kuj
-
- Category: Applications/app_voicemail
-
- #18240: [patch] VoicemailMain Exits Without Warning
- Revision: 294903
- Reporter: netfuse
- Testers: pabelanger
- Coders: alecdavis
-
- Category: Applications/app_voicemail/ODBC
-
- #17803: [patch] [regression] Forwarding a voicemail with a prepended
- message does not work
- Revision: 289873
- Reporter: dpetersen
- Testers: dpetersen
- Coders: tilghman
-
- Category: CDR/General
-
- #17569: [patch] cdr->src variable is not set anymore in destination
- channels
- Revision: 289177
- Reporter: tbelder
- Testers: tbelder
- Coders: tbelder
-
- Category: CDR/cdr_pgsql
-
- #16940: [patch] Problem inserting CDR records when certain characters are
- used
- Revision: 288265
- Reporter: jamicque
- Testers: jamicque
- Coders: tilghman
-
- Category: Channels/chan_dahdi
-
- #16847: [patch] Deadlock between dahdi_exception and dahdi_indicate
- Revision: 291643
- Reporter: shin-shoryuken
- Testers: alecdavis, rmudgett
- Coders: rmudgett
-
- #17270: getting warning message every 4 seconds
- Revision: 294821
- Reporter: jmls
- Coders: rmudgett
-
- Category: Channels/chan_iax2
-
- #17919: [patch] schedule_delivery calls ast_bridged_channel() on an
- unlocked channel
- Revision: 288192
- Reporter: rain
- Coders: rmudgett
-
- Category: Channels/chan_sip/General
-
- #16382: [patch] SIP OPTIONS qualify message forever
- Revision: 294688
- Reporter: lftsy
- Testers: zerohalo
- Coders: jpeeler
-
- #17892: [patch] contact header does not get ast_uri_encoded value from
- p->exten, but dialplan does
- Revision: 289699
- Reporter: wdoekes
- Testers: wdoekes
- Coders: jpeeler
-
- #18123: rtautoclear = no or rtautoclear = 0 not respected in sip.conf
- Revision: 293722
- Reporter: zerohalo
- Coders: jpeeler
-
- #18176: [patch] record priv-recordintro as sln, not gsm
- Revision: 292411
- Reporter: pabelanger
- Coders: pabelanger
-
- Category: Channels/chan_sip/Subscriptions
-
- #17785: [patch] Encoded URI in a subscription does not work
- Revision: 288112
- Reporter: ramonpeek
- Testers: ramonpeek
- Coders: tilghman
-
- #17950: iterate through all ao2_sip dialogs on every subscribe is slow,
- and not needed
- Revision: 289622
- Reporter: schmidts
- Testers: schmidts
- Coders: schmitds
-
- Category: Channels/chan_sip/T.38
-
- #16647: [patch] Session failure with specific SDP-Content (one media
- specific c= line, no session specific c= line)
- Revision: 288412
- Reporter: kwemheuer
- Coders: mnicholson
-
- Category: Core/BuildSystem
-
- #17314: [patch] ./configure --with-pri=LIBPATH does not use libpri from
- LIBPRI_PATH
- Revision: 290750
- Reporter: tzafrir
- Coders: qwell
-
- Category: Core/General
-
- #16057: [patch] Asterisk crashes with "Fixup failed on channel XXX,
- strange things may happen."
- Revision: 287682
- Reporter: amorsen
- Testers: ramonpeek, davidw, alecdavis
- Coders: alecdavis
-
- #17363: [patch] Redirecting ;1 side of local channel during optimisation
- causes double free of ;1 side and crash
- Revision: 287684
- Reporter: davidw
- Testers: ramonpeek, davidw, alecdavis
- Coders: alecdavis
-
- #17698: CTRL-C from asterisk -vvvvvvvvc has strange results
- Revision: 290862
- Reporter: jmls
- Coders: jpeeler
-
- Category: Core/ManagerInterface
-
- #17987: [regression] Newchannel event is missing during masquerading
- process
- Revision: 289094
- Reporter: RadicAlish
- Testers: RadicAlish
- Coders: RadicAlish
-
- Category: Core/PBX
-
- #18165: [patch] hint state changes deadlock problem
- Revision: 294384
- Reporter: antonio
- Coders: jpeeler
-
- Category: PBX/General
-
- #17882: Crash in ast_frame_free
- Revision: 288005
- Reporter: seanbright
- Testers: seanbright
- Coders: bbryant
-
- Category: Resources/res_agi
-
- #17970: [patch] res_agi.c:handle_getvariablefull() failes to unlock
- channel if given channel name of the channel that AGI is running on
- Revision: 289500
- Reporter: mdu113
- Testers: mdu113
- Coders: mdu113
-
- Category: Resources/res_jabber
-
- #17387: [patch] Memory corruption from iksemel
- Revision: 290392
- Reporter: jmls
- Testers: jmls
- Coders: tilghman
-
- Category: Sounds
-
- #17426: [patch] Australian Accent core sounds submission
- Revision: 292222
- Reporter: camsown
- Testers: camsown, lmadsen, jtodd, qwell
- Coders: camsown, lmadsen
-
- ----------------------------------------------------------------------
-
- Commits Not Associated with an Issue
-
- [Back to Top]
-
- This is a list of all changes that went into this release that did not
- directly close an issue from the issue tracker. The commits may have been
- marked as being related to an issue. If that is the case, the issue
- numbers are listed here, as well.
-
- +------------------------------------------------------------------------+
- | Revision | Author | Summary | Issues |
- | | | | Referenced |
- |----------+------------+-----------------------------------+------------|
- | 287933 | tilghman | Less than zero is an error, not | |
- | | | any non-zero value. | |
- |----------+------------+-----------------------------------+------------|
- | 288116 | tilghman | Underquoted definition of | |
- | | | stringfield macro. | |
- |----------+------------+-----------------------------------+------------|
- | 288266 | tilghman | Document addition of encoding | #16940 |
- | | | parameter. | |
- |----------+------------+-----------------------------------+------------|
- | | | Fix a 100% CPU consumption | |
- | 288339 | russell | problem when setting console=yes | |
- | | | in asterisk.conf. | |
- |----------+------------+-----------------------------------+------------|
- | | | During check_pendings, if the | |
- | 288343 | dvossel | dialog is terminated with a | |
- | | | CANCEL, change the invitestate to | |
- | | | INV_CANCEL like in sip_hangup. | |
- |----------+------------+-----------------------------------+------------|
- | | | RFC3261 section 12.2 explicitly | |
- | 288416 | dvossel | says out of order requests are | |
- | | | responded with a 500 Server | |
- | | | Internal Error response. | |
- |----------+------------+-----------------------------------+------------|
- | 288499 | twilson | Don't let a Local channel get | |
- | | | bridged to itself | |
- |----------+------------+-----------------------------------+------------|
- | 288636 | tilghman | Solaris compatibility fixes | |
- |----------+------------+-----------------------------------+------------|
- | 288746 | twilson | Don't fail a masquerade if it is | |
- | | | already being hung up | |
- |----------+------------+-----------------------------------+------------|
- | 289338 | qwell | Allow a manager originate to | |
- | | | succeed on forwarded devices. | |
- |----------+------------+-----------------------------------+------------|
- | 289424 | russell | Fix a crash in app_sms. | |
- |----------+------------+-----------------------------------+------------|
- | 289703 | pabelanger | Disable debugging by default | |
- |----------+------------+-----------------------------------+------------|
- | | | Change RFC2833 DTMF event | |
- | 289797 | jpeeler | duration on end to report actual | |
- | | | elapsed time. | |
- |----------+------------+-----------------------------------+------------|
- | | | Add documentation for | |
- | 289949 | oej | undocumented option to AMI action | |
- | | | originate | |
- |----------+------------+-----------------------------------+------------|
- | | | Automatically re-run configure | |
- | 290100 | tilghman | test for menuselect, when the | |
- | | | relevant makeopts settings | |
- | | | change. | |
- |----------+------------+-----------------------------------+------------|
- | 290177 | tilghman | Fixing Mac OS X auto-builder. | |
- |----------+------------+-----------------------------------+------------|
- | 290323 | rmudgett | Merged revision 258974 from | |
- |----------+------------+-----------------------------------+------------|
- | | | Add missing unlock to an | |
- | 291109 | rmudgett | exception condition in | |
- | | | reload_config(). | |
- |----------+------------+-----------------------------------+------------|
- | 291263 | tilghman | Oops, incorrect range (although | |
- | | | unallocated at ARIN) | |
- |----------+------------+-----------------------------------+------------|
- | | | Lock pvt so pvt->owner can't | |
- | 291392 | russell | disappear when queueing up a | |
- | | | frame. | |
- |----------+------------+-----------------------------------+------------|
- | 291862 | twilson | Don't access o->next after | |
- | | | freeing o on unload | |
- |----------+------------+-----------------------------------+------------|
- | 291938 | pabelanger | Clean up formatting. | |
- |----------+------------+-----------------------------------+------------|
- | | | Fix improper operator key | |
- | 292223 | jpeeler | acceptance and clean up temp | |
- | | | recording files. | |
- |----------+------------+-----------------------------------+------------|
- | 292866 | dvossel | This patch turns chan_local pvts | |
- | | | into astobj2 objects. | |
- |----------+------------+-----------------------------------+------------|
- | | | Fix inprocess_container in | |
- | 293004 | jpeeler | voicemail to correctly restrict | |
- | | | max messages. | |
- |----------+------------+-----------------------------------+------------|
- | 293194 | tilghman | "!00" evaluated as false, which | |
- | | | is incorrect. Fixing. | |
- |----------+------------+-----------------------------------+------------|
- | 293339 | rmudgett | Remove some code that serves no | |
- | | | purpose. | |
- |----------+------------+-----------------------------------+------------|
- | 293416 | rmudgett | Remove some more code that serves | |
- | | | no purpose. | |
- |----------+------------+-----------------------------------+------------|
- | 293639 | rmudgett | Make warning message have more | |
- | | | useful information in it. | |
- |----------+------------+-----------------------------------+------------|
- | | | Party A in an analog 3-way call | |
- | 293805 | rmudgett | would continue to hear ringback | |
- | | | after party C answers. | |
- |----------+------------+-----------------------------------+------------|
- | 293922 | dvossel | Fixes ringback tone on feature | |
- | | | semi-attended transfer | |
- |----------+------------+-----------------------------------+------------|
- | | | codecs/codec_dahdi: Prevent | |
- | 293968 | sruffell | "choppy" audio when receiving | |
- | | | unexpected frame sizes. | |
- |----------+------------+-----------------------------------+------------|
- | | | Modify our handling of 491 | |
- | 294163 | mnicholson | responses to drop any pending | |
- | | | reinvite retry scheduler entries | |
- | | | if we get a new 491. | |
- |----------+------------+-----------------------------------+------------|
- | | | One small addition to 294384 | |
- | 294641 | jpeeler | found while very carefully | |
- | | | merging to 1.6. | |
- |----------+------------+-----------------------------------+------------|
- | 294739 | jpeeler | I didn't mean to merge this, | |
- | | | sorry | |
- |----------+------------+-----------------------------------+------------|
- | 295026 | tilghman | Create test verifying results of | |
- | | | expression parser | |
- |----------+------------+-----------------------------------+------------|
- | | | Err, oops. Made it const to | |
- | 295031 | tilghman | verify that it wasn't altered, | |
- | | | but forgot to revert before | |
- | | | commit. | |
- +------------------------------------------------------------------------+
-
- ----------------------------------------------------------------------
-
- Diffstat Results
-
- [Back to Top]
-
- This is a summary of the changes to the source code that went into this
- release that was generated using the diffstat utility.
-
- UPGRADE.txt | 5
- apps/app_dial.c | 2
- apps/app_meetme.c | 18 -
- apps/app_sms.c | 6
- apps/app_voicemail.c | 166 +++++++----
- autoconf/ast_ext_lib.m4 | 1
- cdr/cdr_pgsql.c | 25 +
- channels/chan_dahdi.c | 372 ++++++++++++++++++--------
- channels/chan_iax2.c | 220 +++++++++------
- channels/chan_local.c | 313 ++++++++++++----------
- channels/chan_oss.c | 9
- channels/chan_sip.c | 158 +++++++----
- codecs/codec_dahdi.c | 8
- configs/cdr_pgsql.conf.sample | 1
- configs/gtalk.conf.sample | 24 -
- configs/jabber.conf.sample | 30 +-
- configure.ac | 18 +
- contrib/valgrind.supp | 2
- include/asterisk.h | 1
- include/asterisk/autoconfig.h.in | 53 +--
- include/asterisk/channel.h | 13
- include/asterisk/compat.h | 4
- include/asterisk/rtp.h | 1
- include/asterisk/stringfields.h | 4
- main/acl.c | 4
- main/ast_expr2.c | 540 ++++++++++++++++++++++++---------------
- main/ast_expr2.h | 67 +---
- main/ast_expr2.y | 4
- main/asterisk.c | 14 -
- main/asterisk.exports | 1
- main/channel.c | 62 +++-
- main/manager.c | 1
- main/pbx.c | 301 ++++++++++++++-------
- main/rtp.c | 16 +
- main/strcompat.c | 13
- res/res_agi.c | 2
- res/res_features.c | 5
- res/res_jabber.c | 11
- sounds/Makefile | 17 -
- sounds/sounds.xml | 14 -
- tests/test_expr.c | 191 +++++++++++++
- 41 files changed, 1787 insertions(+), 930 deletions(-)
-
- ----------------------------------------------------------------------
|
[-]
[+]
|
Changed |
asterisk-1.4.39.tar.bz2/.version
^
|
@@ -1 +1 @@
-1.4.38
+1.4.39
|
[-]
[+]
|
Changed |
asterisk-1.4.39.tar.bz2/ChangeLog
^
|
@@ -1,3 +1,327 @@
+2011-01-12 Leif Madsen <lmadsen@digium.com>
+
+ * Asterisk 1.4.39 Released.
+
+2010-12-13 Leif Madsen <lmadsen@digium.com>
+
+ * Asterisk 1.4.39-rc1 Released.
+
+2010-12-09 22:00 +0000 [r297959] Terry Wilson <twilson@digium.com>
+
+ * channels/chan_sip.c: Ignore spurious REGISTER requests If a
+ REGISTER request with a Call-ID matching an existing transaction
+ is received it was possible that the REGISTER request would
+ overwrite the initreq of the private structure. This info is used
+ to generate messages for other responses in the transaction. This
+ patch ignores REGISTER requests that match non-REGISTER
+ transactions. (closes issue #18051) Reported by: eeman Tested by:
+ twilson Review: https://reviewboard.asterisk.org/r/1050/
+
+2010-12-07 22:57 +0000 [r297823] Jeff Peeler <jpeeler@digium.com>
+
+ * main/channel.c: Revert code that changed SSRC for DTMF. Some
+ previous behavior was attempted to be restored, but mistakingly I
+ did not realize that the previous behavior was incorrect. This
+ fixes DTMF not being detected since DTMF shouldn't cause the SSRC
+ to change. (related to issue #17404) (closes issue #18189)
+ (closes issue #18352) Reported by: marcbou Tested by: cmbaker82
+
+2010-12-07 22:35 +0000 [r297818] Tilghman Lesher <tlesher@digium.com>
+
+ * Makefile, utils/muted.c, contrib/init.d/org.asterisk.muted.plist
+ (added): Use non-deprecated APIs for CoreAudio Review:
+ https://reviewboard.asterisk.org/r/1040/
+
+2010-12-07 15:23 +0000 [r297775] Sean Bright <sean@malleable.com>
+
+ * main/astobj2.c: Avoid a crash if we don't pass an argument to
+ 'astobj2 test.'
+
+2010-12-07 00:07 +0000 [r297689] Tilghman Lesher <tlesher@digium.com>
+
+ * apps/app_followme.c: Don't create a Local channel if the target
+ extension does not exist. (closes issue #18126) Reported by:
+ junky Patches: followme.diff uploaded by junky (license 177)
+ (partially restructured by me to avoid a possible memory leak)
+
+2010-12-06 21:57 +0000 [r297603] Jeff Peeler <jpeeler@digium.com>
+
+ * channels/chan_sip.c: Improve handling of REGISTER requests with
+ multiple contact headers. The changes here attempt to more
+ strictly follow RFC 3261 section 10.3. Basically the following
+ will now cause a 400 Bad Response to be returned, if: - multiple
+ Contact headers are present with one set to expire all bindings
+ ("*") - wildcard parameter is specified for Contact without
+ Expires header or Expires header is not set to zero. ABE-2442
+ ABE-2443
+
+2010-12-02 20:01 +0000 [r297404] Paul Belanger <pabelanger@digium.com>
+
+ * Makefile: Resolve compile error under FreeBSD We now set
+ _ASTCFLAGS+=-march=i686 for i386 processors, still allowing
+ ASTCFLAGS to override the setting. Review:
+ https://reviewboard.asterisk.org/r/1043/
+
+2010-12-02 18:00 +0000 [r297310] Terry Wilson <twilson@digium.com>
+
+ * main/abstract_jb.c: Initialize offset for adaptive jitter buffer
+ When the adaptive jitter buffer is enabled in sip.conf, the first
+ frame placed in the jitter buffer fails with something like:
+ jb_warning_output: Resyncing the jb. last_delay 0, this delay
+ -215886466, threshold 1000, new offset 215886466 This happens
+ because the offset is not initialized before calling jb_put().
+ This patch modifies jb_put_first_adaptive() to set the offset to
+ the frame's timestamp. Review:
+ https://reviewboard.asterisk.org/r/1041/
+
+2010-12-02 13:16 +0000 [r297228] Russell Bryant <russell@digium.com>
+
+ * apps/app_meetme.c: Add "DAHDI" to a couple of app_meetme error
+ messages. This is in response to some questions on IRC. To the
+ user, there was nothing that made it obvious that this error had
+ anything to do with DAHDI not being loaded.
+
+2010-12-02 08:37 +0000 [r297185] Olle Johansson <oej@edvina.net>
+
+ * channels/chan_sip.c: If we get a NOTIFY from a non-existing
+ subscription we should answer with 481, not bad event. If we
+ answer 481 the subscription that we don't want will be cancelled.
+
+2010-12-01 17:50 +0000 [r297072] Jeff Peeler <jpeeler@digium.com>
+
+ * channels/chan_sip.c: Fix not stopping MOH when transfered local
+ channel queue member is answered. The problem here is only
+ present when local channels are used with the MOH passthru option
+ as well as no optimization (/nm). I will describe the slightly
+ bizarre scenario that was used to test, where phones B and C are
+ queue members: Phone A dials into a queue with two members using
+ local channels and the above options. Phone B answers. Phone A
+ blind transfers phone B into the same queue. Phone A hangs up.
+ Phone C answers, but phone B didn't stop playing MOH. In this
+ scenario, the unhold frame that should have gotten to phone B
+ never arrived due to the masquerade from the blind transfer. This
+ is usually fine since app_queue manages the starting and stopping
+ of MOH. However, with the passthrough option enabled when
+ app_queue attempts to stop MOH it tries to do so on the local
+ channel rather than the real channel. The easiest solution was to
+ just make sure to send an unhold frame during the transfer since
+ it wouldn't make sense to have MOH playing after a transfer
+ anyway. This only modifies SIP transfers, but the other transfers
+ did not seem to be a problem. If DTMF based transfers were a
+ problem it might be okay to add ast_moh_stop to finishup, but I
+ didn't want to have to add that unless required. ABE-2624
+
+2010-12-01 16:59 +0000 [r296990] Tilghman Lesher <tlesher@digium.com>
+
+ * include/asterisk/frame.h: Clarify documentation on how we store
+ codec preference lists. (closes issue #18397) Reported by:
+ birgita
+
+2010-12-01 00:23 +0000 [r296868] Jeff Peeler <jpeeler@digium.com>
+
+ * apps/app_voicemail.c: Properly restore backup information file
+ when hanging up during message prepending. ABE-2654
+
+2010-12-01 00:20 +0000 [r296867] Tilghman Lesher <tlesher@digium.com>
+
+ * main/asterisk.c, channels/chan_iax2.c: Get rid of the annoying
+ startup and shutdown errors on OS X. This mainly deals with the
+ problem of constructors on platforms where an explicit
+ constructor order cannot be specified (any system with gcc 4.2 or
+ less). However, this is only a problem on those systems where we
+ need to initialize mutexes with a constructor, because we have
+ other code that also relies upon constructors, and we cannot
+ specify that mutexes are initialized first (and destroyed last).
+ There are two approaches to dealing with this issue, related to
+ whether the code exists in the core Asterisk binary or in a
+ separate code module. In the core case, constructors are run
+ immediately upon load, and the file_versions list mutex needs to
+ be already initialized, as it is referenced in the first
+ constructor within each core source file. In this case, we use
+ pthread_once to ensure that the mutex is initialized immediately
+ before it is used for the first time. The only caveat is that the
+ mutex is not ever destroyed, but because this is the core, it
+ makes no real difference; the only time when destruction is safe
+ would be just prior to process destruction, which takes care of
+ that anyway. And due to using pthread_once, the mutex will never
+ be reinitialized, which means only one structure has leaked at
+ the end of the process. Hence, it is not a problematic leak. The
+ second approach is to use the load_module and unload_module
+ routines, which, for obvious reasons, exist only in loadable
+ modules. In this second case, we don't have a problem with the
+ constructors, but only with destructor order, because mutexes can
+ be destroyed before their final usage is employed. However, we
+ need the mutexes to still be destroyed, in certain scenarios: if
+ the module is unloaded prior to the process ending, it should be
+ clean, with no allocations by the module hanging around after
+ that point in time.
+
+2010-11-29 22:49 +0000 [r296670] Paul Belanger <pabelanger@digium.com>
+
+ * channels/chan_iax2.c: Make sure nothing else is needed before
+ destroying the scheduler. (closes issue #18398) Reported by:
+ pabelanger
+
+2010-11-26 09:53 +0000 [r296309] Olle Johansson <oej@edvina.net>
+
+ * main/say.c: Fix bugs in saying numbers using the Swedish language
+ syntax (closes issue #18355) Reported by: oej Patch by: oej Much
+ help from Peter Lindahl. Testing by the ClearIT team during a
+ coffee break. Review: https://reviewboard.asterisk.org/r/1033/
+
+2010-11-24 23:26 +0000 [r296213] Russell Bryant <russell@digium.com>
+
+ * main/channel.c: Make Asterisk less crashy. Since we might not put
+ a new translation path on the channel, go ahead and set it to
+ NULL right after destroying the old one to ensure we don't try to
+ free an invalid translation path later on.
+
+2010-11-24 22:41 +0000 [r296165] Richard Mudgett <rmudgett@digium.com>
+
+ * channels/chan_dahdi.c: Oneway audio to SIP phone from FXS port
+ after FXS port gets a CallWaiting pip. The FXS connected phone
+ has to have CW/CID support to fail, as it will send back a DTMF
+ 'A' or 'D' when it's ready to receive CallerID. A normal phone
+ with no CID never fails. Also the SIP phone does not hear MOH
+ when the CW call is answered. The DTMF end frame is suppressed
+ when the phone acknowledges the CW signal for CID. The problem is
+ the DTMF begin frame needs to be suppressed as well. The DTMF
+ begin frame is causing SIP to start sending the DTMF RTP frames.
+ Since the DTMF end frame is suppressed, SIP will not stop sending
+ those DTMF RTP packets. * Suppress the DTMF begin and end frames
+ when the channel driver is looking for DTMF digits. * Fixed a
+ couple issues caused by not cleaning up the CID spill if you
+ answer the CW call while it is sending the CID spill. * Fixed not
+ sending CW/CID spill to the phone when the call is natively
+ bridged. (Fixed by not using native bridge if CW/CID is
+ possible.) * Suppress received audio when sending CW/CID spills.
+ The other parties involved do not need to hear the CW/CID spills
+ and may be confused if the CW call is for them. (closes issue
+ #18129) Reported by: alecdavis Patches: issue_18129_v1.8_v3.patch
+ uploaded by rmudgett (license 664) Tested by: alecdavis, rmudgett
+ NOTE: * v1.4 does not have the main problem fixed by suppressing
+ the DTMF start frames. The other three items fixed are relevant.
+ * If you really must restore native bridging between analog
+ ports, you need to disable CW/CID either by configuring
+ chan_dahdi.conf callwaitingcallerid=no or dialing *70 before
+ dialing the number to temporarily disable CW.
+
+2010-11-24 20:22 +0000 [r296000-296082] Russell Bryant <russell@digium.com>
+
+ * main/channel.c: Fix false reporting of an error by set_format().
+ In the case that the native format was able to be changed to
+ match the new requested format, the code proceeded to attempt to
+ build a translation path, anyway. The result would be NULL, since
+ no translation path is necessary and resulted in this function
+ thinking an error has occurred. This case is now specifically
+ caught and no attempt to build a translation path is attempted.
+ Thanks to our automated tests and bamboo.asterisk.org for
+ catching this problem and making a whole lot of noise when things
+ started failing. :-)
+
+ * apps/app_dial.c, main/channel.c: Handle failures building
+ translation paths more effectively. The problem scenario occurred
+ on a heavily loaded system that was using the codec_dahdi module
+ and exceeded the hardware transcoding capacity. The failure mode
+ at that point was not good. The report came in to us as an
+ Asterisk lock-up. The "core show locks" shows a ton of threads
+ locked up (but no obvious deadlock). Upon deeper investigation,
+ when the system is in this state, the CPU was maxed out. The CPU
+ was being consumed by the Asterisk logger spewing messages on
+ every audio frame for calls set up after transcoder capacity was
+ reached. The purpose of this patch is to make Asterisk handle
+ failures to create a translation path in a more graceful manner.
+ If we can't translate, then the call just needs to be dropped, as
+ it's not going to work. These are the changes: 1) In set_format()
+ of channel.c (which is called by set_read_format() and
+ set_write_format()), it was ignoring if
+ ast_translator_build_path() failed and returned NULL. It now pays
+ attention to that case and returns a result reflecting failure.
+ With this change in place, the bridging code will immediately
+ detect a failure and end the bridge instead of proceeding to try
+ to bridge frames that can't be translated and making channel
+ drivers freak out by sending them frames in a format they weren't
+ expecting. 2) In ast_indicate_data() of channel.c, failure of
+ ast_playtones_start() was ignored. It is now reflected in the
+ return value of the function. This didn't turn out to have any
+ affect on the bug, but seemed like a good change to leave in. 3)
+ In app_dial(), when only sending a call to a single endpoint, it
+ will attempt to do some bridging of its own of early audio. It
+ uses make_compatible() when it's going to do this. However, it
+ ignored failure from make compatible. So, even with the fix from
+ #1, if there was early audio going through app_dial, there would
+ still be a period of invalid frames passing through. After
+ detecting failure here, Dial() exits. ABE-2658
+
+2010-11-23 09:28 +0000 [r295906] Olle Johansson <oej@edvina.net>
+
+ * main/say.c: Fix support of saynumber(1,n) in the Swedish language
+ (closes issue #18353) Reported by: oej Review:
+ https://reviewboard.asterisk.org/r/1031/
+
+2010-11-22 18:46 +0000 [r295790] Richard Mudgett <rmudgett@digium.com>
+
+ * main/channel.c, main/pbx.c, apps/app_macro.c,
+ include/asterisk/channel.h, include/asterisk/frame.h: The channel
+ redirect function (CLI or AMI) hangs up the call instead of
+ redirecting the call. To recreate the problem: 1) Party A calls
+ Party B 2) Invoke CLI "channel redirect" command to redirect
+ channel call leg associated with A. 3) All associated channels
+ are hung up. Note that if the CLI command were done on the
+ channel call leg associated with B it works. This regression was
+ a result of the fix for issue #16946
+ (https://reviewboard.asterisk.org/r/740/). The regression affects
+ all features that use an async goto to execute the dialplan
+ because of an external event: Channel redirect, AMI redirect, SIP
+ REFER, and FAX detection. The struct ast_channel._softhangup code
+ is a mess. The variable is used for several purposes that do not
+ necessarily result in the call being hung up. I have added
+ doxygen comments to describe how the various _softhangup bits are
+ used. I have corrected all the places where the variable was
+ tested in a non-bit oriented manner. The primary fix is the new
+ AST_CONTROL_END_OF_Q frame. It acts as a weak hangup request so
+ the soft hangup requests that do not normally result in a hangup
+ do not hangup. JIRA SWP-2470 JIRA SWP-2489 (closes issue #18171)
+ Reported by: SantaFox (closes issue #18185) Reported by:
+ kwemheuer (closes issue #18211) Reported by: zahir_koradia
+ (closes issue #18230) Reported by: vmarrone (closes issue #18299)
+ Reported by: mbrevda (closes issue #18322) Reported by: nerbos
+ Review: https://reviewboard.asterisk.org/r/1013/
+
+2010-11-19 20:53 +0000 [r295628] Terry Wilson <twilson@digium.com>
+
+ * channels/chan_sip.c: Discard responses with more than one Via
+ This is not a perfect solution as headers that are joined via
+ commas are not detected. This is a parsing issue that to fix
+ "correctly" would necessitate a new SIP parser. Review:
+ https://reviewboard.asterisk.org/r/1019/
+
+2010-11-19 19:32 +0000 [r295552-295553] Erin Spiceland <erin@thespicelands.com>
+
+ * res/res_agi.c: Revert a new feature which should have gone into
+ trunk.
+
+ * res/res_agi.c: Add extra functionality to AGI command WAIT FOR
+ DIGIT. Add the ability to play a sound file, listen for more than
+ just one digit, specify escape characters. Backwards compatible
+ (to work with only timeout specified). (closes issue #15531)
+ Reported by: diLLec Patches:
+ asterisk-res_agi-203638-patched.patch uploaded by diLLec (license
+ 839) Tested by: diLLec, espiceland
+
+2010-11-16 22:52 +0000 [r295280] Richard Mudgett <rmudgett@digium.com>
+
+ * main/channel.c: Dead code elimination in
+ channel.c:ast_channel_bridge() variable who.
+
+2010-11-16 21:29 +0000 [r295200] Jeff Peeler <jpeeler@digium.com>
+
+ * apps/app_voicemail.c: Ensure original message duration is
+ preserved when prepending a message. It seems the fix to issue
+ 17103 was a little overzealous and removed the code that backed
+ up the textfile containing the original message duration. This
+ code has now been restored. (related to issue #17103) ABE-2654
+
2010-12-02 Leif Madsen <lmadsen@digium.com>
* Asterisk 1.4.38 Released.
|
[-]
[+]
|
Changed |
asterisk-1.4.39.tar.bz2/Makefile
^
|
@@ -235,6 +235,9 @@
endif
ifeq ($(OSARCH),FreeBSD)
+ ifeq ($(PROC),i386)
+ _ASTCFLAGS+=-march=i686
+ endif
# -V is understood by BSD Make, not by GNU make.
BSDVERSION=$(shell make -V OSVERSION -f /usr/share/mk/bsd.port.subdir.mk)
_ASTCFLAGS+=$(shell if test $(BSDVERSION) -lt 500016 ; then echo "-D_THREAD_SAFE"; fi)
@@ -695,8 +698,13 @@
elif [ -f /etc/SuSE-release -o -f /etc/novell-release ]; then \
$(INSTALL) -m 755 contrib/init.d/rc.suse.asterisk $(DESTDIR)/etc/init.d/asterisk; \
if [ -z "$(DESTDIR)" ]; then /sbin/chkconfig --add asterisk; fi; \
- elif [ -d $(DESTDIR)/Library/LaunchDaemons -a ! -f $(DESTDIR)/Library/LaunchDaemons/org.asterisk.asterisk.plist ]; then \
- $(INSTALL) -m 644 contrib/init.d/org.asterisk.asterisk.plist $(DESTDIR)/Library/LaunchDaemons/org.asterisk.asterisk.plist; \
+ elif [ -d $(DESTDIR)/Library/LaunchDaemons ]; then \
+ if [ ! -f $(DESTDIR)/Library/LaunchDaemons/org.asterisk.asterisk.plist ]; then \
+ $(INSTALL) -m 644 contrib/init.d/org.asterisk.asterisk.plist $(DESTDIR)/Library/LaunchDaemons/org.asterisk.asterisk.plist; \
+ fi; \
+ if [ ! -f $(DESTDIR)/Library/LaunchDaemons/org.asterisk.muted.plist ]; then \
+ $(INSTALL) -m 644 contrib/init.d/org.asterisk.muted.plist $(DESTDIR)/Library/LaunchDaemons/org.asterisk.muted.plist; \
+ fi; \
elif [ -f /etc/slackware-version ]; then \
echo "Slackware is not currently supported, although an init script does exist for it."; \
else \
|
[-]
[+]
|
Changed |
asterisk-1.4.39.tar.bz2/apps/app_dial.c
^
|
@@ -32,7 +32,7 @@
#include "asterisk.h"
-ASTERISK_FILE_VERSION(__FILE__, "$Revision: 292411 $")
+ASTERISK_FILE_VERSION(__FILE__, "$Revision: 296000 $")
#include <stdlib.h>
#include <errno.h>
@@ -436,7 +436,16 @@
/* Turn off hold music, etc */
ast_deactivate_generator(in);
/* If we are calling a single channel, make them compatible for in-band tone purpose */
- ast_channel_make_compatible(outgoing->chan, in);
+ if (ast_channel_make_compatible(outgoing->chan, in) < 0) {
+ /* If these channels can not be made compatible,
+ * there is no point in continuing. The bridge
+ * will just fail if it gets that far.
+ */
+ *to = -1;
+ strcpy(status, "CONGESTION");
+ ast_cdr_failed(in->cdr);
+ return NULL;
+ }
}
|
[-]
[+]
|
Changed |
asterisk-1.4.39.tar.bz2/apps/app_followme.c
^
|
@@ -34,7 +34,7 @@
#include "asterisk.h"
-ASTERISK_FILE_VERSION(__FILE__, "$Revision: 253631 $")
+ASTERISK_FILE_VERSION(__FILE__, "$Revision: 297689 $")
#include <stdio.h>
#include <stdlib.h>
@@ -801,7 +801,6 @@
break;
while (nm) {
-
if (option_debug > 1)
ast_log(LOG_DEBUG, "Number %s timeout %ld\n", nm->number,nm->timeout);
@@ -815,18 +814,25 @@
rest++;
}
+ /* We check if that context exists, before creating the ast_channel struct needed */
+ if (!ast_exists_extension(caller, tpargs->context, number, 1, caller->cid.cid_num)) {
+ /* XXX Should probably restructure to simply skip this item, instead of returning. XXX */
+ ast_log(LOG_ERROR, "Extension '%s@%s' doesn't exist\n", number, tpargs->context);
+ free(findme_user_list);
+ return;
+ }
+
if (!strcmp(tpargs->context, ""))
snprintf(dialarg, sizeof(dialarg), "%s", number);
else
snprintf(dialarg, sizeof(dialarg), "%s@%s", number, tpargs->context);
-
+
tmpuser = ast_calloc(1, sizeof(*tmpuser));
if (!tmpuser) {
- ast_log(LOG_WARNING, "Out of memory!\n");
free(findme_user_list);
return;
}
-
+
outbound = ast_request("Local", ast_best_codec(caller->nativeformats), dialarg, &dg);
if (outbound) {
ast_set_callerid(outbound, caller->cid.cid_num, caller->cid.cid_name, caller->cid.cid_num);
|
[-]
[+]
|
Changed |
asterisk-1.4.39.tar.bz2/apps/app_macro.c
^
|
@@ -27,7 +27,7 @@
#include "asterisk.h"
-ASTERISK_FILE_VERSION(__FILE__, "$Revision: 211528 $")
+ASTERISK_FILE_VERSION(__FILE__, "$Revision: 295790 $")
#include <stdlib.h>
#include <stdio.h>
@@ -501,20 +501,20 @@
}
if (!strcasecmp(chan->context, fullmacro)) {
+ const char *offsets;
+
/* If we're leaving the macro normally, restore original information */
chan->priority = oldpriority;
ast_copy_string(chan->context, oldcontext, sizeof(chan->context));
- if (!(chan->_softhangup & AST_SOFTHANGUP_ASYNCGOTO)) {
- /* Copy the extension, so long as we're not in softhangup, where we could be given an asyncgoto */
- const char *offsets;
- ast_copy_string(chan->exten, oldexten, sizeof(chan->exten));
- if ((offsets = pbx_builtin_getvar_helper(chan, "MACRO_OFFSET"))) {
- /* Handle macro offset if it's set by checking the availability of step n + offset + 1, otherwise continue
- normally if there is any problem */
- if (sscanf(offsets, "%30d", &offset) == 1) {
- if (ast_exists_extension(chan, chan->context, chan->exten, chan->priority + offset + 1, chan->cid.cid_num)) {
- chan->priority += offset;
- }
+ ast_copy_string(chan->exten, oldexten, sizeof(chan->exten));
+ if ((offsets = pbx_builtin_getvar_helper(chan, "MACRO_OFFSET"))) {
+ /* Handle macro offset if it's set by checking the availability of step n + offset + 1, otherwise continue
+ normally if there is any problem */
+ if (sscanf(offsets, "%30d", &offset) == 1) {
+ if (ast_exists_extension(chan, chan->context, chan->exten,
+ chan->priority + offset + 1,
+ chan->cid.cid_num)) {
+ chan->priority += offset;
}
}
}
|
[-]
[+]
|
Changed |
asterisk-1.4.39.tar.bz2/apps/app_meetme.c
^
|
@@ -35,7 +35,7 @@
#include "asterisk.h"
-ASTERISK_FILE_VERSION(__FILE__, "$Revision: 287758 $")
+ASTERISK_FILE_VERSION(__FILE__, "$Revision: 297228 $")
#include <stdlib.h>
#include <stdio.h>
@@ -826,7 +826,7 @@
ztc.confmode = DAHDI_CONF_CONFANN | DAHDI_CONF_CONFANNMON;
cnf->fd = open(DAHDI_FILE_PSEUDO, O_RDWR);
if (cnf->fd < 0 || ioctl(cnf->fd, DAHDI_SETCONF, &ztc)) {
- ast_log(LOG_WARNING, "Unable to open pseudo device\n");
+ ast_log(LOG_WARNING, "Unable to open DAHDI pseudo device\n");
if (cnf->fd >= 0)
close(cnf->fd);
free(cnf);
@@ -1807,7 +1807,7 @@
/* open pseudo in non-blocking mode */
fd = open(DAHDI_FILE_PSEUDO, O_RDWR | O_NONBLOCK);
if (fd < 0) {
- ast_log(LOG_WARNING, "Unable to open pseudo channel: %s\n", strerror(errno));
+ ast_log(LOG_WARNING, "Unable to open DAHDI pseudo channel: %s\n", strerror(errno));
goto outrun;
}
using_pseudo = 1;
|
[-]
[+]
|
Changed |
asterisk-1.4.39.tar.bz2/apps/app_voicemail.c
^
|
@@ -52,7 +52,7 @@
#include "asterisk.h"
-ASTERISK_FILE_VERSION(__FILE__, "$Revision: 294903 $")
+ASTERISK_FILE_VERSION(__FILE__, "$Revision: 296868 $")
#include <stdlib.h>
#include <errno.h>
@@ -3975,12 +3975,20 @@
recipmsgnum++;
} while (recipmsgnum < recip->maxmsg);
if (recipmsgnum < recip->maxmsg - (imbox ? 0 : inprocess_count(vmu->mailbox, vmu->context, 0))) {
- /* If we are prepending a message for ODBC, then the message already
- * exists in the database, but we want to force copying from the
- * filesystem (since only the FS contains the prepend). */
- copy_plain_file(frompath, topath);
- STORE(todir, recip->mailbox, recip->context, recipmsgnum, chan, recip, fmt, duration, NULL);
- vm_delete(topath);
+#ifndef ODBC_STORAGE
+ if (EXISTS(fromdir, msgnum, frompath, chan->language)) {
+ COPY(fromdir, msgnum, todir, recipmsgnum, recip->mailbox, recip->context, frompath, topath);
+ } else {
+#endif
+ /* If we are prepending a message for ODBC, then the message already
+ * exists in the database, but we want to force copying from the
+ * filesystem (since only the FS contains the prepend). */
+ copy_plain_file(frompath, topath);
+ STORE(todir, recip->mailbox, recip->context, recipmsgnum, chan, recip, fmt, duration, NULL);
+ vm_delete(topath);
+#ifndef ODBC_STORAGE
+ }
+#endif
} else {
ast_log(LOG_ERROR, "Recipient mailbox %s@%s is full\n", recip->mailbox, recip->context);
res = -1;
@@ -5163,6 +5171,7 @@
const char *duration_cstr;
char msgfile[PATH_MAX], backup[PATH_MAX];
char textfile[PATH_MAX];
+ char backup_textfile[PATH_MAX];
struct ast_category *msg_cat;
char duration_str[12] = "";
@@ -5171,8 +5180,10 @@
make_file(msgfile, sizeof(msgfile), curdir, curmsg);
strcpy(textfile, msgfile);
strcpy(backup, msgfile);
+ strcpy(backup_textfile, msgfile);
strncat(textfile, ".txt", sizeof(textfile) - strlen(textfile) - 1);
strncat(backup, "-bak", sizeof(backup) - strlen(backup) - 1);
+ strncat(backup_textfile, "-bak.txt", sizeof(backup_textfile) - strlen(backup_textfile) - 1);
if (!(msg_cfg = ast_config_load(textfile))) {
return -1;
@@ -5195,8 +5206,10 @@
/* Back up the original file, so we can retry the prepend */
if (already_recorded) {
ast_filecopy(backup, msgfile, NULL);
+ copy(textfile, backup_textfile);
} else {
ast_filecopy(msgfile, backup, NULL);
+ copy(textfile, backup_textfile);
}
already_recorded = 1;
@@ -5572,6 +5585,16 @@
#endif
}
DISPOSE(dir, curmsg);
+#ifndef IMAP_STORAGE
+ if (cmd) { /* assuming hangup, cleanup backup file */
+ make_file(msgfile, sizeof(msgfile), dir, curmsg);
+ strcpy(textfile, msgfile);
+ strcpy(backup_textfile, msgfile);
+ strncat(textfile, ".txt", sizeof(textfile) - strlen(textfile) - 1);
+ strncat(backup_textfile, "-bak.txt", sizeof(backup_textfile) - strlen(backup_textfile) - 1);
+ rename(backup_textfile, textfile);
+ }
+#endif
}
/* If anything failed above, we still have this list to free */
|
[-]
[+]
|
Added |
asterisk-1.4.39.tar.bz2/asterisk-1.4.39-summary.html
^
|
@@ -0,0 +1,220 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head><meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" /><title>Release Summary - asterisk-1.4.39</title></head>
+<body>
+<h1 align="center"><a name="top">Release Summary</a></h1>
+<h3 align="center">asterisk-1.4.39</h3>
+<h3 align="center">Date: 2011-01-12</h3>
+<h3 align="center"><asteriskteam@digium.com></h3>
+<hr/>
+<h2 align="center">Table of Contents</h2>
+<ol>
+ <li><a href="#summary">Summary</a></li>
+ <li><a href="#contributors">Contributors</a></li>
+ <li><a href="#issues">Closed Issues</a></li>
+ <li><a href="#commits">Other Changes</a></li>
+ <li><a href="#diffstat">Diffstat</a></li>
+</ol>
+<hr/>
+<a name="summary"><h2 align="center">Summary</h2></a>
+<center><a href="#top">[Back to Top]</a></center><br/><p>This release includes only bug fixes. The changes included were made only to address problems that have been identified in this release series. Users should be able to safely upgrade to this version if this release series is already in use. Users considering upgrading from a previous release series are strongly encouraged to review the UPGRADE.txt document as well as the CHANGES document for information about upgrading to this release series.</p>
+<p>The data in this summary reflects changes that have been made since the previous release, asterisk-1.4.38.</p>
+<hr/>
+<a name="contributors"><h2 align="center">Contributors</h2></a>
+<center><a href="#top">[Back to Top]</a></center><br/><p>This table lists the people who have submitted code, those that have tested patches, as well as those that reported issues on the issue tracker that were resolved in this release. For coders, the number is how many of their patches (of any size) were committed into this release. For testers, the number is the number of times their name was listed as assisting with testing a patch. Finally, for reporters, the number is the number of issues that they reported that were closed by commits that went into this release.</p>
+<table width="100%" border="0">
+<tr>
+<td width="33%"><h3>Coders</h3></td>
+<td width="33%"><h3>Testers</h3></td>
+<td width="33%"><h3>Reporters</h3></td>
+</tr>
+<tr valign="top">
+<td>
+8 rmudgett<br/>
+6 jpeeler<br/>
+4 russell<br/>
+3 oej<br/>
+3 tilghman<br/>
+3 twilson<br/>
+2 pabelanger<br/>
+1 diLLec<br/>
+1 espiceland<br/>
+1 junky<br/>
+1 seanbright<br/>
+</td>
+<td>
+2 cmbaker82<br/>
+1 alecdavis<br/>
+1 diLLec<br/>
+1 espiceland<br/>
+1 rmudgett<br/>
+1 twilson<br/>
+</td>
+<td>
+2 oej<br/>
+1 alecdavis<br/>
+1 birgita<br/>
+1 diLLec<br/>
+1 eeman<br/>
+1 junky<br/>
+1 kwemheuer<br/>
+1 marcbou<br/>
+1 mbrevda<br/>
+1 nerbos<br/>
+1 pabelanger<br/>
+1 rsw686<br/>
+1 SantaFox<br/>
+1 vmarrone<br/>
+1 zahir_koradia<br/>
+</td>
+</tr>
+</table>
+<hr/>
+<a name="issues"><h2 align="center">Closed Issues</h2></a>
+<center><a href="#top">[Back to Top]</a></center><br/><p>This is a list of all issues from the issue tracker that were closed by changes that went into this release.</p>
+<h3>Category: Applications/app_followme</h3><br/>
+<a href="https://issues.asterisk.org/view.php?id=18126">#18126</a>: [patch] stuck channels if followme context doesnt exists<br/>
+Revision: <a href="http://svn.digium.com/view/asterisk/branches/1.4?view=revision&revision=297689">297689</a><br/>
+Reporter: junky<br/>
+Coders: junky<br/>
+<br/>
+<h3>Category: Applications/app_meetme</h3><br/>
+<a href="https://issues.asterisk.org/view.php?id=18322">#18322</a>: Redirect two bridged channels to the same conference<br/>
+Revision: <a href="http://svn.digium.com/view/asterisk/branches/1.4?view=revision&revision=295790">295790</a><br/>
+Reporter: nerbos<br/>
+Coders: rmudgett<br/>
+<br/>
+<h3>Category: Channels/General</h3><br/>
+<a href="https://issues.asterisk.org/view.php?id=18129">#18129</a>: [patch] Oneway audio from SIP phone to FXS port after FXS port gets a CallWaiting pip<br/>
+Revision: <a href="http://svn.digium.com/view/asterisk/branches/1.4?view=revision&revision=296165">296165</a><br/>
+Reporter: alecdavis<br/>
+Testers: alecdavis, rmudgett<br/>
+Coders: rmudgett<br/>
+<br/>
+<a href="https://issues.asterisk.org/view.php?id=18211">#18211</a>: Channel hangs up when redirected through CLI or AMI<br/>
+Revision: <a href="http://svn.digium.com/view/asterisk/branches/1.4?view=revision&revision=295790">295790</a><br/>
+Reporter: zahir_koradia<br/>
+Coders: rmudgett<br/>
+<br/>
+<a href="https://issues.asterisk.org/view.php?id=18230">#18230</a>: [regression] Redirect function (over console or AMI) does not work anymore<br/>
+Revision: <a href="http://svn.digium.com/view/asterisk/branches/1.4?view=revision&revision=295790">295790</a><br/>
+Reporter: vmarrone<br/>
+Coders: rmudgett<br/>
+<br/>
+<h3>Category: Channels/chan_iax2</h3><br/>
+<a href="https://issues.asterisk.org/view.php?id=18397">#18397</a>: IAX2 CODEC_PRES wrong (offset error?)<br/>
+Revision: <a href="http://svn.digium.com/view/asterisk/branches/1.4?view=revision&revision=296990">296990</a><br/>
+Reporter: birgita<br/>
+Coders: tilghman<br/>
+<br/>
+<a href="https://issues.asterisk.org/view.php?id=18398">#18398</a>: [patch] segfault with 'core stop gracefully'<br/>
+Revision: <a href="http://svn.digium.com/view/asterisk/branches/1.4?view=revision&revision=296670">296670</a><br/>
+Reporter: pabelanger<br/>
+Coders: pabelanger<br/>
+<br/>
+<h3>Category: Channels/chan_sip/General</h3><br/>
+<a href="https://issues.asterisk.org/view.php?id=18051">#18051</a>: SIP brute force attemps having a DoS effect<br/>
+Revision: <a href="http://svn.digium.com/view/asterisk/branches/1.4?view=revision&revision=297959">297959</a><br/>
+Reporter: eeman<br/>
+Testers: twilson<br/>
+Coders: twilson<br/>
+<br/>
+<h3>Category: Channels/chan_sip/Transfers</h3><br/>
+<a href="https://issues.asterisk.org/view.php?id=18185">#18185</a>: Blind transfer failure, A calls B, B transfers to C<br/>
+Revision: <a href="http://svn.digium.com/view/asterisk/branches/1.4?view=revision&revision=295790">295790</a><br/>
+Reporter: kwemheuer<br/>
+Coders: rmudgett<br/>
+<br/>
+<h3>Category: Core/Internationalization</h3><br/>
+<a href="https://issues.asterisk.org/view.php?id=18353">#18353</a>: saynumber(1,n) in Swedish doesn't work<br/>
+Revision: <a href="http://svn.digium.com/view/asterisk/branches/1.4?view=revision&revision=295906">295906</a><br/>
+Reporter: oej<br/>
+Coders: oej<br/>
+<br/>
+<a href="https://issues.asterisk.org/view.php?id=18355">#18355</a>: saynumber() fixes for Swedish<br/>
+Revision: <a href="http://svn.digium.com/view/asterisk/branches/1.4?view=revision&revision=296309">296309</a><br/>
+Reporter: oej<br/>
+Coders: oej<br/>
+<br/>
+<h3>Category: Core/RTP</h3><br/>
+<a href="https://issues.asterisk.org/view.php?id=18189">#18189</a>: RFC2833 DTMF generation broken due to SSRC change on bridges channels<br/>
+Revision: <a href="http://svn.digium.com/view/asterisk/branches/1.4?view=revision&revision=297823">297823</a><br/>
+Reporter: marcbou<br/>
+Testers: cmbaker82<br/>
+Coders: jpeeler<br/>
+<br/>
+<a href="https://issues.asterisk.org/view.php?id=18352">#18352</a>: SSRC is changing when DTMF sent<br/>
+Revision: <a href="http://svn.digium.com/view/asterisk/branches/1.4?view=revision&revision=297823">297823</a><br/>
+Reporter: rsw686<br/>
+Testers: cmbaker82<br/>
+Coders: jpeeler<br/>
+<br/>
+<h3>Category: General</h3><br/>
+<a href="https://issues.asterisk.org/view.php?id=18171">#18171</a>: Channel redirect doesn't work<br/>
+Revision: <a href="http://svn.digium.com/view/asterisk/branches/1.4?view=revision&revision=295790">295790</a><br/>
+Reporter: SantaFox<br/>
+Coders: rmudgett<br/>
+<br/>
+<h3>Category: Resources/res_agi</h3><br/>
+<a href="https://issues.asterisk.org/view.php?id=15531">#15531</a>: [patch] Add voicefile and dtmf options to res/res_agi.c<br/>
+Revision: <a href="http://svn.digium.com/view/asterisk/branches/1.4?view=revision&revision=295552">295552</a><br/>
+Reporter: diLLec<br/>
+Testers: diLLec, espiceland<br/>
+Coders: diLLec<br/>
+<br/>
+<h3>Category: Resources/res_fax</h3><br/>
+<a href="https://issues.asterisk.org/view.php?id=18299">#18299</a>: Asterisk not send fax to fax extension<br/>
+Revision: <a href="http://svn.digium.com/view/asterisk/branches/1.4?view=revision&revision=295790">295790</a><br/>
+Reporter: mbrevda<br/>
+Coders: rmudgett<br/>
+<br/>
+<hr/>
+<a name="commits"><h2 align="center">Commits Not Associated with an Issue</h2></a>
+<center><a href="#top">[Back to Top]</a></center><br/><p>This is a list of all changes that went into this release that did not directly close an issue from the issue tracker. The commits may have been marked as being related to an issue. If that is the case, the issue numbers are listed here, as well.</p>
+<table width="100%" border="1">
+<tr><td><b>Revision</b></td><td><b>Author</b></td><td><b>Summary</b></td><td><b>Issues Referenced</b></td></tr><tr><td><a href="http://svn.digium.com/view/asterisk/branches/1.4?view=revision&revision=295200">295200</a></td><td>jpeeler</td><td>Ensure original message duration is preserved when prepending a message.</td>
+<td><a href="https://issues.asterisk.org/view.php?id=17103">#17103</a></td></tr><tr><td><a href="http://svn.digium.com/view/asterisk/branches/1.4?view=revision&revision=295280">295280</a></td><td>rmudgett</td><td>Dead code elimination in channel.c:ast_channel_bridge() variable who.</td>
+<td></td></tr><tr><td><a href="http://svn.digium.com/view/asterisk/branches/1.4?view=revision&revision=295553">295553</a></td><td>espiceland</td><td>Revert a new feature which should have gone into trunk.</td>
+<td></td></tr><tr><td><a href="http://svn.digium.com/view/asterisk/branches/1.4?view=revision&revision=295628">295628</a></td><td>twilson</td><td>Discard responses with more than one Via</td>
+<td></td></tr><tr><td><a href="http://svn.digium.com/view/asterisk/branches/1.4?view=revision&revision=296000">296000</a></td><td>russell</td><td>Handle failures building translation paths more effectively.</td>
+<td></td></tr><tr><td><a href="http://svn.digium.com/view/asterisk/branches/1.4?view=revision&revision=296082">296082</a></td><td>russell</td><td>Fix false reporting of an error by set_format().</td>
+<td></td></tr><tr><td><a href="http://svn.digium.com/view/asterisk/branches/1.4?view=revision&revision=296213">296213</a></td><td>russell</td><td>Make Asterisk less crashy.</td>
+<td></td></tr><tr><td><a href="http://svn.digium.com/view/asterisk/branches/1.4?view=revision&revision=296867">296867</a></td><td>tilghman</td><td>Get rid of the annoying startup and shutdown errors on OS X.</td>
+<td></td></tr><tr><td><a href="http://svn.digium.com/view/asterisk/branches/1.4?view=revision&revision=296868">296868</a></td><td>jpeeler</td><td>Properly restore backup information file when hanging up during message prepending.</td>
+<td></td></tr><tr><td><a href="http://svn.digium.com/view/asterisk/branches/1.4?view=revision&revision=297072">297072</a></td><td>jpeeler</td><td>Fix not stopping MOH when transfered local channel queue member is answered.</td>
+<td></td></tr><tr><td><a href="http://svn.digium.com/view/asterisk/branches/1.4?view=revision&revision=297185">297185</a></td><td>oej</td><td>If we get a NOTIFY from a non-existing subscription we should answer with 481, not bad event.</td>
+<td></td></tr><tr><td><a href="http://svn.digium.com/view/asterisk/branches/1.4?view=revision&revision=297228">297228</a></td><td>russell</td><td>Add "DAHDI" to a couple of app_meetme error messages.</td>
+<td></td></tr><tr><td><a href="http://svn.digium.com/view/asterisk/branches/1.4?view=revision&revision=297310">297310</a></td><td>twilson</td><td>Initialize offset for adaptive jitter buffer</td>
+<td></td></tr><tr><td><a href="http://svn.digium.com/view/asterisk/branches/1.4?view=revision&revision=297404">297404</a></td><td>pabelanger</td><td>Resolve compile error under FreeBSD</td>
+<td></td></tr><tr><td><a href="http://svn.digium.com/view/asterisk/branches/1.4?view=revision&revision=297603">297603</a></td><td>jpeeler</td><td>Improve handling of REGISTER requests with multiple contact headers.</td>
+<td></td></tr><tr><td><a href="http://svn.digium.com/view/asterisk/branches/1.4?view=revision&revision=297775">297775</a></td><td>seanbright</td><td>Avoid a crash if we don't pass an argument to 'astobj2 test.'</td>
+<td></td></tr><tr><td><a href="http://svn.digium.com/view/asterisk/branches/1.4?view=revision&revision=297818">297818</a></td><td>tilghman</td><td>Use non-deprecated APIs for CoreAudio</td>
+<td></td></tr></table>
+<hr/>
+<a name="diffstat"><h2 align="center">Diffstat Results</h2></a>
+<center><a href="#top">[Back to Top]</a></center><br/><p>This is a summary of the changes to the source code that went into this release that was generated using the diffstat utility.</p>
+<pre>
+Makefile | 12 +
+apps/app_dial.c | 11 +
+apps/app_followme.c | 14 +
+apps/app_macro.c | 22 +-
+apps/app_meetme.c | 4
+apps/app_voicemail.c | 35 +++
+channels/chan_dahdi.c | 308 ++++++++++++++++++++------------
+channels/chan_iax2.c | 18 +
+channels/chan_sip.c | 70 ++++++-
+contrib/init.d/org.asterisk.muted.plist | 33 +++
+include/asterisk/channel.h | 32 +++
+include/asterisk/frame.h | 11 +
+main/abstract_jb.c | 5
+main/asterisk.c | 12 +
+main/astobj2.c | 4
+main/channel.c | 151 ++++++++++-----
+main/pbx.c | 22 +-
+main/say.c | 89 ++++-----
+utils/muted.c | 76 ++++++-
+19 files changed, 664 insertions(+), 265 deletions(-)
+</pre><br/>
+<hr/>
+</body>
+</html>
|
[-]
[+]
|
Added |
asterisk-1.4.39.tar.bz2/asterisk-1.4.39-summary.txt
^
|
@@ -0,0 +1,291 @@
+ Release Summary
+
+ asterisk-1.4.39
+
+ Date: 2011-01-12
+
+ <asteriskteam@digium.com>
+
+ ----------------------------------------------------------------------
+
+ Table of Contents
+
+ 1. Summary
+ 2. Contributors
+ 3. Closed Issues
+ 4. Other Changes
+ 5. Diffstat
+
+ ----------------------------------------------------------------------
+
+ Summary
+
+ [Back to Top]
+
+ This release includes only bug fixes. The changes included were made only
+ to address problems that have been identified in this release series.
+ Users should be able to safely upgrade to this version if this release
+ series is already in use. Users considering upgrading from a previous
+ release series are strongly encouraged to review the UPGRADE.txt document
+ as well as the CHANGES document for information about upgrading to this
+ release series.
+
+ The data in this summary reflects changes that have been made since the
+ previous release, asterisk-1.4.38.
+
+ ----------------------------------------------------------------------
+
+ Contributors
+
+ [Back to Top]
+
+ This table lists the people who have submitted code, those that have
+ tested patches, as well as those that reported issues on the issue tracker
+ that were resolved in this release. For coders, the number is how many of
+ their patches (of any size) were committed into this release. For testers,
+ the number is the number of times their name was listed as assisting with
+ testing a patch. Finally, for reporters, the number is the number of
+ issues that they reported that were closed by commits that went into this
+ release.
+
+ Coders Testers Reporters
+ 8 rmudgett 2 cmbaker82 2 oej
+ 6 jpeeler 1 alecdavis 1 alecdavis
+ 4 russell 1 diLLec 1 birgita
+ 3 oej 1 espiceland 1 diLLec
+ 3 tilghman 1 rmudgett 1 eeman
+ 3 twilson 1 twilson 1 junky
+ 2 pabelanger 1 kwemheuer
+ 1 diLLec 1 marcbou
+ 1 espiceland 1 mbrevda
+ 1 junky 1 nerbos
+ 1 seanbright 1 pabelanger
+ 1 rsw686
+ 1 SantaFox
+ 1 vmarrone
+ 1 zahir_koradia
+
+ ----------------------------------------------------------------------
+
+ Closed Issues
+
+ [Back to Top]
+
+ This is a list of all issues from the issue tracker that were closed by
+ changes that went into this release.
+
+ Category: Applications/app_followme
+
+ #18126: [patch] stuck channels if followme context doesnt exists
+ Revision: 297689
+ Reporter: junky
+ Coders: junky
+
+ Category: Applications/app_meetme
+
+ #18322: Redirect two bridged channels to the same conference
+ Revision: 295790
+ Reporter: nerbos
+ Coders: rmudgett
+
+ Category: Channels/General
+
+ #18129: [patch] Oneway audio from SIP phone to FXS port after FXS port
+ gets a CallWaiting pip
+ Revision: 296165
+ Reporter: alecdavis
+ Testers: alecdavis, rmudgett
+ Coders: rmudgett
+
+ #18211: Channel hangs up when redirected through CLI or AMI
+ Revision: 295790
+ Reporter: zahir_koradia
+ Coders: rmudgett
+
+ #18230: [regression] Redirect function (over console or AMI) does not work
+ anymore
+ Revision: 295790
+ Reporter: vmarrone
+ Coders: rmudgett
+
+ Category: Channels/chan_iax2
+
+ #18397: IAX2 CODEC_PRES wrong (offset error?)
+ Revision: 296990
+ Reporter: birgita
+ Coders: tilghman
+
+ #18398: [patch] segfault with 'core stop gracefully'
+ Revision: 296670
+ Reporter: pabelanger
+ Coders: pabelanger
+
+ Category: Channels/chan_sip/General
+
+ #18051: SIP brute force attemps having a DoS effect
+ Revision: 297959
+ Reporter: eeman
+ Testers: twilson
+ Coders: twilson
+
+ Category: Channels/chan_sip/Transfers
+
+ #18185: Blind transfer failure, A calls B, B transfers to C
+ Revision: 295790
+ Reporter: kwemheuer
+ Coders: rmudgett
+
+ Category: Core/Internationalization
+
+ #18353: saynumber(1,n) in Swedish doesn't work
+ Revision: 295906
+ Reporter: oej
+ Coders: oej
+
+ #18355: saynumber() fixes for Swedish
+ Revision: 296309
+ Reporter: oej
+ Coders: oej
+
+ Category: Core/RTP
+
+ #18189: RFC2833 DTMF generation broken due to SSRC change on bridges
+ channels
+ Revision: 297823
+ Reporter: marcbou
+ Testers: cmbaker82
+ Coders: jpeeler
+
+ #18352: SSRC is changing when DTMF sent
+ Revision: 297823
+ Reporter: rsw686
+ Testers: cmbaker82
+ Coders: jpeeler
+
+ Category: General
+
+ #18171: Channel redirect doesn't work
+ Revision: 295790
+ Reporter: SantaFox
+ Coders: rmudgett
+
+ Category: Resources/res_agi
+
+ #15531: [patch] Add voicefile and dtmf options to res/res_agi.c
+ Revision: 295552
+ Reporter: diLLec
+ Testers: diLLec, espiceland
+ Coders: diLLec
+
+ Category: Resources/res_fax
+
+ #18299: Asterisk not send fax to fax extension
+ Revision: 295790
+ Reporter: mbrevda
+ Coders: rmudgett
+
+ ----------------------------------------------------------------------
+
+ Commits Not Associated with an Issue
+
+ [Back to Top]
+
+ This is a list of all changes that went into this release that did not
+ directly close an issue from the issue tracker. The commits may have been
+ marked as being related to an issue. If that is the case, the issue
+ numbers are listed here, as well.
+
+ +------------------------------------------------------------------------+
+ | Revision | Author | Summary | Issues |
+ | | | | Referenced |
+ |----------+------------+-----------------------------------+------------|
+ | | | Ensure original message duration | |
+ | 295200 | jpeeler | is preserved when prepending a | #17103 |
+ | | | message. | |
+ |----------+------------+-----------------------------------+------------|
+ | | | Dead code elimination in | |
+ | 295280 | rmudgett | channel.c:ast_channel_bridge() | |
+ | | | variable who. | |
+ |----------+------------+-----------------------------------+------------|
+ | 295553 | espiceland | Revert a new feature which should | |
+ | | | have gone into trunk. | |
+ |----------+------------+-----------------------------------+------------|
+ | 295628 | twilson | Discard responses with more than | |
+ | | | one Via | |
+ |----------+------------+-----------------------------------+------------|
+ | | | Handle failures building | |
+ | 296000 | russell | translation paths more | |
+ | | | effectively. | |
+ |----------+------------+-----------------------------------+------------|
+ | 296082 | russell | Fix false reporting of an error | |
+ | | | by set_format(). | |
+ |----------+------------+-----------------------------------+------------|
+ | 296213 | russell | Make Asterisk less crashy. | |
+ |----------+------------+-----------------------------------+------------|
+ | 296867 | tilghman | Get rid of the annoying startup | |
+ | | | and shutdown errors on OS X. | |
+ |----------+------------+-----------------------------------+------------|
+ | | | Properly restore backup | |
+ | 296868 | jpeeler | information file when hanging up | |
+ | | | during message prepending. | |
+ |----------+------------+-----------------------------------+------------|
+ | | | Fix not stopping MOH when | |
+ | 297072 | jpeeler | transfered local channel queue | |
+ | | | member is answered. | |
+ |----------+------------+-----------------------------------+------------|
+ | | | If we get a NOTIFY from a | |
+ | 297185 | oej | non-existing subscription we | |
+ | | | should answer with 481, not bad | |
+ | | | event. | |
+ |----------+------------+-----------------------------------+------------|
+ | 297228 | russell | Add "DAHDI" to a couple of | |
+ | | | app_meetme error messages. | |
+ |----------+------------+-----------------------------------+------------|
+ | 297310 | twilson | Initialize offset for adaptive | |
+ | | | jitter buffer | |
+ |----------+------------+-----------------------------------+------------|
+ | 297404 | pabelanger | Resolve compile error under | |
+ | | | FreeBSD | |
+ |----------+------------+-----------------------------------+------------|
+ | | | Improve handling of REGISTER | |
+ | 297603 | jpeeler | requests with multiple contact | |
+ | | | headers. | |
+ |----------+------------+-----------------------------------+------------|
+ | 297775 | seanbright | Avoid a crash if we don't pass an | |
+ | | | argument to 'astobj2 test.' | |
+ |----------+------------+-----------------------------------+------------|
+ | 297818 | tilghman | Use non-deprecated APIs for | |
+ | | | CoreAudio | |
+ +------------------------------------------------------------------------+
+
+ ----------------------------------------------------------------------
+
+ Diffstat Results
+
+ [Back to Top]
+
+ This is a summary of the changes to the source code that went into this
+ release that was generated using the diffstat utility.
+
+ Makefile | 12 +
+ apps/app_dial.c | 11 +
+ apps/app_followme.c | 14 +
+ apps/app_macro.c | 22 +-
+ apps/app_meetme.c | 4
+ apps/app_voicemail.c | 35 +++
+ channels/chan_dahdi.c | 308 ++++++++++++++++++++------------
+ channels/chan_iax2.c | 18 +
+ channels/chan_sip.c | 70 ++++++-
+ contrib/init.d/org.asterisk.muted.plist | 33 +++
+ include/asterisk/channel.h | 32 +++
+ include/asterisk/frame.h | 11 +
+ main/abstract_jb.c | 5
+ main/asterisk.c | 12 +
+ main/astobj2.c | 4
+ main/channel.c | 151 ++++++++++-----
+ main/pbx.c | 22 +-
+ main/say.c | 89 ++++-----
+ utils/muted.c | 76 ++++++-
+ 19 files changed, 664 insertions(+), 265 deletions(-)
+
+ ----------------------------------------------------------------------
|
[-]
[+]
|
Changed |
asterisk-1.4.39.tar.bz2/channels/chan_dahdi.c
^
|
@@ -47,7 +47,7 @@
#include "asterisk.h"
-ASTERISK_FILE_VERSION(__FILE__, "$Revision: 294821 $")
+ASTERISK_FILE_VERSION(__FILE__, "$Revision: 296165 $")
#include <stdio.h>
#include <string.h>
@@ -285,11 +285,12 @@
#define MASK_AVAIL (1 << 0) /*!< Channel available for PRI use */
#define MASK_INUSE (1 << 1) /*!< Channel currently in use */
-#define CALLWAITING_SILENT_SAMPLES ( (300 * 8) / READ_SIZE) /*!< 300 ms */
-#define CALLWAITING_REPEAT_SAMPLES ( (10000 * 8) / READ_SIZE) /*!< 10,000 ms */
-#define CIDCW_EXPIRE_SAMPLES ( (500 * 8) / READ_SIZE) /*!< 500 ms */
-#define MIN_MS_SINCE_FLASH ( (2000) ) /*!< 2000 ms */
-#define DEFAULT_RINGT ( (8000 * 8) / READ_SIZE) /*!< 8,000 ms */
+#define CALLWAITING_SILENT_SAMPLES ((300 * 8) / READ_SIZE) /*!< 300 ms */
+#define CALLWAITING_REPEAT_SAMPLES ((10000 * 8) / READ_SIZE) /*!< 10,000 ms */
+#define CALLWAITING_SUPPRESS_SAMPLES ((100 * 8) / READ_SIZE) /*!< 100 ms */
+#define CIDCW_EXPIRE_SAMPLES ((500 * 8) / READ_SIZE) /*!< 500 ms */
+#define MIN_MS_SINCE_FLASH ((2000) ) /*!< 2000 ms */
+#define DEFAULT_RINGT ((8000 * 8) / READ_SIZE) /*!< 8,000 ms */
struct dahdi_pvt;
@@ -774,7 +775,8 @@
int cid_start; /*!< CID start indicator, polarity or ring */
int callingpres; /*!< The value of callling presentation that we're going to use when placing a PRI call */
int callwaitingrepeat; /*!< How many samples to wait before repeating call waiting */
- int cidcwexpire; /*!< When to expire our muting for CID/CW */
+ int cidcwexpire; /*!< When to stop waiting for CID/CW CAS response (In samples) */
+ int cid_suppress_expire; /*!< How many samples to suppress after a CID spill. */
/*! \brief Analog caller ID waveform sample buffer */
unsigned char *cidspill;
/*! \brief Position in the cidspill buffer to send out next. */
@@ -795,7 +797,12 @@
* characters are processed.
*/
int stripmsd;
- /*! \brief BOOLEAN. XXX Meaning what?? */
+ /*!
+ * \brief TRUE if Call Waiting (CW) CPE Alert Signal (CAS) is being sent.
+ * \note
+ * After CAS is sent, the call waiting caller id will be sent if the phone
+ * gives a positive reply.
+ */
int callwaitcas;
/*! \brief Number of call waiting rings. */
int callwaitrings;
@@ -2056,9 +2063,9 @@
ast_log(LOG_WARNING, "Unable to restore conference info: %s\n", strerror(errno));
return -1;
}
+ if (option_debug)
+ ast_log(LOG_DEBUG, "Restored conferencing\n");
}
- if (option_debug)
- ast_log(LOG_DEBUG, "Restored conferencing\n");
return 0;
}
@@ -2068,6 +2075,7 @@
{
p->callwaitcas = 0;
p->cidcwexpire = 0;
+ p->cid_suppress_expire = 0;
if (!(p->cidspill = ast_malloc(MAX_CALLERID_SIZE)))
return -1;
p->cidlen = ast_callerid_callwaiting_generate(p->cidspill, p->callwait_name, p->callwait_num, AST_LAW(p));
@@ -2109,11 +2117,13 @@
return 0;
p->cidpos += res;
}
+ p->cid_suppress_expire = CALLWAITING_SUPPRESS_SAMPLES;
free(p->cidspill);
p->cidspill = NULL;
if (p->callwaitcas) {
/* Wait for CID/CW to expire */
p->cidcwexpire = CIDCW_EXPIRE_SAMPLES;
+ p->cid_suppress_expire = p->cidcwexpire;
} else
restore_conference(p);
return 0;
@@ -2127,6 +2137,11 @@
ast_log(LOG_WARNING, "Spill already exists?!?\n");
free(p->cidspill);
}
+
+ /*
+ * SAS: Subscriber Alert Signal, 440Hz for 300ms
+ * CAS: CPE Alert Signal, 2130Hz * 2750Hz sine waves
+ */
if (!(p->cidspill = ast_malloc(2400 /* SAS */ + 680 /* CAS */ + READ_SIZE * 4)))
return -1;
save_conference(p);
@@ -2599,6 +2614,8 @@
p->prev->next = p->next;
if (p->next)
p->next->prev = p->prev;
+
+ free(p->cidspill);
if (p->use_smdi)
ast_smdi_interface_unref(p->smdi_iface);
ast_mutex_destroy(&p->lock);
@@ -2672,15 +2689,11 @@
/* Destroy all the interfaces and free their memory */
p = iflist;
while (p) {
- /* Free any callerid */
- if (p->cidspill)
- ast_free(p->cidspill);
pl = p;
p = p->next;
x = pl->channel;
/* Free associated memory */
- if (pl)
- destroy_dahdi_pvt(&pl);
+ destroy_dahdi_pvt(&pl);
if (option_verbose > 2)
ast_verbose(VERBOSE_PREFIX_2 "Unregistered channel %d\n", x);
}
@@ -3151,15 +3164,14 @@
default:
tone_zone_play_tone(p->subs[SUB_REAL].dfd, -1);
}
- if (p->cidspill)
- free(p->cidspill);
+ free(p->cidspill);
+ p->cidspill = NULL;
if (p->sig)
dahdi_disable_ec(p);
x = 0;
ast_channel_setoption(ast,AST_OPTION_TONE_VERIFY,&x,sizeof(char),0);
ast_channel_setoption(ast,AST_OPTION_TDD,&x,sizeof(char),0);
p->didtdd = 0;
- p->cidspill = NULL;
p->callwaitcas = 0;
p->callwaiting = p->permcallwaiting;
p->hidecallerid = p->permhidecallerid;
@@ -3192,6 +3204,7 @@
p->callwaitingrepeat = 0;
p->cidcwexpire = 0;
+ p->cid_suppress_expire = 0;
p->oprmode = 0;
ast->tech_pvt = NULL;
ast_mutex_unlock(&p->lock);
@@ -3768,6 +3781,24 @@
return AST_BRIDGE_RETRY;
}
+ if ((p0->callwaiting && p0->callwaitingcallerid)
+ || (p1->callwaiting && p1->callwaitingcallerid)) {
+ /*
+ * Call Waiting Caller ID requires DTMF detection to know if it
+ * can send the CID spill.
+ *
+ * For now, don't attempt to native bridge if either channel
+ * needs DTMF detection. There is code below to handle it
+ * properly until DTMF is actually seen, but due to currently
+ * unresolved issues it's ignored...
+ */
+ ast_mutex_unlock(&p0->lock);
+ ast_mutex_unlock(&p1->lock);
+ ast_mutex_unlock(&c0->lock);
+ ast_mutex_unlock(&c1->lock);
+ return AST_BRIDGE_FAILED_NOWARN;
+ }
+
if ((oi0 == SUB_REAL) && (oi1 == SUB_REAL)) {
if (p0->owner && p1->owner) {
/* If we don't have a call-wait in a 3-way, and we aren't in a 3-way, we can be master */
@@ -4185,86 +4216,104 @@
return DAHDI_ALARM_NONE;
}
-static void dahdi_handle_dtmfup(struct ast_channel *ast, int index, struct ast_frame **dest)
+static void dahdi_handle_dtmf(struct ast_channel *ast, int index, struct ast_frame **dest)
{
struct dahdi_pvt *p = ast->tech_pvt;
struct ast_frame *f = *dest;
if (option_debug)
- ast_log(LOG_DEBUG, "DTMF digit: %c on %s\n", f->subclass, ast->name);
+ ast_log(LOG_DEBUG, "%s DTMF digit: 0x%02X '%c' on %s\n",
+ f->frametype == AST_FRAME_DTMF_BEGIN ? "Begin" : "End",
+ f->subclass, f->subclass, ast->name);
if (p->confirmanswer) {
- if (option_debug)
- ast_log(LOG_DEBUG, "Confirm answer on %s!\n", ast->name);
- /* Upon receiving a DTMF digit, consider this an answer confirmation instead
- of a DTMF digit */
- p->subs[index].f.frametype = AST_FRAME_CONTROL;
- p->subs[index].f.subclass = AST_CONTROL_ANSWER;
+ if (f->frametype == AST_FRAME_DTMF_END) {
+ if (option_debug)
+ ast_log(LOG_DEBUG, "Confirm answer on %s!\n", ast->name);
+ /* Upon receiving a DTMF digit, consider this an answer confirmation instead
+ of a DTMF digit */
+ p->subs[index].f.frametype = AST_FRAME_CONTROL;
+ p->subs[index].f.subclass = AST_CONTROL_ANSWER;
+ /* Reset confirmanswer so DTMF's will behave properly for the duration of the call */
+ p->confirmanswer = 0;
+ } else {
+ p->subs[index].f.frametype = AST_FRAME_NULL;
+ p->subs[index].f.subclass = 0;
+ }
*dest = &p->subs[index].f;
- /* Reset confirmanswer so DTMF's will behave properly for the duration of the call */
- p->confirmanswer = 0;
} else if (p->callwaitcas) {
- if ((f->subclass == 'A') || (f->subclass == 'D')) {
- if (option_debug)
- ast_log(LOG_DEBUG, "Got some DTMF, but it's for the CAS\n");
- if (p->cidspill)
+ if (f->frametype == AST_FRAME_DTMF_END) {
+ if ((f->subclass == 'A') || (f->subclass == 'D')) {
+ if (option_debug)
+ ast_log(LOG_DEBUG, "Got some DTMF, but it's for the CAS\n");
free(p->cidspill);
- send_cwcidspill(p);
+ p->cidspill = NULL;
+ send_cwcidspill(p);
+ }
+ if ((f->subclass != 'm') && (f->subclass != 'u'))
+ p->callwaitcas = 0;
}
- if ((f->subclass != 'm') && (f->subclass != 'u'))
- p->callwaitcas = 0;
p->subs[index].f.frametype = AST_FRAME_NULL;
p->subs[index].f.subclass = 0;
*dest = &p->subs[index].f;
} else if (f->subclass == 'f') {
- /* Fax tone -- Handle and return NULL */
- if ((p->callprogress & 0x6) && !p->faxhandled) {
- p->faxhandled = 1;
- if (strcmp(ast->exten, "fax")) {
- const char *target_context = S_OR(ast->macrocontext, ast->context);
-
- /* We need to unlock 'ast' here because ast_exists_extension has the
- * potential to start autoservice on the channel. Such action is prone
- * to deadlock.
- */
- ast_mutex_unlock(&p->lock);
- ast_channel_unlock(ast);
- if (ast_exists_extension(ast, target_context, "fax", 1, ast->cid.cid_num)) {
- ast_channel_lock(ast);
- ast_mutex_lock(&p->lock);
- if (option_verbose > 2)
- ast_verbose(VERBOSE_PREFIX_3 "Redirecting %s to fax extension\n", ast->name);
- /* Save the DID/DNIS when we transfer the fax call to a "fax" extension */
- pbx_builtin_setvar_helper(ast, "FAXEXTEN", ast->exten);
- if (ast_async_goto(ast, target_context, "fax", 1))
- ast_log(LOG_WARNING, "Failed to async goto '%s' into fax of '%s'\n", ast->name, target_context);
- } else {
- ast_channel_lock(ast);
- ast_mutex_lock(&p->lock);
- ast_log(LOG_NOTICE, "Fax detected, but no fax extension\n");
- }
+ if (f->frametype == AST_FRAME_DTMF_END) {
+ /* Fax tone -- Handle and return NULL */
+ if ((p->callprogress & 0x6) && !p->faxhandled) {
+ p->faxhandled = 1;
+ if (strcmp(ast->exten, "fax")) {
+ const char *target_context = S_OR(ast->macrocontext, ast->context);
+
+ /* We need to unlock 'ast' here because ast_exists_extension has the
+ * potential to start autoservice on the channel. Such action is prone
+ * to deadlock.
+ */
+ ast_mutex_unlock(&p->lock);
+ ast_channel_unlock(ast);
+ if (ast_exists_extension(ast, target_context, "fax", 1, ast->cid.cid_num)) {
+ ast_channel_lock(ast);
+ ast_mutex_lock(&p->lock);
+ if (option_verbose > 2)
+ ast_verbose(VERBOSE_PREFIX_3 "Redirecting %s to fax extension\n", ast->name);
+ /* Save the DID/DNIS when we transfer the fax call to a "fax" extension */
+ pbx_builtin_setvar_helper(ast, "FAXEXTEN", ast->exten);
+ if (ast_async_goto(ast, target_context, "fax", 1))
+ ast_log(LOG_WARNING, "Failed to async goto '%s' into fax of '%s'\n", ast->name, target_context);
+ } else {
+ ast_channel_lock(ast);
+ ast_mutex_lock(&p->lock);
+ ast_log(LOG_NOTICE, "Fax detected, but no fax extension\n");
+ }
+ } else if (option_debug)
+ ast_log(LOG_DEBUG, "Already in a fax extension, not redirecting\n");
} else if (option_debug)
- ast_log(LOG_DEBUG, "Already in a fax extension, not redirecting\n");
- } else if (option_debug)
ast_log(LOG_DEBUG, "Fax already handled\n");
- dahdi_confmute(p, 0);
+ dahdi_confmute(p, 0);
+ }
p->subs[index].f.frametype = AST_FRAME_NULL;
p->subs[index].f.subclass = 0;
*dest = &p->subs[index].f;
} else if (f->subclass == 'm') {
- /* Confmute request */
- dahdi_confmute(p, 1);
+ if (f->frametype == AST_FRAME_DTMF_END) {
+ /* Confmute request */
+ dahdi_confmute(p, 1);
+ }
p->subs[index].f.frametype = AST_FRAME_NULL;
p->subs[index].f.subclass = 0;
*dest = &p->subs[index].f;
} else if (f->subclass == 'u') {
- /* Unmute */
- dahdi_confmute(p, 0);
+ if (f->frametype == AST_FRAME_DTMF_END) {
+ /* Unmute */
+ dahdi_confmute(p, 0);
+ }
p->subs[index].f.frametype = AST_FRAME_NULL;
p->subs[index].f.subclass = 0;
*dest = &p->subs[index].f;
- } else
- dahdi_confmute(p, 0);
+ } else {
+ if (f->frametype == AST_FRAME_DTMF_END) {
+ dahdi_confmute(p, 0);
+ }
+ }
}
static void handle_alarms(struct dahdi_pvt *p, int alarms)
@@ -4336,24 +4385,31 @@
#ifdef HAVE_PRI
if (!p->proceeding && p->sig == SIG_PRI && p->pri && (p->pri->overlapdial & DAHDI_OVERLAPDIAL_INCOMING)) {
/* absorb event */
- } else {
+ } else
#endif
+ {
p->subs[index].f.frametype = AST_FRAME_DTMF_END;
p->subs[index].f.subclass = res & 0xff;
-#ifdef HAVE_PRI
+ dahdi_handle_dtmf(ast, index, &f);
}
-#endif
- dahdi_handle_dtmfup(ast, index, &f);
return f;
}
if (res & DAHDI_EVENT_DTMFDOWN) {
if (option_debug)
ast_log(LOG_DEBUG, "DTMF Down '%c'\n", res & 0xff);
- /* Mute conference */
- dahdi_confmute(p, 1);
- p->subs[index].f.frametype = AST_FRAME_DTMF_BEGIN;
- p->subs[index].f.subclass = res & 0xff;
+#ifdef HAVE_PRI
+ if (!p->proceeding && p->sig == SIG_PRI && p->pri && (p->pri->overlapdial & DAHDI_OVERLAPDIAL_INCOMING)) {
+ /* absorb event */
+ } else
+#endif
+ {
+ /* Mute conference */
+ dahdi_confmute(p, 1);
+ p->subs[index].f.frametype = AST_FRAME_DTMF_BEGIN;
+ p->subs[index].f.subclass = res & 0xff;
+ dahdi_handle_dtmf(ast, index, &f);
+ }
return &p->subs[index].f;
}
@@ -4504,6 +4560,7 @@
#endif
p->callwaitingrepeat = 0;
p->cidcwexpire = 0;
+ p->cid_suppress_expire = 0;
p->owner = NULL;
/* Don't start streaming audio yet if the incoming call isn't up yet */
if (p->subs[SUB_REAL].owner->_state != AST_STATE_UP)
@@ -4647,11 +4704,12 @@
dahdi_set_hook(p->subs[index].dfd, DAHDI_OFFHOOK);
p->subs[SUB_REAL].needringing = 0;
ast_log(LOG_DEBUG, "channel %d answered\n", p->channel);
- if (p->cidspill) {
- /* Cancel any running CallerID spill */
- free(p->cidspill);
- p->cidspill = NULL;
- }
+
+ /* Cancel any running CallerID spill */
+ free(p->cidspill);
+ p->cidspill = NULL;
+ restore_conference(p);
+
p->dialing = 0;
p->callwaitcas = 0;
if (p->confirmanswer) {
@@ -4823,6 +4881,11 @@
case SIG_FXOKS:
ast_log(LOG_DEBUG, "Winkflash, index: %d, normal: %d, callwait: %d, thirdcall: %d\n",
index, p->subs[SUB_REAL].dfd, p->subs[SUB_CALLWAIT].dfd, p->subs[SUB_THREEWAY].dfd);
+
+ /* Cancel any running CallerID spill */
+ free(p->cidspill);
+ p->cidspill = NULL;
+ restore_conference(p);
p->callwaitcas = 0;
if (index != SUB_REAL) {
@@ -4853,6 +4916,7 @@
}
p->callwaitingrepeat = 0;
p->cidcwexpire = 0;
+ p->cid_suppress_expire = 0;
/* Start music on hold if appropriate */
if (!p->subs[SUB_CALLWAIT].inthreeway && ast_bridged_channel(p->subs[SUB_CALLWAIT].owner)) {
@@ -5219,6 +5283,7 @@
dahdi_ring_phone(p);
p->callwaitingrepeat = 0;
p->cidcwexpire = 0;
+ p->cid_suppress_expire = 0;
} else {
ast_log(LOG_WARNING, "Absorbed %s, but nobody is left!?!?\n",
event2str(res));
@@ -5250,6 +5315,7 @@
}
p->callwaitingrepeat = 0;
p->cidcwexpire = 0;
+ p->cid_suppress_expire = 0;
if (ast_bridged_channel(p->owner))
ast_queue_control(p->owner, AST_CONTROL_UNHOLD);
p->subs[SUB_REAL].needunhold = 1;
@@ -5496,22 +5562,26 @@
return &p->subs[index].f;
}
}
- /* Ensure the CW timer decrements only on a single subchannel */
- if (p->callwaitingrepeat && dahdi_get_index(ast, p, 1) == SUB_REAL) {
- p->callwaitingrepeat--;
- }
- if (p->cidcwexpire)
- p->cidcwexpire--;
- /* Repeat callwaiting */
- if (p->callwaitingrepeat == 1) {
- p->callwaitrings++;
- dahdi_callwait(ast);
- }
- /* Expire CID/CW */
- if (p->cidcwexpire == 1) {
- if (option_verbose > 2)
- ast_verbose(VERBOSE_PREFIX_3 "CPE does not support Call Waiting Caller*ID.\n");
- restore_conference(p);
+ if (index == SUB_REAL) {
+ /* Ensure the CW timers decrement only on a single subchannel */
+ if (p->cidcwexpire) {
+ if (!--p->cidcwexpire) {
+ /* Expired CID/CW */
+ if (option_verbose > 2)
+ ast_verbose(VERBOSE_PREFIX_3 "CPE does not support Call Waiting Caller*ID.\n");
+ restore_conference(p);
+ }
+ }
+ if (p->cid_suppress_expire) {
+ --p->cid_suppress_expire;
+ }
+ if (p->callwaitingrepeat) {
+ if (!--p->callwaitingrepeat) {
+ /* Expired, Repeat callwaiting tone */
+ ++p->callwaitrings;
+ dahdi_callwait(ast);
+ }
+ }
}
if (p->subs[index].linear) {
p->subs[index].f.datalen = READ_SIZE * 2;
@@ -5573,8 +5643,28 @@
} else
f = &p->subs[index].f;
- if (f && (f->frametype == AST_FRAME_DTMF))
- dahdi_handle_dtmfup(ast, index, &f);
+ if (f) {
+ switch (f->frametype) {
+ case AST_FRAME_DTMF_BEGIN:
+ case AST_FRAME_DTMF_END:
+ dahdi_handle_dtmf(ast, index, &f);
+ break;
+ case AST_FRAME_VOICE:
+ if (p->cidspill || p->cid_suppress_expire) {
+ /* We are/were sending a caller id spill. Suppress any echo. */
+ p->subs[index].f.frametype = AST_FRAME_NULL;
+ p->subs[index].f.subclass = 0;
+ p->subs[index].f.samples = 0;
+ p->subs[index].f.mallocd = 0;
+ p->subs[index].f.offset = 0;
+ p->subs[index].f.data = NULL;
+ p->subs[index].f.datalen= 0;
+ }
+ break;
+ default:
+ break;
+ }
+ }
/* If we have a fake_event, trigger exception to handle it */
if (p->fake_event)
@@ -5657,8 +5747,11 @@
return 0;
}
if (p->cidspill) {
- if (option_debug)
- ast_log(LOG_DEBUG, "Dropping frame since I've still got a callerid spill\n");
+ if (option_debug) {
+ ast_log(LOG_DEBUG,
+ "Dropping frame since I've still got a callerid spill on %s...\n",
+ ast->name);
+ }
return 0;
}
/* Return if it's not valid data */
@@ -7350,11 +7443,12 @@
res = dahdi_set_hook(i->subs[SUB_REAL].dfd, DAHDI_OFFHOOK);
if (res && (errno == EBUSY))
break;
- if (i->cidspill) {
- /* Cancel VMWI spill */
- free(i->cidspill);
- i->cidspill = NULL;
- }
+
+ /* Cancel VMWI spill */
+ free(i->cidspill);
+ i->cidspill = NULL;
+ restore_conference(i);
+
if (i->immediate) {
dahdi_enable_ec(i);
/* The channel is immediately up. Start right away */
@@ -7700,7 +7794,7 @@
i->cidpos += res2;
if (i->cidpos >= i->cidlen) {
free(i->cidspill);
- i->cidspill = 0;
+ i->cidspill = NULL;
i->cidpos = 0;
i->cidlen = 0;
}
|
[-]
[+]
|
Changed |
asterisk-1.4.39.tar.bz2/channels/chan_iax2.c
^
|
@@ -36,7 +36,7 @@
#include "asterisk.h"
-ASTERISK_FILE_VERSION(__FILE__, "$Revision: 288192 $")
+ASTERISK_FILE_VERSION(__FILE__, "$Revision: 296867 $")
#include <stdlib.h>
#include <stdio.h>
@@ -227,7 +227,11 @@
static pthread_t netthreadid = AST_PTHREADT_NULL;
static pthread_t schedthreadid = AST_PTHREADT_NULL;
+#ifndef AST_MUTEX_INIT_W_CONSTRUCTORS
AST_MUTEX_DEFINE_STATIC(sched_lock);
+#else
+static ast_mutex_t sched_lock;
+#endif
static ast_cond_t sched_cond;
enum {
@@ -12610,7 +12614,6 @@
ast_channel_unregister(&iax2_tech);
delete_users();
iax_provision_unload();
- sched_context_destroy(sched);
reload_firmware(1);
ast_mutex_destroy(&waresl.lock);
@@ -12622,20 +12625,26 @@
ao2_ref(peers, -1);
ao2_ref(users, -1);
ao2_ref(iax_peercallno_pvts, -1);
- ao2_ref(iax_transfercallno_pvts, -1);
+ ao2_ref(iax_transfercallno_pvts, -1);
ao2_ref(peercnts, -1);
ao2_ref(callno_limits, -1);
ao2_ref(calltoken_ignores, -1);
ao2_ref(callno_pool, -1);
ao2_ref(callno_pool_trunk, -1);
+ sched_context_destroy(sched);
return 0;
}
static int unload_module(void)
{
+ int res;
ast_custom_function_unregister(&iaxpeer_function);
- return __unload_module();
+ res = __unload_module();
+#ifdef AST_MUTEX_INIT_W_CONSTRUCTORS
+ ast_mutex_destroy(&sched_lock);
+#endif
+ return res;
}
static int peer_set_sock_cb(void *obj, void *arg, int flags)
@@ -12770,6 +12779,9 @@
}
ast_cond_init(&sched_cond, NULL);
+#ifdef AST_MUTEX_INIT_W_CONSTRUCTORS
+ ast_mutex_init(&sched_lock);
+#endif
io = io_context_create();
sched = sched_context_create();
|
[-]
[+]
|
Changed |
asterisk-1.4.39.tar.bz2/channels/chan_sip.c
^
|
@@ -94,7 +94,7 @@
#include "asterisk.h"
-ASTERISK_FILE_VERSION(__FILE__, "$Revision: 294688 $")
+ASTERISK_FILE_VERSION(__FILE__, "$Revision: 297959 $")
#include <stdio.h>
#include <ctype.h>
@@ -5031,7 +5031,7 @@
} else if (intended_method == SIP_NOTIFY) {
/* We do not support out-of-dialog NOTIFY either,
like voicemail notification, so cancel that early */
- transmit_response_using_temp(callid, sin, 1, intended_method, req, "489 Bad event");
+ transmit_response_using_temp(callid, sin, 1, intended_method, req, "481 No subscription");
} else {
/* Ok, time to create a new SIP dialog object, a pvt */
if ((p = sip_alloc(callid, sin, 1, intended_method))) {
@@ -8812,8 +8812,12 @@
struct hostent *hp;
struct ast_hostent ahp;
struct sockaddr_in oldsin, testsin;
+ char *firstcuri = NULL;
+ int start = 0;
+ int wildcard_found = 0;
+ int single_binding_found;
- ast_copy_string(contact, get_header(req, "Contact"), sizeof(contact));
+ ast_copy_string(contact, __get_header(req, "Contact", &start), sizeof(contact));
if (ast_strlen_zero(expires)) { /* No expires header */
expires = strcasestr(contact, ";expires=");
@@ -8828,11 +8832,31 @@
}
}
- /* Look for brackets */
- curi = contact;
- if (strchr(contact, '<') == NULL) /* No <, check for ; and strip it */
- strsep(&curi, ";"); /* This is Header options, not URI options */
- curi = get_in_brackets(contact);
+ do {
+ /* Look for brackets */
+ curi = contact;
+ if (strchr(contact, '<') == NULL) /* No <, check for ; and strip it */
+ strsep(&curi, ";"); /* This is Header options, not URI options */
+ curi = get_in_brackets(contact);
+ if (!firstcuri) {
+ firstcuri = ast_strdupa(curi);
+ }
+
+ if (!strcasecmp(curi, "*")) {
+ wildcard_found = 1;
+ } else {
+ single_binding_found = 1;
+ }
+
+ if (wildcard_found && (ast_strlen_zero(expires) || expiry != 0 || single_binding_found)) {
+ /* Contact header parameter "*" detected, so punt if: Expires header is missing,
+ * Expires value is not zero, or another Contact header is present. */
+ return PARSE_REGISTER_FAILED;
+ }
+
+ ast_copy_string(contact, __get_header(req, "Contact", &start), sizeof(contact));
+ } while (!ast_strlen_zero(contact));
+ curi = firstcuri;
/* if they did not specify Contact: or Expires:, they are querying
what we currently have stored as their contact address, so return
@@ -16157,6 +16181,9 @@
/* For blind transfers, move the call to the new extensions. For attended transfers on multiple
servers - generate an INVITE with Replaces. Either way, let the dial plan decided */
+ /* indicate before masquerade so the indication actually makes it to the real channel
+ when using local channels with MOH passthru */
+ ast_indicate(current.chan2, AST_CONTROL_UNHOLD);
res = ast_async_goto(current.chan2, p->refer->refer_to_context, p->refer->refer_to, 1);
if (!res) {
@@ -16728,6 +16755,13 @@
{
enum check_auth_result res;
+ /* If this is not the intial request, and the initial request isn't
+ * a register, something screwy happened, so bail */
+ if (p->initreq.headers && p->initreq.method != SIP_REGISTER) {
+ ast_log(LOG_WARNING, "Ignoring spurious REGISTER with Call-ID: %s\n", p->callid);
+ return -1;
+ }
+
/* Use this as the basis */
if (ast_test_flag(req, SIP_PKT_DEBUG))
ast_verbose("Using latest REGISTER request as basis request\n");
@@ -16788,6 +16822,9 @@
const char *cmd;
const char *cseq;
const char *useragent;
+ const char *via;
+ const char *callid;
+ int via_pos = 0;
int seqno;
int len;
int ignore = FALSE;
@@ -16799,13 +16836,19 @@
int oldmethod = p->method;
int acked = 0;
- /* Get Method and Cseq */
+ /* RFC 3261 - 8.1.1 A valid SIP request must contain To, From, CSeq, Call-ID and Via.
+ * 8.2.6.2 Response must have To, From, Call-ID CSeq, and Via related to the request,
+ * so we can check to make sure these fields exist for all requests and responses */
cseq = get_header(req, "Cseq");
cmd = req->header[0];
+ /* Save the via_pos so we can check later that responses only have 1 Via header */
+ via = __get_header(req, "Via", &via_pos);
+ /* This must exist already because we've called find_call by now */
+ callid = get_header(req, "Call-ID");
/* Must have Cseq */
- if (ast_strlen_zero(cmd) || ast_strlen_zero(cseq)) {
- ast_log(LOG_ERROR, "Missing Cseq. Dropping this SIP message, it's incomplete.\n");
+ if (ast_strlen_zero(cmd) || ast_strlen_zero(cseq) || ast_strlen_zero(via)) {
+ ast_log(LOG_ERROR, "Dropping this SIP message with Call-ID '%s', it's incomplete.\n", callid);
error = 1;
}
if (!error && sscanf(cseq, "%30d%n", &seqno, &len) != 1) {
@@ -16841,6 +16884,13 @@
ast_log(LOG_WARNING, "Invalid SIP response code: '%d'\n", respid);
return 0;
}
+ /* RFC 3261 - 8.1.3.3 If more than one Via header field value is present in a reponse
+ * the UAC SHOULD discard the message. This is not perfect, as it will not catch multiple
+ * headers joined with a comma. Fixing that would pretty much involve writing a new parser */
+ if (!ast_strlen_zero(__get_header(req, "via", &via_pos))) {
+ ast_log(LOG_WARNING, "Misrouted SIP response '%s' with Call-ID '%s', too many vias\n", e, callid);
+ return 0;
+ }
if (!p->initreq.headers) {
if (option_debug)
ast_log(LOG_DEBUG, "That's odd... Got a response on a call we don't know about. Cseq %d Cmd %s\n", seqno, cmd);
|
[-]
[+]
|
Added |
asterisk-1.4.39.tar.bz2/contrib/init.d/org.asterisk.muted.plist
^
|
@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+<dict>
+ <key>Label</key>
+ <string>org.asterisk.muted</string>
+ <key>Disabled</key>
+ <true/>
+ <key>UserName</key>
+ <string>asterisk</string>
+ <key>GroupName</key>
+ <string>asterisk</string>
+ <key>KeepAlive</key>
+ <true/>
+ <key>RunAtLoad</key>
+ <true/>
+ <key>Umask</key>
+ <integer>7</integer><!-- 0007 -->
+ <key>Program</key>
+ <string>/usr/sbin/muted</string>
+ <key>ProgramArguments</key>
+ <array>
+ <string>/usr/sbin/muted</string>
+ <string>-f</string>
+ </array>
+ <key>StandardInPath</key>
+ <string>/dev/null</string>
+ <key>StandardOutPath</key>
+ <string>/dev/null</string>
+ <key>StandardErrorPath</key>
+ <string>/dev/null</string>
+</dict>
+</plist>
|
[-]
[+]
|
Changed |
asterisk-1.4.39.tar.bz2/include/asterisk/channel.h
^
|
@@ -608,14 +608,42 @@
};
enum {
- /*! Soft hangup by device */
+ /*!
+ * Soft hangup requested by device or other internal reason.
+ * Actual hangup needed.
+ */
AST_SOFTHANGUP_DEV = (1 << 0),
- /*! Soft hangup for async goto */
+ /*!
+ * Used to break the normal frame flow so an async goto can be
+ * done instead of actually hanging up.
+ */
AST_SOFTHANGUP_ASYNCGOTO = (1 << 1),
+ /*!
+ * Soft hangup requested by system shutdown. Actual hangup
+ * needed.
+ */
AST_SOFTHANGUP_SHUTDOWN = (1 << 2),
+ /*!
+ * Used to break the normal frame flow after a timeout so an
+ * implicit async goto can be done to the 'T' exten if it exists
+ * instead of actually hanging up. If the exten does not exist
+ * then actually hangup.
+ */
AST_SOFTHANGUP_TIMEOUT = (1 << 3),
+ /*!
+ * Soft hangup requested by application/channel-driver being
+ * unloaded. Actual hangup needed.
+ */
AST_SOFTHANGUP_APPUNLOAD = (1 << 4),
+ /*!
+ * Soft hangup requested by non-associated party. Actual hangup
+ * needed.
+ */
AST_SOFTHANGUP_EXPLICIT = (1 << 5),
+ /*!
+ * Used to break a bridge so the channel can be spied upon
+ * instead of actually hanging up.
+ */
AST_SOFTHANGUP_UNBRIDGE = (1 << 6),
};
|
[-]
[+]
|
Changed |
asterisk-1.4.39.tar.bz2/include/asterisk/frame.h
^
|
@@ -292,6 +292,7 @@
AST_CONTROL_VIDUPDATE = 18, /*!< Indicate video frame update */
AST_CONTROL_SRCUPDATE = 20, /*!< Indicate source of media has changed */
AST_CONTROL_SRCCHANGE = 21, /*!< Media has changed and requires a new RTP SSRC */
+ AST_CONTROL_END_OF_Q = 22, /*!< Indicate that this position was the end of the channel queue for a softhangup. */
};
#define AST_SMOOTHER_FLAG_G729 (1 << 0)
@@ -555,7 +556,15 @@
/*! \brief Dump audio codec preference list into a string */
int ast_codec_pref_string(struct ast_codec_pref *pref, char *buf, size_t size);
-/*! \brief Shift an audio codec preference list up or down 65 bytes so that it becomes an ASCII string */
+/*! \brief Shift an audio codec preference list up or down 65 bytes so that it becomes an ASCII string
+ * \note Due to a misunderstanding in how codec preferences are stored, this
+ * list starts at 'B', not 'A'. For backwards compatibility reasons, this
+ * cannot change.
+ * \param pref A codec preference list structure
+ * \param buf A string denoting codec preference, appropriate for use in line transmission
+ * \param size Size of \a buf
+ * \param right Boolean: if 0, convert from \a buf to \a pref; if 1, convert from \a pref to \a buf.
+ */
void ast_codec_pref_convert(struct ast_codec_pref *pref, char *buf, size_t size, int right);
/*! \brief Returns the number of samples contained in the frame */
|
[-]
[+]
|
Changed |
asterisk-1.4.39.tar.bz2/main/abstract_jb.c
^
|
@@ -29,7 +29,7 @@
#include "asterisk.h"
-ASTERISK_FILE_VERSION(__FILE__, "$Revision: 228409 $")
+ASTERISK_FILE_VERSION(__FILE__, "$Revision: 297310 $")
#include <stdio.h>
#include <stdlib.h>
@@ -752,6 +752,11 @@
static int jb_put_first_adaptive(void *jb, struct ast_frame *fin, long now)
{
+ jitterbuf *adaptivejb = (jitterbuf *) jb;
+
+ /* Initialize the offset to that of the first frame's timestamp */
+ adaptivejb->info.resync_offset = fin->ts;
+
return jb_put_adaptive(jb, fin, now);
}
|
[-]
[+]
|
Changed |
asterisk-1.4.39.tar.bz2/main/asterisk.c
^
|
@@ -52,7 +52,7 @@
#include "asterisk.h"
-ASTERISK_FILE_VERSION(__FILE__, "$Revision: 294384 $")
+ASTERISK_FILE_VERSION(__FILE__, "$Revision: 296867 $")
#undef sched_setscheduler
#undef setpriority
@@ -262,7 +262,16 @@
char *version;
};
+#ifndef AST_MUTEX_INIT_W_CONSTRUCTORS
static AST_LIST_HEAD_STATIC(file_versions, file_version);
+#else
+static AST_LIST_HEAD(file_versions, file_version) file_versions;
+static pthread_once_t file_versions_once = PTHREAD_ONCE_INIT;
+static void file_versions_init(void)
+{
+ AST_LIST_HEAD_INIT(&file_versions);
+}
+#endif
void ast_register_file_version(const char *file, const char *version)
{
@@ -280,6 +289,9 @@
new->file = file;
new->version = (char *) new + sizeof(*new);
memcpy(new->version, work, version_length);
+#ifdef AST_MUTEX_INIT_W_CONSTRUCTORS
+ pthread_once(&file_versions_once, file_versions_init);
+#endif
AST_LIST_LOCK(&file_versions);
AST_LIST_INSERT_HEAD(&file_versions, new, list);
AST_LIST_UNLOCK(&file_versions);
|
[-]
[+]
|
Changed |
asterisk-1.4.39.tar.bz2/main/astobj2.c
^
|
@@ -19,7 +19,7 @@
*/
#include "asterisk.h"
-ASTERISK_FILE_VERSION(__FILE__, "$Revision: 254714 $")
+ASTERISK_FILE_VERSION(__FILE__, "$Revision: 297775 $")
#include "asterisk/astobj2.h"
#include "asterisk/utils.h"
@@ -758,6 +758,10 @@
char *obj;
static int prof_id = -1;
+ if (argc != 3) {
+ return RESULT_SHOWUSAGE;
+ }
+
if (prof_id == -1)
prof_id = ast_add_profile("ao2_alloc", 0);
|
[-]
[+]
|
Changed |
asterisk-1.4.39.tar.bz2/main/channel.c
^
|
@@ -25,7 +25,7 @@
#include "asterisk.h"
-ASTERISK_FILE_VERSION(__FILE__, "$Revision: 291577 $")
+ASTERISK_FILE_VERSION(__FILE__, "$Revision: 297823 $")
#include <stdio.h>
#include <stdlib.h>
@@ -919,15 +919,42 @@
ast_channel_lock(chan);
- /* See if the last frame on the queue is a hangup, if so don't queue anything */
- if ((cur = AST_LIST_LAST(&chan->readq)) &&
- (cur->frametype == AST_FRAME_CONTROL) &&
- (cur->subclass == AST_CONTROL_HANGUP)) {
- ast_channel_unlock(chan);
- return 0;
+ /*
+ * Check the last frame on the queue if we are queuing the new
+ * frames after it.
+ */
+ cur = AST_LIST_LAST(&chan->readq);
+ if (cur && cur->frametype == AST_FRAME_CONTROL && !head && (!after || after == cur)) {
+ switch (cur->subclass) {
+ case AST_CONTROL_END_OF_Q:
+ if (fin->frametype == AST_FRAME_CONTROL
+ && fin->subclass == AST_CONTROL_HANGUP) {
+ /*
+ * Destroy the end-of-Q marker frame so we can queue the hangup
+ * frame in its place.
+ */
+ AST_LIST_REMOVE(&chan->readq, cur, frame_list);
+ ast_frfree(cur);
+
+ /*
+ * This has degenerated to a normal queue append anyway. Since
+ * we just destroyed the last frame in the queue we must make
+ * sure that "after" is NULL or bad things will happen.
+ */
+ after = NULL;
+ break;
+ }
+ /* Fall through */
+ case AST_CONTROL_HANGUP:
+ /* Don't queue anything. */
+ ast_channel_unlock(chan);
+ return 0;
+ default:
+ break;
+ }
}
- /* Build copies of all the frames and count them */
+ /* Build copies of all the new frames and count them */
AST_LIST_HEAD_INIT_NOLOCK(&frames);
for (cur = fin; cur; cur = AST_LIST_NEXT(cur, frame_list)) {
if (!(f = ast_frdup(cur))) {
@@ -2187,14 +2214,17 @@
if (chan->generator)
ast_deactivate_generator(chan);
- /* It is possible for chan->_softhangup to be set, yet there still be control
- * frames that still need to be read. Instead of just going to 'done' in the
- * case of ast_check_hangup(), we instead need to send the HANGUP frame so that
- * it can mark the end of the read queue. If there are frames to be read,
- * ast_queue_control will be called repeatedly, but will only queue one hangup
- * frame. */
- if (ast_check_hangup(chan)) {
- ast_queue_control(chan, AST_CONTROL_HANGUP);
+ /*
+ * It is possible for chan->_softhangup to be set and there
+ * still be control frames that need to be read. Instead of
+ * just going to 'done' in the case of ast_check_hangup(), we
+ * need to queue the end-of-Q frame so that it can mark the end
+ * of the read queue. If there are frames to be read,
+ * ast_queue_control() will be called repeatedly, but will only
+ * queue the first end-of-Q frame.
+ */
+ if (chan->_softhangup) {
+ ast_queue_control(chan, AST_CONTROL_END_OF_Q);
} else {
goto done;
}
@@ -2320,11 +2350,20 @@
}
}
- /* Interpret hangup and return NULL */
+ /* Interpret hangup and end-of-Q frames to return NULL */
/* XXX why not the same for frames from the channel ? */
- if (f->frametype == AST_FRAME_CONTROL && f->subclass == AST_CONTROL_HANGUP) {
- ast_frfree(f);
- f = NULL;
+ if (f->frametype == AST_FRAME_CONTROL) {
+ switch (f->subclass) {
+ case AST_CONTROL_HANGUP:
+ chan->_softhangup |= AST_SOFTHANGUP_DEV;
+ /* Fall through */
+ case AST_CONTROL_END_OF_Q:
+ ast_frfree(f);
+ f = NULL;
+ break;
+ default:
+ break;
+ }
}
} else {
chan->blocker = pthread_self();
@@ -2617,7 +2656,9 @@
}
} else {
/* Make sure we always return NULL in the future */
- chan->_softhangup |= AST_SOFTHANGUP_DEV;
+ if (!chan->_softhangup) {
+ chan->_softhangup |= AST_SOFTHANGUP_DEV;
+ }
if (chan->generator)
ast_deactivate_generator(chan);
/* We no longer End the CDR here */
@@ -2678,6 +2719,7 @@
case AST_CONTROL_TAKEOFFHOOK:
case AST_CONTROL_ANSWER:
case AST_CONTROL_HANGUP:
+ case AST_CONTROL_END_OF_Q:
return 0;
case AST_CONTROL_CONGESTION:
@@ -2774,6 +2816,7 @@
case AST_CONTROL_RING:
case AST_CONTROL_HOLD:
case AST_CONTROL_UNHOLD:
+ case AST_CONTROL_END_OF_Q:
/* Nothing left to do for these. */
res = 0;
break;
@@ -2784,8 +2827,7 @@
if (option_debug) {
ast_log(LOG_DEBUG, "Driver for channel '%s' does not support indication %d, emulating it\n", chan->name, condition);
}
- ast_playtones_start(chan, 0, ts->data, 1);
- res = 0;
+ res = ast_playtones_start(chan, 0, ts->data, 1);
chan->visible_indication = condition;
}
@@ -3358,20 +3400,33 @@
/* User perspective is fmt */
*format = fmt;
/* Free any read translation we have right now */
- if (*trans)
+ if (*trans) {
ast_translator_free_path(*trans);
+ *trans = NULL;
+ }
/* Build a translation path from the raw format to the desired format */
- if (!direction)
- /* reading */
- *trans = ast_translator_build_path(*format, *rawformat);
- else
- /* writing */
- *trans = ast_translator_build_path(*rawformat, *format);
+ if (*format == *rawformat) {
+ /*
+ * If we were able to swap the native format to the format that
+ * has been requested, then there is no need to try to build
+ * a translation path.
+ */
+ res = 0;
+ } else {
+ if (!direction) {
+ /* reading */
+ *trans = ast_translator_build_path(*format, *rawformat);
+ } else {
+ /* writing */
+ *trans = ast_translator_build_path(*rawformat, *format);
+ }
+ res = *trans ? 0 : -1;
+ }
ast_channel_unlock(chan);
if (option_debug)
ast_log(LOG_DEBUG, "Set channel %s to %s format %s\n", chan->name,
direction ? "write" : "read", ast_getformatname(fmt));
- return 0;
+ return res;
}
int ast_set_read_format(struct ast_channel *chan, int fmt)
@@ -4541,11 +4596,13 @@
/* No frame received within the specified timeout - check if we have to deliver now */
if (jb_in_use)
ast_jb_get_and_deliver(c0, c1);
- if (c0->_softhangup == AST_SOFTHANGUP_UNBRIDGE || c1->_softhangup == AST_SOFTHANGUP_UNBRIDGE) {
- if (c0->_softhangup == AST_SOFTHANGUP_UNBRIDGE)
- c0->_softhangup = 0;
- if (c1->_softhangup == AST_SOFTHANGUP_UNBRIDGE)
- c1->_softhangup = 0;
+ if ((c0->_softhangup | c1->_softhangup) & AST_SOFTHANGUP_UNBRIDGE) {/* Bit operators are intentional. */
+ if (c0->_softhangup & AST_SOFTHANGUP_UNBRIDGE) {
+ c0->_softhangup &= ~AST_SOFTHANGUP_UNBRIDGE;
+ }
+ if (c1->_softhangup & AST_SOFTHANGUP_UNBRIDGE) {
+ c1->_softhangup &= ~AST_SOFTHANGUP_UNBRIDGE;
+ }
c0->_bridge = c1;
c1->_bridge = c0;
}
@@ -4659,7 +4716,6 @@
enum ast_bridge_result ast_channel_bridge(struct ast_channel *c0, struct ast_channel *c1,
struct ast_bridge_config *config, struct ast_frame **fo, struct ast_channel **rc)
{
- struct ast_channel *who = NULL;
enum ast_bridge_result res = AST_BRIDGE_COMPLETE;
int nativefailed=0;
int firstpass;
@@ -4734,8 +4790,8 @@
ast_set_flag(c0, AST_FLAG_END_DTMF_ONLY);
/* Before we enter in and bridge these two together tell them both the source of audio has changed */
- ast_indicate(c0, AST_CONTROL_SRCCHANGE);
- ast_indicate(c1, AST_CONTROL_SRCCHANGE);
+ ast_indicate(c0, AST_CONTROL_SRCUPDATE);
+ ast_indicate(c1, AST_CONTROL_SRCUPDATE);
for (/* ever */;;) {
struct timeval now = { 0, };
@@ -4766,8 +4822,6 @@
if (callee_warning && config->end_sound)
bridge_playfile(c1, c0, config->end_sound, 0);
*fo = NULL;
- if (who)
- *rc = who;
res = 0;
break;
}
@@ -4788,11 +4842,13 @@
ast_clear_flag(config, AST_FEATURE_WARNING_ACTIVE);
}
- if (c0->_softhangup == AST_SOFTHANGUP_UNBRIDGE || c1->_softhangup == AST_SOFTHANGUP_UNBRIDGE) {
- if (c0->_softhangup == AST_SOFTHANGUP_UNBRIDGE)
- c0->_softhangup = 0;
- if (c1->_softhangup == AST_SOFTHANGUP_UNBRIDGE)
- c1->_softhangup = 0;
+ if ((c0->_softhangup | c1->_softhangup) & AST_SOFTHANGUP_UNBRIDGE) {/* Bit operators are intentional. */
+ if (c0->_softhangup & AST_SOFTHANGUP_UNBRIDGE) {
+ c0->_softhangup &= ~AST_SOFTHANGUP_UNBRIDGE;
+ }
+ if (c1->_softhangup & AST_SOFTHANGUP_UNBRIDGE) {
+ c1->_softhangup &= ~AST_SOFTHANGUP_UNBRIDGE;
+ }
c0->_bridge = c1;
c1->_bridge = c0;
if (option_debug)
@@ -4804,8 +4860,6 @@
if (ast_test_flag(c0, AST_FLAG_ZOMBIE) || ast_check_hangup_locked(c0) ||
ast_test_flag(c1, AST_FLAG_ZOMBIE) || ast_check_hangup_locked(c1)) {
*fo = NULL;
- if (who)
- *rc = who;
res = 0;
if (option_debug)
ast_log(LOG_DEBUG, "Bridge stops because we're zombie or need a soft hangup: c0=%s, c1=%s, flags: %s,%s,%s,%s\n",
@@ -4845,8 +4899,9 @@
ast_clear_flag(c0, AST_FLAG_NBRIDGE);
ast_clear_flag(c1, AST_FLAG_NBRIDGE);
- if (c0->_softhangup == AST_SOFTHANGUP_UNBRIDGE || c1->_softhangup == AST_SOFTHANGUP_UNBRIDGE)
+ if ((c0->_softhangup | c1->_softhangup) & AST_SOFTHANGUP_UNBRIDGE) {/* Bit operators are intentional. */
continue;
+ }
c0->_bridge = NULL;
c1->_bridge = NULL;
|
[-]
[+]
|
Changed |
asterisk-1.4.39.tar.bz2/main/pbx.c
^
|
@@ -25,7 +25,7 @@
#include "asterisk.h"
-ASTERISK_FILE_VERSION(__FILE__, "$Revision: 294739 $")
+ASTERISK_FILE_VERSION(__FILE__, "$Revision: 295790 $")
#include <sys/types.h>
#include <string.h>
@@ -2382,8 +2382,8 @@
/* As long as we're willing to wait, and as long as it's not defined,
keep reading digits until we can't possibly get a right answer anymore. */
digit = ast_waitfordigit(c, waittime * 1000);
- if (c->_softhangup == AST_SOFTHANGUP_ASYNCGOTO) {
- c->_softhangup = 0;
+ if (c->_softhangup & AST_SOFTHANGUP_ASYNCGOTO) {
+ c->_softhangup &= ~AST_SOFTHANGUP_ASYNCGOTO;
} else {
if (!digit) /* No entry */
break;
@@ -2473,9 +2473,9 @@
ast_log(LOG_DEBUG, "Spawn extension (%s,%s,%d) exited non-zero on '%s'\n", c->context, c->exten, c->priority, c->name);
if (option_verbose > 1)
ast_verbose( VERBOSE_PREFIX_2 "Spawn extension (%s, %s, %d) exited non-zero on '%s'\n", c->context, c->exten, c->priority, c->name);
- if (c->_softhangup == AST_SOFTHANGUP_ASYNCGOTO) {
- c->_softhangup = 0;
- } else if (c->_softhangup == AST_SOFTHANGUP_TIMEOUT) {
+ if (c->_softhangup & AST_SOFTHANGUP_ASYNCGOTO) {
+ c->_softhangup &= ~AST_SOFTHANGUP_ASYNCGOTO;
+ } else if (c->_softhangup & AST_SOFTHANGUP_TIMEOUT) {
/* atimeout, nothing bad */
} else {
if (c->cdr)
@@ -2484,9 +2484,9 @@
break;
}
}
- if (c->_softhangup == AST_SOFTHANGUP_ASYNCGOTO) {
- c->_softhangup = 0;
- } else if (c->_softhangup == AST_SOFTHANGUP_TIMEOUT && ast_exists_extension(c,c->context,"T",1,c->cid.cid_num)) {
+ if (c->_softhangup & AST_SOFTHANGUP_ASYNCGOTO) {
+ c->_softhangup &= ~AST_SOFTHANGUP_ASYNCGOTO;
+ } else if (c->_softhangup & AST_SOFTHANGUP_TIMEOUT && ast_exists_extension(c,c->context,"T",1,c->cid.cid_num)) {
set_ext_pri(c, "T", 0); /* 0 will become 1 with the c->priority++; at the end */
/* If the AbsoluteTimeout is not reset to 0, we'll get an infinite loop */
c->whentohangup = 0;
@@ -2520,9 +2520,9 @@
error = 1; /* we know what to do with it */
break;
}
- } else if (c->_softhangup == AST_SOFTHANGUP_TIMEOUT) {
+ } else if (c->_softhangup & AST_SOFTHANGUP_TIMEOUT) {
/* If we get this far with AST_SOFTHANGUP_TIMEOUT, then we know that the "T" extension is next. */
- c->_softhangup = 0;
+ c->_softhangup &= ~AST_SOFTHANGUP_TIMEOUT;
} else { /* keypress received, get more digits for a full extension */
int waittime = 0;
if (digit)
@@ -5744,7 +5744,7 @@
if (ast_exists_extension(chan, chan->context, chan->exten, chan->priority + 1, chan->cid.cid_num)) {
if (option_verbose > 2)
ast_verbose(VERBOSE_PREFIX_3 "Timeout on %s, continuing...\n", chan->name);
- } else if (chan->_softhangup == AST_SOFTHANGUP_TIMEOUT) {
+ } else if (chan->_softhangup & AST_SOFTHANGUP_TIMEOUT) {
if (option_verbose > 2)
ast_verbose(VERBOSE_PREFIX_3 "Call timeout on %s, checking for 'T'\n", chan->name);
res = -1;
|
[-]
[+]
|
Changed |
asterisk-1.4.39.tar.bz2/main/say.c
^
|
@@ -31,7 +31,7 @@
#include "asterisk.h"
-ASTERISK_FILE_VERSION(__FILE__, "$Revision: 237573 $")
+ASTERISK_FILE_VERSION(__FILE__, "$Revision: 296309 $")
#include <sys/types.h>
#include <string.h>
@@ -2099,76 +2099,83 @@
return res;
}
+
/*! \brief ast_say_number_full_se: Swedish syntax */
static int ast_say_number_full_se(struct ast_channel *chan, int num, const char *ints, const char *language, const char *options, int audiofd, int ctrlfd)
{
- int res = 0;
int playh = 0;
+ int start = 1;
char fn[256] = "";
int cn = 1; /* +1 = commune; -1 = neuter */
+ int res = 0;
+
if (!num)
return ast_say_digits_full(chan, 0,ints, language, audiofd, ctrlfd);
if (options && !strncasecmp(options, "n",1)) cn = -1;
- while (!res && (num || playh)) {
+ while (num || playh) {
if (num < 0) {
snprintf(fn, sizeof(fn), "digits/minus");
if ( num > INT_MIN ) {
num = -num;
} else {
num = 0;
- }
+ }
} else if (playh) {
snprintf(fn, sizeof(fn), "digits/hundred");
playh = 0;
+ } else if (start && num < 200 && num > 99 && cn == -1) {
+ /* Don't say "en hundra" just say "hundra". */
+ snprintf(fn, sizeof(fn), "digits/hundred");
+ num -= 100;
+ } else if (num == 1 && cn == -1) { /* En eller ett? */
+ snprintf(fn, sizeof(fn), "digits/1N");
+ num = 0;
} else if (num < 20) {
snprintf(fn, sizeof(fn), "digits/%d", num);
num = 0;
- } else if (num < 100) {
+ } else if (num < 100) { /* Below hundreds - teens and tens */
snprintf(fn, sizeof(fn), "digits/%d", (num /10) * 10);
num -= ((num / 10) * 10);
- } else if (num == 1 && cn == -1) { /* En eller ett? */
- snprintf(fn, sizeof(fn), "digits/1N");
- num = 0;
- } else {
- if (num < 1000){
- snprintf(fn, sizeof(fn), "digits/%d", (num/100));
- playh++;
- num -= ((num / 100) * 100);
- } else {
- if (num < 1000000) { /* 1,000,000 */
- res = ast_say_number_full_se(chan, num / 1000, ints, language, options, audiofd, ctrlfd);
- if (res) {
- return res;
- }
- num = num % 1000;
- snprintf(fn, sizeof(fn), "digits/thousand");
- } else {
- if (num < 1000000000) { /* 1,000,000,000 */
- res = ast_say_number_full_se(chan, num / 1000000, ints, language, options, audiofd, ctrlfd);
- if (res) {
- return res;
- }
- num = num % 1000000;
- snprintf(fn, sizeof(fn), "digits/million");
- } else {
- ast_log(LOG_DEBUG, "Number '%d' is too big for me\n", num);
- res = -1;
- }
- }
+ } else if (num < 1000) {
+ /* Hundreds */
+ snprintf(fn, sizeof(fn), "digits/%d", (num/100));
+ playh++;
+ num -= ((num / 100) * 100);
+ } else if (num < 1000000) { /* 1,000,000 */
+ /* Always say "ett hundra tusen", not "en hundra tusen" */
+ res = ast_say_number_full_se(chan, num / 1000, ints, language, "c", audiofd, ctrlfd);
+ if (res) {
+ return res;
+ }
+ num = num % 1000;
+ snprintf(fn, sizeof(fn), "digits/thousand");
+ } else if (num < 1000000000) { /* 1,000,000,000 */
+ /* Always say "en miljon", not "ett miljon" */
+ res = ast_say_number_full_se(chan, num / 1000000, ints, language, "n", audiofd, ctrlfd);
+ if (res) {
+ return res;
}
+ num = num % 1000000;
+ snprintf(fn, sizeof(fn), "digits/million");
+ } else { /* Miljarder - Billions */
+ ast_log(LOG_DEBUG, "Number '%d' is too big for me\n", num);
+ return -1;
}
- if (!res) {
- if (!ast_streamfile(chan, fn, language)) {
- if ((audiofd > -1) && (ctrlfd > -1))
- res = ast_waitstream_full(chan, ints, audiofd, ctrlfd);
- else
- res = ast_waitstream(chan, ints);
- ast_stopstream(chan);
+
+ if (!ast_streamfile(chan, fn, language)) {
+ if ((audiofd > -1) && (ctrlfd > -1))
+ res = ast_waitstream_full(chan, ints, audiofd, ctrlfd);
+ else
+ res = ast_waitstream(chan, ints);
+ ast_stopstream(chan);
+ if (res) {
+ return res;
}
}
+ start = 0;
}
- return res;
+ return 0;
}
/*! \brief ast_say_number_full_zh: Taiwanese / Chinese syntax */
|
[-]
[+]
|
Changed |
asterisk-1.4.39.tar.bz2/res/res_agi.c
^
|
@@ -29,7 +29,7 @@
#include "asterisk.h"
-ASTERISK_FILE_VERSION(__FILE__, "$Revision: 289500 $")
+ASTERISK_FILE_VERSION(__FILE__, "$Revision: 295553 $")
#include <sys/types.h>
#include <netdb.h>
|
[-]
[+]
|
Changed |
asterisk-1.4.39.tar.bz2/utils/muted.c
^
|
@@ -37,6 +37,9 @@
#ifdef __Darwin__
#include <CoreAudio/AudioHardware.h>
+#include <sys/types.h>
+#include <pwd.h>
+#include <sys/stat.h>
#elif defined(__linux__) || defined(__FreeBSD__)
#include <sys/soundcard.h>
#endif
@@ -54,6 +57,8 @@
#include "asterisk/autoconfig.h"
+#define ast_strlen_zero(a) (!(*(a)))
+
static char *config = "/etc/asterisk/muted.conf";
static char host[256] = "";
@@ -349,17 +354,25 @@
AudioDeviceID device;
UInt32 size;
UInt32 channels[2];
+ AudioObjectPropertyAddress OutputAddr = { kAudioHardwarePropertyDefaultOutputDevice, kAudioObjectPropertyScopeGlobal, kAudioObjectPropertyElementMaster };
+ AudioObjectPropertyAddress ChannelAddr = { kAudioDevicePropertyPreferredChannelsForStereo, kAudioDevicePropertyScopeOutput, kAudioObjectPropertyElementWildcard };
+ AudioObjectPropertyAddress VolumeAddr = { kAudioDevicePropertyVolumeScalar, kAudioDevicePropertyScopeOutput, };
size = sizeof(device);
- err = AudioHardwareGetProperty(kAudioHardwarePropertyDefaultOutputDevice, &size, &device);
+ err = AudioObjectGetPropertyData(kAudioObjectSystemObject, &OutputAddr, 0, NULL, &size, &device);
size = sizeof(channels);
- if (!err)
- err = AudioDeviceGetProperty(device, 0, false, kAudioDevicePropertyPreferredChannelsForStereo, &size, &channels);
+ if (!err) {
+ err = AudioObjectGetPropertyData(device, &ChannelAddr, 0, NULL, &size, &channels);
+ }
size = sizeof(vol);
- if (!err)
- err = AudioDeviceGetProperty(device, channels[0], false, kAudioDevicePropertyVolumeScalar, &size, &volumeL);
- if (!err)
- err = AudioDeviceGetProperty(device, channels[1], false, kAudioDevicePropertyVolumeScalar, &size, &volumeR);
+ if (!err) {
+ VolumeAddr.mElement = channels[0];
+ err = AudioObjectGetPropertyData(device, &VolumeAddr, 0, NULL, &size, &volumeL);
+ }
+ if (!err) {
+ VolumeAddr.mElement = channels[1];
+ err = AudioObjectGetPropertyData(device, &VolumeAddr, 0, NULL, &size, &volumeR);
+ }
if (!err)
vol = (volumeL < volumeR) ? volumeR : volumeL;
else {
@@ -385,16 +398,23 @@
AudioDeviceID device;
UInt32 size;
UInt32 channels[2];
+ AudioObjectPropertyAddress OutputAddr = { kAudioHardwarePropertyDefaultOutputDevice, kAudioObjectPropertyScopeGlobal, kAudioObjectPropertyElementMaster };
+ AudioObjectPropertyAddress ChannelAddr = { kAudioDevicePropertyPreferredChannelsForStereo, kAudioDevicePropertyScopeOutput, kAudioObjectPropertyElementWildcard };
+ AudioObjectPropertyAddress VolumeAddr = { kAudioDevicePropertyVolumeScalar, kAudioDevicePropertyScopeOutput, };
size = sizeof(device);
- err = AudioHardwareGetProperty(kAudioHardwarePropertyDefaultOutputDevice, &size, &device);
+ err = AudioObjectGetPropertyData(kAudioObjectSystemObject, &OutputAddr, 0, NULL, &size, &device);
size = sizeof(channels);
- err = AudioDeviceGetProperty(device, 0, false, kAudioDevicePropertyPreferredChannelsForStereo, &size, &channels);
+ err = AudioObjectGetPropertyData(device, &ChannelAddr, 0, NULL, &size, &channels);
size = sizeof(vol);
- if (!err)
- err = AudioDeviceSetProperty(device, 0, channels[0], false, kAudioDevicePropertyVolumeScalar, size, &volumeL);
- if (!err)
- err = AudioDeviceSetProperty(device, 0, channels[1], false, kAudioDevicePropertyVolumeScalar, size, &volumeR);
+ if (!err) {
+ VolumeAddr.mElement = channels[0];
+ err = AudioObjectSetPropertyData(device, &VolumeAddr, 0, NULL, size, &volumeL);
+ }
+ if (!err) {
+ VolumeAddr.mElement = channels[1];
+ err = AudioObjectSetPropertyData(device, &VolumeAddr, 0, NULL, size, &volumeR);
+ }
if (err) {
#endif
@@ -692,11 +712,35 @@
exit(1);
}
#else
- fprintf(stderr, "Mac OS X detected. Use 'launchd -d muted -f' to launch.\n");
+ const char *found = NULL, *paths[] = {
+ "/Library/LaunchAgents/org.asterisk.muted.plist",
+ "/Library/LaunchDaemons/org.asterisk.muted.plist",
+ "contrib/init.d/org.asterisk.muted.plist",
+ "<path-to-asterisk-source>/contrib/init.d/org.asterisk.muted.plist" };
+ char userpath[256];
+ struct stat unused;
+ struct passwd *pwd = getpwuid(getuid());
+ int i;
+
+ snprintf(userpath, sizeof(userpath), "%s%s", pwd->pw_dir, paths[0]);
+ if (!stat(userpath, &unused)) {
+ found = userpath;
+ }
+
+ if (!found) {
+ for (i = 0; i < 3; i++) {
+ if (!stat(paths[i], &unused)) {
+ found = paths[i];
+ break;
+ }
+ }
+ }
+
+ fprintf(stderr, "Mac OS X detected. Use 'launchctl load -w %s' to launch.\n", found ? found : paths[3]);
exit(1);
-#endif
+#endif /* !defined(HAVE_SBIN_LAUNCHD */
}
-#endif
+#endif /* HAVE_WORKING_FORK */
for(;;) {
if (wait_event()) {
fclose(astf);
|