[-]
[+]
|
Changed |
asterisk.changes
|
|
[-]
[+]
|
Changed |
asterisk.spec
^
|
|
[-]
[+]
|
Deleted |
asterisk-1.8.17.0.tar.xz/asterisk-1.8.17.0-summary.html
^
|
@@ -1,490 +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.8.17.0</title></head>
-<body>
-<h1 align="center"><a name="top">Release Summary</a></h1>
-<h3 align="center">asterisk-1.8.17.0</h3>
-<h3 align="center">Date: 2012-10-08</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.8.16.0.</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>
-18 kmoore<br/>
-15 mmichelson<br/>
-8 jrose<br/>
-6 bebuild<br/>
-6 mjordan<br/>
-5 rmudgett<br/>
-4 alecdavis<br/>
-4 may<br/>
-2 Michael<br/>
-1 Andrew<br/>
-1 Clod<br/>
-1 dlee<br/>
-1 dsessions<br/>
-1 Egor<br/>
-1 Etienne<br/>
-1 Filip<br/>
-1 Gareth<br/>
-1 Italo<br/>
-1 Jeremy<br/>
-1 Konstantin<br/>
-1 Nitesh<br/>
-1 Peter<br/>
-1 schmidts<br/>
-1 twilson<br/>
-1 Tzafrir<br/>
-</td>
-<td>
-2 Michael L. Young<br/>
-2 mjordan<br/>
-1 Alan Frisch<br/>
-1 alecdavis<br/>
-1 Alexandr Gordeev<br/>
-1 Darren Sessions<br/>
-1 Etienne Lessard<br/>
-1 rmudgett<br/>
-</td>
-<td>
-6 mjordan<br/>
-3 wdoekes<br/>
-2 jcovert<br/>
-1 beagles<br/>
-1 berlic<br/>
-1 bulkorok<br/>
-1 cecco<br/>
-1 chip<br/>
-1 dlee<br/>
-1 gareth<br/>
-1 hexanol<br/>
-1 jpepper<br/>
-1 jplord<br/>
-1 junky<br/>
-1 lathama<br/>
-1 maha<br/>
-1 nbansal<br/>
-1 nik600<br/>
-1 nmazzon<br/>
-1 phill<br/>
-1 pracz<br/>
-1 rgagnon<br/>
-1 rmudgett<br/>
-1 slesru<br/>
-1 tzafrir<br/>
-1 vmisha<br/>
-1 yarns<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: Addons/chan_ooh323</h3><br/>
-<a href="https://issues.asterisk.org/jira/browse/ASTERISK-19308">ASTERISK-19308</a>: problem with transit calls ooh323-dahdi(pri)-panasonic 500<br/>
-Revision: <a href="http://svn.digium.com/view/asterisk/branches/1.8?view=revision&revision=371089">371089</a><br/>
-Reporter: slesru<br/>
-Coders: may<br/>
-<br/>
-<h3>Category: Addons/res_config_mysql</h3><br/>
-<a href="https://issues.asterisk.org/jira/browse/ASTERISK-19793">ASTERISK-19793</a>: Only last realtime member of a queue is not actually removed from queue when removed from database<br/>
-Revision: <a href="http://svn.digium.com/view/asterisk/branches/1.8?view=revision&revision=371306">371306</a><br/>
-Reporter: maha<br/>
-Coders: mmichelson<br/>
-<br/>
-<h3>Category: Applications/app_chanspy</h3><br/>
-<a href="https://issues.asterisk.org/jira/browse/ASTERISK-17515">ASTERISK-17515</a>: groupcount or group doesn't "release" channels and group shows channels which doesn't exists<br/>
-Revision: <a href="http://svn.digium.com/view/asterisk/branches/1.8?view=revision&revision=370952">370952</a><br/>
-Reporter: yarns<br/>
-Testers: Alexandr Gordeev, Michael L. Young<br/>
-Coders: Michael<br/>
-<br/>
-<h3>Category: Applications/app_dial</h3><br/>
-<a href="https://issues.asterisk.org/jira/browse/ASTERISK-20287">ASTERISK-20287</a>: Broken hangupcause passtrough<br/>
-Revision: <a href="http://svn.digium.com/view/asterisk/branches/1.8?view=revision&revision=371860">371860</a><br/>
-Reporter: berlic<br/>
-Testers: rmudgett<br/>
-Coders: Konstantin<br/>
-<br/>
-<h3>Category: Applications/app_externalivr</h3><br/>
-<a href="https://issues.asterisk.org/jira/browse/ASTERISK-20132">ASTERISK-20132</a>: Security Vulnerability: remote authenticated attacker can execute arbitrary shell commands on system through app ExternalIVR<br/>
-Revision: <a href="http://svn.digium.com/view/asterisk/branches/1.8?view=revision&revision=371998">371998</a><br/>
-Reporter: mjordan<br/>
-Coders: mjordan<br/>
-<br/>
-<h3>Category: Applications/app_followme</h3><br/>
-<a href="https://issues.asterisk.org/jira/browse/ASTERISK-16879">ASTERISK-16879</a>: [patch] FollowMe has a maximum of 90 chars for number<br/>
-Revision: <a href="http://svn.digium.com/view/asterisk/branches/1.8?view=revision&revision=372390">372390</a><br/>
-Reporter: junky<br/>
-Testers: mjordan<br/>
-Coders: Clod<br/>
-<br/>
-<h3>Category: Applications/app_minivm</h3><br/>
-<a href="https://issues.asterisk.org/jira/browse/ASTERISK-17133">ASTERISK-17133</a>: [patch] minivm: when sending mail and using volgain<br/>
-Revision: <a href="http://svn.digium.com/view/asterisk/branches/1.8?view=revision&revision=372554">372554</a><br/>
-Reporter: tzafrir<br/>
-Coders: Tzafrir<br/>
-<br/>
-<h3>Category: Applications/app_queue</h3><br/>
-<a href="https://issues.asterisk.org/jira/browse/ASTERISK-16115">ASTERISK-16115</a>: [patch] problem with ringinuse=no, queue members receive sometimes two calls<br/>
-Revision: <a href="http://svn.digium.com/view/asterisk/branches/1.8?view=revision&revision=372048">372048</a><br/>
-Reporter: nik600<br/>
-Coders: Italo<br/>
-<br/>
-<a href="https://issues.asterisk.org/jira/browse/ASTERISK-19793">ASTERISK-19793</a>: Only last realtime member of a queue is not actually removed from queue when removed from database<br/>
-Revision: <a href="http://svn.digium.com/view/asterisk/branches/1.8?view=revision&revision=371306">371306</a><br/>
-Reporter: maha<br/>
-Coders: mmichelson<br/>
-<br/>
-<a href="https://issues.asterisk.org/jira/browse/ASTERISK-20380">ASTERISK-20380</a>: Bad ao2_unlock call in app_queue's try_calling<br/>
-Revision: <a href="http://svn.digium.com/view/asterisk/branches/1.8?view=revision&revision=372624">372624</a><br/>
-Reporter: jpepper<br/>
-Coders: Jeremy<br/>
-<br/>
-<h3>Category: Applications/app_voicemail/IMAP</h3><br/>
-<a href="https://issues.asterisk.org/jira/browse/ASTERISK-19155">ASTERISK-19155</a>: Memory leak in app_voicemail.c when using IMAP<br/>
-Revision: <a href="http://svn.digium.com/view/asterisk/branches/1.8?view=revision&revision=372268">372268</a><br/>
-Reporter: phill<br/>
-Coders: Filip<br/>
-<br/>
-<h3>Category: CEL/cel_pgsql</h3><br/>
-<a href="https://issues.asterisk.org/jira/browse/ASTERISK-19991">ASTERISK-19991</a>: Memory leak in cel_pgsql<br/>
-Revision: <a href="http://svn.digium.com/view/asterisk/branches/1.8?view=revision&revision=372158">372158</a><br/>
-Reporter: hexanol<br/>
-Testers: Etienne Lessard<br/>
-Coders: Etienne<br/>
-<br/>
-<h3>Category: Channels/General</h3><br/>
-<a href="https://issues.asterisk.org/jira/browse/ASTERISK-20283">ASTERISK-20283</a>: Files descriptors for dummy channels need to be set to -1<br/>
-Revision: <a href="http://svn.digium.com/view/asterisk/branches/1.8?view=revision&revision=371888">371888</a><br/>
-Reporter: gareth<br/>
-Coders: Gareth<br/>
-<br/>
-<h3>Category: Channels/chan_iax2</h3><br/>
-<a href="https://issues.asterisk.org/jira/browse/ASTERISK-20186">ASTERISK-20186</a>: Security Vulnerability: IAX2 peer's NEW message bypasses ACL defined in realtime<br/>
-Revision: <a href="http://svn.digium.com/view/asterisk/branches/1.8?view=revision&revision=372015">372015</a><br/>
-Reporter: mjordan<br/>
-Testers: mjordan, Alan Frisch<br/>
-Coders: mjordan<br/>
-<br/>
-<a href="https://issues.asterisk.org/jira/browse/ASTERISK-20338">ASTERISK-20338</a>: iax2 debug only shows received packets when "iax2 set debug peer xxx" is used<br/>
-Revision: <a href="http://svn.digium.com/view/asterisk/branches/1.8?view=revision&revision=372804">372804</a><br/>
-Reporter: jcovert<br/>
-Coders: kmoore<br/>
-<br/>
-<h3>Category: Channels/chan_sip/DatabaseSupport</h3><br/>
-<a href="https://issues.asterisk.org/jira/browse/ASTERISK-17222">ASTERISK-17222</a>: [patch] Realtime Peers Cannot Register<br/>
-Revision: <a href="http://svn.digium.com/view/asterisk/branches/1.8?view=revision&revision=372498">372498</a><br/>
-Reporter: jcovert<br/>
-Testers: Darren Sessions<br/>
-Coders: dsessions<br/>
-<br/>
-<h3>Category: Channels/chan_sip/General</h3><br/>
-<a href="https://issues.asterisk.org/jira/browse/ASTERISK-19154">ASTERISK-19154</a>: huge number of sip OPTION on 'sip reload'<br/>
-Revision: <a href="http://svn.digium.com/view/asterisk/branches/1.8?view=revision&revision=370666">370666</a><br/>
-Reporter: nmazzon<br/>
-Coders: schmidts<br/>
-<br/>
-<a href="https://issues.asterisk.org/jira/browse/ASTERISK-19677">ASTERISK-19677</a>: SIP dial string //IPorHost does not work like expected<br/>
-Revision: <a href="http://svn.digium.com/view/asterisk/branches/1.8?view=revision&revision=370769">370769</a><br/>
-Reporter: wdoekes<br/>
-Coders: mmichelson<br/>
-<br/>
-<a href="https://issues.asterisk.org/jira/browse/ASTERISK-19857">ASTERISK-19857</a>: Explore directmedia re-INVITE improvements between multiple Asterisk instances<br/>
-Revision: <a href="http://svn.digium.com/view/asterisk/branches/1.8?view=revision&revision=370618">370618</a><br/>
-Reporter: mjordan<br/>
-Coders: mmichelson<br/>
-<br/>
-<a href="https://issues.asterisk.org/jira/browse/ASTERISK-20119">ASTERISK-20119</a>: Peer MWI subscriptions erroneously removed when another SIP dialog is destroyed<br/>
-Revision: <a href="http://svn.digium.com/view/asterisk/branches/1.8?view=revision&revision=371270">371270</a><br/>
-Reporter: vmisha<br/>
-Coders: kmoore<br/>
-<br/>
-<a href="https://issues.asterisk.org/jira/browse/ASTERISK-20124">ASTERISK-20124</a>: chan_sip retransmit timeout causes a AST_CAUSE_PROTOCOL_ERROR, translates to 603 Declined<br/>
-Revision: <a href="http://svn.digium.com/view/asterisk/branches/1.8?view=revision&revision=371824">371824</a><br/>
-Reporter: wdoekes<br/>
-Coders: jrose<br/>
-<br/>
-<a href="https://issues.asterisk.org/jira/browse/ASTERISK-20357">ASTERISK-20357</a>: T.38 offer for peer that does not support T.38 fails to warn user on CLI<br/>
-Revision: <a href="http://svn.digium.com/view/asterisk/branches/1.8?view=revision&revision=372763">372763</a><br/>
-Reporter: cecco<br/>
-Coders: kmoore<br/>
-<br/>
-<h3>Category: Channels/chan_sip/T.38</h3><br/>
-<a href="https://issues.asterisk.org/jira/browse/ASTERISK-19373">ASTERISK-19373</a>: Segmentation Fault in ast_udptl_write() due to bad memcpy() call<br/>
-Revision: <a href="http://svn.digium.com/view/asterisk/branches/1.8?view=revision&revision=371544">371544</a><br/>
-Reporter: rgagnon<br/>
-Coders: kmoore<br/>
-<br/>
-<h3>Category: Core/AstMM</h3><br/>
-<a href="https://issues.asterisk.org/jira/browse/ASTERISK-20349">ASTERISK-20349</a>: DEBUG_MALLOC version of ast_strndup() may cause buffer overflow<br/>
-Revision: <a href="http://svn.digium.com/view/asterisk/branches/1.8?view=revision&revision=372655">372655</a><br/>
-Reporter: beagles<br/>
-Coders: rmudgett<br/>
-<br/>
-<h3>Category: Core/BuildSystem</h3><br/>
-<a href="https://issues.asterisk.org/jira/browse/ASTERISK-20392">ASTERISK-20392</a>: OpenSSL headers not picked up when configured using --with-ssl=<br/>
-Revision: <a href="http://svn.digium.com/view/asterisk/branches/1.8?view=revision&revision=372682">372682</a><br/>
-Reporter: dlee<br/>
-Coders: dlee<br/>
-<br/>
-<h3>Category: Core/Channels</h3><br/>
-<a href="https://issues.asterisk.org/jira/browse/ASTERISK-19610">ASTERISK-19610</a>: dsp.c can no longer detect a quick DTMF sequence<br/>
-Revision: <a href="http://svn.digium.com/view/asterisk/branches/1.8?view=revision&revision=372239">372239</a><br/>
-Reporter: jplord<br/>
-Testers: alecdavis<br/>
-Coders: alecdavis<br/>
-<br/>
-<h3>Category: Core/General</h3><br/>
-<a href="https://issues.asterisk.org/jira/browse/ASTERISK-20090">ASTERISK-20090</a>: Crash when running 'core show locks' with BETTER_BACKTRACES enabled<br/>
-Revision: <a href="http://svn.digium.com/view/asterisk/branches/1.8?view=revision&revision=371690">371690</a><br/>
-Reporter: mjordan<br/>
-Coders: kmoore<br/>
-<br/>
-<h3>Category: Core/ManagerInterface</h3><br/>
-<a href="https://issues.asterisk.org/jira/browse/ASTERISK-20132">ASTERISK-20132</a>: Security Vulnerability: remote authenticated attacker can execute arbitrary shell commands on system through app ExternalIVR<br/>
-Revision: <a href="http://svn.digium.com/view/asterisk/branches/1.8?view=revision&revision=371998">371998</a><br/>
-Reporter: mjordan<br/>
-Coders: mjordan<br/>
-<br/>
-<h3>Category: Core/Portability</h3><br/>
-<a href="https://issues.asterisk.org/jira/browse/ASTERISK-20240">ASTERISK-20240</a>: Incorrect work of __ast_rwlock_timed[rd|wr]lock() functions on OpenBSD<br/>
-Revision: <a href="http://svn.digium.com/view/asterisk/branches/1.8?view=revision&revision=371718">371718</a><br/>
-Reporter: chip<br/>
-Coders: Egor<br/>
-<br/>
-<h3>Category: Documentation</h3><br/>
-<a href="https://issues.asterisk.org/jira/browse/ASTERISK-20279">ASTERISK-20279</a>: Add CODING-GUIDELINES back to SVN or at minimum a link to the wiki<br/>
-Revision: <a href="http://svn.digium.com/view/asterisk/branches/1.8?view=revision&revision=371961">371961</a><br/>
-Reporter: lathama<br/>
-Coders: Andrew<br/>
-<br/>
-<h3>Category: Functions/func_groupcount</h3><br/>
-<a href="https://issues.asterisk.org/jira/browse/ASTERISK-17515">ASTERISK-17515</a>: groupcount or group doesn't "release" channels and group shows channels which doesn't exists<br/>
-Revision: <a href="http://svn.digium.com/view/asterisk/branches/1.8?view=revision&revision=370952">370952</a><br/>
-Reporter: yarns<br/>
-Testers: Alexandr Gordeev, Michael L. Young<br/>
-Coders: Michael<br/>
-<br/>
-<h3>Category: General</h3><br/>
-<a href="https://issues.asterisk.org/jira/browse/ASTERISK-20135">ASTERISK-20135</a>: Use of ast_asprintf and asprintf needs to be checked for failure.<br/>
-Revision: <a href="http://svn.digium.com/view/asterisk/branches/1.8?view=revision&revision=371590">371590</a><br/>
-Reporter: rmudgett<br/>
-Coders: mmichelson<br/>
-<br/>
-<a href="https://issues.asterisk.org/jira/browse/ASTERISK-20408">ASTERISK-20408</a>: constify astobj2's __ao2_ref_debug parameters<br/>
-Revision: <a href="http://svn.digium.com/view/asterisk/branches/1.8?view=revision&revision=372959">372959</a><br/>
-Reporter: mjordan<br/>
-Coders: mjordan<br/>
-<br/>
-<h3>Category: PBX/pbx_dundi</h3><br/>
-<a href="https://issues.asterisk.org/jira/browse/ASTERISK-19309">ASTERISK-19309</a>: [patch] DUNDi message routing bug<br/>
-Revision: <a href="http://svn.digium.com/view/asterisk/branches/1.8?view=revision&revision=372417">372417</a><br/>
-Reporter: pracz<br/>
-Coders: Peter<br/>
-<br/>
-<h3>Category: Resources/res_fax</h3><br/>
-<a href="https://issues.asterisk.org/jira/browse/ASTERISK-19762">ASTERISK-19762</a>: Segfault in ast_frdup when invalid data length specified in duplicated frame<br/>
-Revision: <a href="http://svn.digium.com/view/asterisk/branches/1.8?view=revision&revision=371544">371544</a><br/>
-Reporter: bulkorok<br/>
-Coders: kmoore<br/>
-<br/>
-<h3>Category: Resources/res_rtp_asterisk</h3><br/>
-<a href="https://issues.asterisk.org/jira/browse/ASTERISK-20295">ASTERISK-20295</a>: Asterisk is not incrementing the sequence numbers for the retransmission of the DTMF end packets(RTPEvent packet with end bit set to 1) <br/>
-Revision: <a href="http://svn.digium.com/view/asterisk/branches/1.8?view=revision&revision=372185">372185</a><br/>
-Reporter: nbansal<br/>
-Testers: Michael L. Young<br/>
-Coders: Nitesh, Michael<br/>
-<br/>
-<h3>Category: Tests/General</h3><br/>
-<a href="https://issues.asterisk.org/jira/browse/ASTERISK-20120">ASTERISK-20120</a>: Unit test ast_parse_arg_test fails on 32-bit machines<br/>
-Revision: <a href="http://svn.digium.com/view/asterisk/branches/1.8?view=revision&revision=371392">371392</a><br/>
-Reporter: mjordan<br/>
-Coders: twilson<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.8?view=revision&revision=370697">370697</a></td><td>kmoore</td><td>Revert alloca changes for utils</td>
-<td></td></tr><tr><td><a href="http://svn.digium.com/view/asterisk/branches/1.8?view=revision&revision=370770">370770</a></td><td>mmichelson</td><td>Remove unused variable.</td>
-<td></td></tr><tr><td><a href="http://svn.digium.com/view/asterisk/branches/1.8?view=revision&revision=370771">370771</a></td><td>mmichelson</td><td>Seriously? Another compilation error fixed.</td>
-<td></td></tr><tr><td><a href="http://svn.digium.com/view/asterisk/branches/1.8?view=revision&revision=370797">370797</a></td><td>mmichelson</td><td>Improve debug message for temporary outbound proxies.</td>
-<td></td></tr><tr><td><a href="http://svn.digium.com/view/asterisk/branches/1.8?view=revision&revision=370856">370856</a></td><td>kmoore</td><td>Add missing AST_CAUSE_* -> text translations</td>
-<td></td></tr><tr><td><a href="http://svn.digium.com/view/asterisk/branches/1.8?view=revision&revision=370900">370900</a></td><td>rmudgett</td><td>Fix the analog dial *0 flash-hook of bridged peer feature.</td>
-<td></td></tr><tr><td><a href="http://svn.digium.com/view/asterisk/branches/1.8?view=revision&revision=370923">370923</a></td><td>kmoore</td><td>Do not define a cause that doesn't actually exist</td>
-<td></td></tr><tr><td><a href="http://svn.digium.com/view/asterisk/branches/1.8?view=revision&revision=370985">370985</a></td><td>kmoore</td><td>Correct documentation for the MeetMe x flag</td>
-<td></td></tr><tr><td><a href="http://svn.digium.com/view/asterisk/branches/1.8?view=revision&revision=370988">370988</a></td><td>may</td><td>change opening h323 logfile with append mode instead of overwrite</td>
-<td></td></tr><tr><td><a href="http://svn.digium.com/view/asterisk/branches/1.8?view=revision&revision=371011">371011</a></td><td>may</td><td>Fix to resend GRQ/RRQ if RRJ (registration reject) is received</td>
-<td><a href="https://issues.asterisk.org/jira/browse/ASTERISK-20094">ASTERISK-20094</a></td></tr><tr><td><a href="http://svn.digium.com/view/asterisk/branches/1.8?view=revision&revision=371012">371012</a></td><td>rmudgett</td><td>Use better libss7 detection test and move libpri compile test.</td>
-<td></td></tr><tr><td><a href="http://svn.digium.com/view/asterisk/branches/1.8?view=revision&revision=371060">371060</a></td><td>may</td><td>Send re-register packets by GRQ (gatekeeper request) interval</td>
-<td><a href="https://issues.asterisk.org/jira/browse/ASTERISK-20094">ASTERISK-20094</a></td></tr><tr><td><a href="http://svn.digium.com/view/asterisk/branches/1.8?view=revision&revision=371141">371141</a></td><td>mmichelson</td><td>Fix a couple of documentation problems in app_queue.c</td>
-<td></td></tr><tr><td><a href="http://svn.digium.com/view/asterisk/branches/1.8?view=revision&revision=371198">371198</a></td><td>mmichelson</td><td>Fix problem where incorrect pointer was checked for nullity.</td>
-<td></td></tr><tr><td><a href="http://svn.digium.com/view/asterisk/branches/1.8?view=revision&revision=371201">371201</a></td><td>kmoore</td><td>Add test instrumentation</td>
-<td></td></tr><tr><td><a href="http://svn.digium.com/view/asterisk/branches/1.8?view=revision&revision=371337">371337</a></td><td>jrose</td><td>chan_sip: Trigger reinvite if the SDP answer is included in the SIP ACK</td>
-<td></td></tr><tr><td><a href="http://svn.digium.com/view/asterisk/branches/1.8?view=revision&revision=371357">371357</a></td><td>jrose</td><td>chan_sip: Use pvt outgoing_call variable to set Remote-Party-ID Header</td>
-<td></td></tr><tr><td><a href="http://svn.digium.com/view/asterisk/branches/1.8?view=revision&revision=371393">371393</a></td><td>kmoore</td><td>Add module reload instrumentation for TEST_FRAMEWORK</td>
-<td></td></tr><tr><td><a href="http://svn.digium.com/view/asterisk/branches/1.8?view=revision&revision=371436">371436</a></td><td>kmoore</td><td>Add instrumentation to subsystem reloads</td>
-<td></td></tr><tr><td><a href="http://svn.digium.com/view/asterisk/branches/1.8?view=revision&revision=371469">371469</a></td><td>mjordan</td><td>Fix memory leak in XML documentation</td>
-<td></td></tr><tr><td><a href="http://svn.digium.com/view/asterisk/branches/1.8?view=revision&revision=371662">371662</a></td><td>alecdavis</td><td>mf_detect: incorrectly used DTMF_GSIZE instead of MF_GSIZE</td>
-<td></td></tr><tr><td><a href="http://svn.digium.com/view/asterisk/branches/1.8?view=revision&revision=371747">371747</a></td><td>mmichelson</td><td>Fix incorrectly documented option in queues.conf</td>
-<td></td></tr><tr><td><a href="http://svn.digium.com/view/asterisk/branches/1.8?view=revision&revision=371782">371782</a></td><td>mmichelson</td><td>Fix incorrect documentation of the MailboxStatus manager command.</td>
-<td></td></tr><tr><td><a href="http://svn.digium.com/view/asterisk/branches/1.8?view=revision&revision=371787">371787</a></td><td>mmichelson</td><td>Fix misleading documentation in agents.conf.sample regarding ackcall usage.</td>
-<td></td></tr><tr><td><a href="http://svn.digium.com/view/asterisk/branches/1.8?view=revision&revision=371919">371919</a></td><td>jrose</td><td>app_meetme: Adding test events for following activity in MeetMe.</td>
-<td></td></tr><tr><td><a href="http://svn.digium.com/view/asterisk/branches/1.8?view=revision&revision=372089">372089</a></td><td>mmichelson</td><td>Prevent crash on shutdown due to refcount error on queues container.</td>
-<td></td></tr><tr><td><a href="http://svn.digium.com/view/asterisk/branches/1.8?view=revision&revision=372212">372212</a></td><td>alecdavis</td><td>dsp.c: optimize goerztzel sample loops, in dtmf_detect, mf_detect and tone_detect</td>
-<td></td></tr><tr><td><a href="http://svn.digium.com/view/asterisk/branches/1.8?view=revision&revision=372337">372337</a></td><td>kmoore</td><td>Ensure counts generated in manager_show_dialplan_helper are correct</td>
-<td></td></tr><tr><td><a href="http://svn.digium.com/view/asterisk/branches/1.8?view=revision&revision=372339">372339</a></td><td>alecdavis</td><td>dsp.c: in ast_mf_detect_init incorrectly sets goertzel samples to 160, should be MF_GSIZE</td>
-<td></td></tr><tr><td><a href="http://svn.digium.com/view/asterisk/branches/1.8?view=revision&revision=372354">372354</a></td><td>kmoore</td><td>Correct documentation for ModuleLoad AMI action</td>
-<td></td></tr><tr><td><a href="http://svn.digium.com/view/asterisk/branches/1.8?view=revision&revision=372444">372444</a></td><td>kmoore</td><td>Ensure "rules" is tab-completable for "queue show"</td>
-<td></td></tr><tr><td><a href="http://svn.digium.com/view/asterisk/branches/1.8?view=revision&revision=372471">372471</a></td><td>jrose</td><td>chan_sip: Note change in behavior to how directmediapermit/deny ACL works</td>
-<td></td></tr><tr><td><a href="http://svn.digium.com/view/asterisk/branches/1.8?view=revision&revision=372517">372517</a></td><td>kmoore</td><td>Ensure listed queues are not offered for completion</td>
-<td></td></tr><tr><td><a href="http://svn.digium.com/view/asterisk/branches/1.8?view=revision&revision=372581">372581</a></td><td>mjordan</td><td>Free ast_str objects when temp file fails to be created in MiniVM</td>
-<td><a href="https://issues.asterisk.org/jira/browse/ASTERISK-17133">ASTERISK-17133</a></td></tr><tr><td><a href="http://svn.digium.com/view/asterisk/branches/1.8?view=revision&revision=372620">372620</a></td><td>rmudgett</td><td>Fix VoicemailUserEntry event headers ServerEmail and MailCommand reported values.</td>
-<td></td></tr><tr><td><a href="http://svn.digium.com/view/asterisk/branches/1.8?view=revision&revision=372628">372628</a></td><td>rmudgett</td><td>Remove annoying unconditional debug message from INC/DEC functions.</td>
-<td></td></tr><tr><td><a href="http://svn.digium.com/view/asterisk/branches/1.8?view=revision&revision=372709">372709</a></td><td>mjordan</td><td>Only re-create an SRTP session when needed; respond with correct crypto policy</td>
-<td><a href="https://issues.asterisk.org/jira/browse/ASTERISK-20194">ASTERISK-20194</a></td></tr><tr><td><a href="http://svn.digium.com/view/asterisk/branches/1.8?view=revision&revision=372736">372736</a></td><td>jrose</td><td>Masquerade: Retain parkinglot settings made by CHANNEL function.</td>
-<td></td></tr><tr><td><a href="http://svn.digium.com/view/asterisk/branches/1.8?view=revision&revision=372765">372765</a></td><td>jrose</td><td>app_meetme: Document that 'p' option will continue in dialplan.</td>
-<td></td></tr><tr><td><a href="http://svn.digium.com/view/asterisk/branches/1.8?view=revision&revision=372840">372840</a></td><td>mmichelson</td><td>Fix bad channel application data reference.</td>
-<td><a href="https://issues.asterisk.org/jira/browse/ASTERISK-20335">ASTERISK-20335</a></td></tr><tr><td><a href="http://svn.digium.com/view/asterisk/branches/1.8?view=revision&revision=372902">372902</a></td><td>jrose</td><td>chan_local: Switch from using a random 4 digit hex identifier to unique id</td>
-<td><a href="https://issues.asterisk.org/jira/browse/ASTERISK-20318">ASTERISK-20318</a></td></tr><tr><td><a href="http://svn.digium.com/view/asterisk/branches/1.8?view=revision&revision=372932">372932</a></td><td>mmichelson</td><td>Add channel name to a warning to make debugging easier.</td>
-<td></td></tr><tr><td><a href="http://svn.digium.com/view/asterisk/branches/1.8?view=revision&revision=374291">374291</a></td><td>bebuild</td><td>Create 1.8.17.0-rc2</td>
-<td></td></tr><tr><td><a href="http://svn.digium.com/view/asterisk/branches/1.8?view=revision&revision=374294">374294</a></td><td>bebuild</td><td>Merge changes for 1.8.17.0-rc2</td>
-<td></td></tr><tr><td><a href="http://svn.digium.com/view/asterisk/branches/1.8?view=revision&revision=374297">374297</a></td><td>bebuild</td><td>Importing release summary for 1.8.17.0-rc2 release.</td>
-<td></td></tr><tr><td><a href="http://svn.digium.com/view/asterisk/branches/1.8?view=revision&revision=374524">374524</a></td><td>bebuild</td><td>Create 1.8.17.0-rc3</td>
-<td></td></tr><tr><td><a href="http://svn.digium.com/view/asterisk/branches/1.8?view=revision&revision=374527">374527</a></td><td>bebuild</td><td>Merge 374456 for ASTERISK-20511</td>
-<td></td></tr><tr><td><a href="http://svn.digium.com/view/asterisk/branches/1.8?view=revision&revision=374530">374530</a></td><td>bebuild</td><td>Importing release summary for 1.8.17.0-rc3 release.</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>
-.version | 2
-ChangeLog | 21 +++
-README-SERIOUSLY.bestpractices.txt | 51 +++++++++
-UPGRADE.txt | 5
-addons/app_mysql.c | 2
-addons/chan_mobile.c | 2
-addons/chan_ooh323.c | 2
-addons/ooh323c/src/ooGkClient.c | 39 +++++++
-addons/ooh323c/src/ooh323ep.c | 2
-addons/res_config_mysql.c | 4
-apps/app_chanspy.c | 1
-apps/app_dial.c | 10 -
-apps/app_dictate.c | 2
-apps/app_directed_pickup.c | 2
-apps/app_festival.c | 4
-apps/app_followme.c | 4
-apps/app_getcpeid.c | 2
-apps/app_macro.c | 3
-apps/app_meetme.c | 32 ++++--
-apps/app_minivm.c | 72 +++----------
-apps/app_mixmonitor.c | 2
-apps/app_osplookup.c | 20 ---
-apps/app_queue.c | 160 +++++++++++++++++++++++++-----
-apps/app_sms.c | 2
-apps/app_stack.c | 6 -
-apps/app_voicemail.c | 48 ++++-----
-apps/app_while.c | 6 -
-asterisk-1.8.17.0-rc2-summary.html | 61 -----------
-asterisk-1.8.17.0-rc2-summary.txt | 90 -----------------
-asterisk-1.8.17.0-rc3-summary.html | 60 +++++++++++
-asterisk-1.8.17.0-rc3-summary.txt | 89 ++++++++++++++++
-cdr/cdr_pgsql.c | 4
-cdr/cdr_tds.c | 4
-cel/cel_pgsql.c | 1
-channels/chan_alsa.c | 4
-channels/chan_dahdi.c | 111 +++++++++++----------
-channels/chan_gtalk.c | 16 +--
-channels/chan_iax2.c | 42 +++----
-channels/chan_jingle.c | 15 +-
-channels/chan_local.c | 9 +
-channels/chan_oss.c | 4
-channels/chan_sip.c | 195 ++++++++++++++++++++++---------------
-channels/sig_analog.c | 14 +-
-channels/sig_analog.h | 1
-channels/sig_pri.c | 2
-channels/sig_ss7.c | 3
-channels/sip/config_parser.c | 25 +++-
-channels/sip/include/sip.h | 4
-channels/sip/sdp_crypto.c | 22 +++-
-configs/agents.conf.sample | 2
-configs/queues.conf.sample | 2
-configs/res_ldap.conf.sample | 2
-configs/sip.conf.sample | 7 +
-configure.ac | 3
-doc/CODING-GUIDELINES | 2
-funcs/func_channel.c | 2
-funcs/func_cut.c | 5
-funcs/func_global.c | 4
-funcs/func_logic.c | 18 +--
-funcs/func_math.c | 2
-funcs/func_odbc.c | 8 -
-funcs/func_strings.c | 19 +--
-include/asterisk/astobj2.h | 2
-include/asterisk/autoconfig.h.in | 13 --
-include/asterisk/strings.h | 4
-include/asterisk/utils.h | 13 ++
-main/Makefile | 4
-main/app.c | 12 +-
-main/asterisk.c | 2
-main/astmm.c | 17 +--
-main/astobj2.c | 2
-main/callerid.c | 4
-main/channel.c | 34 +++++-
-main/config.c | 10 +
-main/dsp.c | 172 +++++++++++++++++++++-----------
-main/event.c | 10 -
-main/features.c | 55 ++++++++--
-main/file.c | 30 +++--
-main/http.c | 8 -
-main/loader.c | 18 ++-
-main/lock.c | 12 +-
-main/logger.c | 4
-main/manager.c | 19 ++-
-main/pbx.c | 21 +--
-main/say.c | 4
-main/strcompat.c | 32 ++----
-main/tcptls.c | 2
-main/threadstorage.c | 2
-main/udptl.c | 33 +++---
-main/utils.c | 19 ++-
-main/xmldoc.c | 40 +++++--
-pbx/pbx_ael.c | 2
-pbx/pbx_config.c | 6 -
-pbx/pbx_dundi.c | 131 +++++++++++-------------
-pbx/pbx_lua.c | 6 -
-pbx/pbx_realtime.c | 90 ++++++++---------
-pbx/pbx_spool.c | 2
-res/ael/pval.c | 2
-res/res_agi.c | 5
-res/res_config_pgsql.c | 6 -
-res/res_config_sqlite.c | 6 -
-res/res_jabber.c | 11 --
-res/res_rtp_asterisk.c | 10 +
-tests/test_linkedlists.c | 2
-104 files changed, 1330 insertions(+), 905 deletions(-)
-</pre><br/>
-<hr/>
-</body>
-</html>
|
[-]
[+]
|
Deleted |
asterisk-1.8.17.0.tar.xz/asterisk-1.8.17.0-summary.txt
^
|
@@ -1,661 +0,0 @@
- Release Summary
-
- asterisk-1.8.17.0
-
- Date: 2012-10-08
-
- <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.8.16.0.
-
- ----------------------------------------------------------------------
-
- 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
- 18 kmoore 2 Michael L. Young 6 mjordan
- 15 mmichelson 2 mjordan 3 wdoekes
- 8 jrose 1 Alan Frisch 2 jcovert
- 6 bebuild 1 alecdavis 1 beagles
- 6 mjordan 1 Alexandr Gordeev 1 berlic
- 5 rmudgett 1 Darren Sessions 1 bulkorok
- 4 alecdavis 1 Etienne Lessard 1 cecco
- 4 may 1 rmudgett 1 chip
- 2 Michael 1 dlee
- 1 Andrew 1 gareth
- 1 Clod 1 hexanol
- 1 dlee 1 jpepper
- 1 dsessions 1 jplord
- 1 Egor 1 junky
- 1 Etienne 1 lathama
- 1 Filip 1 maha
- 1 Gareth 1 nbansal
- 1 Italo 1 nik600
- 1 Jeremy 1 nmazzon
- 1 Konstantin 1 phill
- 1 Nitesh 1 pracz
- 1 Peter 1 rgagnon
- 1 schmidts 1 rmudgett
- 1 twilson 1 slesru
- 1 Tzafrir 1 tzafrir
- 1 vmisha
- 1 yarns
-
- ----------------------------------------------------------------------
-
- 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: Addons/chan_ooh323
-
- ASTERISK-19308: problem with transit calls ooh323-dahdi(pri)-panasonic 500
- Revision: 371089
- Reporter: slesru
- Coders: may
-
- Category: Addons/res_config_mysql
-
- ASTERISK-19793: Only last realtime member of a queue is not actually
- removed from queue when removed from database
- Revision: 371306
- Reporter: maha
- Coders: mmichelson
-
- Category: Applications/app_chanspy
-
- ASTERISK-17515: groupcount or group doesn't "release" channels and group
- shows channels which doesn't exists
- Revision: 370952
- Reporter: yarns
- Testers: Alexandr Gordeev, Michael L. Young
- Coders: Michael
-
- Category: Applications/app_dial
-
- ASTERISK-20287: Broken hangupcause passtrough
- Revision: 371860
- Reporter: berlic
- Testers: rmudgett
- Coders: Konstantin
-
- Category: Applications/app_externalivr
-
- ASTERISK-20132: Security Vulnerability: remote authenticated attacker can
- execute arbitrary shell commands on system through app ExternalIVR
- Revision: 371998
- Reporter: mjordan
- Coders: mjordan
-
- Category: Applications/app_followme
-
- ASTERISK-16879: [patch] FollowMe has a maximum of 90 chars for number
- Revision: 372390
- Reporter: junky
- Testers: mjordan
- Coders: Clod
-
- Category: Applications/app_minivm
-
- ASTERISK-17133: [patch] minivm: when sending mail and using volgain
- Revision: 372554
- Reporter: tzafrir
- Coders: Tzafrir
-
- Category: Applications/app_queue
-
- ASTERISK-16115: [patch] problem with ringinuse=no, queue members receive
- sometimes two calls
- Revision: 372048
- Reporter: nik600
- Coders: Italo
-
- ASTERISK-19793: Only last realtime member of a queue is not actually
- removed from queue when removed from database
- Revision: 371306
- Reporter: maha
- Coders: mmichelson
-
- ASTERISK-20380: Bad ao2_unlock call in app_queue's try_calling
- Revision: 372624
- Reporter: jpepper
- Coders: Jeremy
-
- Category: Applications/app_voicemail/IMAP
-
- ASTERISK-19155: Memory leak in app_voicemail.c when using IMAP
- Revision: 372268
- Reporter: phill
- Coders: Filip
-
- Category: CEL/cel_pgsql
-
- ASTERISK-19991: Memory leak in cel_pgsql
- Revision: 372158
- Reporter: hexanol
- Testers: Etienne Lessard
- Coders: Etienne
-
- Category: Channels/General
-
- ASTERISK-20283: Files descriptors for dummy channels need to be set to -1
- Revision: 371888
- Reporter: gareth
- Coders: Gareth
-
- Category: Channels/chan_iax2
-
- ASTERISK-20186: Security Vulnerability: IAX2 peer's NEW message bypasses
- ACL defined in realtime
- Revision: 372015
- Reporter: mjordan
- Testers: mjordan, Alan Frisch
- Coders: mjordan
-
- ASTERISK-20338: iax2 debug only shows received packets when "iax2 set
- debug peer xxx" is used
- Revision: 372804
- Reporter: jcovert
- Coders: kmoore
-
- Category: Channels/chan_sip/DatabaseSupport
-
- ASTERISK-17222: [patch] Realtime Peers Cannot Register
- Revision: 372498
- Reporter: jcovert
- Testers: Darren Sessions
- Coders: dsessions
-
- Category: Channels/chan_sip/General
-
- ASTERISK-19154: huge number of sip OPTION on 'sip reload'
- Revision: 370666
- Reporter: nmazzon
- Coders: schmidts
-
- ASTERISK-19677: SIP dial string //IPorHost does not work like expected
- Revision: 370769
- Reporter: wdoekes
- Coders: mmichelson
-
- ASTERISK-19857: Explore directmedia re-INVITE improvements between
- multiple Asterisk instances
- Revision: 370618
- Reporter: mjordan
- Coders: mmichelson
-
- ASTERISK-20119: Peer MWI subscriptions erroneously removed when another
- SIP dialog is destroyed
- Revision: 371270
- Reporter: vmisha
- Coders: kmoore
-
- ASTERISK-20124: chan_sip retransmit timeout causes a
- AST_CAUSE_PROTOCOL_ERROR, translates to 603 Declined
- Revision: 371824
- Reporter: wdoekes
- Coders: jrose
-
- ASTERISK-20357: T.38 offer for peer that does not support T.38 fails to
- warn user on CLI
- Revision: 372763
- Reporter: cecco
- Coders: kmoore
-
- Category: Channels/chan_sip/T.38
-
- ASTERISK-19373: Segmentation Fault in ast_udptl_write() due to bad
- memcpy() call
- Revision: 371544
- Reporter: rgagnon
- Coders: kmoore
-
- Category: Core/AstMM
-
- ASTERISK-20349: DEBUG_MALLOC version of ast_strndup() may cause buffer
- overflow
- Revision: 372655
- Reporter: beagles
- Coders: rmudgett
-
- Category: Core/BuildSystem
-
- ASTERISK-20392: OpenSSL headers not picked up when configured using
- --with-ssl=
- Revision: 372682
- Reporter: dlee
- Coders: dlee
-
- Category: Core/Channels
-
- ASTERISK-19610: dsp.c can no longer detect a quick DTMF sequence
- Revision: 372239
- Reporter: jplord
- Testers: alecdavis
- Coders: alecdavis
-
- Category: Core/General
-
- ASTERISK-20090: Crash when running 'core show locks' with
- BETTER_BACKTRACES enabled
- Revision: 371690
- Reporter: mjordan
- Coders: kmoore
-
- Category: Core/ManagerInterface
-
- ASTERISK-20132: Security Vulnerability: remote authenticated attacker can
- execute arbitrary shell commands on system through app ExternalIVR
- Revision: 371998
- Reporter: mjordan
- Coders: mjordan
-
- Category: Core/Portability
-
- ASTERISK-20240: Incorrect work of __ast_rwlock_timed[rd|wr]lock()
- functions on OpenBSD
- Revision: 371718
- Reporter: chip
- Coders: Egor
-
- Category: Documentation
-
- ASTERISK-20279: Add CODING-GUIDELINES back to SVN or at minimum a link to
- the wiki
- Revision: 371961
- Reporter: lathama
- Coders: Andrew
-
- Category: Functions/func_groupcount
-
- ASTERISK-17515: groupcount or group doesn't "release" channels and group
- shows channels which doesn't exists
- Revision: 370952
- Reporter: yarns
- Testers: Alexandr Gordeev, Michael L. Young
- Coders: Michael
-
- Category: General
-
- ASTERISK-20135: Use of ast_asprintf and asprintf needs to be checked for
- failure.
- Revision: 371590
- Reporter: rmudgett
- Coders: mmichelson
-
- ASTERISK-20408: constify astobj2's __ao2_ref_debug parameters
- Revision: 372959
- Reporter: mjordan
- Coders: mjordan
-
- Category: PBX/pbx_dundi
-
- ASTERISK-19309: [patch] DUNDi message routing bug
- Revision: 372417
- Reporter: pracz
- Coders: Peter
-
- Category: Resources/res_fax
-
- ASTERISK-19762: Segfault in ast_frdup when invalid data length specified
- in duplicated frame
- Revision: 371544
- Reporter: bulkorok
- Coders: kmoore
-
- Category: Resources/res_rtp_asterisk
-
- ASTERISK-20295: Asterisk is not incrementing the sequence numbers for the
- retransmission of the DTMF end packets(RTPEvent packet with end bit set to
- 1)
- Revision: 372185
- Reporter: nbansal
- Testers: Michael L. Young
- Coders: Nitesh, Michael
-
- Category: Tests/General
-
- ASTERISK-20120: Unit test ast_parse_arg_test fails on 32-bit machines
- Revision: 371392
- Reporter: mjordan
- Coders: twilson
-
- ----------------------------------------------------------------------
-
- 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 |
- |----------+------------+-------------------------------+----------------|
- | 370697 | kmoore | Revert alloca changes for | |
- | | | utils | |
- |----------+------------+-------------------------------+----------------|
- | 370770 | mmichelson | Remove unused variable. | |
- |----------+------------+-------------------------------+----------------|
- | 370771 | mmichelson | Seriously? Another | |
- | | | compilation error fixed. | |
- |----------+------------+-------------------------------+----------------|
- | 370797 | mmichelson | Improve debug message for | |
- | | | temporary outbound proxies. | |
- |----------+------------+-------------------------------+----------------|
- | 370856 | kmoore | Add missing AST_CAUSE_* -> | |
- | | | text translations | |
- |----------+------------+-------------------------------+----------------|
- | | | Fix the analog dial *0 | |
- | 370900 | rmudgett | flash-hook of bridged peer | |
- | | | feature. | |
- |----------+------------+-------------------------------+----------------|
- | 370923 | kmoore | Do not define a cause that | |
- | | | doesn't actually exist | |
- |----------+------------+-------------------------------+----------------|
- | 370985 | kmoore | Correct documentation for the | |
- | | | MeetMe x flag | |
- |----------+------------+-------------------------------+----------------|
- | | | change opening h323 logfile | |
- | 370988 | may | with append mode instead of | |
- | | | overwrite | |
- |----------+------------+-------------------------------+----------------|
- | | | Fix to resend GRQ/RRQ if RRJ | |
- | 371011 | may | (registration reject) is | ASTERISK-20094 |
- | | | received | |
- |----------+------------+-------------------------------+----------------|
- | | | Use better libss7 detection | |
- | 371012 | rmudgett | test and move libpri compile | |
- | | | test. | |
- |----------+------------+-------------------------------+----------------|
- | | | Send re-register packets by | |
- | 371060 | may | GRQ (gatekeeper request) | ASTERISK-20094 |
- | | | interval | |
- |----------+------------+-------------------------------+----------------|
- | 371141 | mmichelson | Fix a couple of documentation | |
- | | | problems in app_queue.c | |
- |----------+------------+-------------------------------+----------------|
- | | | Fix problem where incorrect | |
- | 371198 | mmichelson | pointer was checked for | |
- | | | nullity. | |
- |----------+------------+-------------------------------+----------------|
- | 371201 | kmoore | Add test instrumentation | |
- |----------+------------+-------------------------------+----------------|
- | | | chan_sip: Trigger reinvite if | |
- | 371337 | jrose | the SDP answer is included in | |
- | | | the SIP ACK | |
- |----------+------------+-------------------------------+----------------|
- | | | chan_sip: Use pvt | |
- | 371357 | jrose | outgoing_call variable to set | |
- | | | Remote-Party-ID Header | |
- |----------+------------+-------------------------------+----------------|
- | | | Add module reload | |
- | 371393 | kmoore | instrumentation for | |
- | | | TEST_FRAMEWORK | |
- |----------+------------+-------------------------------+----------------|
- | 371436 | kmoore | Add instrumentation to | |
- | | | subsystem reloads | |
- |----------+------------+-------------------------------+----------------|
- | 371469 | mjordan | Fix memory leak in XML | |
- | | | documentation | |
- |----------+------------+-------------------------------+----------------|
- | | | mf_detect: incorrectly used | |
- | 371662 | alecdavis | DTMF_GSIZE instead of | |
- | | | MF_GSIZE | |
- |----------+------------+-------------------------------+----------------|
- | 371747 | mmichelson | Fix incorrectly documented | |
- | | | option in queues.conf | |
- |----------+------------+-------------------------------+----------------|
- | | | Fix incorrect documentation | |
- | 371782 | mmichelson | of the MailboxStatus manager | |
- | | | command. | |
- |----------+------------+-------------------------------+----------------|
- | | | Fix misleading documentation | |
- | 371787 | mmichelson | in agents.conf.sample | |
- | | | regarding ackcall usage. | |
- |----------+------------+-------------------------------+----------------|
- | | | app_meetme: Adding test | |
- | 371919 | jrose | events for following activity | |
- | | | in MeetMe. | |
- |----------+------------+-------------------------------+----------------|
- | | | Prevent crash on shutdown due | |
- | 372089 | mmichelson | to refcount error on queues | |
- | | | container. | |
- |----------+------------+-------------------------------+----------------|
- | | | dsp.c: optimize goerztzel | |
- | 372212 | alecdavis | sample loops, in dtmf_detect, | |
- | | | mf_detect and tone_detect | |
- |----------+------------+-------------------------------+----------------|
- | | | Ensure counts generated in | |
- | 372337 | kmoore | manager_show_dialplan_helper | |
- | | | are correct | |
- |----------+------------+-------------------------------+----------------|
- | | | dsp.c: in ast_mf_detect_init | |
- | 372339 | alecdavis | incorrectly sets goertzel | |
- | | | samples to 160, should be | |
- | | | MF_GSIZE | |
- |----------+------------+-------------------------------+----------------|
- | 372354 | kmoore | Correct documentation for | |
- | | | ModuleLoad AMI action | |
- |----------+------------+-------------------------------+----------------|
- | | | Ensure "rules" is | |
- | 372444 | kmoore | tab-completable for "queue | |
- | | | show" | |
- |----------+------------+-------------------------------+----------------|
- | | | chan_sip: Note change in | |
- | 372471 | jrose | behavior to how | |
- | | | directmediapermit/deny ACL | |
- | | | works | |
- |----------+------------+-------------------------------+----------------|
- | 372517 | kmoore | Ensure listed queues are not | |
- | | | offered for completion | |
- |----------+------------+-------------------------------+----------------|
- | | | Free ast_str objects when | |
- | 372581 | mjordan | temp file fails to be created | ASTERISK-17133 |
- | | | in MiniVM | |
- |----------+------------+-------------------------------+----------------|
- | | | Fix VoicemailUserEntry event | |
- | 372620 | rmudgett | headers ServerEmail and | |
- | | | MailCommand reported values. | |
- |----------+------------+-------------------------------+----------------|
- | | | Remove annoying unconditional | |
- | 372628 | rmudgett | debug message from INC/DEC | |
- | | | functions. | |
- |----------+------------+-------------------------------+----------------|
- | | | Only re-create an SRTP | |
- | 372709 | mjordan | session when needed; respond | ASTERISK-20194 |
- | | | with correct crypto policy | |
- |----------+------------+-------------------------------+----------------|
- | | | Masquerade: Retain parkinglot | |
- | 372736 | jrose | settings made by CHANNEL | |
- | | | function. | |
- |----------+------------+-------------------------------+----------------|
- | | | app_meetme: Document that 'p' | |
- | 372765 | jrose | option will continue in | |
- | | | dialplan. | |
- |----------+------------+-------------------------------+----------------|
- | 372840 | mmichelson | Fix bad channel application | ASTERISK-20335 |
- | | | data reference. | |
- |----------+------------+-------------------------------+----------------|
- | | | chan_local: Switch from using | |
- | 372902 | jrose | a random 4 digit hex | ASTERISK-20318 |
- | | | identifier to unique id | |
- |----------+------------+-------------------------------+----------------|
- | 372932 | mmichelson | Add channel name to a warning | |
- | | | to make debugging easier. | |
- |----------+------------+-------------------------------+----------------|
- | 374291 | bebuild | Create 1.8.17.0-rc2 | |
- |----------+------------+-------------------------------+----------------|
- | 374294 | bebuild | Merge changes for | |
- | | | 1.8.17.0-rc2 | |
- |----------+------------+-------------------------------+----------------|
- | 374297 | bebuild | Importing release summary for | |
- | | | 1.8.17.0-rc2 release. | |
- |----------+------------+-------------------------------+----------------|
- | 374524 | bebuild | Create 1.8.17.0-rc3 | |
- |----------+------------+-------------------------------+----------------|
- | 374527 | bebuild | Merge 374456 for | |
- | | | ASTERISK-20511 | |
- |----------+------------+-------------------------------+----------------|
- | 374530 | bebuild | Importing release summary for | |
- | | | 1.8.17.0-rc3 release. | |
- +------------------------------------------------------------------------+
-
- ----------------------------------------------------------------------
-
- 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.
-
- .version | 2
- ChangeLog | 21 +++
- README-SERIOUSLY.bestpractices.txt | 51 +++++++++
- UPGRADE.txt | 5
- addons/app_mysql.c | 2
- addons/chan_mobile.c | 2
- addons/chan_ooh323.c | 2
- addons/ooh323c/src/ooGkClient.c | 39 +++++++
- addons/ooh323c/src/ooh323ep.c | 2
- addons/res_config_mysql.c | 4
- apps/app_chanspy.c | 1
- apps/app_dial.c | 10 -
- apps/app_dictate.c | 2
- apps/app_directed_pickup.c | 2
- apps/app_festival.c | 4
- apps/app_followme.c | 4
- apps/app_getcpeid.c | 2
- apps/app_macro.c | 3
- apps/app_meetme.c | 32 ++++--
- apps/app_minivm.c | 72 +++----------
- apps/app_mixmonitor.c | 2
- apps/app_osplookup.c | 20 ---
- apps/app_queue.c | 160 +++++++++++++++++++++++++-----
- apps/app_sms.c | 2
- apps/app_stack.c | 6 -
- apps/app_voicemail.c | 48 ++++-----
- apps/app_while.c | 6 -
- asterisk-1.8.17.0-rc2-summary.html | 61 -----------
- asterisk-1.8.17.0-rc2-summary.txt | 90 -----------------
- asterisk-1.8.17.0-rc3-summary.html | 60 +++++++++++
- asterisk-1.8.17.0-rc3-summary.txt | 89 ++++++++++++++++
- cdr/cdr_pgsql.c | 4
- cdr/cdr_tds.c | 4
- cel/cel_pgsql.c | 1
- channels/chan_alsa.c | 4
- channels/chan_dahdi.c | 111 +++++++++++----------
- channels/chan_gtalk.c | 16 +--
- channels/chan_iax2.c | 42 +++----
- channels/chan_jingle.c | 15 +-
- channels/chan_local.c | 9 +
- channels/chan_oss.c | 4
- channels/chan_sip.c | 195 ++++++++++++++++++++++---------------
- channels/sig_analog.c | 14 +-
- channels/sig_analog.h | 1
- channels/sig_pri.c | 2
- channels/sig_ss7.c | 3
- channels/sip/config_parser.c | 25 +++-
- channels/sip/include/sip.h | 4
- channels/sip/sdp_crypto.c | 22 +++-
- configs/agents.conf.sample | 2
- configs/queues.conf.sample | 2
- configs/res_ldap.conf.sample | 2
- configs/sip.conf.sample | 7 +
- configure.ac | 3
- doc/CODING-GUIDELINES | 2
- funcs/func_channel.c | 2
- funcs/func_cut.c | 5
- funcs/func_global.c | 4
- funcs/func_logic.c | 18 +--
- funcs/func_math.c | 2
- funcs/func_odbc.c | 8 -
- funcs/func_strings.c | 19 +--
- include/asterisk/astobj2.h | 2
- include/asterisk/autoconfig.h.in | 13 --
- include/asterisk/strings.h | 4
- include/asterisk/utils.h | 13 ++
- main/Makefile | 4
- main/app.c | 12 +-
- main/asterisk.c | 2
- main/astmm.c | 17 +--
- main/astobj2.c | 2
- main/callerid.c | 4
- main/channel.c | 34 +++++-
- main/config.c | 10 +
- main/dsp.c | 172 +++++++++++++++++++++-----------
- main/event.c | 10 -
- main/features.c | 55 ++++++++--
- main/file.c | 30 +++--
- main/http.c | 8 -
- main/loader.c | 18 ++-
- main/lock.c | 12 +-
- main/logger.c | 4
- main/manager.c | 19 ++-
- main/pbx.c | 21 +--
- main/say.c | 4
- main/strcompat.c | 32 ++----
- main/tcptls.c | 2
- main/threadstorage.c | 2
- main/udptl.c | 33 +++---
- main/utils.c | 19 ++-
- main/xmldoc.c | 40 +++++--
- pbx/pbx_ael.c | 2
- pbx/pbx_config.c | 6 -
- pbx/pbx_dundi.c | 131 +++++++++++-------------
- pbx/pbx_lua.c | 6 -
- pbx/pbx_realtime.c | 90 ++++++++---------
- pbx/pbx_spool.c | 2
- res/ael/pval.c | 2
- res/res_agi.c | 5
- res/res_config_pgsql.c | 6 -
- res/res_config_sqlite.c | 6 -
- res/res_jabber.c | 11 --
- res/res_rtp_asterisk.c | 10 +
- tests/test_linkedlists.c | 2
- 104 files changed, 1330 insertions(+), 905 deletions(-)
-
- ----------------------------------------------------------------------
|
[-]
[+]
|
Changed |
asterisk-1.8.18.0.tar.xz/.version
^
|
@@ -1 +1 @@
-1.8.17.0
+1.8.18.0
|
[-]
[+]
|
Changed |
asterisk-1.8.18.0.tar.xz/CHANGES
^
|
@@ -633,6 +633,9 @@
rate changes during translation are now avoided unless absolutely necessary.
* The addition of the res_stun_monitor module for monitoring and reacting to network
changes while behind a NAT.
+ * DTMF: Normal and Reverse Twist acceptance values can be set in dsp.conf.
+ DTMF Valid/Invalid number of hits/misses can be set in dsp.conf.
+ These allow support for any Administration. Default is AT&T values.
CLI Changes
-----------
|
[-]
[+]
|
Changed |
asterisk-1.8.18.0.tar.xz/ChangeLog
^
|
@@ -1,55 +1,620 @@
-2012-10-08 Asterisk Development Team <asteriskteam@digium.com>
-
- * Asterisk 1.8.17.0 Released.
-
-2012-10-05 Asterisk Development Team <asteriskteam@digium.com>
-
- * Asterisk 1.8.17.0-rc3 Released.
-
- * Fix a regression from direct media ACLs where the directrtpsetup
- option no longer works.
-
- A check was added for direct media ACLs that immediately forced
- remote bridging if there was no bridged channel. This caused
- directrtpsetup to no longer function as it needs this information
- before bridging actually occurs.
+2012-11-06 Asterisk Development Team <asteriskteam@digium.com>
- Logic has now been adjusted so if there is no bridged channel a
- remote bridge will still be attempted.
+ * Asterisk 1.8.18.0 Released.
- (closes issue ASTERISK-20511)
- Reported by: kristoff
- Tested by: kristoff
-
- Review: https://reviewboard.asterisk.org/r/2146
-
-2012-10-03 Asterisk Development Team <asteriskteam@digium.com>
-
- * Asterisk 1.8.17.0-rc2 Released.
-
- * Fix an issue where Local channels dialed by app_queue are considered
- in use immediately.
-
- The chan_local channel driver returns a device state of in use even
- if a created Local channel has not yet been dialed. This fix
- changes the logic to return a state of not in use until the channel
- itself has been dialed.
+2012-10-08 Asterisk Development Team <asteriskteam@digium.com>
- (closes issue ASTERISK-20390)
- Reported by: time_ringenbach
+ * Asterisk 1.8.18.0-rc1 Released.
- * Fix a regression where direct media was not permitted for calls
- using SIP INFO DTMF
+2012-10-05 20:20 +0000 [r374570-374581] dlee <dlee@localhost>:
- A change was committed to fix direct media ACL support. This change
- wrongly assumed that only a single channel technology structure
- exists for chan_sip. This is in fact false as a second exists for
- calls using SIP INFO DTMF. The code which performs direct media ACL
- checking now checks for both the non-INFO DTMF and INFO DTMF channel
- technology structures.
+ * main/manager.c: I've committed too much. Reverting part of
+ r374570.
- (closes issue ASTERISK-20409)
- Reported by: michele ciciotti privatewave
+ * main/manager.c: Improve AMI long line error handling In AMI's
+ parser, when it receives a long line (> 1024 characters), it
+ discards that line, but continues to process the message
+ normally. Typically, this is not a problem because a) who has
+ lines that long and b) usually a discarded line results in an
+ invalid message. But if that line is specifying an optional
+ field, then the message will be processed, you get a 'Response:
+ Success', but things don't work the way you expected them to.
+ This patch changes the behavior when a line-too-long parse error
+ occurs. * Changes the log message to avoid way-too-long (and
+ truncated anyways) log messages * Adds a 'parsing' status flag to
+ Response: Success * Sets parsing = MESSAGE_LINE_TOO_LONG if,
+ well, a line is too long * Responds with an appropriate error if
+ parsing != MESSAGE_OKAY (closes issue AST-961) Reported by: John
+ Bigelow Review: https://reviewboard.asterisk.org/r/2142/
+
+2012-10-05 18:20 +0000 [r374536] Richard Mudgett <rmudgett@digium.com>
+
+ * channels/misdn/isdn_msg_parser.c, channels/misdn/isdn_lib.c,
+ channels/misdn/isdn_lib.h, channels/chan_misdn.c: Merged
+ revisions 374515-374535 from
+ https://origsvn.digium.com/svn/asterisk/be/branches/C.3-bier
+ ................ r374515 | rmudgett | 2012-10-04 17:52:36 -0500
+ (Thu, 04 Oct 2012) | 10 lines chan_misdn: Remove some deadcode *
+ Made setup_bc() static. Patches: patch1_unused-code.diff (license
+ #6372) patch uploaded by Guenther Kelleter Modified JIRA ABE-2882
+ ................ r374516 | rmudgett | 2012-10-04 18:01:01 -0500
+ (Thu, 04 Oct 2012) | 7 lines chan_misdn: Remove unused bchan
+ states Patches: patch2_unused-states.diff (license #6372) patch
+ uploaded by Guenther Kelleter JIRA ABE-2882 ................
+ r374517 | rmudgett | 2012-10-04 18:17:51 -0500 (Thu, 04 Oct 2012)
+ | 16 lines chan_misdn: Remove unnecessary null pointer checks and
+ checks for stack->nt * cleanup_bc() is always called with valid
+ bc (or it would've crashed before). * Value of stack->nt is known
+ in advance at some places. * Rename handle_event() to
+ handle_event_te(), handle_frm() to handle_frm_te(). Patches:
+ patch3_checks.diff (license #6372) patch uploaded by Guenther
+ Kelleter Modified JIRA ABE-2882 ................ r374518 |
+ rmudgett | 2012-10-04 18:21:59 -0500 (Thu, 04 Oct 2012) | 7 lines
+ chan_misdn: Fix spelling in log messages Patches:
+ patch4_spelling.diff (license #6372) patch uploaded by Guenther
+ Kelleter JIRA ABE-2882 ................ r374519 | rmudgett |
+ 2012-10-04 18:31:59 -0500 (Thu, 04 Oct 2012) | 15 lines
+ chan_misdn: Don't cleanup a bc twice. In handle_frm_te() after
+ calling misdn_lib_send_event(bc, EVENT_RELEASE_COMPLETE) bc is
+ emptied, cleaned and set not in use, although
+ misdn_lib_send_event() already did the same. This is bad. When
+ it's not in use we are not allowed to touch it. * Moved log
+ message in front of the resulting actions and fixed it to match
+ the case. Patches: patch5_bccleanup.diff (license #6372) patch
+ uploaded by Guenther Kelleter JIRA ABE-2882 ................
+ r374520 | rmudgett | 2012-10-04 18:43:56 -0500 (Thu, 04 Oct 2012)
+ | 12 lines chan_misdn: Fix memory leaks, bc, chan not cleaned up
+ etc., really bad stuff. * Fix return codes of cb_events() for
+ EVENT_SETUP to use caller's cleanup mechanisms. * Move
+ cl_queue_chan() call after bearer check. Patches:
+ patch6_leaks.diff (license #6372) patch uploaded by Guenther
+ Kelleter JIRA ABE-2882 ................ r374521 | rmudgett |
+ 2012-10-04 18:48:38 -0500 (Thu, 04 Oct 2012) | 11 lines
+ chan_misdn: We must initialize cause on sending a DISCONNECT. We
+ must initialize cause on sending a DISCONNECT, so it is later
+ correctly indicated to ast_channel in case the answer
+ (RELEASE/RELEASE_COMPLETE) does not include one. Patches:
+ patch7_hangupcause.diff (license #6372) patch uploaded by
+ Guenther Kelleter JIRA ABE-2882 ................ r374522 |
+ rmudgett | 2012-10-04 19:03:56 -0500 (Thu, 04 Oct 2012) | 7 lines
+ chan_misdn: Remove unused code for upqueue Patches:
+ patch8_unused-upqueue.diff (license #6372) patch uploaded by
+ Guenther Kelleter JIRA ABE-2882 ................ r374523 |
+ rmudgett | 2012-10-04 19:11:50 -0500 (Thu, 04 Oct 2012) | 7 lines
+ chan_misdn: Improve debugging (port number, messages fixed, dups
+ removed) Patches: patch9_debug.diff (license #6372) patch
+ uploaded by Guenther Kelleter JIRA ABE-2882 ................
+ r374533 | rmudgett | 2012-10-05 12:17:18 -0500 (Fri, 05 Oct 2012)
+ | 8 lines chan_misdn: Better debug: we can print_bc_info even if
+ there's no ast leg. Patches: patch10_debug-bc-2.diff (license
+ #6372) patch uploaded by Guenther Kelleter Modified. JIRA
+ ABE-2882 ................ r374534 | rmudgett | 2012-10-05
+ 12:34:10 -0500 (Fri, 05 Oct 2012) | 16 lines chan_misdn:
+ setup_bc() is called too early for an incoming SETUP on TE. This
+ prevents the B channel from being setup for HDLC mode when
+ requested by the bearer capability and config option hdlc=yes. It
+ violates ETS300102 Ch.5.2.3.2: "The user, in any case, must not
+ connect to the channel until a CONNECT ACKNOWLEDGE message has
+ been received." * Call setup_bc() on receipt of
+ CONNECT_ACKNOWLEGDE for PTMP, and on first response to SETUP for
+ PTP. Patches: abe-2881-2.diff (license #6372) patch uploaded by
+ Guenther Kelleter Modified. JIRA ABE-2881 ................
+ r374535 | rmudgett | 2012-10-05 12:41:05 -0500 (Fri, 05 Oct 2012)
+ | 2 lines chan_misdn: Remove some more deadcode. ................
+
+2012-10-04 20:15 +0000 [r374475-374479] Alec L Davis <sivad.a@paradise.net.nz>
+
+ * CHANGES, main/dsp.c, configs/dsp.conf.sample: dsp.c User
+ Configurable DTMF_HITS_TO_BEGIN and DTMF_MISSES_TO_END Instead of
+ a recompile, allow values to be adjusted in dsp.conf For binary
+ distributions allows easy adjustment for wobbly GSM calls, and
+ other reasons. Defaults to DTMF_HITS_TO_BEGIN=2 and
+ DTMF_MISSES_TO_END=3 (closes issue ASTERISK-17493) Tested by:
+ alecdavis alecdavis (license 585) Review
+ https://reviewboard.asterisk.org/r/2144/
+
+ * main/dsp.c: dsp.c fix incorrect DTMF Digit_Duration. it's always
+ short by 'hits_to_begin*DTMF_GSIZE', or 25.5ms if hitstobegin=2
+ (issue ASTERISK-16003) Tested by: alecdavis alecdavis (license
+ 585) Review https://reviewboard.asterisk.org/r/2145/
+
+2012-10-04 17:39 +0000 [r374456] Joshua Colp <jcolp@digium.com>
+
+ * channels/chan_sip.c: Fix a regression from direct media ACLs
+ where the directrtpsetup option no longer works. A check was
+ added for direct media ACLs that immediately forbid remote
+ bridging if there was no bridged channel. This caused
+ directrtpsetup to no longer function as it needs this information
+ before bridging actually occurs. Logic has now been adjusted so
+ if there is no bridged channel a remote bridge will still be
+ attempted. (closes issue ASTERISK-20511) Reported by: kristoff
+ Review: https://reviewboard.asterisk.org/r/2146/
+
+2012-10-04 15:25 +0000 [r374426] dlee <dlee@localhost>:
+
+ * main/db.c, res/res_agi.c: Fix DBDelTree error codes for AMI, CLI
+ and AGI The AMI DBDelTree command will return Success/Key tree
+ deleted successfully even if the given key does not exist. The
+ CLI command 'database deltree' had a similar problem, but was
+ saved because it actually responded with '0 database entries
+ removed'. AGI had a slightly different error, where it would
+ return success if the database was unavailable. This came from
+ confusion about the ast_db_deltree retval, which is -1 in the
+ event of a database error, or number of entries deleted
+ (including 0 for deleting nothing). * Adds a Doxygen comment to
+ process_db_keys explaining its retval * Changed some poorly named
+ res variables to num_deleted * Specified specific errors when
+ calling ast_db_deltree (database unavailable vs. entry not found
+ vs. success) * Fixed similar bug in AGI database deltree, where
+ 'Database unavailable' results in successful result (closes issue
+ AST-967) Reported by: John Bigelow Review:
+ https://reviewboard.asterisk.org/r/2138/
+
+2012-10-04 04:39 +0000 [r374365-374384] Alec L Davis <sivad.a@paradise.net.nz>
+
+ * CHANGES, main/dsp.c, configs/dsp.conf.sample: dsp.c User
+ configuration of DTMF_NORMAL_TWIST and DTMF_REVERSE_TWIST values
+ Asterisk's DTMF Specifications are based on AT&T specs, which may
+ not be compatible in other countries. Various countries have
+ different specifications for the maximum power level differences
+ between the DTMF low group and high group of frequencies. Power
+ level difference between frequencies for different
+ Administrations/RPOAs NTT = Max. 5 dB AT&T = 4dB(reverse) to
+ 8dB(normal) Danish = Max. 6 dB Australian = Max. 10 dB Brazilian
+ = Max. 9 dB ETSI = Max. 6 dB from ETSI ES 201 235-3 V1.3.1
+ (2006-03) Now allow 4 variables to be individually configured in
+ dsp.conf, with reasonable min/max of 2dB to 20dB. Default is AT&T
+ specifications Add's the following variables to dsp.conf
+ ;dtmf_normal_twist=6.31 ;dtmf_reverse_twist=2.51
+ ;relax_dtmf_normal_twist=6.31 ;relax_dtmf_reverse_twist=3.98
+ (closes issue ASTERISK-20442) Reported by: tbsky Tested by:
+ tbsky,alecdavis alecdavis (license 585) Review
+ https://reviewboard.asterisk.org/r/2141/
+
+ * main/dsp.c: _dsp_init: bring inline with trunk preparation for
+ clean merge of DTMF TWIST patch No functional changes, just
+ style. alecdavis (license 585) Reported by: Alec Davis Tested by:
+ alecdavis related https://reviewboard.asterisk.org/r/2141
+
+2012-10-04 02:09 +0000 [r374177-374335] Matthew Jordan <mjordan@digium.com>
+
+ * res/res_jabber.c: Check for presence of buddy in info/dinfo
+ handlers The res_jabber resource module uses the ASTOBJ library
+ for managing its ref counted objects. After calling
+ ASTOBJ_CONTAINER_FIND to locate a buddy object, the pointer to
+ the object has to be checked to see if the buddy existed. Prior
+ to this patch, the buddy object was not checked for NULL; with
+ this patch in both aji_client_info_handler and aji_dinfo_handler
+ the pointer is checked before used and, if no buddy object was
+ found, the handlers return an error code. This patch does not
+ take the approach that our JID can be used to log in from another
+ resource. If that approach is desired, an improvement could be
+ made to this patch to create the buddy on the fly. This patch
+ seeks only to prevent Asterisk from crashing. Note that multiple
+ people have proposed patches for this issue; the patch being
+ committed here is based on those. (closes issue ASTERISK-19532)
+ Reported by: Karsten Wemheuer Tested by: Byron Clark patches:
+ fix-jabber uploaded by Karsten Wemheuer (license #5930)
+ xmpp_no_crash_with_ejabberd.patch uploaded by Byron Clark
+ (license #6157) (closes issue ASTERISK-19557) Reported by:
+ ulugutz
+
+ * main/ccss.c: Destroy the generic_monitors container after the
+ core_instances in ccss For each item in core_instances disposed
+ of in the shutdown of ccss, any generic monitor instances
+ referenced by the objects will be removed from generic_monitors
+ during their destruction. Hilarity ensues if generic_monitors no
+ longer exists. Thanks to the Asterisk Test Suite's generic_ccss
+ test for complaining loudly when it ran into this.
+
+ * main/asterisk.c: Ensure Shutdown AMI event is still fired during
+ Asterisk shutdown Richard pointed out that having the manager
+ dispose of itself gracefully during shutdown meant that the
+ Shutdown event will no longer get fired. This patch moves the AMI
+ event just prior to running the atexit callbacks.
+
+ * main/event.c, main/taskprocessor.c, res/res_musiconhold.c,
+ main/cel.c, main/indications.c, main/channel.c, main/data.c,
+ main/pbx.c, main/manager.c, main/ccss.c, main/features.c: Fix a
+ variety of ref counting issues This patch resolves a number of
+ ref leaks that occur primarily on Asterisk shutdown. It adds a
+ variety of shutdown routines to core portions of Asterisk such
+ that they can reclaim resources allocate duringd initialization.
+ Review: https://reviewboard.asterisk.org/r/2137
+
+2012-10-01 16:45 +0000 [r374108] Sean Bright <sean@malleable.com>
+
+ * tests/test_db.c, apps/app_queue.c, main/db.c,
+ include/asterisk/astdb.h: app_queue: Support persisting and
+ loading of long member lists. Greenlight in #asterisk brought up
+ that he was receiving an error message "Could not create
+ persistent member string, out of space" when running app_queue in
+ Asterisk 10. dump_queue_members() made an assumption that 8K
+ would be enough to store the generated string, but with queues
+ that have large member lists this is not always the case. This
+ patch removes the limitation and uses ast_str instead of a fixed
+ sized buffer. The complicating factor comes from the fact that
+ ast_db_get requires a buffer and buffer size argument, which
+ doesn't let us pull back more than what we pass in, so I
+ introduced a new ast_db_get_allocated() which returns an
+ ast_strdup()'d copy of the value from astdb. As an aside, I did
+ some testing on the maximum size of data that we can store in the
+ BDB library we distribute and was able to store a 10MB string and
+ retrieve it with no problems, so I feel this is a safe patch.
+ Review: https://reviewboard.asterisk.org/r/2136/
+
+2012-09-28 19:03 +0000 [r374032] Jonathan Rose <jrose@digium.com>
+
+ * res/res_jabber.c: res_jabber: Remove CLI command 'jabber test'
+ The opinion of development was that it is both improper to have
+ Matt's personal email address used in the source and that the
+ command wouldn't be useful without it. (closes issue AST-467)
+ Reported by: Malcolm Davenport
+
+2012-09-28 12:14 +0000 [r373989] Joshua Colp <jcolp@digium.com>
+
+ * res/res_agi.c: Update documentation to make it explicit that
+ "stream file" will not restart musiconhold. (issue
+ ASTERISK-17367) Reported by: oej
+
+2012-09-27 22:08 +0000 [r373945] Richard Mudgett <rmudgett@digium.com>
+
+ * apps/app_senddtmf.c: Fix SendDTMF crash and channel reference
+ leak using channel name parameter. The SendDTMF channel name
+ parameter has two issues. 1) Crashes if the channel name does not
+ exist. 2) Leaks a channel reference if the channel is the current
+ channel. Problem introduced by ASTERISK-15956. * Updated SendDTMF
+ documentation. * Renamed app to senddtmf_name and tweaked the
+ type.
+
+2012-09-27 16:49 +0000 [r373878-373909] Joshua Colp <jcolp@digium.com>
+
+ * main/loader.c: loader: Ensure dependent modules are properly
+ initialized. If an Asterisk module specifies a dependency in
+ ast_module_info.nonoptreq, it is possible for Asterisk to skip
+ calling the modules's .load function. Asterisk was loading and
+ linking the module via load_dynamic_module() but was not adding
+ the module to the resource_heap. Therefore the module was not
+ initialized based on it's priority along with the other modules
+ in the heap. Now use load_resource() instead of
+ load_dynamic_module() for non-optional requirement. This will add
+ the module to the resource_heap so the module can be properly
+ initialized in the correct order. This is required if there are
+ any module global data structures initialized in the .load()
+ callback for the module on platforms which do not support weak
+ references. (issue ASTERISK-20439) Reported by: sruffell Patches:
+ 0001-loader-Ensure-dependent-modules-are-properly-initial.patch
+ uploaded by sruffell (license 5417)
+
+ * channels/chan_local.c: Fix an issue where Local channels dialed
+ by app_queue are considered in use immediately. The chan_local
+ channel driver returns a device state of in use even if a created
+ Local channel has not yet been dialed. This fix changes the logic
+ to return a state of not in use until the channel itself has been
+ dialed. (closes issue ASTERISK-20390) Reported by: tim_ringenbach
+ Review: https://reviewboard.asterisk.org/r/2116/
+
+2012-09-26 21:11 +0000 [r373848] Mark Michelson <mmichelson@digium.com>
+
+ * channels/chan_sip.c: Move handling of 408 response so there is no
+ misleading warning message. (closes issue ASTERISK-20060)
+ Reported by: Walter Doekes
+
+2012-09-26 18:04 +0000 [r373815] Richard Mudgett <rmudgett@digium.com>
+
+ * apps/app_meetme.c: Fixed meetme tab completion and command
+ documentation. * Removed unnecessary case sensitivity in meetme
+ list, lock, unlock, mute, unmute, and kick commands. * Separated
+ meetme lock/unlock, mute/unmute, and kick commands into their own
+ registered commands to simplify tab completion and parameter
+ checking. meetme_lock_cmd(), meetme_mute_cmd(), and
+ meetme_kick_cmd() * Simplified meetme_show_cmd() (closes issue
+ AST-1006) Reported by: John Bigelow Tested by: rmudgett
+
+2012-09-25 23:07 +0000 [r373735-373773] Mark Michelson <mmichelson@digium.com>
+
+ * main/say.c: Fix saying of date in Dutch. The Dutch say the date
+ before the month. (closes issue ASTERISK-20353) Reported by: Teun
+ Ouwehand
+
+ * configs/agents.conf.sample, channels/chan_agent.c: Remove dead
+ code and documentation for nonexistent feature. multiplelogin was
+ removed from chan_agent back in 1.6.0 when AgentCallbackLogin()
+ was removed. (closes issue AST-948) reported by Steve Pitts
+
+ * apps/app_voicemail.c: Fix error where improper IMAP greetings
+ would be deleted. (closes issue ASTERISK-20435) Reported by:
+ fhackenberger Patches: asterisk-20435-imap-del-greeting.diff
+ uploaded by Michael L. Young (License #5026) (with suggested
+ modification made by me)
+
+2012-09-25 20:10 +0000 [r373705] Joshua Colp <jcolp@digium.com>
+
+ * channels/chan_local.c: Fix T.38 support when used with chan_local
+ in between. Users of the T.38 API can indicate
+ AST_T38_REQUEST_PARMS on a channel to request that the channel
+ indicate a T.38 negotiation with the parameters present on the
+ channel. The return value of this indication is expected to be
+ AST_T38_REQUEST_PARMS upon success but with chan_local involved
+ this could never occur. This fix changes chan_local to always
+ return AST_T38_REQUEST_PARMS for this situation. If the
+ underlying channel technology on the other side does not support
+ T.38 this would have been determined ahead of time using
+ ast_channel_get_t38_state and an indication would not occur.
+ (closes issue ASTERISK-20229) Reported by: wdoekes Patches:
+ ASTERISK-20229.patch uploaded by wdoekes (license 5674) Review:
+ https://reviewboard.asterisk.org/r/2070/
+
+2012-09-25 19:32 +0000 [r373666-373702] Kinsey Moore <kmoore@digium.com>
+
+ * res/res_rtp_asterisk.c: Fix an issue where media would not flow
+ for situations where the legacy STUN code is in use. The STUN
+ packets should *not* be blocked by strict RTP. (closes issue
+ ASTERISK-20415) Reported-by: Michele Cicciotti Patch-by: Josh
+ Colp (trunk r369817)
+
+ * apps/app_queue.c: "show" completion option for "queue" shouldn't
+ appear twice When tab-completing CLI commands starting with
+ "queue", "show" appeared twice in the list due to the way that
+ Asterisk's tab completion functions and the order in which the
+ commands were registered. The registration order has been altered
+ to resolve this issue. (closes issue AST-940) Reported-by: Steve
+ Pitts
+
+2012-09-25 17:21 +0000 [r373652] Terry Wilson <twilson@digium.com>
+
+ * configs/sip.conf.sample, channels/sip/include/sip.h,
+ channels/chan_sip.c: Properly handle UAC/UAS roles for SIP
+ session timers The SIP session timer mechanism contains a
+ mandatory 'refresher' parameter (included in the Session-Expires
+ header) which is used in the session timer offer/answer signaling
+ within a SIP Invite dialog. It looks like asterisk is
+ interpreting the uac resp. uas role only as the initial role of
+ client and server (caller is uac, callee is uas). The standard
+ rfc 4028 however assigns the client role to the ((RE)-Invite)
+ requester, the server role to the ((RE)-Invite) responder. This
+ patch has Asterisk track the actual refresher as "us" or "them"
+ as opposed to relying on just the configured "uas" or "uac"
+ properties. (closes issue AST-922) Reported by: Thomas Airmont
+ Review: https://reviewboard.asterisk.org/r/2118/
+
+2012-09-25 17:18 +0000 [r373618-373640] Richard Mudgett <rmudgett@digium.com>
+
+ * codecs/ilbc/iLBC_decode.c, codecs/ilbc/iLBC_encode.c: Fix
+ valgrind found memcpy issues in codec_ilbc. Valgrind found
+ codec_ilbc using memcpy instead of memmove for overlapping memory
+ blocks. (issue ASTERISK-19890) (closes issue ASTERISK-20231)
+ Reported by: Walter Doekes Patches: ASTERISK-20231.patch (license
+ #5674) patch uploaded by Walter Doekes
+
+ * codecs/Makefile: Make rebuild GSM, ilbc, or lpc10 codecs if the
+ respective sources change.
+
+2012-09-25 16:15 +0000 [r373617] Jonathan Rose <jrose@digium.com>
+
+ * channels/chan_sip.c: chan_sip: Set Quality of Service for video
+ rtp instance (closes issue ASTERISK-20201) Reported by: ddkprog
+ Patches: chan_sip.c.diff uploaded by ddkprog (license 6008)
+
+2012-09-25 13:27 +0000 [r373578] Kinsey Moore <kmoore@digium.com>
+
+ * configs/res_odbc.conf.sample: Fix documentation for default
+ username in res_odbc This was previously stated to be "root", but
+ is actually the name of the context if unspecified. (closes issue
+ ASTERISK-20258) Reported by: Stefan x
+
+2012-09-25 11:58 +0000 [r373532-373550] Joshua Colp <jcolp@digium.com>
+
+ * res/res_rtp_multicast.c: Fix an issue where a caller to ast_write
+ on a MulticastRTP channel would determine it failed when in
+ reality it did not. When sending RTP packets via multicast the
+ amount of data sent is stored in a variable and returned from the
+ write function. This is incorrect as any non-zero value returned
+ is considered a failure while a return value of 0 is success. For
+ callers (such as ast_streamfile) that checked the return value
+ they would have considered it a failure when in reality nothing
+ went wrong and it was actually a success. The write function for
+ the multicast RTP engine now returns -1 on failure and 0 on
+ success, as it should. (closes issue ASTERISK-17254) Reported by:
+ wybecom
+
+ * channels/chan_sip.c: Add missing checks that I neglected. The SIP
+ technology and SIP info technology should be considered equal.
+ (closes issue ASTERISK-20409) Reported by: michele cicciotti
+ privatewave
+
+2012-09-24 22:15 +0000 [r373504] Matthew Jordan <mjordan@digium.com>
+
+ * res/res_rtp_asterisk.c: Revert change to res_rtp_asterisk
+ committed in r373236 (1.8) The change committed in r373236
+ attempted to account for endpoints that increased their RTP
+ timestamp in DTMF end of event re-transmissions. This change
+ attempted to make Asterisk continue to work with endpoints that
+ failed to follow the RFC while maintaining the fix that allowed
+ for out of order DTMF to be handled. Unfortunately, there is no
+ free lunch, and this patch broke any system that sent DTMF
+ immediately after an RTP session was established or when an SSRC
+ is updated. As such, that patch is being reverted for the
+ previous behavior. Endpoints that erroneously increase the RTP
+ timestamp in DTMF end of event packets will not work properly
+ with Asterisk. (issue ASTERISK-20424)
+
+2012-09-24 22:09 +0000 [r373500] Richard Mudgett <rmudgett@digium.com>
+
+ * channels/chan_sip.c: Be consistent, send From: "Anonymous"
+ <sip:anonymous@anonymous.invalid> When setting
+ CALLERID(pres)=unavailable in the dialplan, the From header in
+ the SIP message contains "Anonymous"
+ <sip:Anonymous@anonymous.invalid>. For consistency, Asterisk
+ should use a lowercase a in the userpart of the URI. * Make the
+ From header use a lowercase A in the userpart of the anonymous
+ URI. (closes issue ASTERISK-19838) Reported by: Antti Yrjola
+ Patches: chan_sip_patch_ASTERISK-19838.patch (license #6383)
+ patch uploaded by Antti Yrjola
+
+2012-09-24 20:57 +0000 [r373467] Jonathan Rose <jrose@digium.com>
+
+ * apps/app_mixmonitor.c, funcs/func_audiohookinherit.c:
+ func_audiohookinherit: Document some missed sources. This patch
+ also mentions that AUDIOHOOK_INHERIT can be used to transfer
+ MixMonitor audiohooks. There is also wiki that addresses
+ audiohooks and the use of AUDIOHOOK_INHERIT at the following
+ link: https://wiki.asterisk.org/wiki/display/AST/Audiohooks
+ (closes issue ASTERISK-18220) Reported by: Ishfaq Malik
+
+2012-09-24 19:15 +0000 [r373438] Joshua Colp <jcolp@digium.com>
+
+ * channels/chan_sip.c: Fix a deadlock caused by a race condition
+ between removing a hint and reloading the dialplan and
+ subscribing to the removed hint. If conditions were right it was
+ possible for both the PBX core and chan_sip to deadlock by both
+ having a lock that the other wants. In the case of the PBX core
+ it had the contexts lock and wanted a SIP dialog lock, while in
+ the case of chan_sip it had the SIP dialog lock and wanted the
+ contexts lock. This fix unlocks the SIP dialog before getting the
+ extension state so that the other thread will not block on trying
+ to lock it. Once the extension state is retrieved the SIP dialog
+ is locked again and life carries on. As the SIP dialog is
+ reference counted it is not possible for it to go away after
+ unlocking. (closes issue ASTERISK-20437) Reported by: jhutchins
+
+2012-09-24 15:40 +0000 [r373424] Richard Mudgett <rmudgett@digium.com>
+
+ * channels/chan_sip.c: Fix potential reentrancy problems in
+ chan_sip. Asterisk v1.8 and later was not as vulnerable to this
+ issue. * Made find_call() lock each private as it processes the
+ found dialogs. (Primary cause of ABE-2876) * Made the other
+ functions that traverse the dialogs container lock each private
+ as it examines them. * Fix race condition in sip_call() if the
+ thread that sent the INVITE is held up long enough for a response
+ to be processed. The p->initid for the INVITE retransmission
+ could be added after it was canceled by the response processing.
+ * Made __sip_destroy() clean up resource pointers after freeing.
+ This is primarily defensive in case someone has a stale private
+ pointer. * Removed redundant memset() in reqprep(). The call to
+ init_req() already does the memset() and is the first reference
+ to req in reqprep(). * Removed useless set of req.method in
+ transmit_invite(). The calls to initreqprep() and reqprep() have
+ to do this because they memset() the req. JIRA ABE-2876
+ .......... Merged -r373423 from
+ https://origsvn.digium.com/svn/asterisk/be/branches/C.3-bier
+
+2012-09-21 19:00 +0000 [r373298-373342] Jonathan Rose <jrose@digium.com>
+
+ * channels/iax2-provision.c: iax2-provision: Fix improper return on
+ failed cache retrieval (closes issue ASTERISK-20337) reported by:
+ John Covert Patches: iax2-provision.c.patch uploaded by John
+ Covert (license 5512)
+
+ * apps/app_queue.c: app_queue: Make queue reload members and
+ variants of that work Prior to this patch, 'queue reload members'
+ cli command did not work at all. This also affects the manager
+ function 'QueueReload' when supplied with the 'members: yes'
+ field. (closes issue AST-956) Reported by: John Bigelow
+
+2012-09-20 19:12 +0000 [r373242] Joshua Colp <jcolp@digium.com>
+
+ * apps/app_meetme.c: Fix incorrect MeetME conference bridge
+ reference count decrementing and sometimes premature destruction.
+ When using the 'e' or 'E' option to MeetMe the configured
+ conference bridges are loaded and examined to see if any are
+ empty. If no conference bridges are empty the caller is prompted
+ to enter the number of one. This operation left around a pointer
+ to the last created conference bridge still containing
+ participants. When the caller that was not able to find any empty
+ conference bridge hung up this pointer was disposed of and the
+ reference count of the conference bridge decremented. If there
+ was only a single participant in the conference bridge it was
+ ultimately destroyed prematurely. (closes issue AST-994) Reported
+ by: John Bigelow
+
+2012-09-20 18:41 +0000 [r373236] Matthew Jordan <mjordan@digium.com>
+
+ * res/res_rtp_asterisk.c: When processing RFC 2833 DTMF, accomodate
+ increasing timestamps in End events While endpoints should not be
+ changing the source timestamp between DTMF event packets, the
+ fact is there exists those endpoints that do exactly that. To
+ work around this, we absorb timestamps within the expected
+ re-transmit period. Note that this period only affects End of
+ Event packets, so it should not prevent the detection of new DTMF
+ digits that happen to arrive right on top of each other. (closes
+ issue ASTERISK-20424) Reported by: Vladimir Mikhelson Tested by:
+ mjordan, Vladimir Mikhelson Review:
+ https://reviewboard.asterisk.org/r/2124
+
+2012-09-19 16:02 +0000 [r373165] Joshua Colp <jcolp@digium.com>
+
+ * channels/chan_sip.c: Fix a regression where direct media was not
+ permitted for calls using SIP INFO DTMF. A change was committed
+ to fix direct media ACL support. This change wrongly assumed that
+ only a single channel technology structure exists for chan_sip.
+ This is in fact false as a second exists for calls using SIP INFO
+ DTMF. The code which performs direct media ACL checking now
+ checks for both the non-INFO DTMF and INFO DTMF channel
+ technology structures. (closes issue ASTERISK-20409) Reported by:
+ michele cicciotti privatewave
+
+2012-09-18 20:12 +0000 [r373131] Sean Bright <sean@malleable.com>
+
+ * main/manager.c: Don't crash when passing a NULL message to
+ __astman_get_header. Before this commit, __astman_get_header
+ would blindly dereference the passed in 'struct message *' to
+ traverse the header list. There are cases, however, such as
+ '*CLI> sip qualify peer foo' where the message pointer is NULL,
+ so we need to check for that.
+
+2012-09-15 00:13 +0000 [r373090] Richard Mudgett <rmudgett@digium.com>
+
+ * channels/sig_ss7.c: Made companding law for SS7 calls only
+ determined by SS7 signaling type. For SS7, the companding law for
+ a call was chosen inconsistently depending upon ss7type (ITU vs
+ ANSI) and the DAHDI companding default (T1 vs E1). For incoming
+ calls, the companding law was determined by ss7type. For outgoing
+ calls, the companding law was determined by the DAHDI default.
+ With the wrong combination you would get A-law/u-law conflicts.
+ An A-law/u-law conflict sounds like bad static on the line. SS7
+ ITU signaling with E1 line: ok SS7 ITU signaling with T1 line:
+ noise SS7 ANSI signaling with E1 line: noise SS7 ANSI signaling
+ with T1 line: ok * Fix the companding law used to be determined
+ by the SS7 signaling type only.
+
+2012-09-14 19:07 +0000 [r373061] Matthew Jordan <mjordan@digium.com>
+
+ * main/ssl.c, main/tcptls.c, channels/chan_sip.c: Resolve memory
+ leaks in TLS initialization and TLS client connections This patch
+ resolves two sources of memory leaks when using TLS in Asterisk:
+ 1) It removes improper initialization (and multiple
+ re-initializations) of portions of the SSL library. Asterisk
+ calls SSL_library_init and SSL_load_error_strings during SSL
+ initialization; collectively this obviates the need for calling
+ any of the following during initialization or client connection
+ handling: * ERR_load_crypto_strings (handled by
+ SSL_load_error_strings) * OpenSSL_add_all_algorithms (synonym for
+ SSL_library_init) * SSLeay_add_ssl_algorithms (synonym for
+ SSL_library_init) 2) Failure to completely clean up all memory
+ allocated by Asterisk and by the SSL library for TLS clients.
+ This included not freeing the SSL_CTX object in the SIP channel
+ driver, as well as not clearing the error stack when the TLS
+ client exited. Note that these memory leaks were found by Thomas
+ Arimont, and this patch was essentially written by him with some
+ minor tweaks. (closes issue AST-889) Reported by: Thomas Arimont
+ Tested by: Thomas Arimont patches: (bugAST-889.patch) by Thomas
+ Arimont (license 5525) Review:
+ https://reviewboard.asterisk.org/r/2105
+
+2012-09-13 18:39 +0000 [r373024] dlee <dlee@localhost>:
+
+ * include/asterisk/channel.h, main/channel.c: Fix timeouts for
+ ast_waitfordigit[_full]. ast_waitfordigit_full would simply pass
+ its timeout to ast_waitfor_nandfds, expecting it to decrement the
+ timeout by however many milliseconds were waited. This is a
+ problem if it consistently waits less than 1ms. The timeout will
+ never be decremented, and we wait... FOREVER! This patch makes
+ ast_waitfordigit_full manage the timeout itself. It maintains the
+ previously undocumented behavior that negative timeouts wait
+ forever. (closes issue ASTERISK-20375) Reported by: Mark
+ Michelson Tested by: Mark Michelson Review:
+ https://reviewboard.asterisk.org/r/2109/
2012-09-13 Asterisk Development Team <asteriskteam@digium.com>
|
[-]
[+]
|
Changed |
asterisk-1.8.18.0.tar.xz/apps/app_meetme.c
^
|
@@ -36,7 +36,7 @@
#include "asterisk.h"
-ASTERISK_FILE_VERSION(__FILE__, "$Revision: 372765 $")
+ASTERISK_FILE_VERSION(__FILE__, "$Revision: 373815 $")
#include <dahdi/user.h>
@@ -513,8 +513,9 @@
</manager>
***/
-#define CONFIG_FILE_NAME "meetme.conf"
-#define SLA_CONFIG_FILE "sla.conf"
+#define CONFIG_FILE_NAME "meetme.conf"
+#define SLA_CONFIG_FILE "sla.conf"
+#define STR_CONCISE "concise"
/*! each buffer is 20ms, so this is 640ms total */
#define DEFAULT_AUDIO_BUFFERS 32
@@ -1297,71 +1298,131 @@
return cnf;
}
-static char *complete_meetmecmd(const char *line, const char *word, int pos, int state)
+static char *complete_confno(const char *word, int state)
{
- static const char * const cmds[] = {"concise", "lock", "unlock", "mute", "unmute", "kick", "list", NULL};
-
+ struct ast_conference *cnf;
+ char *ret = NULL;
+ int which = 0;
int len = strlen(word);
+
+ AST_LIST_LOCK(&confs);
+ AST_LIST_TRAVERSE(&confs, cnf, list) {
+ if (!strncmp(word, cnf->confno, len) && ++which > state) {
+ /* dup before releasing the lock */
+ ret = ast_strdup(cnf->confno);
+ break;
+ }
+ }
+ AST_LIST_UNLOCK(&confs);
+ return ret;
+}
+
+static char *complete_userno(struct ast_conference *cnf, const char *word, int state)
+{
+ char usrno[50];
+ struct ao2_iterator iter;
+ struct ast_conf_user *usr;
+ char *ret = NULL;
int which = 0;
- struct ast_conference *cnf = NULL;
- struct ast_conf_user *usr = NULL;
- char *confno = NULL;
- char usrno[50] = "";
- char *myline, *ret = NULL;
-
- if (pos == 1) { /* Command */
- return ast_cli_complete(word, cmds, state);
- } else if (pos == 2) { /* Conference Number */
+ int len = strlen(word);
+
+ iter = ao2_iterator_init(cnf->usercontainer, 0);
+ for (; (usr = ao2_iterator_next(&iter)); ao2_ref(usr, -1)) {
+ snprintf(usrno, sizeof(usrno), "%d", usr->user_no);
+ if (!strncmp(word, usrno, len) && ++which > state) {
+ ao2_ref(usr, -1);
+ ret = ast_strdup(usrno);
+ break;
+ }
+ }
+ ao2_iterator_destroy(&iter);
+ return ret;
+}
+
+static char *complete_meetmecmd_mute_kick(const char *line, const char *word, int pos, int state)
+{
+ if (pos == 2) {
+ return complete_confno(word, state);
+ }
+ if (pos == 3) {
+ int len = strlen(word);
+ char *ret = NULL;
+ char *saved = NULL;
+ char *myline;
+ char *confno;
+ struct ast_conference *cnf;
+
+ if (!strncasecmp(word, "all", len)) {
+ if (state == 0) {
+ return ast_strdup("all");
+ }
+ --state;
+ }
+
+ /* Extract the confno from the command line. */
+ myline = ast_strdupa(line);
+ strtok_r(myline, " ", &saved);
+ strtok_r(NULL, " ", &saved);
+ confno = strtok_r(NULL, " ", &saved);
+
AST_LIST_LOCK(&confs);
AST_LIST_TRAVERSE(&confs, cnf, list) {
- if (!strncasecmp(word, cnf->confno, len) && ++which > state) {
- ret = cnf->confno;
+ if (!strcmp(confno, cnf->confno)) {
+ ret = complete_userno(cnf, word, state);
break;
}
}
- ret = ast_strdup(ret); /* dup before releasing the lock */
AST_LIST_UNLOCK(&confs);
+
return ret;
- } else if (pos == 3) {
- /* User Number || Conf Command option*/
- if (strstr(line, "mute") || strstr(line, "kick")) {
- if (state == 0 && (strstr(line, "kick") || strstr(line, "mute")) && !strncasecmp(word, "all", len))
- return ast_strdup("all");
- which++;
- AST_LIST_LOCK(&confs);
+ }
+ return NULL;
+}
- /* TODO: Find the conf number from the cmdline (ignore spaces) <- test this and make it fail-safe! */
- myline = ast_strdupa(line);
- if (strsep(&myline, " ") && strsep(&myline, " ") && !confno) {
- while((confno = strsep(&myline, " ")) && (strcmp(confno, " ") == 0))
- ;
- }
-
- AST_LIST_TRAVERSE(&confs, cnf, list) {
- if (!strcmp(confno, cnf->confno))
- break;
- }
+static char *complete_meetmecmd_lock(const char *word, int pos, int state)
+{
+ if (pos == 2) {
+ return complete_confno(word, state);
+ }
+ return NULL;
+}
- if (cnf) {
- struct ao2_iterator user_iter;
- user_iter = ao2_iterator_init(cnf->usercontainer, 0);
-
- while((usr = ao2_iterator_next(&user_iter))) {
- snprintf(usrno, sizeof(usrno), "%d", usr->user_no);
- if (!strncasecmp(word, usrno, len) && ++which > state) {
- ao2_ref(usr, -1);
- break;
- }
- ao2_ref(usr, -1);
- }
- ao2_iterator_destroy(&user_iter);
- AST_LIST_UNLOCK(&confs);
- return usr ? ast_strdup(usrno) : NULL;
- }
- AST_LIST_UNLOCK(&confs);
+static char *complete_meetmecmd_list(const char *line, const char *word, int pos, int state)
+{
+ int len;
+
+ if (pos == 2) {
+ len = strlen(word);
+ if (!strncasecmp(word, STR_CONCISE, len)) {
+ if (state == 0) {
+ return ast_strdup(STR_CONCISE);
+ }
+ --state;
+ }
+
+ return complete_confno(word, state);
+ }
+ if (pos == 3 && state == 0) {
+ char *saved = NULL;
+ char *myline;
+ char *confno;
+
+ /* Extract the confno from the command line. */
+ myline = ast_strdupa(line);
+ strtok_r(myline, " ", &saved);
+ strtok_r(NULL, " ", &saved);
+ confno = strtok_r(NULL, " ", &saved);
+
+ if (!strcasecmp(confno, STR_CONCISE)) {
+ /* There is nothing valid in this position now. */
+ return NULL;
}
- }
+ len = strlen(word);
+ if (!strncasecmp(word, STR_CONCISE, len)) {
+ return ast_strdup(STR_CONCISE);
+ }
+ }
return NULL;
}
@@ -1371,37 +1432,31 @@
struct ast_conf_user *user;
struct ast_conference *cnf;
int hr, min, sec;
- int i = 0, total = 0;
+ int total = 0;
time_t now;
- struct ast_str *cmdline = NULL;
#define MC_HEADER_FORMAT "%-14s %-14s %-10s %-8s %-8s %-6s\n"
#define MC_DATA_FORMAT "%-12.12s %4.4d %4.4s %02d:%02d:%02d %-8s %-6s\n"
switch (cmd) {
case CLI_INIT:
- e->command = "meetme list [concise]";
+ e->command = "meetme list";
e->usage =
- "Usage: meetme list [concise] <confno> \n"
- " List all or a specific conference.\n";
+ "Usage: meetme list [<confno>] [" STR_CONCISE "]\n"
+ " List all conferences or a specific conference.\n";
return NULL;
case CLI_GENERATE:
- return complete_meetmecmd(a->line, a->word, a->pos, a->n);
+ return complete_meetmecmd_list(a->line, a->word, a->pos, a->n);
}
- /* Check for length so no buffer will overflow... */
- for (i = 0; i < a->argc; i++) {
- if (strlen(a->argv[i]) > 100)
- ast_cli(a->fd, "Invalid Arguments.\n");
- }
+ if (a->argc == 2 || (a->argc == 3 && !strcasecmp(a->argv[2], STR_CONCISE))) {
+ /* List all the conferences */
+ int concise = (a->argc == 3);
+ struct ast_str *marked_users;
- /* Max confno length */
- if (!(cmdline = ast_str_create(MAX_CONFNUM))) {
- return CLI_FAILURE;
- }
+ if (!(marked_users = ast_str_create(30))) {
+ return CLI_FAILURE;
+ }
- if (a->argc == 2 || (a->argc == 3 && !strcasecmp(a->argv[2], "concise"))) {
- /* List all the conferences */
- int concise = (a->argc == 3 && !strcasecmp(a->argv[2], "concise"));
now = time(NULL);
AST_LIST_LOCK(&confs);
if (AST_LIST_EMPTY(&confs)) {
@@ -1409,23 +1464,25 @@
ast_cli(a->fd, "No active MeetMe conferences.\n");
}
AST_LIST_UNLOCK(&confs);
- ast_free(cmdline);
+ ast_free(marked_users);
return CLI_SUCCESS;
}
if (!concise) {
ast_cli(a->fd, MC_HEADER_FORMAT, "Conf Num", "Parties", "Marked", "Activity", "Creation", "Locked");
}
AST_LIST_TRAVERSE(&confs, cnf, list) {
- if (cnf->markedusers == 0) {
- ast_str_set(&cmdline, 0, "N/A ");
- } else {
- ast_str_set(&cmdline, 0, "%4.4d", cnf->markedusers);
- }
hr = (now - cnf->start) / 3600;
min = ((now - cnf->start) % 3600) / 60;
sec = (now - cnf->start) % 60;
if (!concise) {
- ast_cli(a->fd, MC_DATA_FORMAT, cnf->confno, cnf->users, ast_str_buffer(cmdline), hr, min, sec, cnf->isdynamic ? "Dynamic" : "Static", cnf->locked ? "Yes" : "No");
+ if (cnf->markedusers == 0) {
+ ast_str_set(&marked_users, 0, "N/A ");
+ } else {
+ ast_str_set(&marked_users, 0, "%4.4d", cnf->markedusers);
+ }
+ ast_cli(a->fd, MC_DATA_FORMAT, cnf->confno, cnf->users,
+ ast_str_buffer(marked_users), hr, min, sec,
+ cnf->isdynamic ? "Dynamic" : "Static", cnf->locked ? "Yes" : "No");
} else {
ast_cli(a->fd, "%s!%d!%d!%02d:%02d:%02d!%d!%d\n",
cnf->confno,
@@ -1442,18 +1499,19 @@
if (!concise) {
ast_cli(a->fd, "* Total number of MeetMe users: %d\n", total);
}
- ast_free(cmdline);
+ ast_free(marked_users);
return CLI_SUCCESS;
- } else if (strcmp(a->argv[1], "list") == 0) {
+ }
+ if (a->argc == 3 || (a->argc == 4 && !strcasecmp(a->argv[3], STR_CONCISE))) {
struct ao2_iterator user_iter;
- int concise = (a->argc == 4 && (!strcasecmp(a->argv[3], "concise")));
+ int concise = (a->argc == 4);
+
/* List all the users in a conference */
if (AST_LIST_EMPTY(&confs)) {
if (!concise) {
ast_cli(a->fd, "No active MeetMe conferences.\n");
}
- ast_free(cmdline);
- return CLI_SUCCESS;
+ return CLI_SUCCESS;
}
/* Find the right conference */
AST_LIST_LOCK(&confs);
@@ -1466,7 +1524,6 @@
if (!concise)
ast_cli(a->fd, "No such conference: %s.\n", a->argv[2]);
AST_LIST_UNLOCK(&confs);
- ast_free(cmdline);
return CLI_SUCCESS;
}
/* Show all the users */
@@ -1506,93 +1563,49 @@
ast_cli(a->fd, "%d users in that conference.\n", cnf->users);
}
AST_LIST_UNLOCK(&confs);
- ast_free(cmdline);
return CLI_SUCCESS;
}
- if (a->argc < 2) {
- ast_free(cmdline);
- return CLI_SHOWUSAGE;
- }
-
- ast_debug(1, "Cmdline: %s\n", ast_str_buffer(cmdline));
-
- admin_exec(NULL, ast_str_buffer(cmdline));
- ast_free(cmdline);
-
- return CLI_SUCCESS;
+ return CLI_SHOWUSAGE;
}
-static char *meetme_cmd(struct ast_cli_entry *e, int cmd, struct ast_cli_args *a)
+static char *meetme_cmd_helper(struct ast_cli_args *a)
{
/* Process the command */
- struct ast_str *cmdline = NULL;
- int i = 0;
-
- switch (cmd) {
- case CLI_INIT:
- e->command = "meetme {lock|unlock|mute|unmute|kick}";
- e->usage =
- "Usage: meetme (un)lock|(un)mute|kick <confno> <usernumber>\n"
- " Executes a command for the conference or on a conferee\n";
- return NULL;
- case CLI_GENERATE:
- return complete_meetmecmd(a->line, a->word, a->pos, a->n);
- }
-
- if (a->argc > 8)
- ast_cli(a->fd, "Invalid Arguments.\n");
- /* Check for length so no buffer will overflow... */
- for (i = 0; i < a->argc; i++) {
- if (strlen(a->argv[i]) > 100)
- ast_cli(a->fd, "Invalid Arguments.\n");
- }
+ struct ast_str *cmdline;
/* Max confno length */
if (!(cmdline = ast_str_create(MAX_CONFNUM))) {
return CLI_FAILURE;
}
- if (a->argc < 1) {
- ast_free(cmdline);
- return CLI_SHOWUSAGE;
- }
-
ast_str_set(&cmdline, 0, "%s", a->argv[2]); /* Argv 2: conference number */
- if (strstr(a->argv[1], "lock")) {
- if (strcmp(a->argv[1], "lock") == 0) {
+ if (strcasestr(a->argv[1], "lock")) {
+ if (strcasecmp(a->argv[1], "lock") == 0) {
/* Lock */
ast_str_append(&cmdline, 0, ",L");
} else {
/* Unlock */
ast_str_append(&cmdline, 0, ",l");
}
- } else if (strstr(a->argv[1], "mute")) {
- if (a->argc < 4) {
- ast_free(cmdline);
- return CLI_SHOWUSAGE;
- }
- if (strcmp(a->argv[1], "mute") == 0) {
+ } else if (strcasestr(a->argv[1], "mute")) {
+ if (strcasecmp(a->argv[1], "mute") == 0) {
/* Mute */
- if (strcmp(a->argv[3], "all") == 0) {
+ if (strcasecmp(a->argv[3], "all") == 0) {
ast_str_append(&cmdline, 0, ",N");
} else {
ast_str_append(&cmdline, 0, ",M,%s", a->argv[3]);
}
} else {
/* Unmute */
- if (strcmp(a->argv[3], "all") == 0) {
+ if (strcasecmp(a->argv[3], "all") == 0) {
ast_str_append(&cmdline, 0, ",n");
} else {
ast_str_append(&cmdline, 0, ",m,%s", a->argv[3]);
}
}
- } else if (strcmp(a->argv[1], "kick") == 0) {
- if (a->argc < 4) {
- ast_free(cmdline);
- return CLI_SHOWUSAGE;
- }
- if (strcmp(a->argv[3], "all") == 0) {
+ } else if (strcasecmp(a->argv[1], "kick") == 0) {
+ if (strcasecmp(a->argv[3], "all") == 0) {
/* Kick all */
ast_str_append(&cmdline, 0, ",K");
} else {
@@ -1600,6 +1613,10 @@
ast_str_append(&cmdline, 0, ",k,%s", a->argv[3]);
}
} else {
+ /*
+ * Should never get here because it is already filtered by the
+ * callers.
+ */
ast_free(cmdline);
return CLI_SHOWUSAGE;
}
@@ -1612,6 +1629,66 @@
return CLI_SUCCESS;
}
+static char *meetme_lock_cmd(struct ast_cli_entry *e, int cmd, struct ast_cli_args *a)
+{
+ switch (cmd) {
+ case CLI_INIT:
+ e->command = "meetme {lock|unlock}";
+ e->usage =
+ "Usage: meetme lock|unlock <confno>\n"
+ " Lock or unlock a conference to new users.\n";
+ return NULL;
+ case CLI_GENERATE:
+ return complete_meetmecmd_lock(a->word, a->pos, a->n);
+ }
+
+ if (a->argc != 3) {
+ return CLI_SHOWUSAGE;
+ }
+
+ return meetme_cmd_helper(a);
+}
+
+static char *meetme_kick_cmd(struct ast_cli_entry *e, int cmd, struct ast_cli_args *a)
+{
+ switch (cmd) {
+ case CLI_INIT:
+ e->command = "meetme kick";
+ e->usage =
+ "Usage: meetme kick <confno> all|<userno>\n"
+ " Kick a conference or a user in a conference.\n";
+ return NULL;
+ case CLI_GENERATE:
+ return complete_meetmecmd_mute_kick(a->line, a->word, a->pos, a->n);
+ }
+
+ if (a->argc != 4) {
+ return CLI_SHOWUSAGE;
+ }
+
+ return meetme_cmd_helper(a);
+}
+
+static char *meetme_mute_cmd(struct ast_cli_entry *e, int cmd, struct ast_cli_args *a)
+{
+ switch (cmd) {
+ case CLI_INIT:
+ e->command = "meetme {mute|unmute}";
+ e->usage =
+ "Usage: meetme mute|unmute <confno> all|<userno>\n"
+ " Mute or unmute a conference or a user in a conference.\n";
+ return NULL;
+ case CLI_GENERATE:
+ return complete_meetmecmd_mute_kick(a->line, a->word, a->pos, a->n);
+ }
+
+ if (a->argc != 4) {
+ return CLI_SHOWUSAGE;
+ }
+
+ return meetme_cmd_helper(a);
+}
+
static const char *sla_hold_str(unsigned int hold_access)
{
const char *hold = "Unknown";
@@ -1771,8 +1848,10 @@
}
static struct ast_cli_entry cli_meetme[] = {
- AST_CLI_DEFINE(meetme_cmd, "Execute a command on a conference or conferee"),
- AST_CLI_DEFINE(meetme_show_cmd, "List all or one conference"),
+ AST_CLI_DEFINE(meetme_kick_cmd, "Kick a conference or a user in a conference."),
+ AST_CLI_DEFINE(meetme_show_cmd, "List all conferences or a specific conference."),
+ AST_CLI_DEFINE(meetme_lock_cmd, "Lock or unlock a conference to new users."),
+ AST_CLI_DEFINE(meetme_mute_cmd, "Mute or unmute a conference or a user in a conference."),
AST_CLI_DEFINE(sla_show_trunks, "Show SLA Trunks"),
AST_CLI_DEFINE(sla_show_stations, "Show SLA Stations"),
};
@@ -4242,6 +4321,7 @@
}
}
AST_LIST_UNLOCK(&confs);
+ cnf = NULL;
if (!found) {
/* At this point, we have a confno_tmp (static conference) that is empty */
if ((empty_no_pin && ast_strlen_zero(stringp)) || (!empty_no_pin)) {
|
[-]
[+]
|
Changed |
asterisk-1.8.18.0.tar.xz/apps/app_mixmonitor.c
^
|
@@ -39,7 +39,7 @@
#include "asterisk.h"
-ASTERISK_FILE_VERSION(__FILE__, "$Revision: 370642 $")
+ASTERISK_FILE_VERSION(__FILE__, "$Revision: 373467 $")
#include "asterisk/paths.h" /* use ast_config_AST_MONITOR_DIR */
#include "asterisk/file.h"
@@ -105,6 +105,11 @@
<para>Records the audio on the current channel to the specified file.</para>
<para>This application does not automatically answer and should be preceeded by
an application such as Answer or Progress().</para>
+ <note><para>MixMonitor runs as an audiohook. In order to keep it running through
+ a transfer, AUDIOHOOK_INHERIT must be set for the channel which ran mixmonitor.
+ For more information, including dialplan configuration set for using
+ AUDIOHOOK_INHERIT with MixMonitor, see the function documentation for
+ AUDIOHOOK_INHERIT.</para></note>
<variablelist>
<variable name="MIXMONITOR_FILENAME">
<para>Will contain the filename used to record.</para>
@@ -116,6 +121,7 @@
<ref type="application">StopMixMonitor</ref>
<ref type="application">PauseMonitor</ref>
<ref type="application">UnpauseMonitor</ref>
+ <ref type="function">AUDIOHOOK_INHERIT</ref>
</see-also>
</application>
<application name="StopMixMonitor" language="en_US">
|
[-]
[+]
|
Changed |
asterisk-1.8.18.0.tar.xz/apps/app_queue.c
^
|
@@ -63,7 +63,7 @@
#include "asterisk.h"
-ASTERISK_FILE_VERSION(__FILE__, "$Revision: 372624 $")
+ASTERISK_FILE_VERSION(__FILE__, "$Revision: 374108 $")
#include <sys/time.h>
#include <sys/signal.h>
@@ -912,8 +912,6 @@
/*! \brief Persistent Members astdb family */
static const char * const pm_family = "Queue/PersistentMembers";
-/* The maximum length of each persistent member queue database entry */
-#define PM_MAX_LEN 8192
/*! \brief queues.conf [general] option */
static int queue_persistent_members = 0;
@@ -5222,15 +5220,18 @@
static void dump_queue_members(struct call_queue *pm_queue)
{
struct member *cur_member;
- char value[PM_MAX_LEN];
- int value_len = 0;
- int res;
+ struct ast_str *value;
struct ao2_iterator mem_iter;
- memset(value, 0, sizeof(value));
+ if (!pm_queue) {
+ return;
+ }
- if (!pm_queue)
+ /* 4K is a reasonable default for most applications, but we grow to
+ * accommodate more if necessary. */
+ if (!(value = ast_str_create(4096))) {
return;
+ }
mem_iter = ao2_iterator_init(pm_queue->members, 0);
while ((cur_member = ao2_iterator_next(&mem_iter))) {
@@ -5239,25 +5240,27 @@
continue;
}
- res = snprintf(value + value_len, sizeof(value) - value_len, "%s%s;%d;%d;%s;%s",
- value_len ? "|" : "", cur_member->interface, cur_member->penalty, cur_member->paused, cur_member->membername, cur_member->state_interface);
+ ast_str_append(&value, 0, "%s%s;%d;%d;%s;%s",
+ ast_str_strlen(value) ? "|" : "",
+ cur_member->interface,
+ cur_member->penalty,
+ cur_member->paused,
+ cur_member->membername,
+ cur_member->state_interface);
ao2_ref(cur_member, -1);
-
- if (res != strlen(value + value_len)) {
- ast_log(LOG_WARNING, "Could not create persistent member string, out of space\n");
- break;
- }
- value_len += res;
}
ao2_iterator_destroy(&mem_iter);
-
- if (value_len && !cur_member) {
- if (ast_db_put(pm_family, pm_queue->name, value))
+
+ if (ast_str_strlen(value) && !cur_member) {
+ if (ast_db_put(pm_family, pm_queue->name, ast_str_buffer(value)))
ast_log(LOG_WARNING, "failed to create persistent dynamic entry!\n");
- } else
+ } else {
/* Delete the entry if the queue is empty or there is an error */
ast_db_del(pm_family, pm_queue->name);
+ }
+
+ ast_free(value);
}
/*! \brief Remove member from queue
@@ -5538,7 +5541,7 @@
struct ast_db_entry *db_tree;
struct ast_db_entry *entry;
struct call_queue *cur_queue;
- char queue_data[PM_MAX_LEN];
+ char *queue_data;
/* Each key in 'pm_family' is the name of a queue */
db_tree = ast_db_gettree(pm_family, NULL);
@@ -5564,7 +5567,7 @@
continue;
}
- if (ast_db_get(pm_family, queue_name, queue_data, PM_MAX_LEN)) {
+ if (ast_db_get_allocated(pm_family, queue_name, &queue_data)) {
queue_t_unref(cur_queue, "Expire reload reference");
continue;
}
@@ -5608,6 +5611,7 @@
}
}
queue_t_unref(cur_queue, "Expire reload reference");
+ ast_free(queue_data);
}
if (db_tree) {
@@ -6795,6 +6799,7 @@
}
if (member_reload) {
ao2_callback(q->members, OBJ_NODATA, mark_member_dead, NULL);
+ q->found = 1;
}
for (var = ast_variable_browse(cfg, queuename); var; var = var->next) {
if (member_reload && !strcasecmp(var->name, "member")) {
@@ -6826,6 +6831,17 @@
queue_t_unref(q, "Expiring creation reference");
}
+static int remove_members_and_mark_unfound(void *obj, void *arg, int flags)
+{
+ struct call_queue *q = obj;
+ char *queuename = arg;
+ if (!q->realtime && (ast_strlen_zero(queuename) || !strcasecmp(queuename, q->name))) {
+ q->found = 0;
+
+ }
+ return 0;
+}
+
static int mark_dead_and_unfound(void *obj, void *arg, int flags)
{
struct call_queue *q = obj;
@@ -6866,6 +6882,7 @@
char *cat;
struct ast_flags config_flags = { reload ? CONFIG_FLAG_FILEUNCHANGED : 0 };
const int queue_reload = ast_test_flag(mask, QUEUE_RELOAD_PARAMETERS);
+ const int member_reload = ast_test_flag(mask, QUEUE_RELOAD_MEMBER);
if (!(cfg = ast_config_load("queues.conf", config_flags))) {
ast_log(LOG_NOTICE, "No call queueing config file (queues.conf), so no call queues\n");
@@ -6887,6 +6904,10 @@
ao2_callback(queues, OBJ_NODATA, mark_dead_and_unfound, (char *) queuename);
}
+ if (member_reload) {
+ ao2_callback(queues, OBJ_NODATA, remove_members_and_mark_unfound, (char *) queuename);
+ }
+
/* Chug through config file */
cat = NULL;
while ((cat = ast_category_browse(cfg, cat)) ) {
@@ -8171,11 +8192,11 @@
static struct ast_cli_entry cli_queue[] = {
AST_CLI_DEFINE(queue_show, "Show status of a specified queue"),
+ AST_CLI_DEFINE(handle_queue_rule_show, "Show the rules defined in queuerules.conf"),
AST_CLI_DEFINE(handle_queue_add_member, "Add a channel to a specified queue"),
AST_CLI_DEFINE(handle_queue_remove_member, "Removes a channel from a specified queue"),
AST_CLI_DEFINE(handle_queue_pause_member, "Pause or unpause a queue member"),
AST_CLI_DEFINE(handle_queue_set_member_penalty, "Set penalty for a channel of a specified queue"),
- AST_CLI_DEFINE(handle_queue_rule_show, "Show the rules defined in queuerules.conf"),
AST_CLI_DEFINE(handle_queue_reload, "Reload queues, members, queue rules, or parameters"),
AST_CLI_DEFINE(handle_queue_reset, "Reset statistics for a queue"),
};
|
[-]
[+]
|
Changed |
asterisk-1.8.18.0.tar.xz/apps/app_senddtmf.c
^
|
@@ -21,17 +21,17 @@
* \brief App to send DTMF digits
*
* \author Mark Spencer <markster@digium.com>
- *
+ *
* \ingroup applications
*/
/*** MODULEINFO
<support_level>core</support_level>
***/
-
+
#include "asterisk.h"
-ASTERISK_FILE_VERSION(__FILE__, "$Revision: 328209 $")
+ASTERISK_FILE_VERSION(__FILE__, "$Revision: 373945 $")
#include "asterisk/pbx.h"
#include "asterisk/module.h"
@@ -46,7 +46,9 @@
</synopsis>
<syntax>
<parameter name="digits" required="true">
- <para>List of digits 0-9,*#,abcd</para>
+ <para>List of digits 0-9,*#,a-d,A-D to send also w for a half second pause,
+ and f or F for a flash-hook if the channel supports
+ flash-hook.</para>
</parameter>
<parameter name="timeout_ms" required="false">
<para>Amount of time to wait in ms between tones. (defaults to .25s)</para>
@@ -54,13 +56,12 @@
<parameter name="duration_ms" required="false">
<para>Duration of each digit</para>
</parameter>
- <parameter name="channel" required="false">
- <para>Channel where digits will be played</para>
- </parameter>
+ <parameter name="channel" required="false">
+ <para>Channel where digits will be played</para>
+ </parameter>
</syntax>
<description>
- <para>DTMF digits sent to a channel with half second pause</para>
- <para>It will pass all digits or terminate if it encounters an error.</para>
+ <para>It will send all digits or terminate if it encounters an error.</para>
</description>
<see-also>
<ref type="application">Read</ref>
@@ -84,14 +85,17 @@
</description>
</manager>
***/
-static char *app = "SendDTMF";
+
+static const char senddtmf_name[] = "SendDTMF";
static int senddtmf_exec(struct ast_channel *chan, const char *vdata)
{
- int res = 0;
+ int res;
char *data;
int dinterval = 0, duration = 0;
- struct ast_channel *dchan;
+ struct ast_channel *chan_found = NULL;
+ struct ast_channel *chan_dest = chan;
+ struct ast_channel *chan_autoservice = NULL;
AST_DECLARE_APP_ARGS(args,
AST_APP_ARG(digits);
AST_APP_ARG(dinterval);
@@ -100,15 +104,17 @@
);
if (ast_strlen_zero(vdata)) {
- ast_log(LOG_WARNING, "SendDTMF requires an argument (digits or *#aAbBcCdD)\n");
+ ast_log(LOG_WARNING, "SendDTMF requires an argument\n");
return 0;
}
- dchan = chan;
-
data = ast_strdupa(vdata);
AST_STANDARD_APP_ARGS(args, data);
+ if (ast_strlen_zero(args.digits)) {
+ ast_log(LOG_WARNING, "The digits argument is required (0-9,*#,a-d,A-D,wfF)\n");
+ return 0;
+ }
if (!ast_strlen_zero(args.dinterval)) {
ast_app_parse_timelen(args.dinterval, &dinterval, TIMELEN_MILLISECONDS);
}
@@ -116,18 +122,23 @@
ast_app_parse_timelen(args.duration, &duration, TIMELEN_MILLISECONDS);
}
if (!ast_strlen_zero(args.channel)) {
- dchan = ast_channel_get_by_name(args.channel);
- }
- if (dchan != chan) {
- ast_autoservice_start(chan);
- }
- res = ast_dtmf_stream(dchan, NULL, args.digits, dinterval <= 0 ? 250 : dinterval, duration);
- if (dchan != chan) {
- ast_autoservice_stop(chan);
- ast_channel_unref(dchan);
+ chan_found = ast_channel_get_by_name(args.channel);
+ if (!chan_found) {
+ ast_log(LOG_WARNING, "No such channel: %s\n", args.channel);
+ return 0;
+ }
+ chan_dest = chan_found;
+ if (chan_found != chan) {
+ chan_autoservice = chan;
+ }
+ }
+ res = ast_dtmf_stream(chan_dest, chan_autoservice, args.digits,
+ dinterval <= 0 ? 250 : dinterval, duration);
+ if (chan_found) {
+ ast_channel_unref(chan_found);
}
- return res;
+ return chan_autoservice ? 0 : res;
}
static int manager_play_dtmf(struct mansession *s, const struct message *m)
@@ -160,10 +171,10 @@
{
int res;
- res = ast_unregister_application(app);
+ res = ast_unregister_application(senddtmf_name);
res |= ast_manager_unregister("PlayDTMF");
- return res;
+ return res;
}
static int load_module(void)
@@ -171,7 +182,7 @@
int res;
res = ast_manager_register_xml("PlayDTMF", EVENT_FLAG_CALL, manager_play_dtmf);
- res |= ast_register_application_xml(app, senddtmf_exec);
+ res |= ast_register_application_xml(senddtmf_name, senddtmf_exec);
return res;
}
|
[-]
[+]
|
Changed |
asterisk-1.8.18.0.tar.xz/apps/app_voicemail.c
^
|
@@ -91,7 +91,7 @@
#endif
#endif
-ASTERISK_FILE_VERSION(__FILE__, "$Revision: 372620 $")
+ASTERISK_FILE_VERSION(__FILE__, "$Revision: 373735 $")
#include "asterisk/paths.h" /* use ast_config_AST_SPOOL_DIR */
#include <sys/time.h>
@@ -1808,6 +1808,11 @@
return;
}
+ if (msgnum < 0) {
+ imap_delete_old_greeting(file, vms);
+ return;
+ }
+
/* find real message number based on msgnum */
/* this may be an index into vms->msgArray based on the msgnum. */
messageNum = vms->msgArray[msgnum];
|
[-]
[+]
|
Added |
asterisk-1.8.18.0.tar.xz/asterisk-1.8.18.0-summary.html
^
|
@@ -0,0 +1,327 @@
+<!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.8.18.0</title></head>
+<body>
+<h1 align="center"><a name="top">Release Summary</a></h1>
+<h3 align="center">asterisk-1.8.18.0</h3>
+<h3 align="center">Date: 2012-11-06</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.8.17.0.</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>
+7 jcolp<br/>
+6 mjordan<br/>
+6 rmudgett<br/>
+4 alecdavis<br/>
+4 dlee<br/>
+3 jrose<br/>
+3 kmoore<br/>
+3 mmichelson<br/>
+2 Byron Clark<br/>
+2 file<br/>
+2 Karsten Wemheuer<br/>
+2 seanbright<br/>
+2 wdoekes<br/>
+1 Antti Yrjola<br/>
+1 ddkprog<br/>
+1 elguero<br/>
+1 John Covert<br/>
+1 twilson<br/>
+</td>
+<td>
+2 alecdavis<br/>
+2 Byron Clark<br/>
+1 mjordan<br/>
+1 mmichelson<br/>
+1 rmudgett<br/>
+1 tbsky<br/>
+1 Thomas Arimont<br/>
+1 Vladimir Mikhelson<br/>
+</td>
+<td>
+5 jbigelow<br/>
+3 michele cicciotti privatewave<br/>
+3 wdoekes<br/>
+2 spitts<br/>
+2 tomaso<br/>
+1 alecdavis<br/>
+1 ayrjola<br/>
+1 ddkprog<br/>
+1 fhackenberger<br/>
+1 ishmalik<br/>
+1 jcovert<br/>
+1 jhutchins<br/>
+1 kristoff<br/>
+1 kwemheuer<br/>
+1 mdavenport<br/>
+1 mmichelson<br/>
+1 stefan.at.wpf<br/>
+1 tbsky<br/>
+1 teunis90<br/>
+1 tim_ringenbach<br/>
+1 ulugutz<br/>
+1 vmikhelson<br/>
+1 wybecom<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/jira/browse/ASTERISK-17254">ASTERISK-17254</a>: Dial MulticastRTP channel with A option can't play the file<br/>
+Revision: <a href="http://svn.digium.com/view/asterisk/branches/1.8?view=revision&revision=373550">373550</a><br/>
+Reporter: wybecom<br/>
+Coders: jcolp<br/>
+<br/>
+<h3>Category: Applications/app_disa</h3><br/>
+<a href="https://issues.asterisk.org/jira/browse/ASTERISK-17493">ASTERISK-17493</a>: [patch] dsp.c sends multiple DTMF key events up to applications<br/>
+Revision: <a href="http://svn.digium.com/view/asterisk/branches/1.8?view=revision&revision=374479">374479</a><br/>
+Reporter: alecdavis<br/>
+Testers: alecdavis<br/>
+Coders: alecdavis<br/>
+<br/>
+<h3>Category: Applications/app_mixmonitor</h3><br/>
+<a href="https://issues.asterisk.org/jira/browse/ASTERISK-18220">ASTERISK-18220</a>: MixMonitor stops recording during attended Transfer<br/>
+Revision: <a href="http://svn.digium.com/view/asterisk/branches/1.8?view=revision&revision=373467">373467</a><br/>
+Reporter: ishmalik<br/>
+Coders: jrose<br/>
+<br/>
+<h3>Category: Applications/app_queue</h3><br/>
+<a href="https://issues.asterisk.org/jira/browse/ASTERISK-20390">ASTERISK-20390</a>: chan_local queue members broken by r372050<br/>
+Revision: <a href="http://svn.digium.com/view/asterisk/branches/1.8?view=revision&revision=373878">373878</a><br/>
+Reporter: tim_ringenbach<br/>
+Coders: jcolp<br/>
+<br/>
+<h3>Category: Applications/app_read</h3><br/>
+<a href="https://issues.asterisk.org/jira/browse/ASTERISK-20424">ASTERISK-20424</a>: Erroneous Multiple DTMF Digit Detection<br/>
+Revision: <a href="http://svn.digium.com/view/asterisk/branches/1.8?view=revision&revision=373236">373236</a><br/>
+Reporter: vmikhelson<br/>
+Testers: mjordan, Vladimir Mikhelson<br/>
+Coders: mjordan<br/>
+<br/>
+<h3>Category: Applications/app_voicemail/IMAP</h3><br/>
+<a href="https://issues.asterisk.org/jira/browse/ASTERISK-20435">ASTERISK-20435</a>: app_voicemail deletes the wrong greeting if both an unavailable and a temporary greeting is available and imap greetings are used<br/>
+Revision: <a href="http://svn.digium.com/view/asterisk/branches/1.8?view=revision&revision=373735">373735</a><br/>
+Reporter: fhackenberger<br/>
+Coders: elguero<br/>
+<br/>
+<h3>Category: Channels/General</h3><br/>
+<a href="https://issues.asterisk.org/jira/browse/ASTERISK-20424">ASTERISK-20424</a>: Erroneous Multiple DTMF Digit Detection<br/>
+Revision: <a href="http://svn.digium.com/view/asterisk/branches/1.8?view=revision&revision=373236">373236</a><br/>
+Reporter: vmikhelson<br/>
+Testers: mjordan, Vladimir Mikhelson<br/>
+Coders: mjordan<br/>
+<br/>
+<h3>Category: Channels/chan_dahdi</h3><br/>
+<a href="https://issues.asterisk.org/jira/browse/ASTERISK-20442">ASTERISK-20442</a>: dtmf callerid regression <br/>
+Revision: <a href="http://svn.digium.com/view/asterisk/branches/1.8?view=revision&revision=374384">374384</a><br/>
+Reporter: tbsky<br/>
+Testers: tbsky, alecdavis<br/>
+Coders: alecdavis<br/>
+<br/>
+<h3>Category: Channels/chan_iax2</h3><br/>
+<a href="https://issues.asterisk.org/jira/browse/ASTERISK-20337">ASTERISK-20337</a>: iax2 provisioning cache mismanaged<br/>
+Revision: <a href="http://svn.digium.com/view/asterisk/branches/1.8?view=revision&revision=373342">373342</a><br/>
+Reporter: jcovert<br/>
+Coders: John Covert<br/>
+<br/>
+<h3>Category: Channels/chan_local</h3><br/>
+<a href="https://issues.asterisk.org/jira/browse/ASTERISK-20229">ASTERISK-20229</a>: dialing through chan_local breaks t38 fax<br/>
+Revision: <a href="http://svn.digium.com/view/asterisk/branches/1.8?view=revision&revision=373705">373705</a><br/>
+Reporter: wdoekes<br/>
+Coders: wdoekes<br/>
+<br/>
+<a href="https://issues.asterisk.org/jira/browse/ASTERISK-20375">ASTERISK-20375</a>: Asterisk channel reference leak when attempting to transfer a call originated to a local channel running the Echo application<br/>
+Revision: <a href="http://svn.digium.com/view/asterisk/branches/1.8?view=revision&revision=373024">373024</a><br/>
+Reporter: mmichelson<br/>
+Testers: mmichelson<br/>
+Coders: dlee<br/>
+<br/>
+<h3>Category: Channels/chan_multicast_rtp</h3><br/>
+<a href="https://issues.asterisk.org/jira/browse/ASTERISK-17254">ASTERISK-17254</a>: Dial MulticastRTP channel with A option can't play the file<br/>
+Revision: <a href="http://svn.digium.com/view/asterisk/branches/1.8?view=revision&revision=373550">373550</a><br/>
+Reporter: wybecom<br/>
+Coders: jcolp<br/>
+<br/>
+<h3>Category: Channels/chan_sip/General</h3><br/>
+<a href="https://issues.asterisk.org/jira/browse/ASTERISK-20201">ASTERISK-20201</a>: video tos/qos not supported by all asterisk version?<br/>
+Revision: <a href="http://svn.digium.com/view/asterisk/branches/1.8?view=revision&revision=373617">373617</a><br/>
+Reporter: ddkprog<br/>
+Coders: ddkprog<br/>
+<br/>
+<a href="https://issues.asterisk.org/jira/browse/ASTERISK-20409">ASTERISK-20409</a>: sip_tech_info channels cannot be bridged, not even with themselves<br/>
+Revision: <a href="http://svn.digium.com/view/asterisk/branches/1.8?view=revision&revision=373165">373165</a><br/>
+Reporter: michele cicciotti privatewave<br/>
+Coders: jcolp<br/>
+<br/>
+<a href="https://issues.asterisk.org/jira/browse/ASTERISK-20409">ASTERISK-20409</a>: sip_tech_info channels cannot be bridged, not even with themselves<br/>
+Revision: <a href="http://svn.digium.com/view/asterisk/branches/1.8?view=revision&revision=373532">373532</a><br/>
+Reporter: michele cicciotti privatewave<br/>
+Coders: jcolp<br/>
+<br/>
+<a href="https://issues.asterisk.org/jira/browse/ASTERISK-20511">ASTERISK-20511</a>: Directrtpsetup does not wrk in SVN-branch-1.8-r374177<br/>
+Revision: <a href="http://svn.digium.com/view/asterisk/branches/1.8?view=revision&revision=374456">374456</a><br/>
+Reporter: kristoff<br/>
+Coders: jcolp<br/>
+<br/>
+<h3>Category: Channels/chan_sip/Interoperability</h3><br/>
+<a href="https://issues.asterisk.org/jira/browse/ASTERISK-19838">ASTERISK-19838</a>: From Header has capital A in userpart Anonymous if CALLERID(pres)=unavailable, RFC uses lower case anonymous<br/>
+Revision: <a href="http://svn.digium.com/view/asterisk/branches/1.8?view=revision&revision=373500">373500</a><br/>
+Reporter: ayrjola<br/>
+Coders: Antti Yrjola<br/>
+<br/>
+<a href="https://issues.asterisk.org/jira/browse/ASTERISK-20060">ASTERISK-20060</a>: fix suggested for a misleading warning when getting a 408<br/>
+Revision: <a href="http://svn.digium.com/view/asterisk/branches/1.8?view=revision&revision=373848">373848</a><br/>
+Reporter: wdoekes<br/>
+Coders: mmichelson<br/>
+<br/>
+<a href="https://issues.asterisk.org/jira/browse/ASTERISK-20375">ASTERISK-20375</a>: Asterisk channel reference leak when attempting to transfer a call originated to a local channel running the Echo application<br/>
+Revision: <a href="http://svn.digium.com/view/asterisk/branches/1.8?view=revision&revision=373024">373024</a><br/>
+Reporter: mmichelson<br/>
+Testers: mmichelson<br/>
+Coders: dlee<br/>
+<br/>
+<h3>Category: Channels/chan_sip/Subscriptions</h3><br/>
+<a href="https://issues.asterisk.org/jira/browse/ASTERISK-20437">ASTERISK-20437</a>: Deadlock with ast_context_remove_extension_callerid and handle_request_do<br/>
+Revision: <a href="http://svn.digium.com/view/asterisk/branches/1.8?view=revision&revision=373438">373438</a><br/>
+Reporter: jhutchins<br/>
+Coders: jcolp<br/>
+<br/>
+<h3>Category: Codecs/codec_ilbc</h3><br/>
+<a href="https://issues.asterisk.org/jira/browse/ASTERISK-20231">ASTERISK-20231</a>: codec_ilbc using memcpy instead of memmove for overlapping mem<br/>
+Revision: <a href="http://svn.digium.com/view/asterisk/branches/1.8?view=revision&revision=373640">373640</a><br/>
+Reporter: wdoekes<br/>
+Coders: wdoekes<br/>
+<br/>
+<h3>Category: General</h3><br/>
+<a href="https://issues.asterisk.org/jira/browse/ASTERISK-20353">ASTERISK-20353</a>: Wrong dutch date syntax in say.c: function say_date_with_format_nl<br/>
+Revision: <a href="http://svn.digium.com/view/asterisk/branches/1.8?view=revision&revision=373773">373773</a><br/>
+Reporter: teunis90<br/>
+Coders: mmichelson<br/>
+<br/>
+<h3>Category: Resources/res_jabber</h3><br/>
+<a href="https://issues.asterisk.org/jira/browse/ASTERISK-19532">ASTERISK-19532</a>: Asterisk crashed after connecting with jabber server in component mode<br/>
+Revision: <a href="http://svn.digium.com/view/asterisk/branches/1.8?view=revision&revision=374335">374335</a><br/>
+Reporter: kwemheuer<br/>
+Testers: Byron Clark<br/>
+Coders: Karsten Wemheuer, Byron Clark<br/>
+<br/>
+<a href="https://issues.asterisk.org/jira/browse/ASTERISK-19557">ASTERISK-19557</a>: [Regression] Segfault in res_jabber.c<br/>
+Revision: <a href="http://svn.digium.com/view/asterisk/branches/1.8?view=revision&revision=374335">374335</a><br/>
+Reporter: ulugutz<br/>
+Testers: Byron Clark<br/>
+Coders: Karsten Wemheuer, Byron Clark<br/>
+<br/>
+<h3>Category: Resources/res_odbc</h3><br/>
+<a href="https://issues.asterisk.org/jira/browse/ASTERISK-20258">ASTERISK-20258</a>: ODBC default username not root as the comment in res_odbc.conf claims<br/>
+Revision: <a href="http://svn.digium.com/view/asterisk/branches/1.8?view=revision&revision=373578">373578</a><br/>
+Reporter: stefan.at.wpf<br/>
+Coders: kmoore<br/>
+<br/>
+<h3>Category: Resources/res_rtp_asterisk</h3><br/>
+<a href="https://issues.asterisk.org/jira/browse/ASTERISK-20415">ASTERISK-20415</a>: Strict RTP protection learning mode processes non-RTP packets too<br/>
+Revision: <a href="http://svn.digium.com/view/asterisk/branches/1.8?view=revision&revision=373702">373702</a><br/>
+Reporter: michele cicciotti privatewave<br/>
+Coders: kmoore<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.8?view=revision&revision=373090">373090</a></td><td>rmudgett</td><td>Made companding law for SS7 calls only determined by SS7 signaling type.</td>
+<td></td></tr><tr><td><a href="http://svn.digium.com/view/asterisk/branches/1.8?view=revision&revision=373131">373131</a></td><td>seanbright</td><td>Don't crash when passing a NULL message to __astman_get_header.</td>
+<td></td></tr><tr><td><a href="http://svn.digium.com/view/asterisk/branches/1.8?view=revision&revision=373424">373424</a></td><td>rmudgett</td><td>Fix potential reentrancy problems in chan_sip.</td>
+<td></td></tr><tr><td><a href="http://svn.digium.com/view/asterisk/branches/1.8?view=revision&revision=373504">373504</a></td><td>mjordan</td><td>Revert change to res_rtp_asterisk committed in r373236 (1.8)</td>
+<td><a href="https://issues.asterisk.org/jira/browse/ASTERISK-20424">ASTERISK-20424</a></td></tr><tr><td><a href="http://svn.digium.com/view/asterisk/branches/1.8?view=revision&revision=373618">373618</a></td><td>rmudgett</td><td>Make rebuild GSM, ilbc, or lpc10 codecs if the respective sources change.</td>
+<td></td></tr><tr><td><a href="http://svn.digium.com/view/asterisk/branches/1.8?view=revision&revision=373909">373909</a></td><td>file</td><td>loader: Ensure dependent modules are properly initialized.</td>
+<td><a href="https://issues.asterisk.org/jira/browse/ASTERISK-20439">ASTERISK-20439</a></td></tr><tr><td><a href="http://svn.digium.com/view/asterisk/branches/1.8?view=revision&revision=373945">373945</a></td><td>rmudgett</td><td>Fix SendDTMF crash and channel reference leak using channel name parameter.</td>
+<td></td></tr><tr><td><a href="http://svn.digium.com/view/asterisk/branches/1.8?view=revision&revision=373989">373989</a></td><td>file</td><td>Update documentation to make it explicit that "stream file" will not restart musiconhold.</td>
+<td><a href="https://issues.asterisk.org/jira/browse/ASTERISK-17367">ASTERISK-17367</a></td></tr><tr><td><a href="http://svn.digium.com/view/asterisk/branches/1.8?view=revision&revision=374108">374108</a></td><td>seanbright</td><td>app_queue: Support persisting and loading of long member lists.</td>
+<td></td></tr><tr><td><a href="http://svn.digium.com/view/asterisk/branches/1.8?view=revision&revision=374177">374177</a></td><td>mjordan</td><td>Fix a variety of ref counting issues</td>
+<td></td></tr><tr><td><a href="http://svn.digium.com/view/asterisk/branches/1.8?view=revision&revision=374230">374230</a></td><td>mjordan</td><td>Ensure Shutdown AMI event is still fired during Asterisk shutdown</td>
+<td></td></tr><tr><td><a href="http://svn.digium.com/view/asterisk/branches/1.8?view=revision&revision=374316">374316</a></td><td>mjordan</td><td>Destroy the generic_monitors container after the core_instances in ccss</td>
+<td></td></tr><tr><td><a href="http://svn.digium.com/view/asterisk/branches/1.8?view=revision&revision=374365">374365</a></td><td>alecdavis</td><td>_dsp_init: bring inline with trunk</td>
+<td></td></tr><tr><td><a href="http://svn.digium.com/view/asterisk/branches/1.8?view=revision&revision=374475">374475</a></td><td>alecdavis</td><td>dsp.c fix incorrect DTMF Digit_Duration.</td>
+<td><a href="https://issues.asterisk.org/jira/browse/ASTERISK-16003">ASTERISK-16003</a></td></tr><tr><td><a href="http://svn.digium.com/view/asterisk/branches/1.8?view=revision&revision=374536">374536</a></td><td>rmudgett</td><td>chan_misdn: Remove some deadcode</td>
+<td></td></tr><tr><td><a href="http://svn.digium.com/view/asterisk/branches/1.8?view=revision&revision=374581">374581</a></td><td>dlee</td><td>I've committed too much. Reverting part of r374570.</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>
+CHANGES | 3
+apps/app_meetme.c | 356 +++++++++++++++++++++++----------------
+apps/app_mixmonitor.c | 6
+apps/app_queue.c | 65 ++++---
+apps/app_senddtmf.c | 63 ++++--
+apps/app_voicemail.c | 5
+channels/chan_agent.c | 4
+channels/chan_local.c | 19 +-
+channels/chan_misdn.c | 32 +--
+channels/chan_sip.c | 256 ++++++++++++++++------------
+channels/iax2-provision.c | 6
+channels/misdn/isdn_lib.c | 220 +++---------------------
+channels/misdn/isdn_lib.h | 9
+channels/misdn/isdn_msg_parser.c | 12 -
+channels/sig_ss7.c | 8
+channels/sip/include/sip.h | 24 +-
+codecs/Makefile | 55 ++++--
+codecs/ilbc/iLBC_decode.c | 4
+codecs/ilbc/iLBC_encode.c | 4
+configs/agents.conf.sample | 3
+configs/dsp.conf.sample | 36 +++
+configs/res_odbc.conf.sample | 2
+configs/sip.conf.sample | 11 +
+funcs/func_audiohookinherit.c | 2
+include/asterisk/astdb.h | 11 +
+include/asterisk/channel.h | 4
+main/asterisk.c | 10 -
+main/ccss.c | 26 ++
+main/cel.c | 4
+main/channel.c | 38 +++-
+main/data.c | 10 +
+main/db.c | 89 +++++++--
+main/dsp.c | 138 +++++++++++----
+main/event.c | 42 ++++
+main/features.c | 19 +-
+main/indications.c | 10 +
+main/loader.c | 17 +
+main/manager.c | 99 ++++++++++
+main/pbx.c | 21 ++
+main/say.c | 10 -
+main/ssl.c | 2
+main/taskprocessor.c | 9
+main/tcptls.c | 13 -
+res/res_agi.c | 22 +-
+res/res_jabber.c | 77 +-------
+res/res_musiconhold.c | 6
+res/res_rtp_asterisk.c | 59 +++---
+res/res_rtp_multicast.c | 6
+tests/test_db.c | 59 ++++++
+49 files changed, 1259 insertions(+), 747 deletions(-)
+</pre><br/>
+<hr/>
+</body>
+</html>
|
[-]
[+]
|
Added |
asterisk-1.8.18.0.tar.xz/asterisk-1.8.18.0-summary.txt
^
|
@@ -0,0 +1,412 @@
+ Release Summary
+
+ asterisk-1.8.18.0
+
+ Date: 2012-11-06
+
+ <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.8.17.0.
+
+ ----------------------------------------------------------------------
+
+ 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
+ 7 jcolp 2 alecdavis 5 jbigelow
+ 6 mjordan 2 Byron Clark 3 michele cicciotti privatewave
+ 6 rmudgett 1 mjordan 3 wdoekes
+ 4 alecdavis 1 mmichelson 2 spitts
+ 4 dlee 1 rmudgett 2 tomaso
+ 3 jrose 1 tbsky 1 alecdavis
+ 3 kmoore 1 Thomas Arimont 1 ayrjola
+ 3 mmichelson 1 Vladimir Mikhelson 1 ddkprog
+ 2 Byron Clark 1 fhackenberger
+ 2 file 1 ishmalik
+ 2 Karsten Wemheuer 1 jcovert
+ 2 seanbright 1 jhutchins
+ 2 wdoekes 1 kristoff
+ 1 Antti Yrjola 1 kwemheuer
+ 1 ddkprog 1 mdavenport
+ 1 elguero 1 mmichelson
+ 1 John Covert 1 stefan.at.wpf
+ 1 twilson 1 tbsky
+ 1 teunis90
+ 1 tim_ringenbach
+ 1 ulugutz
+ 1 vmikhelson
+ 1 wybecom
+
+ ----------------------------------------------------------------------
+
+ 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
+
+ ASTERISK-17254: Dial MulticastRTP channel with A option can't play the
+ file
+ Revision: 373550
+ Reporter: wybecom
+ Coders: jcolp
+
+ Category: Applications/app_disa
+
+ ASTERISK-17493: [patch] dsp.c sends multiple DTMF key events up to
+ applications
+ Revision: 374479
+ Reporter: alecdavis
+ Testers: alecdavis
+ Coders: alecdavis
+
+ Category: Applications/app_mixmonitor
+
+ ASTERISK-18220: MixMonitor stops recording during attended Transfer
+ Revision: 373467
+ Reporter: ishmalik
+ Coders: jrose
+
+ Category: Applications/app_queue
+
+ ASTERISK-20390: chan_local queue members broken by r372050
+ Revision: 373878
+ Reporter: tim_ringenbach
+ Coders: jcolp
+
+ Category: Applications/app_read
+
+ ASTERISK-20424: Erroneous Multiple DTMF Digit Detection
+ Revision: 373236
+ Reporter: vmikhelson
+ Testers: mjordan, Vladimir Mikhelson
+ Coders: mjordan
+
+ Category: Applications/app_voicemail/IMAP
+
+ ASTERISK-20435: app_voicemail deletes the wrong greeting if both an
+ unavailable and a temporary greeting is available and imap greetings are
+ used
+ Revision: 373735
+ Reporter: fhackenberger
+ Coders: elguero
+
+ Category: Channels/General
+
+ ASTERISK-20424: Erroneous Multiple DTMF Digit Detection
+ Revision: 373236
+ Reporter: vmikhelson
+ Testers: mjordan, Vladimir Mikhelson
+ Coders: mjordan
+
+ Category: Channels/chan_dahdi
+
+ ASTERISK-20442: dtmf callerid regression
+ Revision: 374384
+ Reporter: tbsky
+ Testers: tbsky, alecdavis
+ Coders: alecdavis
+
+ Category: Channels/chan_iax2
+
+ ASTERISK-20337: iax2 provisioning cache mismanaged
+ Revision: 373342
+ Reporter: jcovert
+ Coders: John Covert
+
+ Category: Channels/chan_local
+
+ ASTERISK-20229: dialing through chan_local breaks t38 fax
+ Revision: 373705
+ Reporter: wdoekes
+ Coders: wdoekes
+
+ ASTERISK-20375: Asterisk channel reference leak when attempting to
+ transfer a call originated to a local channel running the Echo application
+ Revision: 373024
+ Reporter: mmichelson
+ Testers: mmichelson
+ Coders: dlee
+
+ Category: Channels/chan_multicast_rtp
+
+ ASTERISK-17254: Dial MulticastRTP channel with A option can't play the
+ file
+ Revision: 373550
+ Reporter: wybecom
+ Coders: jcolp
+
+ Category: Channels/chan_sip/General
+
+ ASTERISK-20201: video tos/qos not supported by all asterisk version?
+ Revision: 373617
+ Reporter: ddkprog
+ Coders: ddkprog
+
+ ASTERISK-20409: sip_tech_info channels cannot be bridged, not even with
+ themselves
+ Revision: 373165
+ Reporter: michele cicciotti privatewave
+ Coders: jcolp
+
+ ASTERISK-20409: sip_tech_info channels cannot be bridged, not even with
+ themselves
+ Revision: 373532
+ Reporter: michele cicciotti privatewave
+ Coders: jcolp
+
+ ASTERISK-20511: Directrtpsetup does not wrk in SVN-branch-1.8-r374177
+ Revision: 374456
+ Reporter: kristoff
+ Coders: jcolp
+
+ Category: Channels/chan_sip/Interoperability
+
+ ASTERISK-19838: From Header has capital A in userpart Anonymous if
+ CALLERID(pres)=unavailable, RFC uses lower case anonymous
+ Revision: 373500
+ Reporter: ayrjola
+ Coders: Antti Yrjola
+
+ ASTERISK-20060: fix suggested for a misleading warning when getting a 408
+ Revision: 373848
+ Reporter: wdoekes
+ Coders: mmichelson
+
+ ASTERISK-20375: Asterisk channel reference leak when attempting to
+ transfer a call originated to a local channel running the Echo application
+ Revision: 373024
+ Reporter: mmichelson
+ Testers: mmichelson
+ Coders: dlee
+
+ Category: Channels/chan_sip/Subscriptions
+
+ ASTERISK-20437: Deadlock with ast_context_remove_extension_callerid and
+ handle_request_do
+ Revision: 373438
+ Reporter: jhutchins
+ Coders: jcolp
+
+ Category: Codecs/codec_ilbc
+
+ ASTERISK-20231: codec_ilbc using memcpy instead of memmove for overlapping
+ mem
+ Revision: 373640
+ Reporter: wdoekes
+ Coders: wdoekes
+
+ Category: General
+
+ ASTERISK-20353: Wrong dutch date syntax in say.c: function
+ say_date_with_format_nl
+ Revision: 373773
+ Reporter: teunis90
+ Coders: mmichelson
+
+ Category: Resources/res_jabber
+
+ ASTERISK-19532: Asterisk crashed after connecting with jabber server in
+ component mode
+ Revision: 374335
+ Reporter: kwemheuer
+ Testers: Byron Clark
+ Coders: Karsten Wemheuer, Byron Clark
+
+ ASTERISK-19557: [Regression] Segfault in res_jabber.c
+ Revision: 374335
+ Reporter: ulugutz
+ Testers: Byron Clark
+ Coders: Karsten Wemheuer, Byron Clark
+
+ Category: Resources/res_odbc
+
+ ASTERISK-20258: ODBC default username not root as the comment in
+ res_odbc.conf claims
+ Revision: 373578
+ Reporter: stefan.at.wpf
+ Coders: kmoore
+
+ Category: Resources/res_rtp_asterisk
+
+ ASTERISK-20415: Strict RTP protection learning mode processes non-RTP
+ packets too
+ Revision: 373702
+ Reporter: michele cicciotti privatewave
+ Coders: kmoore
+
+ ----------------------------------------------------------------------
+
+ 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 |
+ |----------+------------+-------------------------------+----------------|
+ | | | Made companding law for SS7 | |
+ | 373090 | rmudgett | calls only determined by SS7 | |
+ | | | signaling type. | |
+ |----------+------------+-------------------------------+----------------|
+ | | | Don't crash when passing a | |
+ | 373131 | seanbright | NULL message to | |
+ | | | __astman_get_header. | |
+ |----------+------------+-------------------------------+----------------|
+ | 373424 | rmudgett | Fix potential reentrancy | |
+ | | | problems in chan_sip. | |
+ |----------+------------+-------------------------------+----------------|
+ | | | Revert change to | |
+ | 373504 | mjordan | res_rtp_asterisk committed in | ASTERISK-20424 |
+ | | | r373236 (1.8) | |
+ |----------+------------+-------------------------------+----------------|
+ | | | Make rebuild GSM, ilbc, or | |
+ | 373618 | rmudgett | lpc10 codecs if the | |
+ | | | respective sources change. | |
+ |----------+------------+-------------------------------+----------------|
+ | | | loader: Ensure dependent | |
+ | 373909 | file | modules are properly | ASTERISK-20439 |
+ | | | initialized. | |
+ |----------+------------+-------------------------------+----------------|
+ | | | Fix SendDTMF crash and | |
+ | 373945 | rmudgett | channel reference leak using | |
+ | | | channel name parameter. | |
+ |----------+------------+-------------------------------+----------------|
+ | | | Update documentation to make | |
+ | 373989 | file | it explicit that "stream | ASTERISK-17367 |
+ | | | file" will not restart | |
+ | | | musiconhold. | |
+ |----------+------------+-------------------------------+----------------|
+ | | | app_queue: Support persisting | |
+ | 374108 | seanbright | and loading of long member | |
+ | | | lists. | |
+ |----------+------------+-------------------------------+----------------|
+ | 374177 | mjordan | Fix a variety of ref counting | |
+ | | | issues | |
+ |----------+------------+-------------------------------+----------------|
+ | | | Ensure Shutdown AMI event is | |
+ | 374230 | mjordan | still fired during Asterisk | |
+ | | | shutdown | |
+ |----------+------------+-------------------------------+----------------|
+ | | | Destroy the generic_monitors | |
+ | 374316 | mjordan | container after the | |
+ | | | core_instances in ccss | |
+ |----------+------------+-------------------------------+----------------|
+ | 374365 | alecdavis | _dsp_init: bring inline with | |
+ | | | trunk | |
+ |----------+------------+-------------------------------+----------------|
+ | 374475 | alecdavis | dsp.c fix incorrect DTMF | ASTERISK-16003 |
+ | | | Digit_Duration. | |
+ |----------+------------+-------------------------------+----------------|
+ | 374536 | rmudgett | chan_misdn: Remove some | |
+ | | | deadcode | |
+ |----------+------------+-------------------------------+----------------|
+ | 374581 | dlee | I've committed too much. | |
+ | | | Reverting part of r374570. | |
+ +------------------------------------------------------------------------+
+
+ ----------------------------------------------------------------------
+
+ 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.
+
+ CHANGES | 3
+ apps/app_meetme.c | 356 +++++++++++++++++++++++----------------
+ apps/app_mixmonitor.c | 6
+ apps/app_queue.c | 65 ++++---
+ apps/app_senddtmf.c | 63 ++++--
+ apps/app_voicemail.c | 5
+ channels/chan_agent.c | 4
+ channels/chan_local.c | 19 +-
+ channels/chan_misdn.c | 32 +--
+ channels/chan_sip.c | 256 ++++++++++++++++------------
+ channels/iax2-provision.c | 6
+ channels/misdn/isdn_lib.c | 220 +++---------------------
+ channels/misdn/isdn_lib.h | 9
+ channels/misdn/isdn_msg_parser.c | 12 -
+ channels/sig_ss7.c | 8
+ channels/sip/include/sip.h | 24 +-
+ codecs/Makefile | 55 ++++--
+ codecs/ilbc/iLBC_decode.c | 4
+ codecs/ilbc/iLBC_encode.c | 4
+ configs/agents.conf.sample | 3
+ configs/dsp.conf.sample | 36 +++
+ configs/res_odbc.conf.sample | 2
+ configs/sip.conf.sample | 11 +
+ funcs/func_audiohookinherit.c | 2
+ include/asterisk/astdb.h | 11 +
+ include/asterisk/channel.h | 4
+ main/asterisk.c | 10 -
+ main/ccss.c | 26 ++
+ main/cel.c | 4
+ main/channel.c | 38 +++-
+ main/data.c | 10 +
+ main/db.c | 89 +++++++--
+ main/dsp.c | 138 +++++++++++----
+ main/event.c | 42 ++++
+ main/features.c | 19 +-
+ main/indications.c | 10 +
+ main/loader.c | 17 +
+ main/manager.c | 99 ++++++++++
+ main/pbx.c | 21 ++
+ main/say.c | 10 -
+ main/ssl.c | 2
+ main/taskprocessor.c | 9
+ main/tcptls.c | 13 -
+ res/res_agi.c | 22 +-
+ res/res_jabber.c | 77 +-------
+ res/res_musiconhold.c | 6
+ res/res_rtp_asterisk.c | 59 +++---
+ res/res_rtp_multicast.c | 6
+ tests/test_db.c | 59 ++++++
+ 49 files changed, 1259 insertions(+), 747 deletions(-)
+
+ ----------------------------------------------------------------------
|
[-]
[+]
|
Changed |
asterisk-1.8.18.0.tar.xz/channels/chan_agent.c
^
|
@@ -38,7 +38,7 @@
#include "asterisk.h"
-ASTERISK_FILE_VERSION(__FILE__, "$Revision: 368039 $")
+ASTERISK_FILE_VERSION(__FILE__, "$Revision: 373768 $")
#include <sys/socket.h>
#include <fcntl.h>
@@ -223,7 +223,6 @@
static int wrapuptime;
static int ackcall;
static int endcall;
-static int multiplelogin = 1;
static int autologoffunavail = 0;
static char acceptdtmf = DEFAULT_ACCEPTDTMF;
static char enddtmf = DEFAULT_ENDDTMF;
@@ -1194,9 +1193,6 @@
urlprefix[0] = '\0';
savecallsin[0] = '\0';
- /* Read in [general] section for persistence */
- multiplelogin = ast_true(ast_variable_retrieve(cfg, "general", "multiplelogin"));
-
/* Read in the [agents] section */
v = ast_variable_browse(cfg, "agents");
while(v) {
|
[-]
[+]
|
Changed |
asterisk-1.8.18.0.tar.xz/channels/chan_local.c
^
|
@@ -31,7 +31,7 @@
#include "asterisk.h"
-ASTERISK_FILE_VERSION(__FILE__, "$Revision: 374294 $")
+ASTERISK_FILE_VERSION(__FILE__, "$Revision: 373878 $")
#include <fcntl.h>
#include <sys/signal.h>
@@ -760,6 +760,15 @@
f.data.ptr = (void *) data;
f.datalen = datalen;
res = local_queue_frame(p, isoutbound, &f, ast, 1);
+
+ if (!res && (condition == AST_CONTROL_T38_PARAMETERS) &&
+ (datalen == sizeof(struct ast_control_t38_parameters))) {
+ const struct ast_control_t38_parameters *parameters = data;
+
+ if (parameters->request_response == AST_T38_REQUEST_PARMS) {
+ res = AST_T38_REQUEST_PARMS;
+ }
+ }
} else {
ast_debug(4, "Blocked indication %d\n", condition);
}
|
[-]
[+]
|
Changed |
asterisk-1.8.18.0.tar.xz/channels/chan_misdn.c
^
|
@@ -58,7 +58,7 @@
#include "asterisk.h"
-ASTERISK_FILE_VERSION(__FILE__, "$Revision: 370563 $")
+ASTERISK_FILE_VERSION(__FILE__, "$Revision: 374536 $")
#include <pthread.h>
#include <sys/socket.h>
@@ -4177,7 +4177,7 @@
#endif
" --> notone : rx %d tx:%d\n"
" --> bc_hold: %d\n",
- help->ast->name,
+ ast ? ast->name : "",
help->l3id,
help->addr,
bc->addr,
@@ -4233,7 +4233,6 @@
continue;
}
ast_cli(a->fd, "bc with pid:%d has no Ast Leg\n", bc->pid);
- continue;
}
if (misdn_debug[0] > 2) {
@@ -6923,7 +6922,7 @@
return -1;
}
- chan_misdn_log(5, p->bc->port, "* IND : Indication [%d] on %s\n\n", cond, ast->name);
+ chan_misdn_log(5, p->bc->port, "* IND : Indication [%d] on %s\n", cond, ast->name);
switch (cond) {
case AST_CONTROL_BUSY:
@@ -8134,7 +8133,7 @@
tmp = ast_channel_alloc(1, state, cid_num, cid_name, "", exten, "", linkedid, 0, "%s/%s%d-u%d", misdn_type, c ? "" : "tmp", chan_offset + c, glob_channel++);
if (tmp) {
- chan_misdn_log(2, 0, " --> * NEW CHANNEL dialed:%s caller:%s\n", exten, callerid);
+ chan_misdn_log(2, port, " --> * NEW CHANNEL dialed:%s caller:%s\n", exten, callerid);
tmp->nativeformats = prefformat;
@@ -8374,14 +8373,13 @@
static void hangup_chan(struct chan_list *ch, struct misdn_bchannel *bc)
{
- int port;
+ int port = bc->port;
if (!ch) {
- cb_log(1, 0, "Cannot hangup chan, no ch\n");
+ cb_log(1, port, "Cannot hangup chan, no ch\n");
return;
}
- port = bc->port;
cb_log(5, port, "hangup_chan called\n");
if (ch->need_hangup) {
@@ -10139,7 +10137,7 @@
ch = chan_list_init(ORG_MISDN);
if (!ch) {
chan_misdn_log(-1, bc->port, "cb_events: malloc for chan_list failed!\n");
- return 0;
+ return RESPONSE_RELEASE_SETUP;
}
ch->bc = bc;
@@ -10149,9 +10147,8 @@
chan = misdn_new(ch, AST_STATE_RESERVED, bc->dialed.number, bc->caller.number, AST_FORMAT_ALAW, NULL, bc->port, bc->channel);
if (!chan) {
chan_list_unref(ch, "Failed to create a new channel");
- misdn_lib_send_event(bc,EVENT_RELEASE_COMPLETE);
- ast_log(LOG_ERROR, "cb_events: misdn_new failed !\n");
- return 0;
+ ast_log(LOG_ERROR, "cb_events: misdn_new failed!\n");
+ return RESPONSE_RELEASE_SETUP;
}
if ((exceed = add_in_calls(bc->port))) {
@@ -10210,9 +10207,6 @@
break;
}
- /** queue new chan **/
- cl_queue_chan(ch);
-
if (!strstr(ch->allowed_bearers, "all")) {
int i;
@@ -10232,15 +10226,17 @@
/* We did not find the bearer capability */
chan_misdn_log(0, bc->port, "Bearer capability not allowed: %s(%d)\n",
bearer2str(bc->capability), bc->capability);
- bc->out_cause = AST_CAUSE_INCOMPATIBLE_DESTINATION;
ch->state = MISDN_EXTCANTMATCH;
- misdn_lib_send_event(bc, EVENT_RELEASE_COMPLETE);
chan_list_unref(ch, "BC not allowed, releasing call");
- return RESPONSE_OK;
+ bc->out_cause = AST_CAUSE_INCOMPATIBLE_DESTINATION;
+ return RESPONSE_RELEASE_SETUP;
}
}
+ /** queue new chan **/
+ cl_queue_chan(ch);
+
if (bc->fac_in.Function != Fac_None) {
misdn_facility_ie_handler(event, bc, ch);
}
@@ -12633,7 +12629,7 @@
char port_buf[8];
if (!(0 <= port && port <= max_ports)) {
- ast_log(LOG_WARNING, "cb_log called with out-of-range port number! (%d)\n", port);
+ ast_log(LOG_WARNING, "chan_misdn_log called with out-of-range port number! (%d)\n", port);
port = 0;
level = -1;
} else if (!(level == -1
|
[-]
[+]
|
Changed |
asterisk-1.8.18.0.tar.xz/channels/chan_sip.c
^
|
@@ -209,7 +209,7 @@
#include "asterisk.h"
-ASTERISK_FILE_VERSION(__FILE__, "$Revision: 374527 $")
+ASTERISK_FILE_VERSION(__FILE__, "$Revision: 374456 $")
#include <signal.h>
#include <sys/signal.h>
@@ -741,7 +741,7 @@
static int global_qualify_peers; /*!< Number of peers to poke at a given time */
static enum st_mode global_st_mode; /*!< Mode of operation for Session-Timers */
-static enum st_refresher global_st_refresher; /*!< Session-Timer refresher */
+static enum st_refresher_param global_st_refresher; /*!< Session-Timer refresher */
static int global_min_se; /*!< Lowest threshold for session refresh interval */
static int global_max_se; /*!< Highest threshold for session refresh interval */
@@ -1576,8 +1576,8 @@
static void stop_session_timer(struct sip_pvt *p);
static void start_session_timer(struct sip_pvt *p);
static void restart_session_timer(struct sip_pvt *p);
-static const char *strefresher2str(enum st_refresher r);
-static int parse_session_expires(const char *p_hdrval, int *const p_interval, enum st_refresher *const p_ref);
+static const char *strefresherparam2str(enum st_refresher r);
+static int parse_session_expires(const char *p_hdrval, int *const p_interval, enum st_refresher_param *const p_ref);
static int parse_minse(const char *p_hdrval, int *const p_interval);
static int st_get_se(struct sip_pvt *, int max);
static enum st_refresher st_get_refresher(struct sip_pvt *);
@@ -2357,6 +2357,8 @@
ast_free(args->tls_cfg->cipher);
ast_free(args->tls_cfg->cafile);
ast_free(args->tls_cfg->capath);
+
+ ast_ssl_teardown(args->tls_cfg);
}
ast_free(args->tls_cfg);
ast_free((char *) args->name);
@@ -5275,6 +5277,7 @@
ast_rtp_instance_set_keepalive(dialog->vrtp, dialog->rtpkeepalive);
ast_rtp_instance_set_prop(dialog->vrtp, AST_RTP_PROPERTY_RTCP, 1);
+ ast_rtp_instance_set_qos(dialog->vrtp, global_tos_video, global_cos_video, "SIP VIDEO");
}
if (ast_test_flag(&dialog->flags[1], SIP_PAGE2_TEXTSUPPORT)) {
@@ -5744,9 +5747,10 @@
}
xmitres = transmit_invite(p, SIP_INVITE, 1, 2, uri);
- sip_pvt_unlock(p);
- if (xmitres == XMIT_ERROR)
+ if (xmitres == XMIT_ERROR) {
+ sip_pvt_unlock(p);
return -1;
+ }
p->invitestate = INV_CALLING;
/* Initialize auto-congest time */
@@ -5754,6 +5758,7 @@
dialog_unref(_data, "dialog ptr dec when SCHED_REPLACE del op succeeded"),
dialog_unref(p, "dialog ptr dec when SCHED_REPLACE add failed"),
dialog_ref(p, "dialog ptr inc when SCHED_REPLACE add succeeded") );
+ sip_pvt_unlock(p);
}
return res;
}
@@ -5847,6 +5852,7 @@
if (p->mwi) {
p->mwi->call = NULL;
+ p->mwi = NULL;
}
if (dumphistory)
@@ -5857,29 +5863,37 @@
ao2_ref(p->options->outboundproxy, -1);
}
ast_free(p->options);
+ p->options = NULL;
}
if (p->notify) {
ast_variables_destroy(p->notify->headers);
ast_free(p->notify->content);
ast_free(p->notify);
+ p->notify = NULL;
}
if (p->rtp) {
ast_rtp_instance_destroy(p->rtp);
+ p->rtp = NULL;
}
if (p->vrtp) {
ast_rtp_instance_destroy(p->vrtp);
+ p->vrtp = NULL;
}
if (p->trtp) {
ast_rtp_instance_destroy(p->trtp);
+ p->trtp = NULL;
}
- if (p->udptl)
+ if (p->udptl) {
ast_udptl_destroy(p->udptl);
+ p->udptl = NULL;
+ }
if (p->refer) {
if (p->refer->refer_call) {
p->refer->refer_call = dialog_unref(p->refer->refer_call, "unref dialog p->refer->refer_call");
}
ast_free(p->refer);
+ p->refer = NULL;
}
if (p->route) {
free_old_route(p->route);
@@ -5930,6 +5944,7 @@
ast_string_field_free_memory(p);
ast_cc_config_params_destroy(p->cc_params);
+ p->cc_params = NULL;
if (p->epa_entry) {
ao2_ref(p->epa_entry, -1);
@@ -8236,7 +8251,9 @@
/* Iterate a list of dialogs already matched by Call-id */
while (iterator && (sip_pvt_ptr = ao2_iterator_next(iterator))) {
+ sip_pvt_lock(sip_pvt_ptr);
found = match_req_to_dialog(sip_pvt_ptr, &args);
+ sip_pvt_unlock(sip_pvt_ptr);
switch (found) {
case SIP_REQ_MATCH:
@@ -8254,6 +8271,7 @@
case SIP_REQ_NOT_MATCH:
default:
dialog_unref(sip_pvt_ptr, "pvt did not match incoming SIP msg, unref from search");
+ break;
}
}
if (iterator) {
@@ -10381,7 +10399,7 @@
if (p->method == SIP_INVITE && p->stimer && p->stimer->st_active == TRUE && p->stimer->st_active_peer_ua == TRUE) {
char se_hdr[256];
snprintf(se_hdr, sizeof(se_hdr), "%d;refresher=%s", p->stimer->st_interval,
- strefresher2str(p->stimer->st_ref));
+ p->stimer->st_ref == SESSION_TIMER_REFRESHER_US ? "uas" : "uac");
add_header(resp, "Session-Expires", se_hdr);
}
@@ -10435,8 +10453,6 @@
int is_strict = FALSE; /*!< Strict routing flag */
int is_outbound = ast_test_flag(&p->flags[0], SIP_OUTGOING); /* Session direction */
- memset(req, 0, sizeof(struct sip_request));
-
snprintf(p->lastmsg, sizeof(p->lastmsg), "Tx: %s", sip_methods[sipmethod].text);
if (!seqno) {
@@ -10553,7 +10569,7 @@
&& sipmethod == SIP_INVITE) {
char se_hdr[256];
snprintf(se_hdr, sizeof(se_hdr), "%d;refresher=%s", p->stimer->st_interval,
- strefresher2str(p->stimer->st_ref));
+ p->stimer->st_ref == SESSION_TIMER_REFRESHER_US ? "uac" : "uas");
add_header(req, "Session-Expires", se_hdr);
snprintf(se_hdr, sizeof(se_hdr), "%d", st_get_se(p, FALSE));
add_header(req, "Min-SE", se_hdr);
@@ -11809,19 +11825,21 @@
/* copy the entire request then restore the original data and content
* members from the dst request */
- memcpy(dst, src, sizeof(*dst));
+ *dst = *src;
dst->data = duplicate;
dst->content = duplicate_content;
/* copy the data into the dst request */
- if (!dst->data && !(dst->data = ast_str_create(ast_str_strlen(src->data) + 1)))
+ if (!dst->data && !(dst->data = ast_str_create(ast_str_strlen(src->data) + 1))) {
return;
+ }
ast_str_copy_string(&dst->data, src->data);
/* copy the content into the dst request (if it exists) */
if (src->content) {
- if (!dst->content && !(dst->content = ast_str_create(ast_str_strlen(src->content) + 1)))
+ if (!dst->content && !(dst->content = ast_str_create(ast_str_strlen(src->content) + 1))) {
return;
+ }
ast_str_copy_string(&dst->content, src->content);
}
}
@@ -12079,8 +12097,8 @@
} else {
/* Even if we are using RPID, we shouldn't leak information in the From if the user wants
* their callerid restricted */
- l = CALLERID_UNKNOWN;
- n = l;
+ l = "anonymous";
+ n = CALLERID_UNKNOWN;
d = FROMDOMAIN_INVALID;
}
}
@@ -12294,8 +12312,7 @@
{
struct sip_request req;
struct ast_variable *var;
-
- req.method = sipmethod;
+
if (init) {/* Bump branch even on initial requests */
p->branch ^= ast_random();
p->invite_branch = p->branch;
@@ -12880,6 +12897,11 @@
struct sip_request req;
const struct cfsubscription_types *subscriptiontype;
+ /* If the subscription has not yet been accepted do not send a NOTIFY */
+ if (!ast_test_flag(&p->flags[1], SIP_PAGE2_DIALOG_ESTABLISHED)) {
+ return 0;
+ }
+
memset(from, 0, sizeof(from));
memset(to, 0, sizeof(to));
@@ -16568,23 +16590,34 @@
}
/* Session-Timer Refreshers */
+static const struct _map_x_s strefresher_params[] = {
+ { SESSION_TIMER_REFRESHER_PARAM_UNKNOWN, "unknown" },
+ { SESSION_TIMER_REFRESHER_PARAM_UAC, "uac" },
+ { SESSION_TIMER_REFRESHER_PARAM_UAS, "uas" },
+ { -1, NULL },
+};
+
static const struct _map_x_s strefreshers[] = {
- { SESSION_TIMER_REFRESHER_AUTO, "auto"},
- { SESSION_TIMER_REFRESHER_UAC, "uac"},
- { SESSION_TIMER_REFRESHER_UAS, "uas"},
- { -1, NULL},
+ { SESSION_TIMER_REFRESHER_AUTO, "auto" },
+ { SESSION_TIMER_REFRESHER_US, "us" },
+ { SESSION_TIMER_REFRESHER_THEM, "them" },
+ { -1, NULL },
};
-static const char *strefresher2str(enum st_refresher r)
+static const char *strefresherparam2str(enum st_refresher r)
{
- return map_x_s(strefreshers, r, "Unknown");
+ return map_x_s(strefresher_params, r, "Unknown");
}
-static enum st_refresher str2strefresher(const char *s)
+static enum st_refresher str2strefresherparam(const char *s)
{
- return map_s_x(strefreshers, s, -1);
+ return map_s_x(strefresher_params, s, -1);
}
+static const char *strefresher2str(enum st_refresher r)
+{
+ return map_x_s(strefreshers, r, "Unknown");
+}
static int peer_status(struct sip_peer *peer, char *status, int statuslen)
{
@@ -17730,7 +17763,7 @@
}
ast_cli(fd, " Sess-Timers : %s\n", stmode2str(peer->stimer.st_mode_oper));
- ast_cli(fd, " Sess-Refresh : %s\n", strefresher2str(peer->stimer.st_ref));
+ ast_cli(fd, " Sess-Refresh : %s\n", strefresherparam2str(peer->stimer.st_ref));
ast_cli(fd, " Sess-Expires : %d secs\n", peer->stimer.st_max_se);
ast_cli(fd, " Min-Sess : %d secs\n", peer->stimer.st_min_se);
ast_cli(fd, " RTP Engine : %s\n", peer->engine);
@@ -17787,7 +17820,7 @@
astman_append(s, "SIP-T.38EC: %s\r\n", faxec2str(ast_test_flag(&peer->flags[1], SIP_PAGE2_T38SUPPORT)));
astman_append(s, "SIP-T.38MaxDtgrm: %d\r\n", peer->t38_maxdatagram);
astman_append(s, "SIP-Sess-Timers: %s\r\n", stmode2str(peer->stimer.st_mode_oper));
- astman_append(s, "SIP-Sess-Refresh: %s\r\n", strefresher2str(peer->stimer.st_ref));
+ astman_append(s, "SIP-Sess-Refresh: %s\r\n", strefresherparam2str(peer->stimer.st_ref));
astman_append(s, "SIP-Sess-Expires: %d\r\n", peer->stimer.st_max_se);
astman_append(s, "SIP-Sess-Min: %d\r\n", peer->stimer.st_min_se);
astman_append(s, "SIP-RTP-Engine: %s\r\n", peer->engine);
@@ -17927,7 +17960,7 @@
ast_cli(a->fd, " Callerid : %s\n", ast_callerid_merge(cbuf, sizeof(cbuf), user->cid_name, user->cid_num, "<unspecified>"));
ast_cli(a->fd, " ACL : %s\n", AST_CLI_YESNO(user->ha != NULL));
ast_cli(a->fd, " Sess-Timers : %s\n", stmode2str(user->stimer.st_mode_oper));
- ast_cli(a->fd, " Sess-Refresh : %s\n", strefresher2str(user->stimer.st_ref));
+ ast_cli(a->fd, " Sess-Refresh : %s\n", strefresherparam2str(user->stimer.st_ref));
ast_cli(a->fd, " Sess-Expires : %d secs\n", user->stimer.st_max_se);
ast_cli(a->fd, " Sess-Min-SE : %d secs\n", user->stimer.st_min_se);
ast_cli(a->fd, " RTP Engine : %s\n", user->engine);
@@ -18099,13 +18132,18 @@
char durbuf[10];
int duration;
int durh, durm, durs;
- struct ast_channel *c = cur->owner;
+ struct ast_channel *c;
struct __show_chan_arg *arg = __arg;
int fd = arg->fd;
+ sip_pvt_lock(cur);
+ c = cur->owner;
- if (cur->subscribed != NONE) /* Subscriptions */
+ if (cur->subscribed != NONE) {
+ /* Subscriptions */
+ sip_pvt_unlock(cur);
return 0; /* don't care, we scan all channels */
+ }
if (!cur->rtp) {
if (sipdebug) {
@@ -18114,10 +18152,12 @@
invitestate2string[cur->invitestate].desc,
"-- No RTP active");
}
+ sip_pvt_unlock(cur);
return 0; /* don't care, we scan all channels */
}
if (ast_rtp_instance_get_stats(cur->rtp, &stats, AST_RTP_INSTANCE_STAT_ALL)) {
+ sip_pvt_unlock(cur);
ast_log(LOG_WARNING, "Could not get RTP stats.\n");
return 0;
}
@@ -18148,6 +18188,7 @@
stats.txjitter
);
arg->numchans++;
+ sip_pvt_unlock(cur);
return 0; /* don't care, we scan all channels */
}
@@ -18370,7 +18411,7 @@
ast_cli(a->fd, " Outb. proxy: %s %s\n", ast_strlen_zero(sip_cfg.outboundproxy.name) ? "<not set>" : sip_cfg.outboundproxy.name,
sip_cfg.outboundproxy.force ? "(forced)" : "");
ast_cli(a->fd, " Session Timers: %s\n", stmode2str(global_st_mode));
- ast_cli(a->fd, " Session Refresher: %s\n", strefresher2str (global_st_refresher));
+ ast_cli(a->fd, " Session Refresher: %s\n", strefresherparam2str(global_st_refresher));
ast_cli(a->fd, " Session Expires: %d secs\n", global_max_se);
ast_cli(a->fd, " Session Min-SE: %d secs\n", global_min_se);
ast_cli(a->fd, " Timer T1: %d\n", global_t1);
@@ -18483,8 +18524,11 @@
{
struct sip_pvt *cur = __cur;
struct __show_chan_arg *arg = __arg;
- const struct ast_sockaddr *dst = sip_real_dst(cur);
-
+ const struct ast_sockaddr *dst;
+
+ sip_pvt_lock(cur);
+ dst = sip_real_dst(cur);
+
/* XXX indentation preserved to reduce diff. Will be fixed later */
if (cur->subscribed == NONE && !arg->subscriptions) {
/* set if SIP transfer in progress */
@@ -18519,6 +18563,7 @@
);
arg->numchans++;
}
+ sip_pvt_unlock(cur);
return 0; /* don't care, we scan all channels */
}
@@ -18802,7 +18847,7 @@
ast_cli(a->fd, " S-Timer Peer Sts: %s\n", cur->stimer->st_active_peer_ua ? "Active" : "Inactive");
ast_cli(a->fd, " S-Timer Cached Min-SE: %d\n", cur->stimer->st_cached_min_se);
ast_cli(a->fd, " S-Timer Cached SE: %d\n", cur->stimer->st_cached_max_se);
- ast_cli(a->fd, " S-Timer Cached Ref: %s\n", strefresher2str(cur->stimer->st_cached_ref));
+ ast_cli(a->fd, " S-Timer Cached Ref: %s\n", strefresherparam2str(cur->stimer->st_cached_ref));
ast_cli(a->fd, " S-Timer Cached Mode: %s\n", stmode2str(cur->stimer->st_cached_mode));
}
}
@@ -20442,15 +20487,18 @@
p_hdrval = (char*)get_header(req, "Session-Expires");
if (!ast_strlen_zero(p_hdrval)) {
/* UAS supports Session-Timers */
- enum st_refresher tmp_st_ref = SESSION_TIMER_REFRESHER_AUTO;
+ enum st_refresher_param st_ref_param;
int tmp_st_interval = 0;
- rtn = parse_session_expires(p_hdrval, &tmp_st_interval, &tmp_st_ref);
+ rtn = parse_session_expires(p_hdrval, &tmp_st_interval, &st_ref_param);
if (rtn != 0) {
ast_set_flag(&p->flags[0], SIP_PENDINGBYE);
}
- if (tmp_st_ref == SESSION_TIMER_REFRESHER_UAC ||
- tmp_st_ref == SESSION_TIMER_REFRESHER_UAS) {
- p->stimer->st_ref = tmp_st_ref;
+ if (st_ref_param == SESSION_TIMER_REFRESHER_PARAM_UAC) {
+ p->stimer->st_ref = SESSION_TIMER_REFRESHER_US;
+ } else if (st_ref_param == SESSION_TIMER_REFRESHER_PARAM_UAS) {
+ p->stimer->st_ref = SESSION_TIMER_REFRESHER_THEM;
+ } else {
+ ast_log(LOG_WARNING, "Unknown refresher on %s\n", p->callid);
}
if (tmp_st_interval) {
p->stimer->st_interval = tmp_st_interval;
@@ -20461,7 +20509,7 @@
} else {
/* UAS doesn't support Session-Timers */
if (st_get_mode(p, 0) == SESSION_TIMER_MODE_ORIGINATE) {
- p->stimer->st_ref = SESSION_TIMER_REFRESHER_UAC;
+ p->stimer->st_ref = SESSION_TIMER_REFRESHER_US;
p->stimer->st_active_peer_ua = FALSE;
start_session_timer(p);
}
@@ -20514,7 +20562,6 @@
}
break;
- case 408: /* Request timeout */
case 481: /* Call leg does not exist */
/* Could be REFER caused INVITE with replaces */
ast_log(LOG_WARNING, "Re-invite to non-existing call leg on other UA. SIP dialog '%s'. Giving up.\n", p->callid);
@@ -20596,6 +20643,7 @@
}
break;
+ case 408: /* Request timeout */
case 405: /* Not allowed */
case 501: /* Not implemented */
xmitres = transmit_request(p, SIP_ACK, seqno, XMIT_UNRELIABLE, FALSE);
@@ -22423,7 +22471,7 @@
int uac_min_se = -1; /* UAC's Min-SE in integer format */
int st_active = FALSE; /* Session-Timer on/off boolean */
int st_interval = 0; /* Session-Timer negotiated refresh interval */
- enum st_refresher st_ref; /* Session-Timer session refresher */
+ enum st_refresher tmp_st_ref = SESSION_TIMER_REFRESHER_AUTO; /* Session-Timer refresher */
int dlg_min_se = -1;
struct {
char exten[AST_MAX_EXTENSION];
@@ -22431,7 +22479,6 @@
} pickup = {
.exten = "",
};
- st_ref = SESSION_TIMER_REFRESHER_AUTO;
/* Find out what they support */
if (!p->sipoptions) {
@@ -22958,6 +23005,8 @@
/* Session-Timers */
if ((p->sipoptions & SIP_OPT_TIMER) && !ast_strlen_zero(get_header(req, "Session-Expires"))) {
+ enum st_refresher_param st_ref_param;
+
/* The UAC has requested session-timers for this session. Negotiate
the session refresh interval and who will be the refresher */
ast_debug(2, "Incoming INVITE with 'timer' option supported and \"Session-Expires\" header.\n");
@@ -22968,7 +23017,8 @@
/* Parse the Session-Expires header */
p_uac_se_hdr = get_header(req, "Session-Expires");
- rtn = parse_session_expires(p_uac_se_hdr, &uac_max_se, &st_ref);
+ rtn = parse_session_expires(p_uac_se_hdr, &uac_max_se, &st_ref_param);
+ tmp_st_ref = (st_ref_param == SESSION_TIMER_REFRESHER_PARAM_UAC) ? SESSION_TIMER_REFRESHER_THEM : SESSION_TIMER_REFRESHER_US;
if (rtn != 0) {
transmit_response_reliable(p, "400 Session-Expires Invalid Syntax", req);
p->invitestate = INV_COMPLETED;
@@ -23010,8 +23060,8 @@
p->stimer->st_active_peer_ua = TRUE;
st_active = TRUE;
- if (st_ref == SESSION_TIMER_REFRESHER_AUTO) {
- st_ref = st_get_refresher(p);
+ if (st_ref_param == SESSION_TIMER_REFRESHER_PARAM_UNKNOWN) {
+ tmp_st_ref = st_get_refresher(p);
}
if (uac_max_se > 0) {
@@ -23052,7 +23102,7 @@
case SESSION_TIMER_MODE_ORIGINATE:
st_active = TRUE;
st_interval = st_get_se(p, TRUE);
- st_ref = SESSION_TIMER_REFRESHER_UAS;
+ tmp_st_ref = SESSION_TIMER_REFRESHER_US;
p->stimer->st_active_peer_ua = FALSE;
break;
@@ -23064,9 +23114,9 @@
if (reinvite == 0) {
/* Session-Timers: Start session refresh timer based on negotiation/config */
if (st_active == TRUE) {
- p->stimer->st_active = TRUE;
+ p->stimer->st_active = TRUE;
p->stimer->st_interval = st_interval;
- p->stimer->st_ref = st_ref;
+ p->stimer->st_ref = tmp_st_ref;
start_session_timer(p);
}
} else {
@@ -23079,7 +23129,7 @@
/* The UAC may be adjusting the session-timers mid-session */
if (st_interval > 0) {
p->stimer->st_interval = st_interval;
- p->stimer->st_ref = st_ref;
+ p->stimer->st_ref = tmp_st_ref;
}
restart_session_timer(p);
@@ -25106,8 +25156,11 @@
unref_peer(peer, "release a peer ref now that MWI is sent");
}
} else if (p->subscribed != CALL_COMPLETION) {
- if ((firststate = ast_extension_state(NULL, p->context, p->exten)) < 0) {
+ sip_pvt_unlock(p);
+ firststate = ast_extension_state(NULL, p->context, p->exten);
+ sip_pvt_lock(p);
+ if (firststate < 0) {
ast_log(LOG_NOTICE, "Got SUBSCRIBE for extension %s@%s from %s, but there is no hint for that extension.\n", p->exten, p->context, ast_sockaddr_stringify(&p->sa));
transmit_response(p, "404 Not found", req);
pvt_set_needdestroy(p, "no extension for SUBSCRIBE");
@@ -26194,7 +26247,6 @@
static int proc_session_timer(const void *vp)
{
struct sip_pvt *p = (struct sip_pvt *) vp;
- int sendreinv = FALSE;
int res = 0;
if (!p->stimer) {
@@ -26212,23 +26264,7 @@
goto return_unref;
}
- switch (p->stimer->st_ref) {
- case SESSION_TIMER_REFRESHER_UAC:
- if (p->outgoing_call == TRUE) {
- sendreinv = TRUE;
- }
- break;
- case SESSION_TIMER_REFRESHER_UAS:
- if (p->outgoing_call != TRUE) {
- sendreinv = TRUE;
- }
- break;
- default:
- ast_log(LOG_ERROR, "Unknown session refresher %d\n", p->stimer->st_ref);
- goto return_unref;
- }
-
- if (sendreinv == TRUE) {
+ if (p->stimer->st_ref == SESSION_TIMER_REFRESHER_US) {
res = 1;
transmit_reinvite_with_sdp(p, FALSE, TRUE);
} else {
@@ -26295,7 +26331,7 @@
/*! \brief Session-Timers: Function for parsing Session-Expires header */
-int parse_session_expires(const char *p_hdrval, int *const p_interval, enum st_refresher *const p_ref)
+int parse_session_expires(const char *p_hdrval, int *const p_interval, enum st_refresher_param *const p_ref)
{
char *p_token;
int ref_idx;
@@ -26306,7 +26342,7 @@
return -1;
}
- *p_ref = SESSION_TIMER_REFRESHER_AUTO;
+ *p_ref = SESSION_TIMER_REFRESHER_PARAM_UNKNOWN;
*p_interval = 0;
p_se_hdr = ast_strdupa(p_hdrval);
@@ -26331,10 +26367,10 @@
p_se_hdr = ast_skip_blanks(p_se_hdr);
if (!strncasecmp(p_se_hdr, "uac", strlen("uac"))) {
- *p_ref = SESSION_TIMER_REFRESHER_UAC;
+ *p_ref = SESSION_TIMER_REFRESHER_PARAM_UAC;
ast_debug(2, "Refresher: UAC\n");
} else if (!strncasecmp(p_se_hdr, "uas", strlen("uas"))) {
- *p_ref = SESSION_TIMER_REFRESHER_UAS;
+ *p_ref = SESSION_TIMER_REFRESHER_PARAM_UAS;
ast_debug(2, "Refresher: UAS\n");
} else {
ast_log(LOG_WARNING, "Invalid refresher value %s\n", p_se_hdr);
@@ -26406,20 +26442,24 @@
/*! \brief Get the entity (UAC or UAS) that's acting as the session-timer refresher
+ * \note This is only called when processing an INVITE, so in that case Asterisk is
+ * always currently the UAS. If this is ever used to process responses, the
+ * function will have to be changed.
* \param p pointer to the SIP dialog
*/
enum st_refresher st_get_refresher(struct sip_pvt *p)
{
- if (p->stimer->st_cached_ref != SESSION_TIMER_REFRESHER_AUTO)
+ if (p->stimer->st_cached_ref != SESSION_TIMER_REFRESHER_AUTO) {
return p->stimer->st_cached_ref;
+ }
if (p->relatedpeer) {
- p->stimer->st_cached_ref = p->relatedpeer->stimer.st_ref;
+ p->stimer->st_cached_ref = (p->relatedpeer->stimer.st_ref == SESSION_TIMER_REFRESHER_PARAM_UAC) ? SESSION_TIMER_REFRESHER_THEM : SESSION_TIMER_REFRESHER_US;
return p->stimer->st_cached_ref;
}
- p->stimer->st_cached_ref = global_st_refresher;
- return global_st_refresher;
+ p->stimer->st_cached_ref = (global_st_refresher == SESSION_TIMER_REFRESHER_PARAM_UAC) ? SESSION_TIMER_REFRESHER_THEM : SESSION_TIMER_REFRESHER_US;
+ return p->stimer->st_cached_ref;
}
@@ -27851,7 +27891,7 @@
peer->stimer.st_min_se = global_min_se;
}
} else if (!strcasecmp(v->name, "session-refresher")) {
- int i = (int) str2strefresher(v->value);
+ int i = (int) str2strefresherparam(v->value);
if (i < 0) {
ast_log(LOG_WARNING, "Invalid session-refresher '%s' at line %d of %s\n", v->value, v->lineno, config);
peer->stimer.st_ref = global_st_refresher;
@@ -28342,7 +28382,7 @@
/* Session-Timers */
global_st_mode = SESSION_TIMER_MODE_ACCEPT;
- global_st_refresher = SESSION_TIMER_REFRESHER_UAS;
+ global_st_refresher = SESSION_TIMER_REFRESHER_PARAM_UAS;
global_min_se = DEFAULT_MIN_SE;
global_max_se = DEFAULT_MAX_SE;
@@ -28831,10 +28871,10 @@
global_min_se = DEFAULT_MIN_SE;
}
} else if (!strcasecmp(v->name, "session-refresher")) {
- int i = (int) str2strefresher(v->value);
+ int i = (int) str2strefresherparam(v->value);
if (i < 0) {
ast_log(LOG_WARNING, "Invalid session-refresher '%s' at line %d of %s\n", v->value, v->lineno, config);
- global_st_refresher = SESSION_TIMER_REFRESHER_UAS;
+ global_st_refresher = SESSION_TIMER_REFRESHER_PARAM_UAS;
} else {
global_st_refresher = i;
}
|
[-]
[+]
|
Changed |
asterisk-1.8.18.0.tar.xz/channels/iax2-provision.c
^
|
@@ -29,7 +29,7 @@
#include "asterisk.h"
-ASTERISK_FILE_VERSION(__FILE__, "$Revision: 369001 $")
+ASTERISK_FILE_VERSION(__FILE__, "$Revision: 373342 $")
#include <netdb.h>
#include <netinet/in.h>
@@ -262,10 +262,8 @@
memset(&ied, 0, sizeof(ied));
ast_mutex_lock(&provlock);
- if (!(ast_db_get("iax/provisioning/cache", template, tmp, sizeof(tmp)))) {
- ast_log(LOG_ERROR, "ast_db_get failed to retrieve iax/provisioning/cache\n");
- ast_mutex_unlock(&provlock);
- return -1;
+ if (ast_db_get("iax/provisioning/cache", template, tmp, sizeof(tmp))) {
+ ast_log(LOG_ERROR, "ast_db_get failed to retrieve iax/provisioning/cache/%s\n", template);
}
if (sscanf(tmp, "v%30x", version) != 1) {
if (strcmp(tmp, "u")) {
|
[-]
[+]
|
Changed |
asterisk-1.8.18.0.tar.xz/channels/misdn/isdn_lib.c
^
|
@@ -46,8 +46,6 @@
void misdn_join_conf(struct misdn_bchannel *bc, int conf_id);
void misdn_split_conf(struct misdn_bchannel *bc, int conf_id);
-int queue_cleanup_bc(struct misdn_bchannel *bc) ;
-
int misdn_lib_get_l2_up(struct misdn_stack *stack);
struct misdn_stack *get_misdn_stack(void);
@@ -214,14 +212,12 @@
struct misdn_lib {
/*! \brief mISDN device handle returned by mISDN_open() */
int midev;
- int midev_nt; /* Not used */
pthread_t event_thread;
pthread_t event_handler_thread;
void *user_data;
- msg_queue_t upqueue;
msg_queue_t activatequeue;
sem_t new_msg;
@@ -240,8 +236,6 @@
struct misdn_bchannel *find_bc_by_l3id(struct misdn_stack *stack, unsigned long l3id);
-int setup_bc(struct misdn_bchannel *bc);
-
int manager_isdn_handler(iframe_t *frm ,msg_t *msg);
int misdn_lib_port_restart(int port);
@@ -629,16 +623,9 @@
} states[] = {
{"BCHAN_CLEANED", BCHAN_CLEANED },
{"BCHAN_EMPTY", BCHAN_EMPTY},
- {"BCHAN_SETUP", BCHAN_SETUP},
- {"BCHAN_SETUPED", BCHAN_SETUPED},
- {"BCHAN_ACTIVE", BCHAN_ACTIVE},
{"BCHAN_ACTIVATED", BCHAN_ACTIVATED},
- {"BCHAN_BRIDGE", BCHAN_BRIDGE},
{"BCHAN_BRIDGED", BCHAN_BRIDGED},
{"BCHAN_RELEASE", BCHAN_RELEASE},
- {"BCHAN_RELEASED", BCHAN_RELEASED},
- {"BCHAN_CLEAN", BCHAN_CLEAN},
- {"BCHAN_CLEAN_REQUEST", BCHAN_CLEAN_REQUEST},
{"BCHAN_ERROR", BCHAN_ERROR}
};
@@ -833,9 +820,8 @@
unsigned char buff[32];
struct misdn_stack * stack;
- cb_log(3, bc?bc->port:0, "$$$ CLEANUP CALLED pid:%d\n", bc?bc->pid:-1);
+ cb_log(3, bc->port, "$$$ CLEANUP CALLED pid:%d\n", bc->pid);
- if (!bc ) return -1;
stack=get_stack_by_bc(bc);
if (!stack) return -1;
@@ -1065,14 +1051,7 @@
}
-void misdn_lib_setup_bc(struct misdn_bchannel *bc)
-{
- clean_up_bc(bc);
- setup_bc(bc);
-}
-
-
-int setup_bc(struct misdn_bchannel *bc)
+static int setup_bc(struct misdn_bchannel *bc)
{
unsigned char buff[1025];
int midev;
@@ -1259,9 +1238,9 @@
pthread_mutex_init(&bc->send_lock->lock, NULL);
empty_bc(bc);
- bc_state_change(bc, BCHAN_CLEANED);
bc->port=stack->port;
+ bc_state_change(bc, BCHAN_CLEANED);
bc->nt=stack->nt?1:0;
bc->pri=stack->pri;
@@ -1333,7 +1312,6 @@
stack->pri=0;
msg_queue_init(&stack->downqueue);
- msg_queue_init(&stack->upqueue);
pthread_mutex_init(&stack->st_lock, NULL);
@@ -1354,11 +1332,11 @@
switch(stinf->pid.protocol[0] & ~ISDN_PID_FEATURE_MASK) {
case ISDN_PID_L0_TE_S0:
+ cb_log(8, port, "TE Stack\n");
stack->nt=0;
break;
case ISDN_PID_L0_NT_S0:
cb_log(8, port, "NT Stack\n");
-
stack->nt=1;
break;
case ISDN_PID_L0_TE_E1:
@@ -1367,10 +1345,9 @@
stack->pri=1;
break;
case ISDN_PID_L0_NT_E1:
- cb_log(8, port, "TE S2M Stack\n");
+ cb_log(8, port, "NT S2M Stack\n");
stack->nt=1;
stack->pri=1;
-
break;
default:
cb_log(0, port, "this is a unknown port type 0x%08x\n", stinf->pid.protocol[0]);
@@ -1389,8 +1366,6 @@
int ret;
int nt=stack->nt;
- cb_log(8, port, "Init. Stack.\n");
-
memset(&li, 0, sizeof(li));
{
int l = sizeof(li.name);
@@ -1431,9 +1406,6 @@
return(NULL);
}
- cb_log(8, port, "NT Stacks upper_id %x\n",stack->upper_id);
-
-
/* create nst (nt-mode only) */
if (nt) {
@@ -1483,7 +1455,7 @@
}
- cb_log(8,0,"stack_init: port:%d lowerId:%x upperId:%x\n",stack->port,stack->lower_id, stack->upper_id);
+ cb_log(8, port, "stack_init: lowerId:%x upperId:%x\n", stack->lower_id, stack->upper_id);
return stack;
}
@@ -1650,14 +1622,11 @@
-static int handle_event ( struct misdn_bchannel *bc, enum event_e event, iframe_t *frm)
+static int handle_event_te(struct misdn_bchannel *bc, enum event_e event, iframe_t *frm)
{
struct misdn_stack *stack=get_stack_by_bc(bc);
- if (!stack->nt) {
-
- switch (event) {
-
+ switch (event) {
case EVENT_CONNECT_ACKNOWLEDGE:
setup_bc(bc);
@@ -1734,7 +1703,9 @@
return -1;
}
- setup_bc(bc);
+ if (event != EVENT_SETUP) {
+ setup_bc(bc);
+ }
break;
}
@@ -1743,9 +1714,6 @@
break;
default:
break;
- }
- } else { /** NT MODE **/
-
}
return 0;
}
@@ -2194,10 +2162,6 @@
if (stack->l2upcnt>3) {
cb_log(0 , stack->port, "!!! Could not Get the L2 up after 3 Attempts!!!\n");
} else {
-#if 0
- if (stack->nt)
- misdn_lib_reinit_nt_stack(stack->port);
-#endif
if (stack->l1link) {
misdn_lib_get_l2_up(stack);
stack->l2upcnt++;
@@ -2490,43 +2454,6 @@
case MGR_SETSTACK| INDICATION:
cb_log(3, stack->port, "BCHAN: MGR_SETSTACK|IND pid:%d\n",bc->pid);
break;
-#if 0
- AGAIN:
- bc->addr = mISDN_get_layerid(stack->midev, bc->b_stid, bc->layer);
- if (!bc->addr) {
-
- if (errno == EAGAIN) {
- usleep(1000);
- goto AGAIN;
- }
-
- cb_log(0,stack->port,"$$$ Get Layer (%d) Id Error: %s\n",bc->layer,strerror(errno));
-
- /* we kill the channel later, when we received some
- data. */
- bc->addr= frm->addr;
- } else if ( bc->addr < 0) {
- cb_log(0, stack->port,"$$$ bc->addr <0 Error:%s\n",strerror(errno));
- bc->addr=0;
- }
-
- cb_log(4, stack->port," --> Got Adr %x\n", bc->addr);
-
- free_msg(msg);
-
-
- switch(bc->bc_state) {
- case BCHAN_SETUP:
- bc_state_change(bc,BCHAN_SETUPED);
- break;
-
- case BCHAN_CLEAN_REQUEST:
- default:
- cb_log(0, stack->port," --> STATE WASN'T SETUP (but %s) in SETSTACK|IND pid:%d\n",bc_state2str(bc->bc_state), bc->pid);
- clean_up_bc(bc);
- }
- return 1;
-#endif
case MGR_DELLAYER| INDICATION:
cb_log(3, stack->port, "BCHAN: MGR_DELLAYER|IND pid:%d\n",bc->pid);
@@ -2766,7 +2693,7 @@
}
-static int handle_frm(msg_t *msg)
+static int handle_frm_te(msg_t *msg)
{
struct misdn_bchannel dummybc;
struct misdn_bchannel *bc;
@@ -2785,11 +2712,11 @@
return 0;
}
- cb_log(4, stack ? stack->port : 0, "handle_frm: frm->addr:%x frm->prim:%x\n", frm->addr, frm->prim);
+ cb_log(4, stack->port, "handle_frm_te: frm->addr:%x frm->prim:%x\n", frm->addr, frm->prim);
ret = handle_cr(stack, frm);
if (ret < 0) {
- cb_log(3, stack ? stack->port : 0, "handle_frm: handle_cr <0 prim:%x addr:%x\n", frm->prim, frm->addr);
+ cb_log(3, stack->port, "handle_frm_te: handle_cr <0 prim:%x addr:%x\n", frm->prim, frm->addr);
}
if (ret) {
free_msg(msg);
@@ -2828,7 +2755,7 @@
isdn_msg_parse_event(msgs_g, msg, bc, 0);
/* Preprocess some Events */
- ret = handle_event(bc, event, frm);
+ ret = handle_event_te(bc, event, frm);
if (ret < 0) {
cb_log(0, stack->port, "couldn't handle event\n");
free_msg(msg);
@@ -2852,24 +2779,21 @@
cb_log(0, stack->port, "TOTALLY IGNORING SETUP\n");
break;
case RESPONSE_IGNORE_SETUP:
+ cb_log(0, stack->port, "GOT IGNORE SETUP\n");
/* I think we should send CC_RELEASE_CR, but am not sure*/
bc->out_cause = AST_CAUSE_NORMAL_CLEARING;
/* fall through */
case RESPONSE_RELEASE_SETUP:
- misdn_lib_send_event(bc, EVENT_RELEASE_COMPLETE);
- if (bc->channel > 0) {
- empty_chan_in_stack(stack, bc->channel);
+ if (response == RESPONSE_RELEASE_SETUP) {
+ cb_log(0, stack->port, "GOT RELEASE SETUP\n");
}
- empty_bc(bc);
- bc_state_change(bc, BCHAN_CLEANED);
- bc->in_use = 0;
-
- cb_log(0, stack->port, "GOT IGNORE SETUP\n");
+ misdn_lib_send_event(bc, EVENT_RELEASE_COMPLETE);
break;
case RESPONSE_OK:
cb_log(4, stack->port, "GOT SETUP OK\n");
break;
default:
+ cb_log(0, stack->port, "GOT UNKNOWN SETUP RESPONSE\n");
break;
}
break;
@@ -3301,12 +3225,6 @@
if (++mypid>5000) mypid=1;
bc->pid=mypid;
-#if 0
- bc->addr=0;
- bc->b_stid=0;
- bc->layer_id=0;
-#endif
-
bc->in_use = 1;
}
@@ -3691,8 +3609,13 @@
case EVENT_PROCEEDING:
case EVENT_SETUP_ACKNOWLEDGE:
case EVENT_CONNECT:
- if (!stack->nt)
+ if (!stack->nt) {
+ if (stack->ptp) {
+ setup_bc(bc);
+ }
break;
+ }
+ /* fall through */
case EVENT_RETRIEVE_ACKNOWLEDGE:
if (stack->nt) {
@@ -3788,6 +3711,11 @@
cb_log(0, bc->port, " --> we have already sent DISCONNECT\n");
RETURN(-1,OUT);
}
+ /* IE cause is mandatory for DISCONNECT, but optional for the answers to DISCONNECT.
+ * We must initialize cause, so it is later correctly indicated to ast_channel
+ * in case the answer does not include one!
+ */
+ bc->cause = bc->out_cause;
bc->need_disconnect=0;
break;
@@ -3962,24 +3890,6 @@
return 0;
}
-#if 0
-static int queue_l2l3(msg_t *msg)
-{
- iframe_t *frm= (iframe_t*)msg->data;
- struct misdn_stack *stack;
- stack=find_stack_by_addr( frm->addr );
-
-
- if (!stack) {
- return 0;
- }
-
- msg_queue_tail(&stack->upqueue, msg);
- sem_post(&glob_mgr->new_msg);
- return 1;
-}
-#endif
-
int manager_isdn_handler(iframe_t *frm ,msg_t *msg)
{
@@ -4004,7 +3914,7 @@
}
#ifdef RECV_FRM_SYSLOG_DEBUG
- syslog(LOG_NOTICE,"mISDN recv: P(%02d): ADDR:%x PRIM:%x DINFO:%x\n",stack->port, frm->addr, frm->prim, frm->dinfo);
+ syslog(LOG_NOTICE,"mISDN recv: ADDR:%x PRIM:%x DINFO:%x\n", frm->addr, frm->prim, frm->dinfo);
#endif
if (handle_timers(msg))
@@ -4025,7 +3935,7 @@
return 0;
}
- if (handle_frm(msg)) {
+ if (handle_frm_te(msg)) {
return 0;
}
@@ -4072,32 +3982,6 @@
return 0;
}
-
-int queue_cleanup_bc(struct misdn_bchannel *bc)
-{
- msg_t *msg=alloc_msg(MAX_MSG_SIZE);
- iframe_t *frm;
- if (!msg) {
- cb_log(0, bc->port, "queue_cleanup_bc: alloc_msg failed!\n");
- return -1;
- }
- frm=(iframe_t*)msg->data;
-
- /* activate bchannel */
- frm->prim = MGR_CLEARSTACK| REQUEST;
-
- frm->addr = bc->l3_id;
-
- frm->dinfo = bc->port;
- frm->len = 0;
-
- msg_queue_tail(&glob_mgr->activatequeue, msg);
- sem_post(&glob_mgr->new_msg);
-
- return 0;
-
-}
-
int misdn_lib_pid_restart(int pid)
{
struct misdn_bchannel *bc=manager_find_bc_by_pid(pid);
@@ -4210,28 +4094,6 @@
iframe_t *frm = (iframe_t*) msg->data ;
switch ( frm->prim) {
-
- case MGR_CLEARSTACK | REQUEST:
- /*a queued bchannel cleanup*/
- {
- struct misdn_stack *stack=find_stack_by_port(frm->dinfo);
- struct misdn_bchannel *bc;
- if (!stack) {
- cb_log(0,0,"no stack found with port [%d]!! so we cannot cleanup the bc\n",frm->dinfo);
- free_msg(msg);
- break;
- }
-
- bc = find_bc_by_l3id(stack, frm->addr);
- if (bc) {
- cb_log(1,bc->port,"CLEARSTACK queued, cleaning up\n");
- clean_up_bc(bc);
- } else {
- cb_log(0,stack->port,"bc could not be cleaned correctly !! addr [%x]\n",frm->addr);
- }
- }
- free_msg(msg);
- break;
case MGR_SETSTACK | REQUEST :
free_msg(msg);
break;
@@ -4244,18 +4106,6 @@
for (stack=glob_mgr->stack_list;
stack;
stack=stack->next ) {
-
- while ( (msg=msg_dequeue(&stack->upqueue)) ) {
- /** Handle L2/3 Signalling after bchans **/
- if (!handle_frm_nt(msg)) {
- /* Maybe it's TE */
- if (!handle_frm(msg)) {
- /* wow none! */
- cb_log(0,stack->port,"Wow we've got a strange issue while dequeueing a Frame\n");
- }
- }
- }
-
/* Here we should check if we really want to
send all the messages we've queued, lets
assume we've queued a Disconnect, but
@@ -4720,9 +4570,7 @@
{
struct misdn_bchannel *help;
- cb_log(4,stack?stack->port:0, "*HOLDER: find %lx\n",l3id);
-
- if (!stack) return NULL;
+ cb_log(4, stack->port, "*HOLDER: find %lx\n",l3id);
for (help=stack->holding;
help;
|
[-]
[+]
|
Changed |
asterisk-1.8.18.0.tar.xz/channels/misdn/isdn_lib.h
^
|
@@ -78,16 +78,9 @@
enum bchannel_state {
BCHAN_CLEANED=0,
BCHAN_EMPTY,
- BCHAN_SETUP,
- BCHAN_SETUPED,
- BCHAN_ACTIVE,
BCHAN_ACTIVATED,
- BCHAN_BRIDGE,
BCHAN_BRIDGED,
BCHAN_RELEASE,
- BCHAN_RELEASED,
- BCHAN_CLEAN,
- BCHAN_CLEAN_REQUEST,
BCHAN_ERROR
};
@@ -814,8 +807,6 @@
void misdn_lib_tone_generator_stop(struct misdn_bchannel *bc);
-void misdn_lib_setup_bc(struct misdn_bchannel *bc);
-
void misdn_lib_bridge( struct misdn_bchannel * bc1, struct misdn_bchannel *bc2);
void misdn_lib_split_bridge( struct misdn_bchannel * bc1, struct misdn_bchannel *bc2);
|
[-]
[+]
|
Changed |
asterisk-1.8.18.0.tar.xz/channels/misdn/isdn_msg_parser.c
^
|
@@ -484,9 +484,9 @@
{
int protocol ;
dec_ie_useruser(setup->USER_USER, (Q931_info_t *)setup, &protocol, bc->uu, &bc->uulen, nt,bc);
- if (bc->uulen) cb_log(1,bc->port,"USERUESRINFO:%s\n",bc->uu);
+ if (bc->uulen) cb_log(1, bc->port, "USERUSERINFO:%s\n", bc->uu);
else
- cb_log(1,bc->port,"NO USERUESRINFO\n");
+ cb_log(1, bc->port, "NO USERUSERINFO\n");
}
dec_ie_progress(setup->PROGRESS, (Q931_info_t *)setup, &bc->progress_coding, &bc->progress_location, &bc->progress_indicator, nt, bc);
@@ -618,7 +618,7 @@
if (bc->uulen) {
int protocol=4;
enc_ie_useruser(&setup->USER_USER, msg, protocol, bc->uu, bc->uulen, nt,bc);
- cb_log(1,bc->port,"ENCODING USERUESRINFO:%s\n",bc->uu);
+ cb_log(1, bc->port, "ENCODING USERUSERINFO:%s\n", bc->uu);
}
#if defined(AST_MISDN_ENHANCEMENTS)
@@ -1087,7 +1087,7 @@
if (bc->uulen) {
int protocol=4;
enc_ie_useruser(&disconnect->USER_USER, msg, protocol, bc->uu, bc->uulen, nt,bc);
- cb_log(1,bc->port,"ENCODING USERUESRINFO:%s\n",bc->uu);
+ cb_log(1, bc->port, "ENCODING USERUSERINFO:%s\n", bc->uu);
}
#ifdef DEBUG
@@ -1175,7 +1175,7 @@
if (bc->uulen) {
int protocol=4;
enc_ie_useruser(&release->USER_USER, msg, protocol, bc->uu, bc->uulen, nt,bc);
- cb_log(1,bc->port,"ENCODING USERUESRINFO:%s\n",bc->uu);
+ cb_log(1, bc->port, "ENCODING USERUSERINFO:%s\n", bc->uu);
}
#ifdef DEBUG
@@ -1237,7 +1237,7 @@
if (bc->uulen) {
int protocol=4;
enc_ie_useruser(&release_complete->USER_USER, msg, protocol, bc->uu, bc->uulen, nt,bc);
- cb_log(1,bc->port,"ENCODING USERUESRINFO:%s\n",bc->uu);
+ cb_log(1, bc->port, "ENCODING USERUSERINFO:%s\n", bc->uu);
}
#ifdef DEBUG
|
[-]
[+]
|
Changed |
asterisk-1.8.18.0.tar.xz/channels/sig_ss7.c
^
|
@@ -528,6 +528,7 @@
p->call_level = SIG_SS7_CALL_LEVEL_SETUP;
}
+ /* Companding law is determined by SS7 signaling type. */
if (linkset->type == SS7_ITU) {
law = SIG_SS7_ALAW;
} else {
@@ -1778,6 +1779,13 @@
{
struct ast_channel *ast;
+ /* Companding law is determined by SS7 signaling type. */
+ if (p->ss7->type == SS7_ITU) {
+ law = SIG_SS7_ALAW;
+ } else {
+ law = SIG_SS7_ULAW;
+ }
+
sig_ss7_set_outgoing(p, 1);
ast = sig_ss7_new_ast_channel(p, AST_STATE_RESERVED, law, transfercapability, p->exten, requestor);
if (!ast) {
|
[-]
[+]
|
Changed |
asterisk-1.8.18.0.tar.xz/channels/sip/include/sip.h
^
|
@@ -523,9 +523,15 @@
/*! \brief The entity playing the refresher role for Session-Timers */
enum st_refresher {
- SESSION_TIMER_REFRESHER_AUTO, /*!< Negotiated */
- SESSION_TIMER_REFRESHER_UAC, /*!< Session is refreshed by the UAC */
- SESSION_TIMER_REFRESHER_UAS /*!< Session is refreshed by the UAS */
+ SESSION_TIMER_REFRESHER_AUTO, /*!< Negotiated */
+ SESSION_TIMER_REFRESHER_US, /*!< Initially prefer session refresh by Asterisk */
+ SESSION_TIMER_REFRESHER_THEM, /*!< Initially prefer session refresh by the other side */
+};
+
+enum st_refresher_param {
+ SESSION_TIMER_REFRESHER_PARAM_UNKNOWN,
+ SESSION_TIMER_REFRESHER_PARAM_UAC,
+ SESSION_TIMER_REFRESHER_PARAM_UAS,
};
/*! \brief Define some implemented SIP transports
@@ -896,14 +902,14 @@
struct sip_st_dlg {
int st_active; /*!< Session-Timers on/off */
int st_interval; /*!< Session-Timers negotiated session refresh interval */
+ enum st_refresher st_ref; /*!< Session-Timers cached refresher */
int st_schedid; /*!< Session-Timers ast_sched scheduler id */
- enum st_refresher st_ref; /*!< Session-Timers session refresher */
int st_expirys; /*!< Session-Timers number of expirys */
int st_active_peer_ua; /*!< Session-Timers on/off in peer UA */
int st_cached_min_se; /*!< Session-Timers cached Min-SE */
int st_cached_max_se; /*!< Session-Timers cached Session-Expires */
enum st_mode st_cached_mode; /*!< Session-Timers cached M.O. */
- enum st_refresher st_cached_ref; /*!< Session-Timers cached refresher */
+ enum st_refresher st_cached_ref; /*!< Session-Timers session refresher */
unsigned char quit_flag:1; /*!< Stop trying to lock; just quit */
};
@@ -912,10 +918,10 @@
* of SIP Session-Timers feature on a per user/peer basis.
*/
struct sip_st_cfg {
- enum st_mode st_mode_oper; /*!< Mode of operation for Session-Timers */
- enum st_refresher st_ref; /*!< Session-Timer refresher */
- int st_min_se; /*!< Lowest threshold for session refresh interval */
- int st_max_se; /*!< Highest threshold for session refresh interval */
+ enum st_mode st_mode_oper; /*!< Mode of operation for Session-Timers */
+ enum st_refresher_param st_ref; /*!< Session-Timer refresher */
+ int st_min_se; /*!< Lowest threshold for session refresh interval */
+ int st_max_se; /*!< Highest threshold for session refresh interval */
};
/*! \brief Structure for remembering offered media in an INVITE, to make sure we reply
|
[-]
[+]
|
Changed |
asterisk-1.8.18.0.tar.xz/codecs/Makefile
^
|
@@ -17,37 +17,64 @@
MENUSELECT_CATEGORY=CODECS
MENUSELECT_DESCRIPTION=Codec Translators
-LIBILBC:=ilbc/libilbc.a
-LIBLPC10:=lpc10/liblpc10.a
+SUB_GSM := gsm
+
+SUB_ILBC := ilbc
+LIBILBC := $(SUB_ILBC)/libilbc.a
+
+SUB_LPC10 := lpc10
+LIBLPC10 := $(SUB_LPC10)/liblpc10.a
+
+SUB_DIRS := \
+ $(SUB_GSM) \
+ $(SUB_ILBC) \
+ $(SUB_LPC10) \
all: _all
include $(ASTTOPDIR)/Makefile.moddir_rules
ifneq ($(GSM_INTERNAL),no)
-GSM_INCLUDE:=-Igsm/inc
-$(if $(filter codec_gsm,$(EMBEDDED_MODS)),modules.link,codec_gsm.so): gsm/lib/libgsm.a
+GSM_INCLUDE := -I$(SUB_GSM)/inc
+endif
+
+$(SUB_GSM):
+ @mkdir -p $(SUB_GSM)/lib
+ @$(MAKE) -C $(SUB_GSM) lib/libgsm.a
+
+# Don't run the implicit rules for this target.
+$(SUB_GSM)/lib/libgsm.a: $(SUB_GSM) ;
+
+ifneq ($(GSM_INTERNAL),no)
+$(if $(filter codec_gsm,$(EMBEDDED_MODS)),modules.link,codec_gsm.so): $(SUB_GSM)/lib/libgsm.a
endif
clean::
- $(MAKE) -C gsm clean
- $(MAKE) -C lpc10 clean
- $(MAKE) -C ilbc clean
+ for dir in $(SUB_DIRS); do \
+ $(MAKE) -C $$dir clean; \
+ done
rm -f g722/*.[oa]
-gsm/lib/libgsm.a:
- @mkdir -p gsm/lib
- @$(MAKE) -C gsm lib/libgsm.a
+.PHONY: $(SUB_DIRS)
+
+$(SUB_LPC10):
+ @$(MAKE) -C $(SUB_LPC10) all
-$(LIBLPC10):
- @$(MAKE) -C lpc10 all
+# Don't run the implicit rules for this target.
+$(LIBLPC10): $(SUB_LPC10) ;
$(if $(filter codec_lpc10,$(EMBEDDED_MODS)),modules.link,codec_lpc10.so): $(LIBLPC10)
-$(LIBILBC):
- @$(MAKE) -C ilbc all _ASTCFLAGS="$(filter-out -Wmissing-prototypes -Wmissing-declarations -Wshadow,$(_ASTCFLAGS)) $(AST_NO_STRICT_OVERFLOW)"
+
+$(SUB_ILBC):
+ @$(MAKE) -C $(SUB_ILBC) all _ASTCFLAGS="$(filter-out -Wmissing-prototypes -Wmissing-declarations -Wshadow,$(_ASTCFLAGS)) $(AST_NO_STRICT_OVERFLOW)"
+
+# Don't run the implicit rules for this target.
+$(LIBILBC): $(SUB_ILBC) ;
$(if $(filter codec_ilbc,$(EMBEDDED_MODS)),modules.link,codec_ilbc.so): $(LIBILBC)
+
$(if $(filter codec_g722,$(EMBEDDED_MODS)),modules.link,codec_g722.so): g722/g722_encode.o g722/g722_decode.o
+
g722/g722_encode.o g722/g722_decode.o: _ASTCFLAGS+=$(call MOD_ASTCFLAGS,codec_g722)
|
[-]
[+]
|
Changed |
asterisk-1.8.18.0.tar.xz/codecs/ilbc/iLBC_decode.c
^
|
@@ -251,7 +251,7 @@
/* update memory */
- memcpy(mem, mem+SUBL, (CB_MEML-SUBL)*sizeof(float));
+ memmove(mem, mem+SUBL, (CB_MEML-SUBL)*sizeof(float));
memcpy(mem+CB_MEML-SUBL,
@@ -299,7 +299,7 @@
/* update memory */
- memcpy(mem, mem+SUBL, (CB_MEML-SUBL)*sizeof(float));
+ memmove(mem, mem+SUBL, (CB_MEML-SUBL)*sizeof(float));
memcpy(mem+CB_MEML-SUBL,
&reverseDecresidual[subframe*SUBL],
SUBL*sizeof(float));
|
[-]
[+]
|
Changed |
asterisk-1.8.18.0.tar.xz/codecs/ilbc/iLBC_encode.c
^
|
@@ -308,7 +308,7 @@
/* update memory */
- memcpy(mem, mem+SUBL, (CB_MEML-SUBL)*sizeof(float));
+ memmove(mem, mem+SUBL, (CB_MEML-SUBL)*sizeof(float));
memcpy(mem+CB_MEML-SUBL,
@@ -386,7 +386,7 @@
/* update memory */
- memcpy(mem, mem+SUBL, (CB_MEML-SUBL)*sizeof(float));
+ memmove(mem, mem+SUBL, (CB_MEML-SUBL)*sizeof(float));
memcpy(mem+CB_MEML-SUBL,
&reverseDecresidual[subframe*SUBL],
SUBL*sizeof(float));
|
[-]
[+]
|
Changed |
asterisk-1.8.18.0.tar.xz/configs/agents.conf.sample
^
|
@@ -3,9 +3,6 @@
;
[general]
-; Enable or disable a single extension from logging in as multiple agents.
-; The default value is "yes".
-;multiplelogin=yes
[agents]
;
|
[-]
[+]
|
Changed |
asterisk-1.8.18.0.tar.xz/configs/dsp.conf.sample
^
|
@@ -5,3 +5,39 @@
; to talking. [default=256]
;
;silencethreshold=256
+
+; DTMF Reverse Twist and Normal Twist is the difference in power between the row and column energies.
+;
+; Normal Twist is where the Column energy is greater than the Row energy
+; Reverse Twist is where the Row energy is greater.
+;
+; Power level difference between frequencies for different Administrations/RPOAs
+; Power Gain equiv
+; normal reverse dB's
+; AT&T(default) 6.31 2.51 8dB(normal), 4dB(reverse)
+; NTT 3.16 3.16 Max. 5dB
+; Danish 3.98 3.98 Max. 6dB
+; Australian 10.0 10.0 Max. 10dB
+; Brazilian 7.94 7.94 Max. 9dB
+; ETSI 3.98 3.98 Max. 6dB
+
+;previous version compatible AT&T values
+; RADIO_RELAX disabled, and relaxdtmf=no
+; 6.30 2.50 7.99dB(normal), 3.98dB(reverse)
+; RADIO_RELAX disabled, and relaxdtmf=yes
+; 6.30 4.00 7.99dB(normal), 6.02dB(reverse)
+; RADIO_RELAX enabled, and relaxdtmf=no
+; 6.30 2.50 7.99dB(normal), 3.984dB(reverse)
+; RADIO_RELAX enabled, and relaxdtmf=yes
+; 6.30 6.50 7.99dB(normal), 8.13dB(reverse)
+
+;If you don't know what these mean, don't change them.
+;dtmf_normal_twist=6.31
+;dtmf_reverse_twist=2.51
+;relax_dtmf_normal_twist=6.31
+;relax_dtmf_reverse_twist=3.98
+
+;successive number hits/misses of 12.75ms before a digit/nodigit is considered valid
+;dtmf_hits_to_begin=2
+;dtmf_misses_to_end=3
+
|
[-]
[+]
|
Changed |
asterisk-1.8.18.0.tar.xz/configs/res_odbc.conf.sample
^
|
@@ -23,7 +23,7 @@
; (or /usr/local/etc/odbc.ini, on FreeBSD and similar systems).
dsn => asterisk
;
-; Username for connecting to the database. The default user is "root".
+; Username for connecting to the database. The user defaults to the context name if unspecified.
;username => myuser
;
; Password for authenticating the user to the database. The default
|
[-]
[+]
|
Changed |
asterisk-1.8.18.0.tar.xz/configs/sip.conf.sample
^
|
@@ -545,11 +545,20 @@
; * session-expires - Maximum session refresh interval in seconds. Defaults to 1800 secs.
; * session-minse - Minimum session refresh interval in seconds. Defualts to 90 secs.
; * session-refresher - The session refresher (uac|uas). Defaults to 'uas'.
+; uac - Default to the caller initially refreshing when possible
+; uas - Default to the callee initially refreshing when possible
+;
+; Note that, due to recommendations in RFC 4028, Asterisk will always honor the other
+; endpoint's preference for who will handle refreshes. Asterisk will never override the
+; preferences of the other endpoint. Doing so could result in Asterisk and the endpoint
+; fighting over who sends the refreshes. This holds true for the initiation of session
+; timers and subsequent re-INVITE requests whether Asterisk is the caller or callee, or
+; whether Asterisk is currently the refresher or not.
;
;session-timers=originate
;session-expires=600
;session-minse=90
-;session-refresher=uas
+;session-refresher=uac
;
;--------------------------- SIP DEBUGGING ---------------------------------------------------
;sipdebug = yes ; Turn on SIP debugging by default, from
|
[-]
[+]
|
Changed |
asterisk-1.8.18.0.tar.xz/funcs/func_audiohookinherit.c
^
|
@@ -53,7 +53,9 @@
<enum name="Chanspy" />
<enum name="Volume" />
<enum name="Speex" />
+ <enum name="pitch_shift" />
<enum name="JACK_HOOK" />
+ <enum name="Mute" />
</enumlist>
<para>Note that the names are not case-sensitive</para>
</parameter>
|
[-]
[+]
|
Changed |
asterisk-1.8.18.0.tar.xz/include/asterisk/astdb.h
^
|
@@ -36,6 +36,17 @@
/*!\brief Get key value specified by family/key */
int ast_db_get(const char *family, const char *key, char *out, int outlen);
+/*!\brief Get key value specified by family/key as a heap allocated string.
+ *
+ * Given a \a family and \a key, sets \a out to a pointer to a heap
+ * allocated string. In the event of an error, \a out will be set to
+ * NULL. The string must be freed by calling ast_free().
+ *
+ * \retval -1 An error occurred
+ * \retval 0 Success
+ */
+int ast_db_get_allocated(const char *family, const char *key, char **out);
+
/*!\brief Store value addressed by family/key */
int ast_db_put(const char *family, const char *key, const char *value);
|
[-]
[+]
|
Changed |
asterisk-1.8.18.0.tar.xz/include/asterisk/channel.h
^
|
@@ -1874,7 +1874,7 @@
/*!
* \brief Waits for a digit
* \param c channel to wait for a digit on
- * \param ms how many milliseconds to wait
+ * \param ms how many milliseconds to wait (<0 for indefinite).
* \return Returns <0 on error, 0 on no entry, and the digit on success.
*/
int ast_waitfordigit(struct ast_channel *c, int ms);
@@ -1883,7 +1883,7 @@
* \brief Wait for a digit
* Same as ast_waitfordigit() with audio fd for outputting read audio and ctrlfd to monitor for reading.
* \param c channel to wait for a digit on
- * \param ms how many milliseconds to wait
+ * \param ms how many milliseconds to wait (<0 for indefinite).
* \param audiofd audio file descriptor to write to if audio frames are received
* \param ctrlfd control file descriptor to monitor for reading
* \return Returns 1 if ctrlfd becomes available
|
[-]
[+]
|
Changed |
asterisk-1.8.18.0.tar.xz/main/asterisk.c
^
|
@@ -65,7 +65,7 @@
#include "asterisk.h"
-ASTERISK_FILE_VERSION(__FILE__, "$Revision: 370642 $")
+ASTERISK_FILE_VERSION(__FILE__, "$Revision: 374230 $")
#include "asterisk/_private.h"
@@ -1763,6 +1763,15 @@
}
}
}
+ /* The manager event for shutdown must happen prior to ast_run_atexits, as
+ * the manager interface will dispose of its sessions as part of its
+ * shutdown.
+ */
+ manager_event(EVENT_FLAG_SYSTEM, "Shutdown", "Shutdown: %s\r\n"
+ "Restart: %s\r\n",
+ ast_active_channels() ? "Uncleanly" : "Cleanly",
+ restart ? "True" : "False");
+
if (option_verbose)
ast_verbose("Executing last minute cleanups\n");
ast_run_atexits();
@@ -1770,7 +1779,6 @@
if (option_verbose && ast_opt_console)
ast_verbose("Asterisk %s ending (%d).\n", ast_active_channels() ? "uncleanly" : "cleanly", num);
ast_debug(1, "Asterisk ending (%d).\n", num);
- manager_event(EVENT_FLAG_SYSTEM, "Shutdown", "Shutdown: %s\r\nRestart: %s\r\n", ast_active_channels() ? "Uncleanly" : "Cleanly", restart ? "True" : "False");
if (ast_socket > -1) {
pthread_cancel(lthread);
close(ast_socket);
|
[-]
[+]
|
Changed |
asterisk-1.8.18.0.tar.xz/main/ccss.c
^
|
@@ -27,7 +27,7 @@
#include "asterisk.h"
-ASTERISK_FILE_VERSION(__FILE__, "$Revision: 370183 $")
+ASTERISK_FILE_VERSION(__FILE__, "$Revision: 374316 $")
#include "asterisk/astobj2.h"
#include "asterisk/strings.h"
@@ -4310,6 +4310,31 @@
AST_CLI_DEFINE(handle_cc_kill, "Kill a CC transaction"),
};
+static void cc_shutdown(void)
+{
+ ast_devstate_prov_del("ccss");
+ ast_cc_agent_unregister(&generic_agent_callbacks);
+ ast_cc_monitor_unregister(&generic_monitor_cbs);
+ ast_unregister_application(cccancel_app);
+ ast_unregister_application(ccreq_app);
+
+ if (cc_sched_thread) {
+ cc_sched_thread = ast_sched_thread_destroy(cc_sched_thread);
+ }
+ if (cc_core_taskprocessor) {
+ cc_core_taskprocessor = ast_taskprocessor_unreference(cc_core_taskprocessor);
+ }
+ /* Note that cc_core_instances must be disposed of prior to generic_monitors */
+ if (cc_core_instances) {
+ ao2_t_ref(cc_core_instances, -1, "Unref cc_core_instances container in cc_shutdown");
+ cc_core_instances = NULL;
+ }
+ if (generic_monitors) {
+ ao2_t_ref(generic_monitors, -1, "Unref generic_monitor container in cc_shutdown");
+ generic_monitors = NULL;
+ }
+}
+
int ast_cc_init(void)
{
int res;
@@ -4338,5 +4363,6 @@
cc_logger_level = ast_logger_register_level(CC_LOGGER_LEVEL_NAME);
dialed_cc_interface_counter = 1;
initialize_cc_max_requests();
+ ast_register_atexit(cc_shutdown);
return res;
}
|
[-]
[+]
|
Changed |
asterisk-1.8.18.0.tar.xz/main/cel.c
^
|
@@ -33,7 +33,7 @@
#include "asterisk.h"
-ASTERISK_FILE_VERSION(__FILE__, "$Revision: 370275 $")
+ASTERISK_FILE_VERSION(__FILE__, "$Revision: 374177 $")
#include "asterisk/_private.h"
@@ -711,6 +711,10 @@
ao2_ref(appset, -1);
appset = NULL;
}
+ if (linkedids) {
+ ao2_ref(linkedids, -1);
+ linkedids = NULL;
+ }
}
int ast_cel_engine_init(void)
|
[-]
[+]
|
Changed |
asterisk-1.8.18.0.tar.xz/main/channel.c
^
|
@@ -29,7 +29,7 @@
#include "asterisk.h"
-ASTERISK_FILE_VERSION(__FILE__, "$Revision: 372736 $")
+ASTERISK_FILE_VERSION(__FILE__, "$Revision: 374177 $")
#include "asterisk/_private.h"
@@ -3515,7 +3515,6 @@
return ms;
}
-/* XXX never to be called with ms = -1 */
int ast_waitfordigit(struct ast_channel *c, int ms)
{
return ast_waitfordigit_full(c, ms, -1, -1);
@@ -3564,8 +3563,10 @@
return res;
}
-int ast_waitfordigit_full(struct ast_channel *c, int ms, int audiofd, int cmdfd)
+int ast_waitfordigit_full(struct ast_channel *c, int timeout_ms, int audiofd, int cmdfd)
{
+ struct timeval start = ast_tvnow();
+
/* Stop if we're a zombie or need a soft hangup */
if (ast_test_flag(c, AST_FLAG_ZOMBIE) || ast_check_hangup(c))
return -1;
@@ -3573,15 +3574,29 @@
/* Only look for the end of DTMF, don't bother with the beginning and don't emulate things */
ast_set_flag(c, AST_FLAG_END_DTMF_ONLY);
- /* Wait for a digit, no more than ms milliseconds total. */
-
- while (ms) {
+ /* Wait for a digit, no more than timeout_ms milliseconds total.
+ * Or, wait indefinitely if timeout_ms is <0.
+ */
+ while (ast_tvdiff_ms(ast_tvnow(), start) < timeout_ms || timeout_ms < 0) {
struct ast_channel *rchan;
int outfd=-1;
+ int ms;
+
+ if (timeout_ms < 0) {
+ ms = timeout_ms;
+ } else {
+ ms = timeout_ms - ast_tvdiff_ms(ast_tvnow(), start);
+ if (ms < 0) {
+ ms = 0;
+ }
+ }
errno = 0;
+ /* While ast_waitfor_nandfds tries to help by reducing the timeout by how much was waited,
+ * it is unhelpful if it waited less than a millisecond.
+ */
rchan = ast_waitfor_nandfds(&c, 1, &cmdfd, (cmdfd > -1) ? 1 : 0, NULL, &outfd, &ms);
-
+
if (!rchan && outfd < 0 && ms) {
if (errno == 0 || errno == EINTR)
continue;
@@ -8047,6 +8062,15 @@
AST_DATA_ENTRY("/asterisk/core/channeltypes", &channeltypes_provider),
};
+static void channels_shutdown(void)
+{
+ ast_data_unregister(NULL);
+ if (channels) {
+ ao2_ref(channels, -1);
+ channels = NULL;
+ }
+}
+
void ast_channels_init(void)
{
channels = ao2_container_alloc(NUM_CHANNEL_BUCKETS,
@@ -8057,6 +8081,8 @@
ast_data_register_multiple_core(channel_providers, ARRAY_LEN(channel_providers));
ast_plc_reload();
+
+ ast_register_atexit(channels_shutdown);
}
/*! \brief Print call group and pickup group ---*/
|
[-]
[+]
|
Changed |
asterisk-1.8.18.0.tar.xz/main/data.c
^
|
@@ -28,7 +28,7 @@
#include "asterisk.h"
-ASTERISK_FILE_VERSION(__FILE__, "$Revision: 369001 $")
+ASTERISK_FILE_VERSION(__FILE__, "$Revision: 374177 $")
#include "asterisk/_private.h"
@@ -3282,6 +3282,14 @@
#endif
+/*! \internal \brief Clean up resources on Asterisk shutdown */
+static void data_shutdown(void)
+{
+ ast_manager_unregister("DataGet");
+ ao2_t_ref(root_data.container, -1, "Unref root_data.container in data_shutdown");
+ ast_rwlock_destroy(&root_data.lock);
+}
+
int ast_data_init(void)
{
int res = 0;
@@ -3301,5 +3309,7 @@
AST_TEST_REGISTER(test_data_get);
#endif
+ ast_register_atexit(data_shutdown);
+
return res;
}
|
[-]
[+]
|
Changed |
asterisk-1.8.18.0.tar.xz/main/db.c
^
|
@@ -33,7 +33,7 @@
#include "asterisk.h"
-ASTERISK_FILE_VERSION(__FILE__, "$Revision: 369001 $")
+ASTERISK_FILE_VERSION(__FILE__, "$Revision: 374426 $")
#include "asterisk/_private.h"
#include "asterisk/paths.h" /* use ast_config_AST_DB */
@@ -167,6 +167,16 @@
return S_OR(dbt_data2str(dbt), def);
}
+/*!
+ * \internal
+ * \brief Invoke a callback function on all keys, using given data and filter.
+ *
+ * \param cb Callback function to invoke (itself returns number of keys it affected).
+ * \param data Value to pass to cb's data param.
+ * \param filter Value to pass to cb's filter param.
+ * \param sync If non-zero, call db_sync() when done.
+ * \return Number of keys affected by the callback, or -1 if database is unavailable.
+ */
static int process_db_keys(process_keys_cb cb, void *data, const char *filter, int sync)
{
DBT key = { 0, }, value = { 0, }, last_key = { 0, };
@@ -271,7 +281,21 @@
return res;
}
-int ast_db_get(const char *family, const char *keys, char *value, int valuelen)
+/*!
+ * \internal
+ * \brief Get key value specified by family/key.
+ *
+ * Gets the value associated with the specified \a family and \a keys, and
+ * stores it, either into the fixed sized buffer specified by \a buffer
+ * and \a bufferlen, or as a heap allocated string if \a bufferlen is -1.
+ *
+ * \note If \a bufferlen is -1, \a buffer points to heap allocated memory
+ * and must be freed by calling ast_free().
+ *
+ * \retval -1 An error occurred
+ * \retval 0 Success
+ */
+static int db_get_common(const char *family, const char *keys, char **buffer, int bufferlen)
{
char fullkey[MAX_DB_FIELD] = "";
DBT key, data;
@@ -286,7 +310,6 @@
fullkeylen = snprintf(fullkey, sizeof(fullkey), "/%s/%s", family, keys);
memset(&key, 0, sizeof(key));
memset(&data, 0, sizeof(data));
- memset(value, 0, valuelen);
key.data = fullkey;
key.size = fullkeylen + 1;
@@ -296,13 +319,16 @@
if (res) {
ast_debug(1, "Unable to find key '%s' in family '%s'\n", keys, family);
} else {
-#if 0
- printf("Got value of size %d\n", data.size);
-#endif
if (data.size) {
((char *)data.data)[data.size - 1] = '\0';
- /* Make sure that we don't write too much to the dst pointer or we don't read too much from the source pointer */
- ast_copy_string(value, data.data, (valuelen > data.size) ? data.size : valuelen);
+
+ if (bufferlen == -1) {
+ *buffer = ast_strdup(data.data);
+ } else {
+ /* Make sure that we don't write too much to the dst pointer or we don't
+ * read too much from the source pointer */
+ ast_copy_string(*buffer, data.data, bufferlen > data.size ? data.size : bufferlen);
+ }
} else {
ast_log(LOG_NOTICE, "Strange, empty value for /%s/%s\n", family, keys);
}
@@ -315,6 +341,23 @@
return res;
}
+int ast_db_get(const char *family, const char *keys, char *value, int valuelen)
+{
+ ast_assert(value != NULL);
+
+ /* Make sure we initialize */
+ value[0] = 0;
+
+ return db_get_common(family, keys, &value, valuelen);
+}
+
+int ast_db_get_allocated(const char *family, const char *keys, char **out)
+{
+ *out = NULL;
+
+ return db_get_common(family, keys, out, -1);
+}
+
int ast_db_del(const char *family, const char *keys)
{
char fullkey[MAX_DB_FIELD];
@@ -427,7 +470,7 @@
static char *handle_cli_database_deltree(struct ast_cli_entry *e, int cmd, struct ast_cli_args *a)
{
- int res;
+ int num_deleted;
switch (cmd) {
case CLI_INIT:
@@ -446,14 +489,16 @@
if ((a->argc < 3) || (a->argc > 4))
return CLI_SHOWUSAGE;
if (a->argc == 4) {
- res = ast_db_deltree(a->argv[2], a->argv[3]);
+ num_deleted = ast_db_deltree(a->argv[2], a->argv[3]);
} else {
- res = ast_db_deltree(a->argv[2], NULL);
+ num_deleted = ast_db_deltree(a->argv[2], NULL);
}
- if (res < 0) {
+ if (num_deleted < 0) {
+ ast_cli(a->fd, "Database unavailable.\n");
+ } else if (num_deleted == 0) {
ast_cli(a->fd, "Database entries do not exist.\n");
} else {
- ast_cli(a->fd, "%d database entries removed.\n",res);
+ ast_cli(a->fd, "%d database entries removed.\n",num_deleted);
}
return CLI_SUCCESS;
}
@@ -718,23 +763,27 @@
{
const char *family = astman_get_header(m, "Family");
const char *key = astman_get_header(m, "Key");
- int res;
+ int num_deleted;
if (ast_strlen_zero(family)) {
astman_send_error(s, m, "No family specified.");
return 0;
}
- if (!ast_strlen_zero(key))
- res = ast_db_deltree(family, key);
- else
- res = ast_db_deltree(family, NULL);
+ if (!ast_strlen_zero(key)) {
+ num_deleted = ast_db_deltree(family, key);
+ } else {
+ num_deleted = ast_db_deltree(family, NULL);
+ }
- if (res < 0)
+ if (num_deleted < 0) {
+ astman_send_error(s, m, "Database unavailable");
+ } else if (num_deleted == 0) {
astman_send_error(s, m, "Database entry not found");
- else
+ } else {
astman_send_ack(s, m, "Key tree deleted successfully");
-
+ }
+
return 0;
}
|
[-]
[+]
|
Changed |
asterisk-1.8.18.0.tar.xz/main/dsp.c
^
|
@@ -46,7 +46,7 @@
#include "asterisk.h"
-ASTERISK_FILE_VERSION(__FILE__, "$Revision: 372339 $")
+ASTERISK_FILE_VERSION(__FILE__, "$Revision: 374479 $")
#include <math.h>
@@ -146,7 +146,7 @@
#define MAX_DTMF_DIGITS 128
-/* Basic DTMF specs:
+/* Basic DTMF (AT&T) specs:
*
* Minimum tone on = 40ms
* Minimum tone off = 50ms
@@ -161,12 +161,18 @@
#define DTMF_THRESHOLD 8.0e7
#define FAX_THRESHOLD 8.0e7
#define FAX_2ND_HARMONIC 2.0 /* 4dB */
-#define DTMF_NORMAL_TWIST 6.3 /* 8dB */
+
+#define DEF_DTMF_NORMAL_TWIST 6.31 /* 8.0dB */
+#define DEF_RELAX_DTMF_NORMAL_TWIST 6.31 /* 8.0dB */
+
#ifdef RADIO_RELAX
-#define DTMF_REVERSE_TWIST (relax ? 6.5 : 2.5) /* 4dB normal */
+#define DEF_DTMF_REVERSE_TWIST 2.51 /* 4.01dB */
+#define DEF_RELAX_DTMF_REVERSE_TWIST 6.61 /* 8.2dB */
#else
-#define DTMF_REVERSE_TWIST (relax ? 4.0 : 2.5) /* 4dB normal */
+#define DEF_DTMF_REVERSE_TWIST 2.51 /* 4.01dB */
+#define DEF_RELAX_DTMF_REVERSE_TWIST 3.98 /* 6.0dB */
#endif
+
#define DTMF_RELATIVE_PEAK_ROW 6.3 /* 8dB */
#define DTMF_RELATIVE_PEAK_COL 6.3 /* 8dB */
#define DTMF_2ND_HARMONIC_ROW (relax ? 1.7 : 2.5) /* 4dB normal */
@@ -212,10 +218,15 @@
/* DTMF goertzel size */
#define DTMF_GSIZE 102
-/* How many successive hits needed to consider begin of a digit */
-#define DTMF_HITS_TO_BEGIN 2
-/* How many successive misses needed to consider end of a digit */
-#define DTMF_MISSES_TO_END 3
+/* How many successive hits needed to consider begin of a digit
+ * IE. Override with dtmf_hits_to_begin=4 in dsp.conf
+ */
+#define DEF_DTMF_HITS_TO_BEGIN 2
+
+/* How many successive misses needed to consider end of a digit
+ * IE. Override with dtmf_misses_to_end=4 in dsp.conf
+ */
+#define DEF_DTMF_MISSES_TO_END 3
/*!
* \brief The default silence threshold we will use if an alternate
@@ -260,8 +271,6 @@
{
goertzel_state_t row_out[4];
goertzel_state_t col_out[4];
- int hits_to_begin; /* How many successive hits needed to consider begin of a digit */
- int misses_to_end; /* How many successive misses needed to consider end of a digit */
int hits; /* How many successive hits we have seen already */
int misses; /* How many successive misses we have seen already */
int lasthit;
@@ -306,6 +315,12 @@
static const char dtmf_positions[] = "123A" "456B" "789C" "*0#D";
static const char bell_mf_positions[] = "1247C-358A--69*---0B----#";
static int thresholds[THRESHOLD_MAX];
+static float dtmf_normal_twist; /* AT&T = 8dB */
+static float dtmf_reverse_twist; /* AT&T = 4dB */
+static float relax_dtmf_normal_twist; /* AT&T = 8dB */
+static float relax_dtmf_reverse_twist; /* AT&T = 6dB */
+static int dtmf_hits_to_begin; /* How many successive hits needed to consider begin of a digit */
+static int dtmf_misses_to_end; /* How many successive misses needed to consider end of a digit */
static inline void goertzel_sample(goertzel_state_t *s, short sample)
{
@@ -494,9 +509,6 @@
s->current_sample = 0;
s->hits = 0;
s->misses = 0;
-
- s->hits_to_begin = DTMF_HITS_TO_BEGIN;
- s->misses_to_end = DTMF_MISSES_TO_END;
}
static void ast_mf_detect_init (mf_detect_state_t *s)
@@ -709,8 +721,8 @@
/* Basic signal level test and the twist test */
if (row_energy[best_row] >= DTMF_THRESHOLD &&
col_energy[best_col] >= DTMF_THRESHOLD &&
- col_energy[best_col] < row_energy[best_row] * DTMF_REVERSE_TWIST &&
- col_energy[best_col] * DTMF_NORMAL_TWIST > row_energy[best_row]) {
+ col_energy[best_col] < row_energy[best_row] * (relax ? relax_dtmf_reverse_twist : dtmf_reverse_twist) &&
+ row_energy[best_row] < col_energy[best_col] * (relax ? relax_dtmf_normal_twist : dtmf_normal_twist)) {
/* Relative peak test */
for (i = 0; i < 4; i++) {
if ((i != best_col &&
@@ -786,7 +798,7 @@
/* We are in the middle of a digit already */
if (hit != s->td.dtmf.current_hit) {
s->td.dtmf.misses++;
- if (s->td.dtmf.misses == s->td.dtmf.misses_to_end) {
+ if (s->td.dtmf.misses == dtmf_misses_to_end) {
/* There were enough misses to consider digit ended */
s->td.dtmf.current_hit = 0;
}
@@ -807,8 +819,9 @@
}
if (hit && hit != s->td.dtmf.current_hit) {
s->td.dtmf.hits++;
- if (s->td.dtmf.hits == s->td.dtmf.hits_to_begin) {
+ if (s->td.dtmf.hits == dtmf_hits_to_begin) {
store_digit(s, hit);
+ s->digitlen[s->current_digits - 1] = dtmf_hits_to_begin * DTMF_GSIZE;
s->td.dtmf.current_hit = hit;
s->td.dtmf.misses = 0;
}
@@ -1734,33 +1747,89 @@
static int _dsp_init(int reload)
{
- struct ast_flags config_flags = { reload ? CONFIG_FLAG_FILEUNCHANGED : 0 };
struct ast_config *cfg;
+ struct ast_variable *v;
+ struct ast_flags config_flags = { reload ? CONFIG_FLAG_FILEUNCHANGED : 0 };
+ int cfg_threshold;
+ float cfg_twist;
- cfg = ast_config_load2(CONFIG_FILE_NAME, "dsp", config_flags);
- if (cfg == CONFIG_STATUS_FILEMISSING || cfg == CONFIG_STATUS_FILEINVALID) {
- ast_verb(5, "Can't find dsp config file %s. Assuming default silencethreshold of %d.\n", CONFIG_FILE_NAME, DEFAULT_SILENCE_THRESHOLD);
- thresholds[THRESHOLD_SILENCE] = DEFAULT_SILENCE_THRESHOLD;
+ if ((cfg = ast_config_load2(CONFIG_FILE_NAME, "dsp", config_flags)) == CONFIG_STATUS_FILEUNCHANGED) {
return 0;
}
- if (cfg == CONFIG_STATUS_FILEUNCHANGED) {
+ thresholds[THRESHOLD_SILENCE] = DEFAULT_SILENCE_THRESHOLD;
+ dtmf_normal_twist = DEF_DTMF_NORMAL_TWIST;
+ dtmf_reverse_twist = DEF_DTMF_REVERSE_TWIST;
+ relax_dtmf_normal_twist = DEF_RELAX_DTMF_NORMAL_TWIST;
+ relax_dtmf_reverse_twist = DEF_RELAX_DTMF_REVERSE_TWIST;
+ dtmf_hits_to_begin = DEF_DTMF_HITS_TO_BEGIN;
+ dtmf_misses_to_end = DEF_DTMF_MISSES_TO_END;
+
+ if (cfg == CONFIG_STATUS_FILEMISSING || cfg == CONFIG_STATUS_FILEINVALID) {
return 0;
}
- if (cfg) {
- const char *value;
-
- value = ast_variable_retrieve(cfg, "default", "silencethreshold");
- if (value && sscanf(value, "%30d", &thresholds[THRESHOLD_SILENCE]) != 1) {
- ast_verb(5, "%s: '%s' is not a valid silencethreshold value\n", CONFIG_FILE_NAME, value);
- thresholds[THRESHOLD_SILENCE] = DEFAULT_SILENCE_THRESHOLD;
- } else if (!value) {
- thresholds[THRESHOLD_SILENCE] = DEFAULT_SILENCE_THRESHOLD;
+ for (v = ast_variable_browse(cfg, "default"); v; v = v->next) {
+ if (!strcasecmp(v->name, "silencethreshold")) {
+ if (sscanf(v->value, "%30d", &cfg_threshold) < 1) {
+ ast_log(LOG_WARNING, "Unable to convert '%s' to a numeric value.\n", v->value);
+ } else if (cfg_threshold < 0) {
+ ast_log(LOG_WARNING, "Invalid silence threshold '%d' specified, using default\n", cfg_threshold);
+ } else {
+ thresholds[THRESHOLD_SILENCE] = cfg_threshold;
+ }
+ } else if (!strcasecmp(v->name, "dtmf_normal_twist")) {
+ if (sscanf(v->value, "%30f", &cfg_twist) < 1) {
+ ast_log(LOG_WARNING, "Unable to convert '%s' to a numeric value.\n", v->value);
+ } else if ((cfg_twist < 2.0) || (cfg_twist > 100.0)) { /* < 3.0dB or > 20dB */
+ ast_log(LOG_WARNING, "Invalid dtmf_normal_twist value '%.2f' specified, using default of %.2f\n", cfg_twist, dtmf_normal_twist);
+ } else {
+ dtmf_normal_twist = cfg_twist;
+ }
+ } else if (!strcasecmp(v->name, "dtmf_reverse_twist")) {
+ if (sscanf(v->value, "%30f", &cfg_twist) < 1) {
+ ast_log(LOG_WARNING, "Unable to convert '%s' to a numeric value.\n", v->value);
+ } else if ((cfg_twist < 2.0) || (cfg_twist > 100.0)) { /* < 3.0dB or > 20dB */
+ ast_log(LOG_WARNING, "Invalid dtmf_reverse_twist value '%.2f' specified, using default of %.2f\n", cfg_twist, dtmf_reverse_twist);
+ } else {
+ dtmf_reverse_twist = cfg_twist;
+ }
+ } else if (!strcasecmp(v->name, "relax_dtmf_normal_twist")) {
+ if (sscanf(v->value, "%30f", &cfg_twist) < 1) {
+ ast_log(LOG_WARNING, "Unable to convert '%s' to a numeric value.\n", v->value);
+ } else if ((cfg_twist < 2.0) || (cfg_twist > 100.0)) { /* < 3.0dB or > 20dB */
+ ast_log(LOG_WARNING, "Invalid relax_dtmf_normal_twist value '%.2f' specified, using default of %.2f\n", cfg_twist, relax_dtmf_normal_twist);
+ } else {
+ relax_dtmf_normal_twist = cfg_twist;
+ }
+ } else if (!strcasecmp(v->name, "relax_dtmf_reverse_twist")) {
+ if (sscanf(v->value, "%30f", &cfg_twist) < 1) {
+ ast_log(LOG_WARNING, "Unable to convert '%s' to a numeric value.\n", v->value);
+ } else if ((cfg_twist < 2.0) || (cfg_twist > 100.0)) { /* < 3.0dB or > 20dB */
+ ast_log(LOG_WARNING, "Invalid relax_dtmf_reverse_twist value '%.2f' specified, using default of %.2f\n", cfg_twist, relax_dtmf_reverse_twist);
+ } else {
+ relax_dtmf_reverse_twist = cfg_twist;
+ }
+ } else if (!strcasecmp(v->name, "dtmf_hits_to_begin")) {
+ if (sscanf(v->value, "%30d", &cfg_threshold) < 1) {
+ ast_log(LOG_WARNING, "Unable to convert '%s' to a numeric value.\n", v->value);
+ } else if (cfg_threshold < 1) { /* must be 1 or greater */
+ ast_log(LOG_WARNING, "Invalid dtmf_hits_to_begin value '%d' specified, using default of %d\n", cfg_threshold, dtmf_hits_to_begin);
+ } else {
+ dtmf_hits_to_begin = cfg_threshold;
+ }
+ } else if (!strcasecmp(v->name, "dtmf_misses_to_end")) {
+ if (sscanf(v->value, "%30d", &cfg_threshold) < 1) {
+ ast_log(LOG_WARNING, "Unable to convert '%s' to a numeric value.\n", v->value);
+ } else if (cfg_threshold < 1) { /* must be 1 or greater */
+ ast_log(LOG_WARNING, "Invalid dtmf_misses_to_end value '%d' specified, using default of %d\n", cfg_threshold, dtmf_misses_to_end);
+ } else {
+ dtmf_misses_to_end = cfg_threshold;
+ }
}
-
- ast_config_destroy(cfg);
}
+ ast_config_destroy(cfg);
+
return 0;
}
@@ -1778,4 +1847,3 @@
{
return _dsp_init(1);
}
-
|
[-]
[+]
|
Changed |
asterisk-1.8.18.0.tar.xz/main/event.c
^
|
@@ -29,7 +29,7 @@
#include "asterisk.h"
-ASTERISK_FILE_VERSION(__FILE__, "$Revision: 370642 $")
+ASTERISK_FILE_VERSION(__FILE__, "$Revision: 374177 $")
#include "asterisk/_private.h"
@@ -1777,6 +1777,38 @@
AST_CLI_DEFINE(event_dump_cache, "Dump the internal event cache (for debugging)"),
};
+/*! \internal \brief Clean up resources on Asterisk shutdown */
+static void event_shutdown(void)
+{
+ struct ast_event_sub *sub;
+ int i;
+
+ if (event_dispatcher) {
+ event_dispatcher = ast_taskprocessor_unreference(event_dispatcher);
+ }
+
+ /* Remove any remaining subscriptions. Note that we can't just call
+ * unsubscribe, as it will attempt to lock the subscription list
+ * as well */
+ for (i = 0; i < AST_EVENT_TOTAL; i++) {
+ AST_RWDLLIST_WRLOCK(&ast_event_subs[i]);
+ while ((sub = AST_RWDLLIST_REMOVE_HEAD(&ast_event_subs[i], entry))) {
+ ast_event_sub_destroy(sub);
+ }
+ AST_RWDLLIST_UNLOCK(&ast_event_subs[i]);
+ AST_RWDLLIST_HEAD_DESTROY(&ast_event_subs[i]);
+ }
+
+ for (i = 0; i < AST_EVENT_TOTAL; i++) {
+ if (!ast_event_cache[i].hash_fn) {
+ continue;
+ }
+ if (ast_event_cache[i].container) {
+ ao2_ref(ast_event_cache[i].container, -1);
+ }
+ }
+}
+
int ast_event_init(void)
{
int i;
@@ -1793,17 +1825,23 @@
if (!(ast_event_cache[i].container = ao2_container_alloc(NUM_CACHE_BUCKETS,
ast_event_hash, ast_event_cmp))) {
- return -1;
+ goto event_init_cleanup;
}
}
if (!(event_dispatcher = ast_taskprocessor_get("core_event_dispatcher", 0))) {
- return -1;
+ goto event_init_cleanup;
}
ast_cli_register_multiple(event_cli, ARRAY_LEN(event_cli));
+ ast_register_atexit(event_shutdown);
+
return 0;
+
+event_init_cleanup:
+ event_shutdown();
+ return -1;
}
size_t ast_event_minimum_length(void)
|
[-]
[+]
|
Changed |
asterisk-1.8.18.0.tar.xz/main/features.c
^
|
@@ -29,7 +29,7 @@
#include "asterisk.h"
-ASTERISK_FILE_VERSION(__FILE__, "$Revision: 372840 $")
+ASTERISK_FILE_VERSION(__FILE__, "$Revision: 374177 $")
#include "asterisk/_private.h"
@@ -6644,7 +6644,6 @@
return -1;
}
ast_debug(1, "Configuration of default default parking lot done.\n");
- parkinglot_addref(default_parkinglot);
}
cfg = ast_config_load2("features.conf", "features", config_flags);
@@ -8221,6 +8220,22 @@
}
#endif /* defined(TEST_FRAMEWORK) */
+/*! \internal \brief Clean up resources on Asterisk shutdown */
+static void features_shutdown(void)
+{
+ ast_devstate_prov_del("Park");
+ ast_manager_unregister("Bridge");
+ ast_manager_unregister("Park");
+ ast_manager_unregister("Parkinglots");
+ ast_manager_unregister("ParkedCalls");
+ ast_unregister_application(parkcall);
+ ast_unregister_application(parkedcall);
+ ast_unregister_application(app_bridge);
+
+ pthread_cancel(parking_thread);
+ ao2_ref(parkinglots, -1);
+}
+
int ast_features_init(void)
{
int res;
@@ -8253,5 +8268,7 @@
res |= AST_TEST_REGISTER(features_test);
#endif /* defined(TEST_FRAMEWORK) */
+ ast_register_atexit(features_shutdown);
+
return res;
}
|
[-]
[+]
|
Changed |
asterisk-1.8.18.0.tar.xz/main/indications.c
^
|
@@ -29,7 +29,7 @@
#include "asterisk.h"
-ASTERISK_FILE_VERSION(__FILE__, "$Revision: 369001 $")
+ASTERISK_FILE_VERSION(__FILE__, "$Revision: 374177 $")
#include <math.h>
@@ -1149,6 +1149,15 @@
return 0;
}
+/*! \internal \brief Clean up resources on Asterisk shutdown */
+static void indications_shutdown(void)
+{
+ if (ast_tone_zones) {
+ ao2_ref(ast_tone_zones, -1);
+ ast_tone_zones = NULL;
+ }
+}
+
/*! \brief Load indications module */
int ast_indications_init(void)
{
@@ -1163,6 +1172,7 @@
ast_cli_register_multiple(cli_indications, ARRAY_LEN(cli_indications));
+ ast_register_atexit(indications_shutdown);
return 0;
}
|
[-]
[+]
|
Changed |
asterisk-1.8.18.0.tar.xz/main/loader.c
^
|
@@ -33,7 +33,7 @@
#include "asterisk.h"
-ASTERISK_FILE_VERSION(__FILE__, "$Revision: 371436 $")
+ASTERISK_FILE_VERSION(__FILE__, "$Revision: 373909 $")
#include "asterisk/_private.h"
#include "asterisk/paths.h" /* use ast_config_AST_MODULE_DIR */
@@ -371,7 +371,9 @@
while (!dlclose(lib));
}
-static struct ast_module *load_dynamic_module(const char *resource_in, unsigned int global_symbols_only)
+static enum ast_module_load_result load_resource(const char *resource_name, unsigned int global_symbols_only, struct ast_heap *resource_heap, int required);
+
+static struct ast_module *load_dynamic_module(const char *resource_in, unsigned int global_symbols_only, struct ast_heap *resource_heap)
{
char fn[PATH_MAX] = "";
void *lib = NULL;
@@ -440,11 +442,12 @@
/* Force any required dependencies to load */
char *each, *required_resource = ast_strdupa(mod->info->nonoptreq);
while ((each = strsep(&required_resource, ","))) {
+ struct ast_module *dependency;
each = ast_strip(each);
-
+ dependency = find_resource(each, 0);
/* Is it already loaded? */
- if (!find_resource(each, 0)) {
- load_dynamic_module(each, global_symbols_only);
+ if (!dependency) {
+ load_resource(each, global_symbols_only, resource_heap, 1);
}
}
}
@@ -802,6 +805,10 @@
char tmp[256];
enum ast_module_load_result res;
+ if (mod->flags.running) {
+ return AST_MODULE_LOAD_SUCCESS;
+ }
+
if (!mod->info->load) {
return AST_MODULE_LOAD_FAILURE;
}
@@ -857,7 +864,7 @@
return AST_MODULE_LOAD_SKIP;
} else {
#ifdef LOADABLE_MODULES
- if (!(mod = load_dynamic_module(resource_name, global_symbols_only))) {
+ if (!(mod = load_dynamic_module(resource_name, global_symbols_only, resource_heap))) {
/* don't generate a warning message during load_modules() */
if (!global_symbols_only) {
ast_log(LOG_WARNING, "Module '%s' could not be loaded.\n", resource_name);
|
[-]
[+]
|
Changed |
asterisk-1.8.18.0.tar.xz/main/manager.c
^
|
@@ -47,7 +47,7 @@
#include "asterisk.h"
-ASTERISK_FILE_VERSION(__FILE__, "$Revision: 372354 $")
+ASTERISK_FILE_VERSION(__FILE__, "$Revision: 374581 $")
#include "asterisk/_private.h"
#include "asterisk/paths.h" /* use various ast_config_AST_* */
@@ -999,6 +999,11 @@
AST_LIST_ENTRY(mansession_session) list;
};
+enum mansession_message_parsing {
+ MESSAGE_OKAY,
+ MESSAGE_LINE_TOO_LONG
+};
+
/* In case you didn't read that giant block of text above the mansession_session struct, the
* 'mansession' struct is named this solely to keep the API the same in Asterisk. This structure really
* represents data that is different from Manager action to Manager action. The mansession_session pointer
@@ -1009,6 +1014,7 @@
struct ast_tcptls_session_instance *tcptls_session;
FILE *f;
int fd;
+ enum mansession_message_parsing parsing;
int write_error:1;
struct manager_custom_hook *hook;
ast_mutex_t lock;
@@ -1790,6 +1796,10 @@
int x, l = strlen(var);
const char *result = "";
+ if (!m) {
+ return result;
+ }
+
for (x = 0; x < m->hdrcount; x++) {
const char *h = m->headers[x];
if (!strncasecmp(var, h, l) && h[l] == ':') {
@@ -4789,8 +4799,9 @@
}
if (s->session->inlen >= maxlen) {
/* no crlf found, and buffer full - sorry, too long for us */
- ast_log(LOG_WARNING, "Dumping long line with no return from %s: %s\n", ast_inet_ntoa(s->session->sin.sin_addr), src);
+ ast_log(LOG_WARNING, "Discarding message from %s. Line too long: %.25s...\n", ast_inet_ntoa(s->session->sin.sin_addr), src);
s->session->inlen = 0;
+ s->parsing = MESSAGE_LINE_TOO_LONG;
}
res = 0;
while (res == 0) {
@@ -4849,6 +4860,23 @@
/*!
* \internal
+ * \brief Error handling for sending parse errors. This function handles locking, and clearing the
+ * parse error flag.
+ *
+ * \param s AMI session to process action request.
+ * \param m Message that's in error.
+ * \param error Error message to send.
+ */
+static void handle_parse_error(struct mansession *s, struct message *m, char *error)
+{
+ mansession_lock(s);
+ astman_send_error(s, m, error);
+ s->parsing = MESSAGE_OKAY;
+ mansession_unlock(s);
+}
+
+/*!
+ * \internal
* \brief Read and process an AMI action request.
*
* \param s AMI session to process action request.
@@ -4900,7 +4928,15 @@
mansession_unlock(s);
res = 0;
} else {
- res = process_message(s, &m) ? -1 : 0;
+ switch (s->parsing) {
+ case MESSAGE_OKAY:
+ res = process_message(s, &m) ? -1 : 0;
+ break;
+ case MESSAGE_LINE_TOO_LONG:
+ handle_parse_error(s, &m, "Failed to parse message: line too long");
+ res = 0;
+ break;
+ }
}
break;
} else if (m.hdrcount < ARRAY_LEN(m.headers)) {
@@ -6580,6 +6616,61 @@
AST_RWLIST_UNLOCK(&channelvars);
}
+/*! \internal \brief Clean up resources on Asterisk shutdown */
+static void manager_shutdown(void)
+{
+ struct ast_manager_user *user;
+
+ if (registered) {
+ ast_manager_unregister("Ping");
+ ast_manager_unregister("Events");
+ ast_manager_unregister("Logoff");
+ ast_manager_unregister("Login");
+ ast_manager_unregister("Challenge");
+ ast_manager_unregister("Hangup");
+ ast_manager_unregister("Status");
+ ast_manager_unregister("Setvar");
+ ast_manager_unregister("Getvar");
+ ast_manager_unregister("GetConfig");
+ ast_manager_unregister("GetConfigJSON");
+ ast_manager_unregister("UpdateConfig");
+ ast_manager_unregister("CreateConfig");
+ ast_manager_unregister("ListCategories");
+ ast_manager_unregister("Redirect");
+ ast_manager_unregister("Atxfer");
+ ast_manager_unregister("Originate");
+ ast_manager_unregister("Command");
+ ast_manager_unregister("ExtensionState");
+ ast_manager_unregister("AbsoluteTimeout");
+ ast_manager_unregister("MailboxStatus");
+ ast_manager_unregister("MailboxCount");
+ ast_manager_unregister("ListCommands");
+ ast_manager_unregister("SendText");
+ ast_manager_unregister("UserEvent");
+ ast_manager_unregister("WaitEvent");
+ ast_manager_unregister("CoreSettings");
+ ast_manager_unregister("CoreStatus");
+ ast_manager_unregister("Reload");
+ ast_manager_unregister("CoreShowChannels");
+ ast_manager_unregister("ModuleLoad");
+ ast_manager_unregister("ModuleCheck");
+ ast_manager_unregister("AOCMessage");
+ ast_manager_unregister("Filter");
+ }
+
+ if (sessions) {
+ ao2_ref(sessions, -1);
+ sessions = NULL;
+ }
+
+ while ((user = AST_LIST_REMOVE_HEAD(&users, list))) {
+ ao2_ref(user->whitefilters, -1);
+ ao2_ref(user->blackfilters, -1);
+ ast_free(user);
+ }
+}
+
+
static int __init_manager(int reload)
{
struct ast_config *ucfg = NULL, *cfg = NULL;
@@ -6637,6 +6728,9 @@
/* Append placeholder event so master_eventq never runs dry */
append_event("Event: Placeholder\r\n\r\n", 0);
}
+
+ ast_register_atexit(manager_shutdown);
+
if ((cfg = ast_config_load2("manager.conf", "manager", config_flags)) == CONFIG_STATUS_FILEUNCHANGED) {
return 0;
}
@@ -7013,6 +7107,7 @@
} else if (ast_ssl_setup(amis_desc.tls_cfg)) {
ast_tcptls_server_start(&amis_desc);
}
+
return 0;
}
|
[-]
[+]
|
Changed |
asterisk-1.8.18.0.tar.xz/main/pbx.c
^
|
@@ -29,7 +29,7 @@
#include "asterisk.h"
-ASTERISK_FILE_VERSION(__FILE__, "$Revision: 372337 $")
+ASTERISK_FILE_VERSION(__FILE__, "$Revision: 374177 $")
#include "asterisk/_private.h"
#include "asterisk/paths.h" /* use ast_config_AST_SYSTEM_NAME */
@@ -10301,6 +10301,26 @@
AST_DATA_ENTRY("asterisk/core/hints", &hints_data_provider),
};
+/*! \internal \brief Clean up resources on Asterisk shutdown.
+ * \note Cleans up resources allocated in load_pbx */
+static void unload_pbx(void)
+{
+ int x;
+
+ if (device_state_sub) {
+ device_state_sub = ast_event_unsubscribe(device_state_sub);
+ }
+
+ /* Unregister builtin applications */
+ for (x = 0; x < ARRAY_LEN(builtins); x++) {
+ ast_unregister_application(builtins[x].name);
+ }
+ ast_manager_unregister("ShowDialPlan");
+ ast_custom_function_unregister(&exception_function);
+ ast_custom_function_unregister(&testtime_function);
+ ast_data_unregister(NULL);
+}
+
int load_pbx(void)
{
int x;
@@ -10334,6 +10354,7 @@
return -1;
}
+ ast_register_atexit(unload_pbx);
return 0;
}
|
[-]
[+]
|
Changed |
asterisk-1.8.18.0.tar.xz/main/say.c
^
|
@@ -37,7 +37,7 @@
#include "asterisk.h"
-ASTERISK_FILE_VERSION(__FILE__, "$Revision: 370642 $")
+ASTERISK_FILE_VERSION(__FILE__, "$Revision: 373773 $")
#include <netinet/in.h>
#include <time.h>
@@ -5286,7 +5286,7 @@
char sndfile[256], nextmsg[256];
if (format == NULL)
- format = "ABdY 'digits/at' IMp";
+ format = "AdBY 'digits/at' IMp";
ast_localtime(&when, &tm, tzone);
@@ -5408,7 +5408,7 @@
res = wait_file(chan, ints, nextmsg, lang);
break;
case 'Q':
- /* Shorthand for "Today", "Yesterday", or ABdY */
+ /* Shorthand for "Today", "Yesterday", or AdBY */
/* XXX As emphasized elsewhere, this should the native way in your
* language to say the date, with changes in what you say, depending
* upon how recent the date is. XXX */
@@ -5428,12 +5428,12 @@
/* Yesterday */
res = wait_file(chan, ints, "digits/yesterday", lang);
} else {
- res = ast_say_date_with_format_nl(chan, t, ints, lang, "ABdY", tzone);
+ res = ast_say_date_with_format_nl(chan, t, ints, lang, "AdBY", tzone);
}
}
break;
case 'q':
- /* Shorthand for "" (today), "Yesterday", A (weekday), or ABdY */
+ /* Shorthand for "" (today), "Yesterday", A (weekday), or AdBY */
{
struct timeval now = ast_tvnow();
struct ast_tm tmnow;
@@ -5452,7 +5452,7 @@
/* Within the last week */
res = ast_say_date_with_format_nl(chan, t, ints, lang, "A", tzone);
} else {
- res = ast_say_date_with_format_nl(chan, t, ints, lang, "ABdY", tzone);
+ res = ast_say_date_with_format_nl(chan, t, ints, lang, "AdBY", tzone);
}
}
break;
|
[-]
[+]
|
Changed |
asterisk-1.8.18.0.tar.xz/main/ssl.c
^
|
@@ -29,7 +29,7 @@
#include "asterisk.h"
-ASTERISK_FILE_VERSION(__FILE__, "$Revision: 369001 $")
+ASTERISK_FILE_VERSION(__FILE__, "$Revision: 373061 $")
#ifdef HAVE_OPENSSL
#include <openssl/ssl.h>
@@ -81,9 +81,7 @@
SSL_library_init();
SSL_load_error_strings();
- ERR_load_crypto_strings();
ERR_load_BIO_strings();
- OpenSSL_add_all_algorithms();
/* Make OpenSSL thread-safe. */
|
[-]
[+]
|
Changed |
asterisk-1.8.18.0.tar.xz/main/taskprocessor.c
^
|
@@ -29,7 +29,7 @@
#include "asterisk.h"
-ASTERISK_FILE_VERSION(__FILE__, "$Revision: 369001 $")
+ASTERISK_FILE_VERSION(__FILE__, "$Revision: 374177 $")
#include "asterisk/_private.h"
#include "asterisk/module.h"
@@ -122,6 +122,12 @@
AST_CLI_DEFINE(cli_tps_report, "List instantiated task processors and statistics"),
};
+/*! \internal \brief Clean up resources on Asterisk shutdown */
+static void tps_shutdown(void)
+{
+ ao2_t_ref(tps_singletons, -1, "Unref tps_singletons in shutdown");
+}
+
/* initialize the taskprocessor container and register CLI operations */
int ast_tps_init(void)
{
@@ -133,6 +139,9 @@
ast_cond_init(&cli_ping_cond, NULL);
ast_cli_register_multiple(taskprocessor_clis, ARRAY_LEN(taskprocessor_clis));
+
+ ast_register_atexit(tps_shutdown);
+
return 0;
}
|
[-]
[+]
|
Changed |
asterisk-1.8.18.0.tar.xz/main/tcptls.c
^
|
@@ -31,7 +31,7 @@
#include "asterisk.h"
-ASTERISK_FILE_VERSION(__FILE__, "$Revision: 370642 $")
+ASTERISK_FILE_VERSION(__FILE__, "$Revision: 373061 $")
#ifdef HAVE_FCNTL_H
#include <fcntl.h>
@@ -82,6 +82,7 @@
{
int cookie_fd = SSL_get_fd(cookie);
int ret;
+
if (cookie_fd > -1) {
/*
* According to the TLS standard, it is acceptable for an application to only send its shutdown
@@ -91,6 +92,12 @@
if ((ret = SSL_shutdown(cookie)) < 0) {
ast_log(LOG_ERROR, "SSL_shutdown() failed: %d\n", SSL_get_error(cookie, ret));
}
+
+ if (!((SSL*)cookie)->server) {
+ /* For client threads, ensure that the error stack is cleared */
+ ERR_remove_state(0);
+ }
+
SSL_free(cookie);
/* adding shutdown(2) here has no added benefit */
if (close(cookie_fd)) {
@@ -313,9 +320,6 @@
if (!cfg->enabled)
return 0;
- SSL_load_error_strings();
- SSLeay_add_ssl_algorithms();
-
/* Get rid of an old SSL_CTX since we're about to
* allocate a new one
*/
@@ -357,7 +361,6 @@
if (!client) {
/* Clients don't need a certificate, but if its setup we can use it */
ast_verb(0, "SSL error loading cert file. <%s>", cfg->certfile);
- sleep(2);
cfg->enabled = 0;
SSL_CTX_free(cfg->ssl_ctx);
cfg->ssl_ctx = NULL;
@@ -368,7 +371,6 @@
if (!client) {
/* Clients don't need a private key, but if its setup we can use it */
ast_verb(0, "SSL error loading private key file. <%s>", tmpprivate);
- sleep(2);
cfg->enabled = 0;
SSL_CTX_free(cfg->ssl_ctx);
cfg->ssl_ctx = NULL;
@@ -380,7 +382,6 @@
if (SSL_CTX_set_cipher_list(cfg->ssl_ctx, cfg->cipher) == 0 ) {
if (!client) {
ast_verb(0, "SSL cipher error <%s>", cfg->cipher);
- sleep(2);
cfg->enabled = 0;
SSL_CTX_free(cfg->ssl_ctx);
cfg->ssl_ctx = NULL;
|
[-]
[+]
|
Changed |
asterisk-1.8.18.0.tar.xz/res/res_agi.c
^
|
@@ -31,7 +31,7 @@
#include "asterisk.h"
-ASTERISK_FILE_VERSION(__FILE__, "$Revision: 370642 $")
+ASTERISK_FILE_VERSION(__FILE__, "$Revision: 374426 $")
#include <math.h>
#include <signal.h>
@@ -598,7 +598,7 @@
<description>
<para>Enables/Disables the music on hold generator. If <replaceable>class</replaceable>
is not specified, then the <literal>default</literal> music on hold class will be
- used.</para>
+ used. This generator will be stopped automatically when playing a file.</para>
<para>Always returns <literal>0</literal>.</para>
</description>
</agi>
@@ -648,7 +648,9 @@
<para>Send the given file, allowing playback to be interrupted by the given
digits, if any. Returns <literal>0</literal> if playback completes without a digit
being pressed, or the ASCII numerical value of the digit if one was pressed,
- or <literal>-1</literal> on error or if the channel was disconnected.</para>
+ or <literal>-1</literal> on error or if the channel was disconnected. If
+ musiconhold is playing before calling stream file it will be automatically
+ stopped and will not be restarted after completion.</para>
</description>
<see-also>
<ref type="agi">control stream file</ref>
@@ -2690,16 +2692,18 @@
static int handle_dbdeltree(struct ast_channel *chan, AGI *agi, int argc, const char * const argv[])
{
- int res;
+ int num_deleted;
- if ((argc < 3) || (argc > 4))
+ if ((argc < 3) || (argc > 4)) {
return RESULT_SHOWUSAGE;
- if (argc == 4)
- res = ast_db_deltree(argv[2], argv[3]);
- else
- res = ast_db_deltree(argv[2], NULL);
+ }
+ if (argc == 4) {
+ num_deleted = ast_db_deltree(argv[2], argv[3]);
+ } else {
+ num_deleted = ast_db_deltree(argv[2], NULL);
+ }
- ast_agi_send(agi->fd, chan, "200 result=%c\n", res ? '0' : '1');
+ ast_agi_send(agi->fd, chan, "200 result=%c\n", num_deleted > 0 ? '0' : '1');
return RESULT_SUCCESS;
}
|
[-]
[+]
|
Changed |
asterisk-1.8.18.0.tar.xz/res/res_jabber.c
^
|
@@ -38,7 +38,7 @@
#include "asterisk.h"
-ASTERISK_FILE_VERSION(__FILE__, "$Revision: 371590 $")
+ASTERISK_FILE_VERSION(__FILE__, "$Revision: 374335 $")
#include <ctype.h>
#include <iksemel.h>
@@ -312,7 +312,6 @@
static char *aji_do_reload(struct ast_cli_entry *e, int cmd, struct ast_cli_args *a);
static char *aji_show_clients(struct ast_cli_entry *e, int cmd, struct ast_cli_args *a);
static char *aji_show_buddies(struct ast_cli_entry *e, int cmd, struct ast_cli_args *a);
-static char *aji_test(struct ast_cli_entry *e, int cmd, struct ast_cli_args *a);
static int aji_create_client(char *label, struct ast_variable *var, int debug);
static int aji_create_buddy(char *label, struct aji_client *client);
static int aji_reload(int reload);
@@ -377,7 +376,6 @@
AST_CLI_DEFINE(aji_do_reload, "Reload Jabber configuration"),
AST_CLI_DEFINE(aji_show_clients, "Show state of clients and components"),
AST_CLI_DEFINE(aji_show_buddies, "Show buddy lists of our clients"),
- AST_CLI_DEFINE(aji_test, "Shows roster, but is generally used for mog's debugging."),
AST_CLI_DEFINE(aji_cli_create_collection, "Creates a PubSub node collection."),
AST_CLI_DEFINE(aji_cli_list_pubsub_nodes, "Lists PubSub nodes"),
AST_CLI_DEFINE(aji_cli_create_leafnode, "Creates a PubSub leaf node"),
@@ -2006,6 +2004,12 @@
struct aji_resource *resource = NULL;
struct aji_buddy *buddy = ASTOBJ_CONTAINER_FIND(&client->buddies, pak->from->partial);
+ if (!buddy) {
+ ast_log(LOG_NOTICE, "JABBER: Received client info from unknown buddy: %s.\n", pak->from->full);
+ ASTOBJ_UNREF(client, ast_aji_client_destroy);
+ return IKS_FILTER_EAT;
+ }
+
resource = aji_find_resource(buddy, pak->from->resource);
if (pak->subtype == IKS_TYPE_RESULT) {
if (!resource) {
@@ -2073,6 +2077,12 @@
struct aji_resource *resource = NULL;
struct aji_buddy *buddy = ASTOBJ_CONTAINER_FIND(&client->buddies, pak->from->partial);
+ if (!buddy) {
+ ast_log(LOG_NOTICE, "JABBER: Received client info from unknown buddy: %s.\n", pak->from->full);
+ ASTOBJ_UNREF(client, ast_aji_client_destroy);
+ return IKS_FILTER_EAT;
+ }
+
if (pak->subtype == IKS_TYPE_ERROR) {
ast_log(LOG_WARNING, "Received error from a client, turn on jabber debug!\n");
ASTOBJ_UNREF(client, ast_aji_client_destroy);
@@ -4180,69 +4190,6 @@
return CLI_SUCCESS;
}
-/*!
- * \internal
- * \brief Send test message for debugging.
- * \return CLI_SUCCESS,CLI_FAILURE.
- */
-static char *aji_test(struct ast_cli_entry *e, int cmd, struct ast_cli_args *a)
-{
- struct aji_client *client;
- struct aji_resource *resource;
- const char *name;
- struct aji_message *tmp;
-
- switch (cmd) {
- case CLI_INIT:
- e->command = "jabber test";
- e->usage =
- "Usage: jabber test <connection>\n"
- " Sends test message for debugging purposes. A specific client\n"
- " as configured in jabber.conf must be specified.\n";
- return NULL;
- case CLI_GENERATE:
- return NULL;
- }
-
- if (a->argc != 3) {
- return CLI_SHOWUSAGE;
- }
- name = a->argv[2];
-
- if (!(client = ASTOBJ_CONTAINER_FIND(&clients, name))) {
- ast_cli(a->fd, "Unable to find client '%s'!\n", name);
- return CLI_FAILURE;
- }
-
- /* XXX Does Matt really want everyone to use his personal address for tests? */ /* XXX yes he does */
- ast_aji_send_chat(client, "mogorman@astjab.org", "blahblah");
- ASTOBJ_CONTAINER_TRAVERSE(&client->buddies, 1, {
- ASTOBJ_RDLOCK(iterator);
- ast_verbose("User: %s\n", iterator->name);
- for (resource = iterator->resources; resource; resource = resource->next) {
- ast_verbose("Resource: %s\n", resource->resource);
- if (resource->cap) {
- ast_verbose(" client: %s\n", resource->cap->parent->node);
- ast_verbose(" version: %s\n", resource->cap->version);
- ast_verbose(" Jingle Capable: %d\n", resource->cap->jingle);
- }
- ast_verbose(" Priority: %d\n", resource->priority);
- ast_verbose(" Status: %d\n", resource->status);
- ast_verbose(" Message: %s\n", S_OR(resource->description, ""));
- }
- ASTOBJ_UNLOCK(iterator);
- });
- ast_verbose("\nOooh a working message stack!\n");
- AST_LIST_LOCK(&client->messages);
- AST_LIST_TRAVERSE(&client->messages, tmp, list) {
- //ast_verbose(" Message from: %s with id %s @ %s %s\n",tmp->from, S_OR(tmp->id,""), ctime(&tmp->arrived), S_OR(tmp->message, ""));
- }
- AST_LIST_UNLOCK(&client->messages);
- ASTOBJ_UNREF(client, ast_aji_client_destroy);
-
- return CLI_SUCCESS;
-}
-
/*!
* \internal
* \brief creates aji_client structure.
|
[-]
[+]
|
Changed |
asterisk-1.8.18.0.tar.xz/res/res_musiconhold.c
^
|
@@ -32,7 +32,7 @@
#include "asterisk.h"
-ASTERISK_FILE_VERSION(__FILE__, "$Revision: 366880 $")
+ASTERISK_FILE_VERSION(__FILE__, "$Revision: 374177 $")
#include <ctype.h>
#include <signal.h>
@@ -1776,7 +1776,11 @@
static void ast_moh_destroy(void)
{
ast_verb(2, "Destroying musiconhold processes\n");
- ao2_t_callback(mohclasses, OBJ_UNLINK | OBJ_NODATA | OBJ_MULTIPLE, NULL, NULL, "Destroy callback");
+ if (mohclasses) {
+ ao2_t_callback(mohclasses, OBJ_UNLINK | OBJ_NODATA | OBJ_MULTIPLE, NULL, NULL, "Destroy callback");
+ ao2_ref(mohclasses, -1);
+ mohclasses = NULL;
+ }
}
static char *handle_cli_moh_reload(struct ast_cli_entry *e, int cmd, struct ast_cli_args *a)
|
[-]
[+]
|
Changed |
asterisk-1.8.18.0.tar.xz/res/res_rtp_asterisk.c
^
|
@@ -34,7 +34,7 @@
#include "asterisk.h"
-ASTERISK_FILE_VERSION(__FILE__, "$Revision: 372185 $")
+ASTERISK_FILE_VERSION(__FILE__, "$Revision: 373702 $")
#include <sys/time.h>
#include <signal.h>
@@ -1587,8 +1587,7 @@
new_duration = (new_duration & ~0xFFFF) | samples;
if (event_end & 0x80) {
- /* End event */
- if ((rtp->last_seqno != seqno) && (timestamp > rtp->last_end_timestamp)) {
+ if ((seqno != rtp->last_seqno) && (timestamp > rtp->last_end_timestamp)) {
rtp->last_end_timestamp = timestamp;
rtp->dtmf_duration = new_duration;
rtp->resp = resp;
@@ -1598,7 +1597,7 @@
rtp->dtmf_duration = rtp->dtmf_timeout = 0;
AST_LIST_INSERT_TAIL(frames, f, frame_list);
} else if (rtpdebug) {
- ast_debug(1, "Dropping duplicate or out of order DTMF END frame (seqno: %d, ts %d, digit %c)\n",
+ ast_debug(1, "Dropping re-transmitted, duplicate, or out of order DTMF END frame (seqno: %d, ts %d, digit %c)\n",
seqno, timestamp, resp);
}
} else {
@@ -2158,6 +2157,33 @@
return &ast_null_frame;
}
+ /* Get fields and verify this is an RTP packet */
+ seqno = ntohl(rtpheader[0]);
+
+ ast_rtp_instance_get_remote_address(instance, &remote_address);
+
+ if (!(version = (seqno & 0xC0000000) >> 30)) {
+ struct sockaddr_in addr_tmp;
+ struct ast_sockaddr addr_v4;
+ if (ast_sockaddr_is_ipv4(&addr)) {
+ ast_sockaddr_to_sin(&addr, &addr_tmp);
+ } else if (ast_sockaddr_ipv4_mapped(&addr, &addr_v4)) {
+ ast_debug(1, "Using IPv6 mapped address %s for STUN\n",
+ ast_sockaddr_stringify(&addr));
+ ast_sockaddr_to_sin(&addr_v4, &addr_tmp);
+ } else {
+ ast_debug(1, "Cannot do STUN for non IPv4 address %s\n",
+ ast_sockaddr_stringify(&addr));
+ return &ast_null_frame;
+ }
+ if ((ast_stun_handle_packet(rtp->s, &addr_tmp, rtp->rawdata + AST_FRIENDLY_OFFSET, res, NULL, NULL) == AST_STUN_ACCEPT) &&
+ ast_sockaddr_isnull(&remote_address)) {
+ ast_sockaddr_from_sin(&addr, &addr_tmp);
+ ast_rtp_instance_set_remote_address(instance, &addr);
+ }
+ return &ast_null_frame;
+ }
+
/* If strict RTP protection is enabled see if we need to learn the remote address or if we need to drop the packet */
if (rtp->strict_rtp_state == STRICT_RTP_LEARN) {
ast_debug(1, "%p -- start learning mode pass with addr = %s\n", rtp, ast_sockaddr_stringify(&addr));
@@ -2191,33 +2217,6 @@
}
}
- /* Get fields and verify this is an RTP packet */
- seqno = ntohl(rtpheader[0]);
-
- ast_rtp_instance_get_remote_address(instance, &remote_address);
-
- if (!(version = (seqno & 0xC0000000) >> 30)) {
- struct sockaddr_in addr_tmp;
- struct ast_sockaddr addr_v4;
- if (ast_sockaddr_is_ipv4(&addr)) {
- ast_sockaddr_to_sin(&addr, &addr_tmp);
- } else if (ast_sockaddr_ipv4_mapped(&addr, &addr_v4)) {
- ast_debug(1, "Using IPv6 mapped address %s for STUN\n",
- ast_sockaddr_stringify(&addr));
- ast_sockaddr_to_sin(&addr_v4, &addr_tmp);
- } else {
- ast_debug(1, "Cannot do STUN for non IPv4 address %s\n",
- ast_sockaddr_stringify(&addr));
- return &ast_null_frame;
- }
- if ((ast_stun_handle_packet(rtp->s, &addr_tmp, rtp->rawdata + AST_FRIENDLY_OFFSET, res, NULL, NULL) == AST_STUN_ACCEPT) &&
- ast_sockaddr_isnull(&remote_address)) {
- ast_sockaddr_from_sin(&addr, &addr_tmp);
- ast_rtp_instance_set_remote_address(instance, &addr);
- }
- return &ast_null_frame;
- }
-
/* If symmetric RTP is enabled see if the remote side is not what we expected and change where we are sending audio */
if (ast_rtp_instance_get_prop(instance, AST_RTP_PROPERTY_NAT)) {
if (ast_sockaddr_cmp(&remote_address, &addr)) {
|
[-]
[+]
|
Changed |
asterisk-1.8.18.0.tar.xz/res/res_rtp_multicast.c
^
|
@@ -208,7 +208,7 @@
struct multicast_rtp *multicast = ast_rtp_instance_get_data(instance);
struct ast_frame *f = frame;
struct ast_sockaddr remote_address;
- int hdrlen = 12, res, codec;
+ int hdrlen = 12, res = 0, codec;
unsigned char *rtpheader;
/* We only accept audio, nothing else */
@@ -237,12 +237,12 @@
/* Finally send it out to the eager phones listening for us */
ast_rtp_instance_get_remote_address(instance, &remote_address);
- res = ast_sendto(multicast->socket, (void *) rtpheader, f->datalen + hdrlen, 0, &remote_address);
- if (res < 0) {
+ if (ast_sendto(multicast->socket, (void *) rtpheader, f->datalen + hdrlen, 0, &remote_address) < 0) {
ast_log(LOG_ERROR, "Multicast RTP Transmission error to %s: %s\n",
ast_sockaddr_stringify(&remote_address),
strerror(errno));
+ res = -1;
}
/* If we were forced to duplicate the frame free the new one */
|
[-]
[+]
|
Changed |
asterisk-1.8.18.0.tar.xz/tests/test_db.c
^
|
@@ -206,10 +206,68 @@
return res;
}
+AST_TEST_DEFINE(put_get_long)
+{
+ int res = AST_TEST_PASS;
+ struct ast_str *s;
+ int i, j;
+
+#define STR_FILL_32 "abcdefghijklmnopqrstuvwxyz123456"
+
+ switch (cmd) {
+ case TEST_INIT:
+ info->name = "put_get_long";
+ info->category = "/main/astdb/";
+ info->summary = "ast_db_(put|get_allocated) unit test";
+ info->description =
+ "Ensures that the ast_db_put and ast_db_get_allocated functions work";
+ return AST_TEST_NOT_RUN;
+ case TEST_EXECUTE:
+ break;
+ }
+
+ if (!(s = ast_str_create(4096))) {
+ return AST_TEST_FAIL;
+ }
+
+ for (i = 1024; i <= 1024 * 1024 * 8; i *= 2) {
+ char *out = NULL;
+
+ ast_str_reset(s);
+
+ for (j = 0; j < i; j += sizeof(STR_FILL_32) - 1) {
+ ast_str_append(&s, 0, "%s", STR_FILL_32);
+ }
+
+ if (ast_db_put("astdbtest", "long", ast_str_buffer(s))) {
+ ast_test_status_update(test, "Failed to put value of %zu bytes\n", ast_str_strlen(s));
+ res = AST_TEST_FAIL;
+ } else if (ast_db_get_allocated("astdbtest", "long", &out)) {
+ ast_test_status_update(test, "Failed to get value of %zu bytes\n", ast_str_strlen(s));
+ res = AST_TEST_FAIL;
+ } else if (strcmp(ast_str_buffer(s), out)) {
+ ast_test_status_update(test, "Failed to match value of %zu bytes\n", ast_str_strlen(s));
+ res = AST_TEST_FAIL;
+ } else if (ast_db_del("astdbtest", "long")) {
+ ast_test_status_update(test, "Failed to delete astdbtest/long\n");
+ res = AST_TEST_FAIL;
+ }
+
+ if (out) {
+ ast_free(out);
+ }
+ }
+
+ ast_free(s);
+
+ return res;
+}
+
static int unload_module(void)
{
AST_TEST_UNREGISTER(put_get_del);
AST_TEST_UNREGISTER(gettree_deltree);
+ AST_TEST_UNREGISTER(put_get_long);
return 0;
}
@@ -217,6 +275,7 @@
{
AST_TEST_REGISTER(put_get_del);
AST_TEST_REGISTER(gettree_deltree);
+ AST_TEST_REGISTER(put_get_long);
return AST_MODULE_LOAD_SUCCESS;
}
|