[-]
[+]
|
Changed |
asterisk.changes
|
|
[-]
[+]
|
Changed |
asterisk.spec
^
|
|
[-]
[+]
|
Deleted |
asterisk-1.8.18.0.tar.xz/asterisk-1.8.18.0-summary.html
^
|
@@ -1,327 +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.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>
|
[-]
[+]
|
Deleted |
asterisk-1.8.18.0.tar.xz/asterisk-1.8.18.0-summary.txt
^
|
@@ -1,412 +0,0 @@
- 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.19.0.tar.xz/.version
^
|
@@ -1 +1 @@
-1.8.18.0
+1.8.19.0
|
[-]
[+]
|
Changed |
asterisk-1.8.19.0.tar.xz/ChangeLog
^
|
@@ -1,3 +1,485 @@
+2012-12-10 Asterisk Development Team <asteriskteam@digium.com>
+
+ * Asterisk 1.8.19.0 Released.
+
+2012-12-06 Asterisk Development Team <asteriskteam@digium.com>
+
+ * Asterisk 1.8.19.0-rc3 Released.
+
+ * chan_local: Fix local_pvt ref leak in local_devicestate().
+
+ Regression introduced by ASTERISK-20390 fix.
+
+ (closes issue ASTERISK-20769)
+ Reported by: rmudgett
+
+2012-12-05 Asterisk Development Team <asteriskteam@digium.com>
+
+ * Asterisk 1.8.19.0-rc2 Released.
+
+ * Fix a SIP request memory leak with TLS connections.
+
+ During the TLS re-work in chan_sip some TLS specific code was moved
+ into a separate function. This function operates on a copy of the
+ incoming SIP request. This copy was never deinitialized causing a
+ memory leak for each request processed.
+
+ This function is now given a SIP request structure which it can use
+ to copy the incoming request into. This reduces the amount of memory
+ allocations done since the internal allocated components are reused
+ between packets and also ensures the SIP request structure is
+ deinitialized when the TLS connection is torn down.
+
+ (closes issue ASTERISK-20763)
+ Reported by: deti
+
+2012-11-06 Asterisk Development Team <asteriskteam@digium.com>
+
+ * Asterisk 1.8.19.0-rc1 Released.
+
+2012-11-05 22:50 +0000 [r375893] Matthew Jordan <mjordan@digium.com>
+
+ * bridges/bridge_softmix.c, include/asterisk/timing.h,
+ res/res_musiconhold.c, channels/chan_iax2.c,
+ res/res_fax_spandsp.c, res/res_timing_kqueue.c, main/timing.c,
+ main/channel.c, res/res_timing_pthread.c, res/res_timing_dahdi.c,
+ res/res_timing_timerfd.c: Refactor ast_timer_ack to return an
+ error and handle the error in timer users Currently, if an
+ acknowledgement of a timer fails Asterisk will not realize that a
+ serious error occurred and will continue attempting to use the
+ timer's file descriptor. This can lead to situations where errors
+ stream to the CLI/log file. This consumes significant resources,
+ masks the actual problem that occurred (whatever caused the timer
+ to fail in the first place), and can leave channels in odd
+ states. This patch propagates the errors in the timing resource
+ modules up through the timer core, and makes users of these
+ timers handle acknowledgement failures. It also adds some
+ defensive coding around the use of timers to prevent using bad
+ file descriptors in off nominal code paths. Note that the patch
+ created by the issue reporter was modified slightly for this
+ commit and backported to 1.8, as it was originally written for
+ Asterisk 10. (issue ASTERISK-20032) Reported by: Jeremiah Gowdy
+ patches: jgowdy-timerfd-6-22-2012.diff uploaded by Jeremiah Gowdy
+ (license 6358)
+
+2012-11-05 21:36 +0000 [r375862] Richard Mudgett <rmudgett@digium.com>
+
+ * main/loader.c: Add safety NULL pointer check in module user
+ references. Made __ast_module_user_remove() check for NULL
+ pointers. ........ Merged revision 375860 from C.3
+
+2012-11-04 03:06 +0000 [r375727-375800] Matthew Jordan <mjordan@digium.com>
+
+ * main/manager.c: Don't attempt to purge sessions when no sessions
+ exist Manager's tcp/tls objects have a periodic function that
+ purge old manager sessions periodically. During shutdown, the
+ underlying container holding those sessions can be disposed of
+ and set to NULL before the tcp/tls periodic function is stopped.
+ If the periodic function fires, it will attempt to iterate over a
+ NULL container. This patch checks for whether or not the sessions
+ container exists before attempting to purge sessions out of it.
+ If the sessions container is NULL, we simply return. Note that
+ this error was also caught by the Asterisk Test Suite.
+
+ * main/manager.c: Properly clean up manager resources on exit This
+ patch does two things: 1) It properly unregisters the manager CLI
+ commands 2) It cleans up AMI users on exit. Prior to this patch,
+ the AMI users were not being disposed of properly, resulting in a
+ memory leak. (closes issue ASTERISK-20646) Reported by: Corey
+ Farrell patches: manager_shutdown.patch uploaded by Corey Farrell
+ (license 5909)
+
+ * main/xmldoc.c: Fix memory leak when unloading XML documentation
+ This patch is a modified version of a patch originally committed
+ for the Asterisk 11 branch in r375756. A portion of that patch,
+ that fixed the memory leak during unloading XML documentation,
+ applies to branches 1.8 and 10 as well. The patch for this issue
+ was modified for these two branches. (issue ASTERISK-20648)
+ Reported by: Corey Farrell Tested by: mjordan patches:
+ xmldoc-memory_leak.patch uploaded by Corey Farrell (license 5909)
+
+ * main/cdr.c: Prevent multiple CDR batches from conflicting when
+ scheduling the CDR write The Asterisk Test Suite caught an error
+ condition where a scheduled CDR batch write can be deleted twice
+ if two channels attempt to post their CDRs at the same time. The
+ batch CDR mutex is locked while the CDRs are appended to the
+ current batch list; however, it is unlocked prior to actually
+ scheduling the CDR write. As such, two threads can attempt to
+ remove the currently scheduled batch write at the same time,
+ resulting in an assertion error. This patch extends the time that
+ the mutex is locked to encompass actually scheduling the write.
+ This prevents two threads from unscheduling the currently
+ scheduled write at the same time.
+
+2012-11-03 03:11 +0000 [r375698] Andrew Latham <lathama@gmail.com>
+
+ * README, include/asterisk/doxyref.h: Doxygen Updates Replace links
+ to missing text files removed in the 1.6.x series with links to
+ the wiki. Doxygen can handle URLs fine, don't atempt to quote
+ them. Also update the wiki link in the Readme to get everyone on
+ the same page. (issue ASTERISK-20259)
+
+2012-11-02 20:48 +0000 [r375625-375658] Richard Mudgett <rmudgett@digium.com>
+
+ * main/channel.c, channels/chan_misdn.c, main/ccss.c: Things don't
+ need to be that const.
+
+ * channels/misdn/isdn_lib.c, channels/misdn/isdn_lib.h: Multiple
+ revisions 375519-375524 ........ r375519 | rmudgett | 2012-10-30
+ 16:06:15 -0500 (Tue, 30 Oct 2012) | 11 lines chan_misdn: Timer
+ primitives must be handled first. The frm->addr is a different
+ "address space" than the stack/instance address of other Lx
+ primitives. The test for B channel instance address could fail.
+ Patches: patch01_timers.diff (license #6372) patch uploaded by
+ Guenther Kelleter JIRA ABE-2888 ........ r375520 | rmudgett |
+ 2012-10-30 16:14:58 -0500 (Tue, 30 Oct 2012) | 10 lines
+ chan_misdn: Free memory in error paths and other memory leaks.
+ The one line commented with BUG is not easily fixable because
+ there is no de-init function one can call. Patches:
+ patch02_memory.diff (license #6372) patch uploaded by Guenther
+ Kelleter JIRA ABE-2888 ........ r375521 | rmudgett | 2012-10-30
+ 16:38:41 -0500 (Tue, 30 Oct 2012) | 14 lines chan_misdn: ISDN NT
+ L2 de-establish/establish * An NT-PTMP cannot de/establish L2
+ since it doesn't know the TEIs. * On NT-PTP L2 is started when L1
+ is finally active in handle_l1. * L2 deactivation logging
+ cleanup. * L2 aggregate link status is unknown for NT-PTMP, show
+ as "UNKN". * Removed unused functions and code for L2 handling.
+ Patches: patch03_L2estab.diff (license #6372) patch uploaded by
+ Guenther Kelleter Modified JIRA ABE-2888 ........ r375522 |
+ rmudgett | 2012-10-30 16:56:14 -0500 (Tue, 30 Oct 2012) | 22
+ lines chan_misdn: Fix broken upper_id/lower_id usage. Sending PH
+ prim via lower_id layer (3 or 1) simply does not work. For TE (3)
+ it returns an error (len=-6) which is not evaluated by
+ handle_l1(), so the L1 layer status ends up wrong. Instead PH
+ must be sent via L4, only then does it reach L1 without an error
+ message. And NT PH prims only reach L1 when they are sent to
+ layer 2 id. --> use upper_id to send PH primitives. * Check for
+ errors in PH_(DE)ACTIVATE | CONFIRM. * Debug messages are
+ improved. * The lower_id is now not used for anything, except:
+ Why is lower_id layer deleted when it wasn't created? I removed
+ this code since it looks very wrong. Patches:
+ patch04_l1activation.diff (license #6372) patch uploaded by
+ Guenther Kelleter JIRA ABE-2888 ........ r375523 | rmudgett |
+ 2012-10-30 17:29:15 -0500 (Tue, 30 Oct 2012) | 31 lines
+ chan_misdn: Fix loss of B channels if L1 is down. If you make 2
+ calls out an NT PTMP port which is not connected to any phone,
+ the B channel associated with that call becomes unusable until
+ Asterisk is restarted. The problem is the EVENT_SETUP is queued
+ when L1 is not up in misdn_lib_send_event(). If L1 cannot be
+ activated the event won't be dequeued. It gets even worse when
+ the call is hung up. The queued EVENT_SETUP will be overwritten
+ by an EVENT_DISCONNECT. The reserved B channel then will never be
+ freed. If later someone connects a phone to the port, L1 will
+ eventually activate and the queued EVENT_DISCONNECT is sent down
+ the stack. However, it is ignored because it is the wrong call
+ state. The real fix would be that activation and queueing for a
+ new SETUP is done by the NT stack. But since it doesn't, the
+ workaround must be removed because it doesn't always work. Fix:
+ The event is no longer queued but immediately sent to the stack.
+ If L1 cannot be activated, the L3 state machine that was started
+ by the EVENT_SETUP will do its work, i.e. a timeout will release
+ the B channel properly. The SETUP possibly cannot be sent the
+ first time but is resent by T303 in case L1 could be activated.
+ Patches: patch05_bchan-loss.diff (license #6372) patch uploaded
+ by Guenther Kelleter Modified JIRA ABE-2888 ........ r375524 |
+ rmudgett | 2012-10-30 18:26:05 -0500 (Tue, 30 Oct 2012) | 13
+ lines chan_misdn: Remove some calls to exit(). Try proper cleanup
+ when something goes wrong in misdn_lib_init(). Especially do not
+ call exit()! * Fix memory leak because stack_destroy() does not
+ free the stack struct. Patches: patch06_cleanup-init.diff
+ (license #6372) patch uploaded by Guenther Kelleter Modified JIRA
+ ABE-2888 ........ Merged revisions 375519-375524 from
+ https://origsvn.digium.com/svn/asterisk/be/branches/C.3-bier
+
+2012-11-02 16:58 +0000 [r375594] Michael L. Young <elgueromexicano@gmail.com>
+
+ * channels/chan_sip.c: Fix Wrong Result In Debug Message For SDP
+ Origin Processing While looking at some debug logs, I noticed
+ that it was being reported that the SDP origin line was
+ unsupported or failed. Upon looking into this on my local
+ machine, I found that I too was getting this debug message yet
+ everything seemed to be getting processed properly. What was
+ discovered is, that, the variable to determine what is displayed
+ in the debug message for the SDP line that was processed, was not
+ being set for the origin line when the result was successful.
+ This patch fixes this and was tested on local machine.
+
+2012-10-31 14:23 +0000 [r375528] Matthew Jordan <mjordan@digium.com>
+
+ * res/res_calendar_ews.c: Properly extract the Body information of
+ an EWS calendar item Unlike all other calendar modules,
+ res_calendar_ews fails to extract the Body information for a
+ calendar item. This is due, in part, to a quirk in the schema in
+ the XML - not only does a CalendarItem contain a Body element,
+ but the CalendarItem exists as a descendant of a different Body
+ element. The neon parser was erroneously skipping all Body
+ elements. This patch fixes that by bypassing Body elements that
+ are not a child of CalendarItem, and parsing the Body element out
+ if it is a child. Note that the original patch by Terry Wilson
+ only needed slight modifications to make it properly pull the
+ Body information out; as such, while I've linked to the patch
+ that I uploaded for Dmitry, I've attributed the patch to Terry.
+ (closes issue ASTERISK-19738) Reported by: Dmitry Burilov Tested
+ by: Dmitry Burilov patches: calendar_ews_body_2012_10_29.diff
+ uploaded by Terry Wilson (license 6283)
+
+2012-10-30 18:48 +0000 [r375484] Jonathan Rose <jrose@digium.com>
+
+ * apps/app_mixmonitor.c: mixmonitor: Add a test event This test
+ event is being used to fix the mixmonitor_audiohook_inherit test.
+
+2012-10-30 02:07 +0000 [r375450] Matthew Jordan <mjordan@digium.com>
+
+ * apps/app_queue.c: Ensure that the Queue application tracks busy
+ members in off nominal situations There are a few code paths
+ where the Queue application fails to count a paused or in use
+ queue member as being 'busy'. This can cause callers to get stuck
+ in the Queue until a paused agent unpauses themselves. (closes
+ issue ASTERISK-20623) Reported by: Bryan Walters patches:
+ app_queue.patch uploaded by Bryan Walters (license 5851)
+
+2012-10-29 21:01 +0000 [r375415] Mark Michelson <mmichelson@digium.com>
+
+ * channels/chan_sip.c: Prevent resetting of NATted realtime peer
+ address on reload. If a "sip reload" is issued for a SIP peer,
+ then his IP address will be cleared, thus resulting in forgetting
+ the public IP address. Asterisk will then attempt to route SIP
+ traffic to the private IP address. The fix here is to make "sip
+ reload" ignore realtime peers when "host = dynamic" is spotted.
+ Realtime peers can now only have their IP address reset if they
+ have gone from being not dynamic to being dynamic. (closes issue
+ ASTERISK-18203) reported by daren ferreira (closes issue
+ ASTERISK-20572) reported by JoshE Patches: fix_nat_realtime.diff
+ uploaded by JoshE (license #6075)
+
+2012-10-29 19:26 +0000 [r375361-375388] Richard Mudgett <rmudgett@digium.com>
+
+ * main/features.c: Fix the Park 'r' option when a channel parks
+ itself. When a channel uses the Park appliation to park itself
+ with the 'r' option, the channel hears music-on-hold instead of
+ the requested ringing. * Added a missing check for the 'r' option
+ when a channel parks itself. (closes issue ASTERISK-19382)
+ Reported by: James Stocks Patches by: dsessions Review:
+ https://reviewboard.asterisk.org/r/2148/
+
+ * channels/chan_dahdi.c: chan_dahdi: Fix segfault dereferencing a
+ NULL tech_pvt. The tech support customer was using the AMI
+ Redirect action shortly after a call was placed. While the
+ channel tried to do an ast_read(), the masquerade resulting from
+ the channel redirect took place. The masquerade in the middle of
+ the ast_read() resulted in the segfault. (closes issue AST-1025)
+ Reported by: Trey Blancher Patches: jira_ast_1025_v1.8_v2.patch
+ (license #5621) patch uploaded by rmudgett
+
+2012-10-23 16:20 +0000 [r375272-375325] Jonathan Rose <jrose@digium.com>
+
+ * contrib/scripts/ast_tls_cert: ast_tls_cert script: Better
+ response for various exit conditions to openssl (closes issue
+ ASTERISK-20260) Reported by: Daniel O'Connor Patches:
+ ast_tls_cert-update.diff uploaded by Daniel O'Connor (license
+ 6419)
+
+ * main/app.c: core: Fix a memory leak in app.c from an early return
+ ast_app_group_match_get_count allocates memory with the regcomp
+ function and we previously forgot to free it when bailing out due
+ to a regex compilation failure against category. (closes issue
+ AST-1018) Reported by: Guenther Kelleter Patches:
+ regcomp_memleak.diff uploaded by Guenther Kelleter (license 6372)
+
+ * codecs/gsm/src/code.c: GSM: Fix encoding problems with GSM
+ (closes issue ASTERISK-20457) Reported by: Richard Miller
+ Patches: code.patch uploaded by Richard Miller (license 5685)
+
+2012-10-18 21:36 +0000 [r375216-375244] Jonathan Rose <jrose@digium.com>
+
+ * UPGRADE.txt: Correct version number in Upgrade.txt release notes
+ pertaining to queue order Showed 1.8.17 to 1.8.18, needs to be
+ 1.8.18 to 1.8.19
+
+ * UPGRADE.txt: app_queue: add upgrade notes for 375216 Adds notes
+ describing behavioral changes to rrmemory strategy caused by
+ 375216 (issue AST-989) Reported by: Thomas Arimont
+
+ * apps/app_queue.c: app_queue: Make ordering of rrmemory/rrordered
+ persist over add/remove members Prior to this patch, adding,
+ removing or reloading members to rrmemory would cause the order
+ to become completely jumbled. Now it behaves more or less like
+ rrordered other than the fact that it stores the members on a
+ hash table rather than a linked list. This patch also prevents
+ removal of members and member reloads from jumbling rrordered
+ queues. (issue AST-989) Reported by: Thomas Arimont Review:
+ https://reviewboard.asterisk.org/r/2164/
+
+2012-10-18 19:42 +0000 [r375189] Richard Mudgett <rmudgett@digium.com>
+
+ * makeopts.in, Makefile, build_tools/make_version, configure,
+ configure.ac: build_tools: Allow Asterisk to report git SHAs in
+ version string. Make git more attractive for managing
+ work-in-progress. Especially convenient when a potential patch
+ set needs to be tested on multiple platforms since one can use
+ git to keep all the test environments in sync independent of a
+ subversion server. Now the Asterisk version will show the exact
+ git SHA5 that was used when building (still appended by "M" if
+ there are local modifications) from a git clone of the Asterisk
+ repository so the developer can more easily know what is actually
+ under test. You will now get this: $ asterisk -V Asterisk
+ GIT-1698298 Instead of this: $ asterisk -V Asterisk
+ UNKNOWN__and_probably_unsupported This has zero impact for those
+ not using git with the exception of an extra test in the
+ configure script to gather git's path. This is necessary to
+ prevent "sudo make install" from failing since git may not be in
+ the path in make's shell environment. (closes issue
+ ASTERISK-20483) Reported by: Shaun Ruffell Patches:
+ 0001-build_tools-Allow-Asterisk-to-report-git-SHAs-in-ver.patch
+ (license #5417) patch uploaded by Shaun Ruffell Modified
+
+2012-10-17 18:55 +0000 [r375146] Kinsey Moore <kmoore@digium.com>
+
+ * main/tcptls.c: Ensure Asterisk fails TCP/TLS SIP calls when
+ certificate checking fails When placing a call to a TCP/TLS SIP
+ endpoint whose certificate is not signed by a configured CA
+ certificate, Asterisk would issue a warning and continue to
+ process the call as if there was not an issue with the
+ certificate. Asterisk now properly fails the call if the
+ certificate fails verification or if the certificate does not
+ exist when certificate checking is enabled (the default
+ behavior). (closes issue ASTERISK-20559) Reported by: kmoore
+ Review: https://reviewboard.asterisk.org/r/2163/
+
+2012-10-16 21:41 +0000 [r375074-375111] Walter Doekes <walter+asterisk@wjd.nu>
+
+ * channels/chan_sip.c: Fixes to the fd-oriented SIP TCP reads.
+ Don't crash on large user input. Allow SIP headers without space.
+ Optimize code a bit. Review:
+ https://reviewboard.asterisk.org/r/2162
+
+ * channels/chan_sip.c: Update sip_request_call SIP dial string
+ documentation. This was missed when merging review r1859.
+
+2012-10-16 19:13 +0000 [r375059] Tzafrir Cohen <tzafrir.cohen@xorcom.com>
+
+ * contrib/scripts/autosupport: autosupport: fix bashism '==' is
+ bashism (bashspecific, fails when dash is /bin/sh). Anyway, a
+ 'case' works better there. (closes issue ASTERISK-20567) Reported
+ by: Tzafrir Cohen
+
+2012-10-15 21:00 +0000 [r375025] Mark Michelson <mmichelson@digium.com>
+
+ * include/asterisk/strings.h, channels/chan_iax2.c,
+ apps/app_dial.c, main/ccss.c: Fix some potential misuses of
+ ast_str in the code. Passing an ast_str pointer by value that
+ then calls ast_str_set(), ast_str_set_va(), ast_str_append(), or
+ ast_str_append_va() can result in the pointer originally passed
+ by value being invalidated if the ast_str had to be reallocated.
+ This fixes places in the code that do this. Only the example in
+ ccss.c could result in pointer invalidation though since the
+ other cases use a stack-allocated ast_str and cannot be
+ reallocated. I've also updated the doxygen in strings.h to
+ include notes about potential misuse of the functions mentioned
+ previously. Review: https://reviewboard.asterisk.org/r/2161
+
+2012-10-14 08:59 +0000 [r374977] Tzafrir Cohen <tzafrir.cohen@xorcom.com>
+
+ * config.guess, config.sub: Update config.guess and config.sub:
+ 2012-10-10 Update config.guess and config.sub to revision
+ fb456b34ef4aa02b95dc6be69aaa66fa94a844fb from the
+ savannah.gnu.org git repo. Adds support for e.g. aarch64 (ARM
+ 64bit). config.guess:timestamp='2012-09-25'
+ config.sub:timestamp='2012-10-10'
+
+2012-10-12 15:57 +0000 [r374905] Mark Michelson <mmichelson@digium.com>
+
+ * include/asterisk/tcptls.h, main/tcptls.c, channels/chan_sip.c: Do
+ not use a FILE handle when doing SIP TCP reads. This is used to
+ solve an issue where a poll on a file descriptor does not
+ necessarily correspond to the readiness of a FILE handle to be
+ read. This change makes it so that for TCP connections, we do a
+ recv() on the file descriptor instead. Because TCP does not
+ guarantee that an entire message or even just one single message
+ will arrive during a read, a loop has been introduced to ensure
+ that we only attempt to handle a single message at a time. The
+ tcptls_session_instance structure has also had an overflow buffer
+ added to it so that if more than one TCP message arrives in one
+ go, there is a place to throw the excess. Huge thanks goes out to
+ Walter Doekes for doing extensive review on this change and
+ finding edge cases where code could fail. (closes issue
+ ASTERISK-20212) reported by Phil Ciccone Review:
+ https://reviewboard.asterisk.org/r/2123
+
+2012-10-11 15:42 +0000 [r374843] Matthew Jordan <mjordan@digium.com>
+
+ * main/cdr.c: Fix incorrect billing duration reported when batch
+ mode is enabled Similar to r369351, the billing duration can be
+ skewed when batch mode is enabled. This happened much more rarely
+ than the duration, as it only occured when the call was answered
+ (thereby indicating an actual answer time) and immediately hung
+ up on (indicating a billsec of 0). Since a billing time of '0'
+ can either mean that the call immediately ended or that the CDR
+ was improperly answered, we have to use additional information to
+ know whether or not we can trust the CDR billsec value. Prior to
+ this patch, we looked to see if we had a valid answer time. If we
+ did, and billsec was zero, we used the current time to calculate
+ what billsec value we could from the CDR being written. If batch
+ mode is enabled, this will incorrectly report a billsec value
+ being much greater than the actual duration of the call. Instead
+ of relying on the presence of an answer time to know whether or
+ not we can re-calculate the billsec for the CDR, we now also use
+ the presence of the CDR's end time to know if we need to
+ re-calculate or whether we can trust the billsec value that we
+ have. This prevents erroneous jumps in the billsec value, while
+ still making sure that in the worst case, some billing time will
+ be calculated. (closes issue AST-1016) Reported by: Thomas
+ Arimont Tested by: Thomas Arimont
+
+2012-10-10 20:52 +0000 [r374686-374802] Richard Mudgett <rmudgett@digium.com>
+
+ * apps/app_queue.c: app_queue: Made pass connected line updates
+ from the caller to ringing queue members. Party A calls Party B
+ Party B puts Party A on hold. Party B calls a queue. Ringing
+ queue member D sees Party B identification. Party B transfers
+ Party A to the queue. Queue member D does not get a connected
+ line update for Party A. Queue member D answers the call and
+ still sees Party B information. However, if Party A later
+ transfers the call to Party C then queue member D gets a
+ connected line update for Party C. * Made pass connected line
+ updates from the caller to queue members while the queue members
+ are ringing. (closes issue AST-1017) Reported by: Thomas Arimont
+ (closes issue ABE-2886) Reported by: Thomas Arimont Tested by:
+ rmudgett ........ Merged revisions 374801 from
+ https://origsvn.digium.com/svn/asterisk/be/branches/C.3-bier
+
+ * main/pbx.c: Fix execution of 'i' extension due to uninitialized
+ variable. The fix for ASTERISK-18243 added code that could
+ potentially use dst_exten[] uninitialized. As a result the 'i'
+ exten may not be executed when it should. (closes issue
+ ASTERISK-20455) Reported by: Richard Miller Patches:
+ pbx-1.8.16.0.diff (license #5685) patch uploaded by Richard
+ Miller Made some cosmetic modifications.
+
+ * configs/chan_dahdi.conf.sample: dahdi.conf.sample: Add
+ description for "buffers" setting. This contains an edited
+ version of the patch originally created by John Bigelow. (closes
+ issue ASTERISK-14435) Reported by: John Bigelow Patches:
+ buffers.patch (license #5091) patch uploaded by John Bigelow
+ 0001-dahdi.conf.sample-Add-description-for-buffers-settin.patch
+ (license #5417) patch uploaded by Shaun Ruffell Modified
+
+ * pbx/pbx_spool.c: Fix deletion of unopenable spool files. If
+ scan_service() cannot open the spool file, it logs a message
+ saying that it will delete the file and calls remove_from_queue()
+ to do it. However, remove_from_queue() fails to delete the spool
+ file because struct outgoing has not yet been fully initialized.
+ * Merged allocating a new struct outgoing and init_outgoing()
+ into new_outgoing(). Allocation is initialization. * Made
+ apply_outgoing() not initialize the spool filename in struct
+ outgoing. * Made apply_outgoing() call ast_trim_blanks() and
+ ast_skip_blanks() rather than manually inlining them. * Reduced
+ indentation levels in apply_outgoing(). * Fixed a garbled comment
+ in remove_from_queue(). * Reworked scan_service() to simplify it.
+ (closes issue ASTERISK-17231) Reported by: David Chappell
+ Patches: spool_open_failure.diff (license #4997) patch uploaded
+ by David Chappell Started with this patch.
+
2012-11-06 Asterisk Development Team <asteriskteam@digium.com>
* Asterisk 1.8.18.0 Released.
|
[-]
[+]
|
Changed |
asterisk-1.8.19.0.tar.xz/Makefile
^
|
@@ -204,7 +204,7 @@
_ASTCFLAGS+=-Wcast-align -DSOLARIS -I../include/solaris-compat -I/opt/ssl/include -I/usr/local/ssl/include -D_XPG4_2 -D__EXTENSIONS__
endif
-ASTERISKVERSION:=$(shell GREP=$(GREP) AWK=$(AWK) build_tools/make_version .)
+ASTERISKVERSION:=$(shell GREP=$(GREP) AWK=$(AWK) GIT=$(GIT) build_tools/make_version .)
ifneq ($(wildcard .version),)
ASTERISKVERSIONNUM:=$(shell $(AWK) -F. '{printf "%01d%02d%02d", $$1, $$2, $$3}' .version)
|
[-]
[+]
|
Changed |
asterisk-1.8.19.0.tar.xz/README
^
|
@@ -34,7 +34,7 @@
In addition you'll find lots of information compiled by the Asterisk
community on this Wiki:
- http://www.voip-info.org/wiki-Asterisk
+ https://wiki.asterisk.org
There is a book on Asterisk published by O'Reilly under the Creative Commons
License. It is available in book stores as well as in a downloadable version on
|
[-]
[+]
|
Changed |
asterisk-1.8.19.0.tar.xz/UPGRADE.txt
^
|
@@ -17,6 +17,10 @@
=== UPGRADE-1.6.txt -- Upgrade info for 1.4 to 1.6
===
===========================================================
+from 1.8.18 to 1.8.19:
+* Queue strategy rrmemory now has a predictable order similar to strategy
+ rrordered. Members will be called in the order that they are added to the
+ queue.
From 1.8.13 to 1.8.14:
* permitdirectmedia/denydirectmedia now controls whether peers can be
|
[-]
[+]
|
Changed |
asterisk-1.8.19.0.tar.xz/apps/app_dial.c
^
|
@@ -33,7 +33,7 @@
#include "asterisk.h"
-ASTERISK_FILE_VERSION(__FILE__, "$Revision: 371860 $")
+ASTERISK_FILE_VERSION(__FILE__, "$Revision: 375025 $")
#include <sys/time.h>
#include <sys/signal.h>
@@ -672,7 +672,7 @@
struct ast_aoc_decoded *aoc_s_rate_list;
};
-static int detect_disconnect(struct ast_channel *chan, char code, struct ast_str *featurecode);
+static int detect_disconnect(struct ast_channel *chan, char code, struct ast_str **featurecode);
static void chanlist_free(struct chanlist *outgoing)
{
@@ -1532,7 +1532,7 @@
}
if (ast_test_flag64(peerflags, OPT_CALLER_HANGUP) &&
- detect_disconnect(in, f->subclass.integer, featurecode)) {
+ detect_disconnect(in, f->subclass.integer, &featurecode)) {
ast_verb(3, "User requested call disconnect.\n");
*to = 0;
strcpy(pa->status, "CANCEL");
@@ -1645,18 +1645,18 @@
return peer;
}
-static int detect_disconnect(struct ast_channel *chan, char code, struct ast_str *featurecode)
+static int detect_disconnect(struct ast_channel *chan, char code, struct ast_str **featurecode)
{
struct ast_flags features = { AST_FEATURE_DISCONNECT }; /* only concerned with disconnect feature */
struct ast_call_feature feature = { 0, };
int res;
- ast_str_append(&featurecode, 1, "%c", code);
+ ast_str_append(featurecode, 1, "%c", code);
- res = ast_feature_detect(chan, &features, ast_str_buffer(featurecode), &feature);
+ res = ast_feature_detect(chan, &features, ast_str_buffer(*featurecode), &feature);
if (res != AST_FEATURE_RETURN_STOREDIGITS) {
- ast_str_reset(featurecode);
+ ast_str_reset(*featurecode);
}
if (feature.feature_mask & AST_FEATURE_DISCONNECT) {
return 1;
|
[-]
[+]
|
Changed |
asterisk-1.8.19.0.tar.xz/apps/app_mixmonitor.c
^
|
@@ -39,7 +39,7 @@
#include "asterisk.h"
-ASTERISK_FILE_VERSION(__FILE__, "$Revision: 373467 $")
+ASTERISK_FILE_VERSION(__FILE__, "$Revision: 375484 $")
#include "asterisk/paths.h" /* use ast_config_AST_MONITOR_DIR */
#include "asterisk/file.h"
@@ -51,6 +51,7 @@
#include "asterisk/channel.h"
#include "asterisk/autochan.h"
#include "asterisk/manager.h"
+#include "asterisk/test.h"
/*** DOCUMENTATION
<application name="MixMonitor" language="en_US">
@@ -351,6 +352,13 @@
ast_audiohook_lock(&mixmonitor->audiohook);
}
+
+ /* Test Event */
+ ast_test_suite_event_notify("MIXMONITOR_END", "Channel: %s\r\n"
+ "File: %s\r\n",
+ mixmonitor->autochan->chan->name,
+ mixmonitor->filename);
+
ast_audiohook_unlock(&mixmonitor->audiohook);
ast_autochan_destroy(mixmonitor->autochan);
|
[-]
[+]
|
Changed |
asterisk-1.8.19.0.tar.xz/apps/app_queue.c
^
|
@@ -63,7 +63,7 @@
#include "asterisk.h"
-ASTERISK_FILE_VERSION(__FILE__, "$Revision: 374108 $")
+ASTERISK_FILE_VERSION(__FILE__, "$Revision: 375450 $")
#include <sys/time.h>
#include <sys/signal.h>
@@ -1041,6 +1041,7 @@
int realtime; /*!< Is this member realtime? */
int status; /*!< Status of queue member */
int paused; /*!< Are we paused (not accepting calls)? */
+ int queuepos; /*!< In what order (pertains to certain strategies) should this member be called? */
time_t lastcall; /*!< When last successful call was hungup */
struct call_queue *lastqueue; /*!< Last queue we received a call */
unsigned int dead:1; /*!< Used to detect members deleted in realtime */
@@ -1260,6 +1261,60 @@
return !strcasecmp(q->name, q2->name) ? CMP_MATCH | CMP_STOP : 0;
}
+/*! \internal
+ * \brief ao2_callback, Decreases queuepos of all followers with a queuepos greater than arg.
+ * \param obj the member being acted on
+ * \param arg pointer to an integer containing the position value that was removed and requires reduction for anything above
+ */
+static int queue_member_decrement_followers(void *obj, void *arg, int flag)
+{
+ struct member *mem = obj;
+ int *decrement_followers_after = arg;
+
+ if (mem->queuepos > *decrement_followers_after) {
+ mem->queuepos--;
+ }
+
+ return 0;
+}
+
+/*! \internal
+ * \brief ao2_callback, finds members in a queue marked for deletion and in a cascading fashion runs queue_member_decrement_followers
+ * on them. This callback should always be ran before performing mass unlinking of delmarked members from queues.
+ * \param obj member being acted on
+ * \param arg pointer to the queue members are being removed from
+ */
+static int queue_delme_members_decrement_followers(void *obj, void *arg, int flag)
+{
+ struct member *mem = obj;
+ struct call_queue *queue = arg;
+ int rrpos = mem->queuepos;
+
+ if (mem->delme) {
+ ao2_callback(queue->members, OBJ_NODATA | OBJ_MULTIPLE, queue_member_decrement_followers, &rrpos);
+ }
+
+ return 0;
+}
+
+/*! \internal
+ * \brief Use this to decrement followers during removal of a member
+ * \param queue which queue the member is being removed from
+ * \param mem which member is being removed from the queue
+ */
+static void queue_member_follower_removal(struct call_queue *queue, struct member *mem)
+{
+ int pos = mem->queuepos;
+
+ /* If the position being removed is less than the current place in the queue, reduce the queue position by one so that we don't skip the member
+ * who would have been next otherwise. */
+ if (pos < queue->rrpos) {
+ queue->rrpos--;
+ }
+
+ ao2_callback(queue->members, OBJ_NODATA | OBJ_MULTIPLE, queue_member_decrement_followers, &pos);
+}
+
#ifdef REF_DEBUG_ONLY_QUEUES
#define queue_ref(a) __ao2_ref_debug(a,1,"",__FILE__,__LINE__,__PRETTY_FUNCTION__)
#define queue_unref(a) __ao2_ref_debug(a,-1,"",__FILE__,__LINE__,__PRETTY_FUNCTION__)
@@ -2078,6 +2133,34 @@
}
}
+/*! \internal
+ * \brief If adding a single new member to a queue, use this function instead of ao2_linking.
+ * This adds round robin queue position data for a fresh member as well as links it.
+ * \param queue Which queue the member is being added to
+ * \param mem Which member is being added to the queue
+ */
+static void member_add_to_queue(struct call_queue *queue, struct member *mem)
+{
+ ao2_lock(queue->members);
+ mem->queuepos = ao2_container_count(queue->members);
+ ao2_link(queue->members, mem);
+ ao2_unlock(queue->members);
+}
+
+/*! \internal
+ * \brief If removing a single member from a queue, use this function instead of ao2_unlinking.
+ * This will perform round robin queue position reordering for the remaining members.
+ * \param queue Which queue the member is being removed from
+ * \param member Which member is being removed from the queue
+ */
+static void member_remove_from_queue(struct call_queue *queue, struct member *mem)
+{
+ ao2_lock(queue->members);
+ queue_member_follower_removal(queue, mem);
+ ao2_unlink(queue->members, mem);
+ ao2_unlock(queue->members);
+}
+
/*!
* \brief Find rt member record to update otherwise create one.
*
@@ -2136,7 +2219,7 @@
m->realtime = 1;
ast_copy_string(m->rt_uniqueid, rt_uniqueid, sizeof(m->rt_uniqueid));
ast_queue_log(q->name, "REALTIME", m->interface, "ADDMEMBER", "%s", paused ? "PAUSED" : "");
- ao2_link(q->members, m);
+ member_add_to_queue(q, m);
ao2_ref(m, -1);
m = NULL;
}
@@ -2152,7 +2235,7 @@
while ((cur = ao2_iterator_next(&mem_iter))) {
if (all || !cur->dynamic) {
- ao2_unlink(q->members, cur);
+ member_remove_from_queue(q, cur);
}
ao2_ref(cur, -1);
}
@@ -2317,7 +2400,7 @@
while ((m = ao2_iterator_next(&mem_iter))) {
if (m->dead) {
ast_queue_log(q->name, "REALTIME", m->interface, "REMOVEMEMBER", "%s", "");
- ao2_unlink(q->members, m);
+ member_remove_from_queue(q, m);
}
ao2_ref(m, -1);
}
@@ -2413,7 +2496,7 @@
mem_iter = ao2_iterator_init(q->members, 0);
while ((m = ao2_iterator_next(&mem_iter))) {
if (m->realtime) {
- ao2_unlink(q->members, m);
+ member_remove_from_queue(q, m);
}
ao2_ref(m, -1);
}
@@ -2447,7 +2530,7 @@
while ((m = ao2_iterator_next(&mem_iter))) {
if (m->dead) {
ast_queue_log(q->name, "REALTIME", m->interface, "REMOVEMEMBER", "%s", "");
- ao2_unlink(q->members, m);
+ member_remove_from_queue(q, m);
}
ao2_ref(m, -1);
}
@@ -3035,6 +3118,7 @@
if (qe->chan->cdr)
ast_cdr_busy(qe->chan->cdr);
tmp->stillgoing = 0;
+ (*busies)++;
return 0;
}
@@ -3043,6 +3127,7 @@
if (qe->chan->cdr)
ast_cdr_busy(qe->chan->cdr);
tmp->stillgoing = 0;
+ (*busies)++;
return 0;
}
if (use_weight && compare_weight(qe->parent,tmp->member)) {
@@ -3876,13 +3961,6 @@
return NULL;
}
- /*!
- * \todo
- * XXX Queue like Dial really should send any connected line
- * updates (AST_CONTROL_CONNECTED_LINE) from the caller to each
- * ringing queue member.
- */
-
if ((f->frametype == AST_FRAME_DTMF) && caller_disconnect && (f->subclass.integer == '*')) {
ast_verb(3, "User hit %c to disconnect call.\n", f->subclass.integer);
*to = 0;
@@ -3896,6 +3974,38 @@
ast_frfree(f);
return NULL;
}
+
+ /* Send the frame from the in channel to all outgoing channels. */
+ for (o = start; o; o = o->call_next) {
+ if (!o->stillgoing || !o->chan) {
+ /* This outgoing channel has died so don't send the frame to it. */
+ continue;
+ }
+ switch (f->frametype) {
+ case AST_FRAME_CONTROL:
+ switch (f->subclass.integer) {
+ case AST_CONTROL_CONNECTED_LINE:
+ if (ast_channel_connected_line_macro(in, o->chan, f, 0, 1)) {
+ ast_indicate_data(o->chan, f->subclass.integer, f->data.ptr, f->datalen);
+ }
+ break;
+ case AST_CONTROL_REDIRECTING:
+ if (ast_channel_redirecting_macro(in, o->chan, f, 0, 1)) {
+ ast_indicate_data(o->chan, f->subclass.integer, f->data.ptr, f->datalen);
+ }
+ break;
+ default:
+ /* We are not going to do anything with this frame. */
+ goto skip_frame;
+ }
+ break;
+ default:
+ /* We are not going to do anything with this frame. */
+ goto skip_frame;
+ }
+ }
+skip_frame:;
+
ast_frfree(f);
}
if (!*to) {
@@ -4158,6 +4268,7 @@
break;
case QUEUE_STRATEGY_RRORDERED:
case QUEUE_STRATEGY_RRMEMORY:
+ pos = mem->queuepos;
if (pos < q->rrpos) {
tmp->metric = 1000 + pos;
} else {
@@ -5293,7 +5404,7 @@
"Location: %s\r\n"
"MemberName: %s\r\n",
q->name, mem->interface, mem->membername);
- ao2_unlink(q->members, mem);
+ member_remove_from_queue(q, mem);
ao2_ref(mem, -1);
if (queue_persistent_members)
@@ -5332,7 +5443,7 @@
if ((old_member = interface_exists(q, interface)) == NULL) {
if ((new_member = create_queue_member(interface, membername, penalty, paused, state_interface))) {
new_member->dynamic = 1;
- ao2_link(q->members, new_member);
+ member_add_to_queue(q, new_member);
manager_event(EVENT_FLAG_AGENT, "QueueMemberAdded",
"Queue: %s\r\n"
"Location: %s\r\n"
@@ -6691,9 +6802,20 @@
/* Find the old position in the list */
ast_copy_string(tmpmem.interface, interface, sizeof(tmpmem.interface));
- cur = ao2_find(q->members, &tmpmem, OBJ_POINTER | OBJ_UNLINK);
+ cur = ao2_find(q->members, &tmpmem, OBJ_POINTER);
+
if ((newm = create_queue_member(interface, membername, penalty, cur ? cur->paused : 0, state_interface))) {
- ao2_link(q->members, newm);
+ if (cur) {
+ /* Round Robin Queue Position must be copied if this is replacing an existing member */
+ ao2_lock(q->members);
+ newm->queuepos = cur->queuepos;
+ ao2_link(q->members, newm);
+ ao2_unlink(q->members, cur);
+ ao2_unlock(q->members);
+ } else {
+ /* Otherwise we need to add using the function that will apply a round robin queue position manually. */
+ member_add_to_queue(q, newm);
+ }
ao2_ref(newm, -1);
}
newm = NULL;
@@ -6820,7 +6942,10 @@
/* Free remaining members marked as delme */
if (member_reload) {
+ ao2_lock(q->members);
+ ao2_callback(q->members, OBJ_NODATA | OBJ_MULTIPLE, queue_delme_members_decrement_followers, q);
ao2_callback(q->members, OBJ_NODATA | OBJ_MULTIPLE | OBJ_UNLINK, kill_dead_members, q);
+ ao2_unlock(q->members);
}
if (new) {
|
[-]
[+]
|
Added |
asterisk-1.8.19.0.tar.xz/asterisk-1.8.19.0-summary.html
^
|
@@ -0,0 +1,273 @@
+<!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.19.0</title></head>
+<body>
+<h1 align="center"><a name="top">Release Summary</a></h1>
+<h3 align="center">asterisk-1.8.19.0</h3>
+<h3 align="center">Date: 2012-12-09</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.18.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>
+6 bebuild<br/>
+6 rmudgett<br/>
+5 mjordan<br/>
+4 jrose<br/>
+2 JoshE<br/>
+2 mmichelson<br/>
+2 Richard Miller<br/>
+2 sruffell<br/>
+2 tzafrir<br/>
+2 wdoekes<br/>
+1 Bryan Walters<br/>
+1 Corey Farrell<br/>
+1 Daniel O'Connor<br/>
+1 David Chappell<br/>
+1 elguero<br/>
+1 Guenther Kelleter<br/>
+1 jbigelow<br/>
+1 kmoore<br/>
+1 lathama<br/>
+1 twilson<br/>
+</td>
+<td>
+1 Dmitry Burilov<br/>
+1 rmudgett<br/>
+1 Thomas Arimont<br/>
+</td>
+<td>
+2 tomaso<br/>
+2 ulogic<br/>
+1 chappell<br/>
+1 coreyfarrell<br/>
+1 daren<br/>
+1 darius<br/>
+1 gamegamer43<br/>
+1 gkelleter<br/>
+1 jbigelow<br/>
+1 kmoore<br/>
+1 n8ideas<br/>
+1 netaskd<br/>
+1 pciccone<br/>
+1 sruffell<br/>
+1 stocksy<br/>
+1 tblancher<br/>
+1 tzafrir<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_queue</h3><br/>
+<a href="https://issues.asterisk.org/jira/browse/ASTERISK-20623">ASTERISK-20623</a>: App_queue doesn't increment number of busy agent in certain situations<br/>
+Revision: <a href="http://svn.digium.com/view/asterisk/branches/1.8?view=revision&revision=375450">375450</a><br/>
+Reporter: gamegamer43<br/>
+Coders: Bryan Walters<br/>
+<br/>
+<h3>Category: Channels/chan_sip/General</h3><br/>
+<a href="https://issues.asterisk.org/jira/browse/ASTERISK-18203">ASTERISK-18203</a>: Problems with NAT on realtime peers (and maybe static ones)<br/>
+Revision: <a href="http://svn.digium.com/view/asterisk/branches/1.8?view=revision&revision=375415">375415</a><br/>
+Reporter: daren<br/>
+Coders: JoshE<br/>
+<br/>
+<a href="https://issues.asterisk.org/jira/browse/ASTERISK-20572">ASTERISK-20572</a>: Realtime Peers behind NAT are Set to RFC1918 private address after sip reload<br/>
+Revision: <a href="http://svn.digium.com/view/asterisk/branches/1.8?view=revision&revision=375415">375415</a><br/>
+Reporter: n8ideas<br/>
+Coders: JoshE<br/>
+<br/>
+<h3>Category: Channels/chan_sip/TCP-TLS</h3><br/>
+<a href="https://issues.asterisk.org/jira/browse/ASTERISK-20212">ASTERISK-20212</a>: Deadlock / TCP SIP Stack<br/>
+Revision: <a href="http://svn.digium.com/view/asterisk/branches/1.8?view=revision&revision=374905">374905</a><br/>
+Reporter: pciccone<br/>
+Coders: mmichelson<br/>
+<br/>
+<a href="https://issues.asterisk.org/jira/browse/ASTERISK-20559">ASTERISK-20559</a>: SIP TCP/TLS: When checking the CA certificate fails, the call still goes through<br/>
+Revision: <a href="http://svn.digium.com/view/asterisk/branches/1.8?view=revision&revision=375146">375146</a><br/>
+Reporter: kmoore<br/>
+Coders: kmoore<br/>
+<br/>
+<h3>Category: Codecs/codec_gsm</h3><br/>
+<a href="https://issues.asterisk.org/jira/browse/ASTERISK-20457">ASTERISK-20457</a>: GSM encoding is not thread safe<br/>
+Revision: <a href="http://svn.digium.com/view/asterisk/branches/1.8?view=revision&revision=375272">375272</a><br/>
+Reporter: ulogic<br/>
+Coders: Richard Miller<br/>
+<br/>
+<h3>Category: Contrib/General</h3><br/>
+<a href="https://issues.asterisk.org/jira/browse/ASTERISK-20260">ASTERISK-20260</a>: Increase robustness of ast_tls_cert<br/>
+Revision: <a href="http://svn.digium.com/view/asterisk/branches/1.8?view=revision&revision=375325">375325</a><br/>
+Reporter: darius<br/>
+Coders: Daniel O'Connor<br/>
+<br/>
+<h3>Category: Core/BuildSystem</h3><br/>
+<a href="https://issues.asterisk.org/jira/browse/ASTERISK-20483">ASTERISK-20483</a>: Allow Asterisk to report git SHAs in version string.<br/>
+Revision: <a href="http://svn.digium.com/view/asterisk/branches/1.8?view=revision&revision=375189">375189</a><br/>
+Reporter: sruffell<br/>
+Coders: sruffell<br/>
+<br/>
+<h3>Category: Core/ManagerInterface</h3><br/>
+<a href="https://issues.asterisk.org/jira/browse/ASTERISK-20646">ASTERISK-20646</a>: [patch] - manager_shutdown fails to completely shutdown AMI and leaks memory<br/>
+Revision: <a href="http://svn.digium.com/view/asterisk/branches/1.8?view=revision&revision=375793">375793</a><br/>
+Reporter: coreyfarrell<br/>
+Coders: Corey Farrell<br/>
+<br/>
+<h3>Category: Core/PBX</h3><br/>
+<a href="https://issues.asterisk.org/jira/browse/ASTERISK-20455">ASTERISK-20455</a>: dialplan fails to run the invalid "i" extension due to an uninitialized variable dat_exten in main/pbx.c<br/>
+Revision: <a href="http://svn.digium.com/view/asterisk/branches/1.8?view=revision&revision=374758">374758</a><br/>
+Reporter: ulogic<br/>
+Coders: Richard Miller<br/>
+<br/>
+<h3>Category: Documentation</h3><br/>
+<a href="https://issues.asterisk.org/jira/browse/ASTERISK-14435">ASTERISK-14435</a>: [patch] Add option and description to chan_dahdi.conf.sample<br/>
+Revision: <a href="http://svn.digium.com/view/asterisk/branches/1.8?view=revision&revision=374727">374727</a><br/>
+Reporter: jbigelow<br/>
+Coders: jbigelow, sruffell<br/>
+<br/>
+<h3>Category: Features/Parking</h3><br/>
+<a href="https://issues.asterisk.org/jira/browse/ASTERISK-19382">ASTERISK-19382</a>: Park() ignores 'r' option, plays default MOH instead.<br/>
+Revision: <a href="http://svn.digium.com/view/asterisk/branches/1.8?view=revision&revision=375388">375388</a><br/>
+Reporter: stocksy<br/>
+Coders: rmudgett<br/>
+<br/>
+<h3>Category: General</h3><br/>
+<a href="https://issues.asterisk.org/jira/browse/ASTERISK-20567">ASTERISK-20567</a>: bashism in autosupport<br/>
+Revision: <a href="http://svn.digium.com/view/asterisk/branches/1.8?view=revision&revision=375059">375059</a><br/>
+Reporter: tzafrir<br/>
+Coders: tzafrir<br/>
+<br/>
+<h3>Category: PBX/pbx_realtime</h3><br/>
+<a href="https://issues.asterisk.org/jira/browse/ASTERISK-18203">ASTERISK-18203</a>: Problems with NAT on realtime peers (and maybe static ones)<br/>
+Revision: <a href="http://svn.digium.com/view/asterisk/branches/1.8?view=revision&revision=375415">375415</a><br/>
+Reporter: daren<br/>
+Coders: JoshE<br/>
+<br/>
+<a href="https://issues.asterisk.org/jira/browse/ASTERISK-20572">ASTERISK-20572</a>: Realtime Peers behind NAT are Set to RFC1918 private address after sip reload<br/>
+Revision: <a href="http://svn.digium.com/view/asterisk/branches/1.8?view=revision&revision=375415">375415</a><br/>
+Reporter: n8ideas<br/>
+Coders: JoshE<br/>
+<br/>
+<h3>Category: PBX/pbx_spool</h3><br/>
+<a href="https://issues.asterisk.org/jira/browse/ASTERISK-17231">ASTERISK-17231</a>: [patch] unopenable spool files not deleted<br/>
+Revision: <a href="http://svn.digium.com/view/asterisk/branches/1.8?view=revision&revision=374686">374686</a><br/>
+Reporter: chappell<br/>
+Coders: David Chappell<br/>
+<br/>
+<h3>Category: Resources/res_calendar_ews</h3><br/>
+<a href="https://issues.asterisk.org/jira/browse/ASTERISK-19738">ASTERISK-19738</a>: Calendar EWS does not attempt to extract the Body element in a CalendarItem and populate the description event field<br/>
+Revision: <a href="http://svn.digium.com/view/asterisk/branches/1.8?view=revision&revision=375528">375528</a><br/>
+Reporter: netaskd<br/>
+Testers: Dmitry Burilov<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=374977">374977</a></td><td>tzafrir</td><td>Update config.guess and config.sub: 2012-10-10</td>
+<td></td></tr><tr><td><a href="http://svn.digium.com/view/asterisk/branches/1.8?view=revision&revision=375025">375025</a></td><td>mmichelson</td><td>Fix some potential misuses of ast_str in the code.</td>
+<td></td></tr><tr><td><a href="http://svn.digium.com/view/asterisk/branches/1.8?view=revision&revision=375074">375074</a></td><td>wdoekes</td><td>Update sip_request_call SIP dial string documentation.</td>
+<td></td></tr><tr><td><a href="http://svn.digium.com/view/asterisk/branches/1.8?view=revision&revision=375111">375111</a></td><td>wdoekes</td><td>Fixes to the fd-oriented SIP TCP reads.</td>
+<td></td></tr><tr><td><a href="http://svn.digium.com/view/asterisk/branches/1.8?view=revision&revision=375216">375216</a></td><td>jrose</td><td>app_queue: Make ordering of rrmemory/rrordered persist over add/remove members</td>
+<td><a href="https://issues.asterisk.org/jira/browse/AST-989">AST-989</a></td></tr><tr><td><a href="http://svn.digium.com/view/asterisk/branches/1.8?view=revision&revision=375242">375242</a></td><td>jrose</td><td>app_queue: add upgrade notes for 375216</td>
+<td><a href="https://issues.asterisk.org/jira/browse/AST-989">AST-989</a></td></tr><tr><td><a href="http://svn.digium.com/view/asterisk/branches/1.8?view=revision&revision=375244">375244</a></td><td>jrose</td><td>Correct version number in Upgrade.txt release notes pertaining to queue order</td>
+<td></td></tr><tr><td><a href="http://svn.digium.com/view/asterisk/branches/1.8?view=revision&revision=375484">375484</a></td><td>jrose</td><td>mixmonitor: Add a test event</td>
+<td></td></tr><tr><td><a href="http://svn.digium.com/view/asterisk/branches/1.8?view=revision&revision=375594">375594</a></td><td>elguero</td><td>Fix Wrong Result In Debug Message For SDP Origin Processing</td>
+<td></td></tr><tr><td><a href="http://svn.digium.com/view/asterisk/branches/1.8?view=revision&revision=375625">375625</a></td><td>rmudgett</td><td>Multiple revisions 375519-375524</td>
+<td></td></tr><tr><td><a href="http://svn.digium.com/view/asterisk/branches/1.8?view=revision&revision=375658">375658</a></td><td>rmudgett</td><td>Things don't need to be that const.</td>
+<td></td></tr><tr><td><a href="http://svn.digium.com/view/asterisk/branches/1.8?view=revision&revision=375698">375698</a></td><td>lathama</td><td>Doxygen Updates</td>
+<td><a href="https://issues.asterisk.org/jira/browse/ASTERISK-20259">ASTERISK-20259</a></td></tr><tr><td><a href="http://svn.digium.com/view/asterisk/branches/1.8?view=revision&revision=375727">375727</a></td><td>mjordan</td><td>Prevent multiple CDR batches from conflicting when scheduling the CDR write</td>
+<td></td></tr><tr><td><a href="http://svn.digium.com/view/asterisk/branches/1.8?view=revision&revision=375758">375758</a></td><td>mjordan</td><td>Fix memory leak when unloading XML documentation</td>
+<td><a href="https://issues.asterisk.org/jira/browse/ASTERISK-20648">ASTERISK-20648</a></td></tr><tr><td><a href="http://svn.digium.com/view/asterisk/branches/1.8?view=revision&revision=375800">375800</a></td><td>mjordan</td><td>Don't attempt to purge sessions when no sessions exist</td>
+<td></td></tr><tr><td><a href="http://svn.digium.com/view/asterisk/branches/1.8?view=revision&revision=375862">375862</a></td><td>rmudgett</td><td>Add safety NULL pointer check in module user references.</td>
+<td></td></tr><tr><td><a href="http://svn.digium.com/view/asterisk/branches/1.8?view=revision&revision=375893">375893</a></td><td>mjordan</td><td>Refactor ast_timer_ack to return an error and handle the error in timer users</td>
+<td><a href="https://issues.asterisk.org/jira/browse/ASTERISK-20032">ASTERISK-20032</a></td></tr><tr><td><a href="http://svn.digium.com/view/asterisk/branches/1.8?view=revision&revision=377290">377290</a></td><td>bebuild</td><td>Create 1.8.19.0-rc2</td>
+<td></td></tr><tr><td><a href="http://svn.digium.com/view/asterisk/branches/1.8?view=revision&revision=377294">377294</a></td><td>bebuild</td><td>Merge 377257 for 1.8.19.0-rc2</td>
+<td></td></tr><tr><td><a href="http://svn.digium.com/view/asterisk/branches/1.8?view=revision&revision=377298">377298</a></td><td>bebuild</td><td>Importing release summary for 1.8.19.0-rc2 release.</td>
+<td></td></tr><tr><td><a href="http://svn.digium.com/view/asterisk/branches/1.8?view=revision&revision=377315">377315</a></td><td>bebuild</td><td>Create 1.8.19.0-rc3</td>
+<td></td></tr><tr><td><a href="http://svn.digium.com/view/asterisk/branches/1.8?view=revision&revision=377321">377321</a></td><td>bebuild</td><td>Merge r376868 for 1.8.19.0-rc3</td>
+<td></td></tr><tr><td><a href="http://svn.digium.com/view/asterisk/branches/1.8?view=revision&revision=377325">377325</a></td><td>bebuild</td><td>Importing release summary for 1.8.19.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 | 11
+Makefile | 2
+README | 2
+UPGRADE.txt | 4
+apps/app_dial.c | 12
+apps/app_mixmonitor.c | 8
+apps/app_queue.c | 157 +++++
+asterisk-1.8.19.0-rc1-summary.html | 257 ---------
+asterisk-1.8.19.0-rc1-summary.txt | 337 ------------
+asterisk-1.8.19.0-rc2-summary.html | 58 --
+asterisk-1.8.19.0-rc2-summary.txt | 86 ---
+asterisk-1.8.19.0-rc3-summary.html | 65 ++
+asterisk-1.8.19.0-rc3-summary.txt | 98 +++
+bridges/bridge_softmix.c | 8
+build_tools/make_version | 106 +++
+channels/chan_dahdi.c | 17
+channels/chan_iax2.c | 35 -
+channels/chan_local.c | 21
+channels/chan_misdn.c | 2
+channels/chan_sip.c | 985 ++++++++++++++++++++++++++++++++-----
+channels/misdn/isdn_lib.c | 218 +++-----
+channels/misdn/isdn_lib.h | 3
+codecs/gsm/src/code.c | 3
+config.guess | 279 +++++-----
+config.sub | 236 ++++++--
+configs/chan_dahdi.conf.sample | 27 +
+configure.ac | 1
+contrib/scripts/ast_tls_cert | 41 +
+contrib/scripts/autosupport | 12
+include/asterisk/doxyref.h | 71 +-
+include/asterisk/strings.h | 22
+include/asterisk/tcptls.h | 6
+include/asterisk/timing.h | 9
+main/app.c | 1
+main/ccss.c | 20
+main/cdr.c | 12
+main/channel.c | 16
+main/features.c | 13
+main/loader.c | 12
+main/manager.c | 57 +-
+main/pbx.c | 3
+main/tcptls.c | 26
+main/timing.c | 16
+main/xmldoc.c | 1
+makeopts.in | 1
+pbx/pbx_spool.c | 284 +++++-----
+res/res_calendar_ews.c | 18
+res/res_fax_spandsp.c | 7
+res/res_musiconhold.c | 5
+res/res_timing_dahdi.c | 6
+res/res_timing_kqueue.c | 11
+res/res_timing_pthread.c | 32 -
+res/res_timing_timerfd.c | 45 +
+54 files changed, 2300 insertions(+), 1487 deletions(-)
+</pre><br/>
+<hr/>
+</body>
+</html>
|
[-]
[+]
|
Added |
asterisk-1.8.19.0.tar.xz/asterisk-1.8.19.0-summary.txt
^
|
@@ -0,0 +1,363 @@
+ Release Summary
+
+ asterisk-1.8.19.0
+
+ Date: 2012-12-09
+
+ <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.18.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
+ 6 bebuild 1 Dmitry Burilov 2 tomaso
+ 6 rmudgett 1 rmudgett 2 ulogic
+ 5 mjordan 1 Thomas Arimont 1 chappell
+ 4 jrose 1 coreyfarrell
+ 2 JoshE 1 daren
+ 2 mmichelson 1 darius
+ 2 Richard Miller 1 gamegamer43
+ 2 sruffell 1 gkelleter
+ 2 tzafrir 1 jbigelow
+ 2 wdoekes 1 kmoore
+ 1 Bryan Walters 1 n8ideas
+ 1 Corey Farrell 1 netaskd
+ 1 Daniel O'Connor 1 pciccone
+ 1 David Chappell 1 sruffell
+ 1 elguero 1 stocksy
+ 1 Guenther Kelleter 1 tblancher
+ 1 jbigelow 1 tzafrir
+ 1 kmoore
+ 1 lathama
+ 1 twilson
+
+ ----------------------------------------------------------------------
+
+ 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_queue
+
+ ASTERISK-20623: App_queue doesn't increment number of busy agent in
+ certain situations
+ Revision: 375450
+ Reporter: gamegamer43
+ Coders: Bryan Walters
+
+ Category: Channels/chan_sip/General
+
+ ASTERISK-18203: Problems with NAT on realtime peers (and maybe static
+ ones)
+ Revision: 375415
+ Reporter: daren
+ Coders: JoshE
+
+ ASTERISK-20572: Realtime Peers behind NAT are Set to RFC1918 private
+ address after sip reload
+ Revision: 375415
+ Reporter: n8ideas
+ Coders: JoshE
+
+ Category: Channels/chan_sip/TCP-TLS
+
+ ASTERISK-20212: Deadlock / TCP SIP Stack
+ Revision: 374905
+ Reporter: pciccone
+ Coders: mmichelson
+
+ ASTERISK-20559: SIP TCP/TLS: When checking the CA certificate fails, the
+ call still goes through
+ Revision: 375146
+ Reporter: kmoore
+ Coders: kmoore
+
+ Category: Codecs/codec_gsm
+
+ ASTERISK-20457: GSM encoding is not thread safe
+ Revision: 375272
+ Reporter: ulogic
+ Coders: Richard Miller
+
+ Category: Contrib/General
+
+ ASTERISK-20260: Increase robustness of ast_tls_cert
+ Revision: 375325
+ Reporter: darius
+ Coders: Daniel O'Connor
+
+ Category: Core/BuildSystem
+
+ ASTERISK-20483: Allow Asterisk to report git SHAs in version string.
+ Revision: 375189
+ Reporter: sruffell
+ Coders: sruffell
+
+ Category: Core/ManagerInterface
+
+ ASTERISK-20646: [patch] - manager_shutdown fails to completely shutdown
+ AMI and leaks memory
+ Revision: 375793
+ Reporter: coreyfarrell
+ Coders: Corey Farrell
+
+ Category: Core/PBX
+
+ ASTERISK-20455: dialplan fails to run the invalid "i" extension due to an
+ uninitialized variable dat_exten in main/pbx.c
+ Revision: 374758
+ Reporter: ulogic
+ Coders: Richard Miller
+
+ Category: Documentation
+
+ ASTERISK-14435: [patch] Add option and description to
+ chan_dahdi.conf.sample
+ Revision: 374727
+ Reporter: jbigelow
+ Coders: jbigelow, sruffell
+
+ Category: Features/Parking
+
+ ASTERISK-19382: Park() ignores 'r' option, plays default MOH instead.
+ Revision: 375388
+ Reporter: stocksy
+ Coders: rmudgett
+
+ Category: General
+
+ ASTERISK-20567: bashism in autosupport
+ Revision: 375059
+ Reporter: tzafrir
+ Coders: tzafrir
+
+ Category: PBX/pbx_realtime
+
+ ASTERISK-18203: Problems with NAT on realtime peers (and maybe static
+ ones)
+ Revision: 375415
+ Reporter: daren
+ Coders: JoshE
+
+ ASTERISK-20572: Realtime Peers behind NAT are Set to RFC1918 private
+ address after sip reload
+ Revision: 375415
+ Reporter: n8ideas
+ Coders: JoshE
+
+ Category: PBX/pbx_spool
+
+ ASTERISK-17231: [patch] unopenable spool files not deleted
+ Revision: 374686
+ Reporter: chappell
+ Coders: David Chappell
+
+ Category: Resources/res_calendar_ews
+
+ ASTERISK-19738: Calendar EWS does not attempt to extract the Body element
+ in a CalendarItem and populate the description event field
+ Revision: 375528
+ Reporter: netaskd
+ Testers: Dmitry Burilov
+ 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 |
+ |----------+------------+----------------------------+-------------------|
+ | 374977 | tzafrir | Update config.guess and | |
+ | | | config.sub: 2012-10-10 | |
+ |----------+------------+----------------------------+-------------------|
+ | 375025 | mmichelson | Fix some potential misuses | |
+ | | | of ast_str in the code. | |
+ |----------+------------+----------------------------+-------------------|
+ | | | Update sip_request_call | |
+ | 375074 | wdoekes | SIP dial string | |
+ | | | documentation. | |
+ |----------+------------+----------------------------+-------------------|
+ | 375111 | wdoekes | Fixes to the fd-oriented | |
+ | | | SIP TCP reads. | |
+ |----------+------------+----------------------------+-------------------|
+ | | | app_queue: Make ordering | |
+ | 375216 | jrose | of rrmemory/rrordered | AST-989 |
+ | | | persist over add/remove | |
+ | | | members | |
+ |----------+------------+----------------------------+-------------------|
+ | 375242 | jrose | app_queue: add upgrade | AST-989 |
+ | | | notes for 375216 | |
+ |----------+------------+----------------------------+-------------------|
+ | | | Correct version number in | |
+ | 375244 | jrose | Upgrade.txt release notes | |
+ | | | pertaining to queue order | |
+ |----------+------------+----------------------------+-------------------|
+ | 375484 | jrose | mixmonitor: Add a test | |
+ | | | event | |
+ |----------+------------+----------------------------+-------------------|
+ | | | Fix Wrong Result In Debug | |
+ | 375594 | elguero | Message For SDP Origin | |
+ | | | Processing | |
+ |----------+------------+----------------------------+-------------------|
+ | 375625 | rmudgett | Multiple revisions | |
+ | | | 375519-375524 | |
+ |----------+------------+----------------------------+-------------------|
+ | 375658 | rmudgett | Things don't need to be | |
+ | | | that const. | |
+ |----------+------------+----------------------------+-------------------|
+ | 375698 | lathama | Doxygen Updates | ASTERISK-20259 |
+ |----------+------------+----------------------------+-------------------|
+ | | | Prevent multiple CDR | |
+ | 375727 | mjordan | batches from conflicting | |
+ | | | when scheduling the CDR | |
+ | | | write | |
+ |----------+------------+----------------------------+-------------------|
+ | | | Fix memory leak when | |
+ | 375758 | mjordan | unloading XML | ASTERISK-20648 |
+ | | | documentation | |
+ |----------+------------+----------------------------+-------------------|
+ | | | Don't attempt to purge | |
+ | 375800 | mjordan | sessions when no sessions | |
+ | | | exist | |
+ |----------+------------+----------------------------+-------------------|
+ | | | Add safety NULL pointer | |
+ | 375862 | rmudgett | check in module user | |
+ | | | references. | |
+ |----------+------------+----------------------------+-------------------|
+ | | | Refactor ast_timer_ack to | |
+ | 375893 | mjordan | return an error and handle | ASTERISK-20032 |
+ | | | the error in timer users | |
+ |----------+------------+----------------------------+-------------------|
+ | 377290 | bebuild | Create 1.8.19.0-rc2 | |
+ |----------+------------+----------------------------+-------------------|
+ | 377294 | bebuild | Merge 377257 for | |
+ | | | 1.8.19.0-rc2 | |
+ |----------+------------+----------------------------+-------------------|
+ | 377298 | bebuild | Importing release summary | |
+ | | | for 1.8.19.0-rc2 release. | |
+ |----------+------------+----------------------------+-------------------|
+ | 377315 | bebuild | Create 1.8.19.0-rc3 | |
+ |----------+------------+----------------------------+-------------------|
+ | 377321 | bebuild | Merge r376868 for | |
+ | | | 1.8.19.0-rc3 | |
+ |----------+------------+----------------------------+-------------------|
+ | 377325 | bebuild | Importing release summary | |
+ | | | for 1.8.19.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 | 11
+ Makefile | 2
+ README | 2
+ UPGRADE.txt | 4
+ apps/app_dial.c | 12
+ apps/app_mixmonitor.c | 8
+ apps/app_queue.c | 157 +++++
+ asterisk-1.8.19.0-rc1-summary.html | 257 ---------
+ asterisk-1.8.19.0-rc1-summary.txt | 337 ------------
+ asterisk-1.8.19.0-rc2-summary.html | 58 --
+ asterisk-1.8.19.0-rc2-summary.txt | 86 ---
+ asterisk-1.8.19.0-rc3-summary.html | 65 ++
+ asterisk-1.8.19.0-rc3-summary.txt | 98 +++
+ bridges/bridge_softmix.c | 8
+ build_tools/make_version | 106 +++
+ channels/chan_dahdi.c | 17
+ channels/chan_iax2.c | 35 -
+ channels/chan_local.c | 21
+ channels/chan_misdn.c | 2
+ channels/chan_sip.c | 985 ++++++++++++++++++++++++++++++++-----
+ channels/misdn/isdn_lib.c | 218 +++-----
+ channels/misdn/isdn_lib.h | 3
+ codecs/gsm/src/code.c | 3
+ config.guess | 279 +++++-----
+ config.sub | 236 ++++++--
+ configs/chan_dahdi.conf.sample | 27 +
+ configure.ac | 1
+ contrib/scripts/ast_tls_cert | 41 +
+ contrib/scripts/autosupport | 12
+ include/asterisk/doxyref.h | 71 +-
+ include/asterisk/strings.h | 22
+ include/asterisk/tcptls.h | 6
+ include/asterisk/timing.h | 9
+ main/app.c | 1
+ main/ccss.c | 20
+ main/cdr.c | 12
+ main/channel.c | 16
+ main/features.c | 13
+ main/loader.c | 12
+ main/manager.c | 57 +-
+ main/pbx.c | 3
+ main/tcptls.c | 26
+ main/timing.c | 16
+ main/xmldoc.c | 1
+ makeopts.in | 1
+ pbx/pbx_spool.c | 284 +++++-----
+ res/res_calendar_ews.c | 18
+ res/res_fax_spandsp.c | 7
+ res/res_musiconhold.c | 5
+ res/res_timing_dahdi.c | 6
+ res/res_timing_kqueue.c | 11
+ res/res_timing_pthread.c | 32 -
+ res/res_timing_timerfd.c | 45 +
+ 54 files changed, 2300 insertions(+), 1487 deletions(-)
+
+ ----------------------------------------------------------------------
|
[-]
[+]
|
Changed |
asterisk-1.8.19.0.tar.xz/bridges/bridge_softmix.c
^
|
@@ -35,7 +35,7 @@
#include "asterisk.h"
-ASTERISK_FILE_VERSION(__FILE__, "$Revision: 328209 $")
+ASTERISK_FILE_VERSION(__FILE__, "$Revision: 375893 $")
#include <stdio.h>
#include <stdlib.h>
@@ -107,7 +107,7 @@
return -1;
}
ast_timer_close((struct ast_timer *) bridge->bridge_pvt);
-
+ bridge->bridge_pvt = NULL;
return 0;
}
@@ -274,7 +274,11 @@
/* Wait for the timing source to tell us to wake up and get things done */
ast_waitfor_n_fd(&timingfd, 1, &timeout, NULL);
- ast_timer_ack(timer, 1);
+ if (ast_timer_ack(timer, 1) < 0) {
+ ast_log(LOG_ERROR, "Failed to acknowledge timer in softmix bridge\n");
+ ao2_lock(bridge);
+ break;
+ }
ao2_lock(bridge);
}
|
[-]
[+]
|
Changed |
asterisk-1.8.19.0.tar.xz/build_tools/make_version
^
|
@@ -2,7 +2,7 @@
if [ -f ${1}/.version ]; then
cat ${1}/.version
-elif [ -d .svn ]; then
+elif [ -d ${1}/.svn ]; then
PARTS=`LANG=C svn info ${1} | ${GREP} URL | ${AWK} '{print $2;}' | sed -e 's:^.*/svn/asterisk/::' | sed -e 's:/: :g'`
BRANCH=0
TEAM=0
@@ -36,11 +36,7 @@
fi
if [ ${BRANCH} != 0 ] ; then
- if [ -z "${RESULT}" ] ; then
- RESULT="${PART}"
- else
- RESULT="${RESULT}-${PART}"
- fi
+ RESULT="${RESULT}-${PART}"
if [ ${FEATURE} != 0 ] ; then
RESULT="${RESULT}-${FEATURE_NAME}"
fi
@@ -84,6 +80,104 @@
else
echo SVN-${RESULT}-r${REV}${BASE:+-${BASE}}
fi
+elif [ -d ${1}/.git ]; then
+ if [ -z ${GIT} ]; then
+ GIT="git"
+ fi
+
+ if ! command -v ${GIT} >/dev/null 2>&1; then
+ echo "UNKNOWN__and_probably_unsupported"
+ exit 1
+ fi
+ # If the first log commit messages indicates that this is checked into
+ # subversion, we'll just use the SVN- form of the revision.
+ MODIFIED=""
+ SVN_REV=`${GIT} log --pretty=full -1 | grep -F "git-svn-id:" | sed -e "s/.*\@\([^\s]*\)\s.*/\1/g"`
+ if [ -z "$SVN_REV" ]; then
+ VERSION=GIT-`${GIT} describe --long --always --tags --dirty=M 2> /dev/null`
+ if [ $? -ne 0 ]; then
+ if [ "`${GIT} ls-files -m | wc -l`" != "0" ]; then
+ MODIFIED="M"
+ fi
+ # Some older versions of git do not support all the above
+ # options.
+ VERSION=GIT-`${GIT} rev-parse --short --verify HEAD`${MODIFIED}
+ fi
+ echo ${VERSION}
+ else
+ PARTS=`LANG=C ${GIT} log --pretty=full | grep -F "git-svn-id:" | head -1 | awk '{print $2;}' | sed -e s:^.*/svn/$2/:: | sed -e 's:/: :g' | sed -e 's/@.*$//g'`
+ BRANCH=0
+ TEAM=0
+ TAG=0
+ FEATURE=0
+
+ if [ "`${GIT} ls-files -m | wc -l`" != "0" ]; then
+ MODIFIED="M"
+ fi
+
+ for PART in $PARTS ; do
+ if [ ${TAG} != 0 ] ; then
+ if [ "${PART}" = "autotag_for_be" ] ; then
+ continue
+ fi
+ if [ "${PART}" = "autotag_for_sx00i" ] ; then
+ continue
+ fi
+ RESULT="${PART}"
+ break
+ fi
+
+ if [ ${BRANCH} != 0 ] ; then
+ RESULT="${RESULT}-${PART}"
+ if [ ${FEATURE} != 0 ] ; then
+ RESULT="${RESULT}-${FEATURE_NAME}"
+ fi
+ break
+ fi
+
+ if [ ${TEAM} != 0 ] ; then
+ if [ -z "${RESULT}" ] ; then
+ RESULT="${PART}"
+ else
+ RESULT="${RESULT}-${PART}"
+ fi
+ continue
+ fi
+
+ if [ "${PART}" = "certified" ] ; then
+ FEATURE=1
+ FEATURE_NAME="cert"
+ continue
+ fi
+
+ if [ "${PART}" = "branches" ] ; then
+ BRANCH=1
+ RESULT="branch"
+ continue
+ fi
+
+ if [ "${PART}" = "tags" ] ; then
+ TAG=1
+ continue
+ fi
+
+ if [ "${PART}" = "team" ] ; then
+ TEAM=1
+ continue
+ fi
+
+ if [ "${PART}" = "trunk" ]; then
+ echo SVN-trunk-r${SVN_REV}${MODIFIED}
+ exit 0
+ fi
+ done
+
+ if [ ${TAG} != 0 ] ; then
+ echo ${RESULT}
+ else
+ echo SVN-${RESULT##-}-r${SVN_REV}${MODIFIED}
+ fi
+ fi
else
echo "UNKNOWN__and_probably_unsupported"
fi
|
[-]
[+]
|
Changed |
asterisk-1.8.19.0.tar.xz/channels/chan_dahdi.c
^
|
@@ -49,7 +49,7 @@
#include "asterisk.h"
-ASTERISK_FILE_VERSION(__FILE__, "$Revision: 371590 $")
+ASTERISK_FILE_VERSION(__FILE__, "$Revision: 375361 $")
#if defined(__NetBSD__) || defined(__FreeBSD__)
#include <pthread.h>
@@ -8931,11 +8931,20 @@
CHANNEL_DEADLOCK_AVOIDANCE(ast);
/*
- * For PRI channels, we must refresh the private pointer because
- * the call could move to another B channel while the Asterisk
- * channel is unlocked.
+ * Check to see if the channel is still associated with the same
+ * private structure. While the Asterisk channel was unlocked
+ * the following events may have occured:
+ *
+ * 1) A masquerade may have associated the channel with another
+ * technology or private structure.
+ *
+ * 2) For PRI calls, call signaling could change the channel
+ * association to another B channel (private structure).
*/
- p = ast->tech_pvt;
+ if (ast->tech_pvt != p) {
+ /* The channel is no longer associated. Quit gracefully. */
+ return &ast_null_frame;
+ }
}
idx = dahdi_get_index(ast, p, 0);
|
[-]
[+]
|
Changed |
asterisk-1.8.19.0.tar.xz/channels/chan_iax2.c
^
|
@@ -38,7 +38,7 @@
#include "asterisk.h"
-ASTERISK_FILE_VERSION(__FILE__, "$Revision: 372804 $")
+ASTERISK_FILE_VERSION(__FILE__, "$Revision: 375893 $")
#include <sys/mman.h>
#include <dirent.h>
@@ -1539,19 +1539,19 @@
return 0;
}
-static void encmethods_to_str(int e, struct ast_str *buf)
+static void encmethods_to_str(int e, struct ast_str **buf)
{
- ast_str_set(&buf, 0, "(");
+ ast_str_set(buf, 0, "(");
if (e & IAX_ENCRYPT_AES128) {
- ast_str_append(&buf, 0, "aes128");
+ ast_str_append(buf, 0, "aes128");
}
if (e & IAX_ENCRYPT_KEYROTATE) {
- ast_str_append(&buf, 0, ",keyrotate");
+ ast_str_append(buf, 0, ",keyrotate");
}
- if (ast_str_strlen(buf) > 1) {
- ast_str_append(&buf, 0, ")");
+ if (ast_str_strlen(*buf) > 1) {
+ ast_str_append(buf, 0, ")");
} else {
- ast_str_set(&buf, 0, "No");
+ ast_str_set(buf, 0, "No");
}
}
@@ -3775,7 +3775,7 @@
ast_sockaddr_to_sin(&peer->addr, &peer_addr);
- encmethods_to_str(peer->encmethods, encmethods);
+ encmethods_to_str(peer->encmethods, &encmethods);
ast_cli(a->fd, "\n\n");
ast_cli(a->fd, " * Name : %s\n", peer->name);
ast_cli(a->fd, " Secret : %s\n", ast_strlen_zero(peer->secret) ? "<Not set>" : "<Set>");
@@ -6718,7 +6718,7 @@
else
ast_copy_string(name, peer->name, sizeof(name));
- encmethods_to_str(peer->encmethods, encmethods);
+ encmethods_to_str(peer->encmethods, &encmethods);
retstatus = peer_status(peer, status, sizeof(status));
if (retstatus > 0)
online_peers++;
@@ -7023,7 +7023,7 @@
i = ao2_iterator_init(peers, 0);
for (; (peer = ao2_iterator_next(&i)); peer_unref(peer)) {
- encmethods_to_str(peer->encmethods, encmethods);
+ encmethods_to_str(peer->encmethods, &encmethods);
astman_append(s, "Event: PeerEntry\r\n%sChanneltype: IAX\r\n", idtext);
if (!ast_strlen_zero(peer->username)) {
astman_append(s, "ObjectName: %s\r\nObjectUsername: %s\r\n", peer->name, peer->username);
@@ -9168,8 +9168,11 @@
if (iaxtrunkdebug)
ast_verbose("Beginning trunk processing. Trunk queue ceiling is %d bytes per host\n", trunkmaxsize);
- if (timer) {
- ast_timer_ack(timer, 1);
+ if (timer) {
+ if (ast_timer_ack(timer, 1) < 0) {
+ ast_log(LOG_ERROR, "Timer failed acknowledge\n");
+ return 0;
+ }
}
/* For each peer that supports trunking... */
@@ -12194,7 +12197,9 @@
/* Wake up once a second just in case SIGURG was sent while
* we weren't in poll(), to make sure we don't hang when trying
* to unload. */
- ast_io_wait(io, 1000);
+ if (ast_io_wait(io, 1000) <= 0) {
+ break;
+ }
}
return NULL;
@@ -14405,6 +14410,7 @@
ao2_ref(callno_pool_trunk, -1);
if (timer) {
ast_timer_close(timer);
+ timer = NULL;
}
transmit_processor = ast_taskprocessor_unreference(transmit_processor);
sched = ast_sched_thread_destroy(sched);
@@ -14591,7 +14597,7 @@
ast_data_add_bool(data_peer, "dynamic", ast_test_flag64(peer, IAX_DYNAMIC));
- encmethods_to_str(peer->encmethods, encmethods);
+ encmethods_to_str(peer->encmethods, &encmethods);
ast_data_add_str(data_peer, "encryption", peer->encmethods ? ast_str_buffer(encmethods) : "no");
peer_unref(peer);
@@ -14764,6 +14770,7 @@
if (set_config(config, 0) == -1) {
if (timer) {
ast_timer_close(timer);
+ timer = NULL;
}
return AST_MODULE_LOAD_DECLINE;
}
|
[-]
[+]
|
Changed |
asterisk-1.8.19.0.tar.xz/channels/chan_local.c
^
|
@@ -31,7 +31,7 @@
#include "asterisk.h"
-ASTERISK_FILE_VERSION(__FILE__, "$Revision: 373878 $")
+ASTERISK_FILE_VERSION(__FILE__, "$Revision: 377321 $")
#include <fcntl.h>
#include <sys/signal.h>
@@ -308,15 +308,20 @@
res = AST_DEVICE_NOT_INUSE;
it = ao2_iterator_init(locals, 0);
- while ((lp = ao2_iterator_next(&it)) && (res == AST_DEVICE_NOT_INUSE)) {
- if (!strcmp(exten, lp->exten) && !strcmp(context, lp->context) && lp->owner) {
- ao2_lock(lp);
- if (ast_test_flag(lp, LOCAL_LAUNCHED_PBX)) {
- res = AST_DEVICE_INUSE;
- }
- ao2_unlock(lp);
+ for (; (lp = ao2_iterator_next(&it)); ao2_ref(lp, -1)) {
+ int is_inuse;
+
+ ao2_lock(lp);
+ is_inuse = !strcmp(exten, lp->exten)
+ && !strcmp(context, lp->context)
+ && lp->owner
+ && ast_test_flag(lp, LOCAL_LAUNCHED_PBX);
+ ao2_unlock(lp);
+ if (is_inuse) {
+ res = AST_DEVICE_INUSE;
+ ao2_ref(lp, -1);
+ break;
}
- ao2_ref(lp, -1);
}
ao2_iterator_destroy(&it);
|
[-]
[+]
|
Changed |
asterisk-1.8.19.0.tar.xz/channels/chan_misdn.c
^
|
@@ -58,7 +58,7 @@
#include "asterisk.h"
-ASTERISK_FILE_VERSION(__FILE__, "$Revision: 374536 $")
+ASTERISK_FILE_VERSION(__FILE__, "$Revision: 375658 $")
#include <pthread.h>
#include <sys/socket.h>
@@ -2731,7 +2731,7 @@
}
#endif /* defined(AST_MISDN_ENHANCEMENTS) */
-static void print_facility(const struct FacParm *fac, const const struct misdn_bchannel *bc)
+static void print_facility(const struct FacParm *fac, const struct misdn_bchannel *bc)
{
#if defined(AST_MISDN_ENHANCEMENTS)
unsigned Index;
|
[-]
[+]
|
Changed |
asterisk-1.8.19.0.tar.xz/channels/chan_sip.c
^
|
@@ -209,7 +209,7 @@
#include "asterisk.h"
-ASTERISK_FILE_VERSION(__FILE__, "$Revision: 374456 $")
+ASTERISK_FILE_VERSION(__FILE__, "$Revision: 377294 $")
#include <signal.h>
#include <sys/signal.h>
@@ -2500,12 +2500,359 @@
return timeout;
}
+/*!
+ * \brief Read a SIP request or response from a TLS connection
+ *
+ * Because TLS operations are hidden from view via a FILE handle, the
+ * logic for reading data is a bit complex, and we have to make periodic
+ * checks to be sure we aren't taking too long to perform the necessary
+ * action.
+ *
+ * \todo XXX This should be altered in the future not to use a FILE pointer
+ *
+ * \param req The request structure to fill in
+ * \param tcptls_session The TLS connection on which the data is being received
+ * \param authenticated A flag indicating whether authentication has occurred yet.
+ * This is only relevant in a server role.
+ * \param start The time at which we started attempting to read data. Used in
+ * determining if there has been a timeout.
+ * \param me Thread info. Used as a means of determining if the session needs to be stoppped.
+ * \retval -1 Failed to read data
+ * \retval 0 Succeeded in reading data
+ */
+static int sip_tls_read(struct sip_request *req, struct sip_request *reqcpy, struct ast_tcptls_session_instance *tcptls_session,
+ int authenticated, time_t start, struct sip_threadinfo *me)
+{
+ int res, content_length, after_poll = 1, need_poll = 1;
+ char buf[1024] = "";
+ int timeout = -1;
+
+ /* Read in headers one line at a time */
+ while (ast_str_strlen(req->data) < 4 || strncmp(REQ_OFFSET_TO_STR(req, data->used - 4), "\r\n\r\n", 4)) {
+ if (!tcptls_session->client && !authenticated) {
+ if ((timeout = sip_check_authtimeout(start)) < 0) {
+ ast_debug(2, "SIP SSL server failed to determine authentication timeout\n");
+ return -1;
+ }
+
+ if (timeout == 0) {
+ ast_debug(2, "SIP %s server timed out\n", tcptls_session->ssl ? "SSL": "TCP");
+ return -1;
+ }
+ } else {
+ timeout = -1;
+ }
+
+ /* special polling behavior is required for TLS
+ * sockets because of the buffering done in the
+ * TLS layer */
+ if (need_poll) {
+ need_poll = 0;
+ after_poll = 1;
+ res = ast_wait_for_input(tcptls_session->fd, timeout);
+ if (res < 0) {
+ ast_debug(2, "SIP TCP server :: ast_wait_for_input returned %d\n", res);
+ return -1;
+ } else if (res == 0) {
+ /* timeout */
+ ast_debug(2, "SIP TCP server timed out\n");
+ return -1;
+ }
+ }
+
+ ast_mutex_lock(&tcptls_session->lock);
+ if (!fgets(buf, sizeof(buf), tcptls_session->f)) {
+ ast_mutex_unlock(&tcptls_session->lock);
+ if (after_poll) {
+ return -1;
+ } else {
+ need_poll = 1;
+ continue;
+ }
+ }
+ ast_mutex_unlock(&tcptls_session->lock);
+ after_poll = 0;
+ if (me->stop) {
+ return -1;
+ }
+ ast_str_append(&req->data, 0, "%s", buf);
+ }
+ copy_request(reqcpy, req);
+ parse_request(reqcpy);
+ /* In order to know how much to read, we need the content-length header */
+ if (sscanf(get_header(reqcpy, "Content-Length"), "%30d", &content_length)) {
+ while (content_length > 0) {
+ size_t bytes_read;
+ if (!tcptls_session->client && !authenticated) {
+ if ((timeout = sip_check_authtimeout(start)) < 0) {
+ return -1;
+ }
+
+ if (timeout == 0) {
+ ast_debug(2, "SIP SSL server timed out\n");
+ return -1;
+ }
+ } else {
+ timeout = -1;
+ }
+
+ if (need_poll) {
+ need_poll = 0;
+ after_poll = 1;
+ res = ast_wait_for_input(tcptls_session->fd, timeout);
+ if (res < 0) {
+ ast_debug(2, "SIP TCP server :: ast_wait_for_input returned %d\n", res);
+ return -1;
+ } else if (res == 0) {
+ /* timeout */
+ ast_debug(2, "SIP TCP server timed out\n");
+ return -1;
+ }
+ }
+
+ ast_mutex_lock(&tcptls_session->lock);
+ if (!(bytes_read = fread(buf, 1, MIN(sizeof(buf) - 1, content_length), tcptls_session->f))) {
+ ast_mutex_unlock(&tcptls_session->lock);
+ if (after_poll) {
+ return -1;
+ } else {
+ need_poll = 1;
+ continue;
+ }
+ }
+ buf[bytes_read] = '\0';
+ ast_mutex_unlock(&tcptls_session->lock);
+ after_poll = 0;
+ if (me->stop) {
+ return -1;
+ }
+ content_length -= strlen(buf);
+ ast_str_append(&req->data, 0, "%s", buf);
+ }
+ }
+ /*! \todo XXX If there's no Content-Length or if the content-length and what
+ we receive is not the same - we should generate an error */
+ return 0;
+}
+
+/*!
+ * \brief Indication of a TCP message's integrity
+ */
+enum message_integrity {
+ /*!
+ * The message has an error in it with
+ * regards to its Content-Length header
+ */
+ MESSAGE_INVALID,
+ /*!
+ * The message is incomplete
+ */
+ MESSAGE_FRAGMENT,
+ /*!
+ * The data contains a complete message
+ * plus a fragment of another.
+ */
+ MESSAGE_FRAGMENT_COMPLETE,
+ /*!
+ * The message is complete
+ */
+ MESSAGE_COMPLETE,
+};
+
+/*!
+ * \brief
+ * Get the content length from an unparsed SIP message
+ *
+ * \param message The unparsed SIP message headers
+ * \return The value of the Content-Length header or -1 if message is invalid
+ */
+static int read_raw_content_length(const char *message)
+{
+ char *content_length_str;
+ int content_length = -1;
+
+ struct ast_str *msg_copy;
+ char *msg;
+
+ /* Using a ast_str because lws2sws takes one of those */
+ if (!(msg_copy = ast_str_create(strlen(message) + 1))) {
+ return -1;
+ }
+ ast_str_set(&msg_copy, 0, "%s", message);
+
+ if (sip_cfg.pedanticsipchecking) {
+ lws2sws(msg_copy);
+ }
+
+ msg = ast_str_buffer(msg_copy);
+
+ /* Let's find a Content-Length header */
+ if ((content_length_str = strcasestr(msg, "\nContent-Length:"))) {
+ content_length_str += sizeof("\nContent-Length:") - 1;
+ } else if ((content_length_str = strcasestr(msg, "\nl:"))) {
+ content_length_str += sizeof("\nl:") - 1;
+ } else {
+ /* RFC 3261 18.3
+ * "In the case of stream-oriented transports such as TCP, the Content-
+ * Length header field indicates the size of the body. The Content-
+ * Length header field MUST be used with stream oriented transports."
+ */
+ goto done;
+ }
+
+ /* Double-check that this is a complete header */
+ if (!strchr(content_length_str, '\n')) {
+ goto done;
+ }
+
+ if (sscanf(content_length_str, "%30d", &content_length) != 1) {
+ content_length = -1;
+ }
+
+done:
+ ast_free(msg_copy);
+ return content_length;
+}
+
+/*!
+ * \brief Check that a message received over TCP is a full message
+ *
+ * This will take the information read in and then determine if
+ * 1) The message is a full SIP request
+ * 2) The message is a partial SIP request
+ * 3) The message contains a full SIP request along with another partial request
+ * \param data The unparsed incoming SIP message.
+ * \param request The resulting request with extra fragments removed.
+ * \param overflow If the message contains more than a full request, this is the remainder of the message
+ * \return The resulting integrity of the message
+ */
+static enum message_integrity check_message_integrity(struct ast_str **request, struct ast_str **overflow)
+{
+ char *message = ast_str_buffer(*request);
+ char *body;
+ int content_length;
+ int message_len = ast_str_strlen(*request);
+ int body_len;
+
+ /* Important pieces to search for in a SIP request are \r\n\r\n. This
+ * marks either
+ * 1) The division between the headers and body
+ * 2) The end of the SIP request
+ */
+ body = strstr(message, "\r\n\r\n");
+ if (!body) {
+ /* This is clearly a partial message since we haven't reached an end
+ * yet.
+ */
+ return MESSAGE_FRAGMENT;
+ }
+ body += sizeof("\r\n\r\n") - 1;
+ body_len = message_len - (body - message);
+
+ body[-1] = '\0';
+ content_length = read_raw_content_length(message);
+ body[-1] = '\n';
+
+ if (content_length < 0) {
+ return MESSAGE_INVALID;
+ } else if (content_length == 0) {
+ /* We've definitely received an entire message. We need
+ * to check if there's also a fragment of another message
+ * in addition.
+ */
+ if (body_len == 0) {
+ return MESSAGE_COMPLETE;
+ } else {
+ ast_str_append(overflow, 0, "%s", body);
+ ast_str_truncate(*request, message_len - body_len);
+ return MESSAGE_FRAGMENT_COMPLETE;
+ }
+ }
+ /* Positive content length. Let's see what sort of
+ * message body we're dealing with.
+ */
+ if (body_len < content_length) {
+ /* We don't have the full message body yet */
+ return MESSAGE_FRAGMENT;
+ } else if (body_len > content_length) {
+ /* We have the full message plus a fragment of a further
+ * message
+ */
+ ast_str_append(overflow, 0, "%s", body + content_length);
+ ast_str_truncate(*request, message_len - (body_len - content_length));
+ return MESSAGE_FRAGMENT_COMPLETE;
+ } else {
+ /* Yay! Full message with no extra content */
+ return MESSAGE_COMPLETE;
+ }
+}
+
+/*!
+ * \brief Read SIP request or response from a TCP connection
+ *
+ * \param req The request structure to be filled in
+ * \param tcptls_session The TCP connection from which to read
+ * \retval -1 Failed to read data
+ * \retval 0 Successfully read data
+ */
+static int sip_tcp_read(struct sip_request *req, struct ast_tcptls_session_instance *tcptls_session,
+ int authenticated, time_t start)
+{
+ enum message_integrity message_integrity = MESSAGE_FRAGMENT;
+
+ while (message_integrity == MESSAGE_FRAGMENT) {
+ if (ast_str_strlen(tcptls_session->overflow_buf) == 0) {
+ char readbuf[4097];
+ int timeout;
+ int res;
+ if (!tcptls_session->client && !authenticated) {
+ if ((timeout = sip_check_authtimeout(start)) < 0) {
+ return -1;
+ }
+
+ if (timeout == 0) {
+ ast_debug(2, "SIP TCP server timed out\n");
+ return -1;
+ }
+ } else {
+ timeout = -1;
+ }
+ res = ast_wait_for_input(tcptls_session->fd, timeout);
+ if (res < 0) {
+ ast_debug(2, "SIP TCP server :: ast_wait_for_input returned %d\n", res);
+ return -1;
+ } else if (res == 0) {
+ ast_debug(2, "SIP TCP server timed out\n");
+ return -1;
+ }
+
+ res = recv(tcptls_session->fd, readbuf, sizeof(readbuf) - 1, 0);
+ if (res < 0) {
+ ast_debug(2, "SIP TCP server error when receiving data\n");
+ return -1;
+ } else if (res == 0) {
+ ast_debug(2, "SIP TCP server has shut down\n");
+ return -1;
+ }
+ readbuf[res] = '\0';
+ ast_str_append(&req->data, 0, "%s", readbuf);
+ } else {
+ ast_str_append(&req->data, 0, "%s", ast_str_buffer(tcptls_session->overflow_buf));
+ ast_str_reset(tcptls_session->overflow_buf);
+ }
+
+ message_integrity = check_message_integrity(&req->data, &tcptls_session->overflow_buf);
+ }
+
+ return 0;
+}
+
/*! \brief SIP TCP thread management function
This function reads from the socket, parses the packet into a request
*/
static void *_sip_tcp_helper_thread(struct ast_tcptls_session_instance *tcptls_session)
{
- int res, cl, timeout = -1, authenticated = 0, flags, after_poll = 0, need_poll = 1;
+ int res, timeout = -1, authenticated = 0, flags;
time_t start;
struct sip_request req = { 0, } , reqcpy = { 0, };
struct sip_threadinfo *me = NULL;
@@ -2605,21 +2952,23 @@
timeout = -1;
}
- res = ast_poll(fds, 2, timeout); /* polls for both socket and alert_pipe */
- if (res < 0) {
- ast_debug(2, "SIP %s server :: ast_wait_for_input returned %d\n", tcptls_session->ssl ? "SSL": "TCP", res);
- goto cleanup;
- } else if (res == 0) {
- /* timeout */
- ast_debug(2, "SIP %s server timed out\n", tcptls_session->ssl ? "SSL": "TCP");
- goto cleanup;
+ if (ast_str_strlen(tcptls_session->overflow_buf) == 0) {
+ res = ast_poll(fds, 2, timeout); /* polls for both socket and alert_pipe */
+ if (res < 0) {
+ ast_debug(2, "SIP %s server :: ast_wait_for_input returned %d\n", tcptls_session->ssl ? "SSL": "TCP", res);
+ goto cleanup;
+ } else if (res == 0) {
+ /* timeout */
+ ast_debug(2, "SIP %s server timed out\n", tcptls_session->ssl ? "SSL": "TCP");
+ goto cleanup;
+ }
}
- /* handle the socket event, check for both reads from the socket fd,
- * and writes from alert_pipe fd */
- if (fds[0].revents) { /* there is data on the socket to be read */
- after_poll = 1;
-
+ /*
+ * handle the socket event, check for both reads from the socket fd or TCP overflow buffer,
+ * and writes from alert_pipe fd.
+ */
+ if (fds[0].revents || (ast_str_strlen(tcptls_session->overflow_buf) > 0)) { /* there is data on the socket to be read */
fds[0].revents = 0;
/* clear request structure */
@@ -2644,110 +2993,15 @@
}
req.socket.fd = tcptls_session->fd;
- /* Read in headers one line at a time */
- while (ast_str_strlen(req.data) < 4 || strncmp(REQ_OFFSET_TO_STR(&req, data->used - 4), "\r\n\r\n", 4)) {
- if (!tcptls_session->client && !authenticated ) {
- if ((timeout = sip_check_authtimeout(start)) < 0) {
- goto cleanup;
- }
-
- if (timeout == 0) {
- ast_debug(2, "SIP %s server timed out\n", tcptls_session->ssl ? "SSL": "TCP");
- goto cleanup;
- }
- } else {
- timeout = -1;
- }
-
- /* special polling behavior is required for TLS
- * sockets because of the buffering done in the
- * TLS layer */
- if (!tcptls_session->ssl || need_poll) {
- need_poll = 0;
- after_poll = 1;
- res = ast_wait_for_input(tcptls_session->fd, timeout);
- if (res < 0) {
- ast_debug(2, "SIP TCP server :: ast_wait_for_input returned %d\n", res);
- goto cleanup;
- } else if (res == 0) {
- /* timeout */
- ast_debug(2, "SIP TCP server timed out\n");
- goto cleanup;
- }
- }
-
- ast_mutex_lock(&tcptls_session->lock);
- if (!fgets(buf, sizeof(buf), tcptls_session->f)) {
- ast_mutex_unlock(&tcptls_session->lock);
- if (after_poll) {
- goto cleanup;
- } else {
- need_poll = 1;
- continue;
- }
- }
- ast_mutex_unlock(&tcptls_session->lock);
- after_poll = 0;
- if (me->stop) {
- goto cleanup;
- }
- ast_str_append(&req.data, 0, "%s", buf);
- }
- copy_request(&reqcpy, &req);
- parse_request(&reqcpy);
- /* In order to know how much to read, we need the content-length header */
- if (sscanf(get_header(&reqcpy, "Content-Length"), "%30d", &cl)) {
- while (cl > 0) {
- size_t bytes_read;
- if (!tcptls_session->client && !authenticated ) {
- if ((timeout = sip_check_authtimeout(start)) < 0) {
- goto cleanup;
- }
-
- if (timeout == 0) {
- ast_debug(2, "SIP %s server timed out\n", tcptls_session->ssl ? "SSL": "TCP");
- goto cleanup;
- }
- } else {
- timeout = -1;
- }
-
- if (!tcptls_session->ssl || need_poll) {
- need_poll = 0;
- after_poll = 1;
- res = ast_wait_for_input(tcptls_session->fd, timeout);
- if (res < 0) {
- ast_debug(2, "SIP TCP server :: ast_wait_for_input returned %d\n", res);
- goto cleanup;
- } else if (res == 0) {
- /* timeout */
- ast_debug(2, "SIP TCP server timed out\n");
- goto cleanup;
- }
- }
+ if (tcptls_session->ssl) {
+ res = sip_tls_read(&req, &reqcpy, tcptls_session, authenticated, start, me);
+ } else {
+ res = sip_tcp_read(&req, tcptls_session, authenticated, start);
+ }
- ast_mutex_lock(&tcptls_session->lock);
- if (!(bytes_read = fread(buf, 1, MIN(sizeof(buf) - 1, cl), tcptls_session->f))) {
- ast_mutex_unlock(&tcptls_session->lock);
- if (after_poll) {
- goto cleanup;
- } else {
- need_poll = 1;
- continue;
- }
- }
- buf[bytes_read] = '\0';
- ast_mutex_unlock(&tcptls_session->lock);
- after_poll = 0;
- if (me->stop) {
- goto cleanup;
- }
- cl -= strlen(buf);
- ast_str_append(&req.data, 0, "%s", buf);
- }
+ if (res < 0) {
+ goto cleanup;
}
- /*! \todo XXX If there's no Content-Length or if the content-length and what
- we receive is not the same - we should generate an error */
req.socket.tcptls_session = tcptls_session;
handle_request_do(&req, &tcptls_session->remote_address);
@@ -8962,8 +9216,10 @@
/* If we end up receiving SDP that doesn't actually modify the session we don't want to treat this as a fatal
* error. We just want to ignore the SDP and let the rest of the packet be handled as normal.
*/
- if (!process_sdp_o(value, p))
+ if (!process_sdp_o(value, p)) {
return (p->session_modify == FALSE) ? 0 : -1;
+ }
+ processed = TRUE;
break;
case 'c':
if (process_sdp_c(value, &sessionsa)) {
@@ -26728,13 +26984,18 @@
/*! \brief PBX interface function -build SIP pvt structure
* SIP calls initiated by the PBX arrive here.
*
- * \verbatim
- * SIP Dial string syntax
- * SIP/exten@host!dnid
- * or SIP/host/exten!dnid
- * or SIP/host!dnid
+ * \verbatim
+ * SIP Dial string syntax:
+ * SIP/devicename
+ * or SIP/username@domain (SIP uri)
+ * or SIP/username[:password[:md5secret[:authname[:transport]]]]@host[:port]
+ * or SIP/devicename/extension
+ * or SIP/devicename/extension/IPorHost
+ * or SIP/username@domain//IPorHost
+ * and there is an optional [!dnid] argument you can append to alter the
+ * To: header.
* \endverbatim
-*/
+ */
static struct ast_channel *sip_request_call(const char *type, format_t format, const struct ast_channel *requestor, void *data, int *cause)
{
struct sip_pvt *p;
@@ -27697,7 +27958,7 @@
} else if (!strcasecmp(v->name, "host")) {
if (!strcasecmp(v->value, "dynamic")) {
/* They'll register with us */
- if (!found || !peer->host_dynamic) {
+ if ((!found && !realtime) || !peer->host_dynamic) {
/* Initialize stuff if this is a new peer, or if it used to
* not be dynamic before the reload. */
ast_sockaddr_setnull(&peer->addr);
@@ -30490,6 +30751,482 @@
return AST_TEST_PASS;
}
+/*!
+ * \brief Imitation TCP reception loop
+ *
+ * This imitates the logic used by SIP's TCP code. Its purpose
+ * is to either
+ * 1) Combine fragments into a single message
+ * 2) Break up combined messages into single messages
+ *
+ * \param fragments The message fragments. This simulates the data received on a TCP socket.
+ * \param num_fragments This indicates the number of fragments to receive
+ * \param overflow This is a place to stash extra data if more than one message is received
+ * in a single fragment
+ * \param[out] messages The parsed messages are placed in this array
+ * \param[out] num_messages The number of messages that were parsed
+ * \param test Used for printing messages
+ * \retval 0 Success
+ * \retval -1 Failure
+ */
+static int mock_tcp_loop(char *fragments[], size_t num_fragments,
+ struct ast_str **overflow, char **messages, int *num_messages, struct ast_test* test)
+{
+ struct ast_str *req_data;
+ int i = 0;
+ int res = 0;
+
+ req_data = ast_str_create(128);
+ ast_str_reset(*overflow);
+
+ while (i < num_fragments || ast_str_strlen(*overflow) > 0) {
+ enum message_integrity message_integrity = MESSAGE_FRAGMENT;
+ ast_str_reset(req_data);
+ while (message_integrity == MESSAGE_FRAGMENT) {
+ if (ast_str_strlen(*overflow) > 0) {
+ ast_str_append(&req_data, 0, "%s", ast_str_buffer(*overflow));
+ ast_str_reset(*overflow);
+ } else {
+ ast_str_append(&req_data, 0, "%s", fragments[i++]);
+ }
+ message_integrity = check_message_integrity(&req_data, overflow);
+ }
+ if (strcmp(ast_str_buffer(req_data), messages[*num_messages])) {
+ ast_test_status_update(test, "Mismatch in SIP messages.\n");
+ ast_test_status_update(test, "Expected message:\n%s", messages[*num_messages]);
+ ast_test_status_update(test, "Parsed message:\n%s", ast_str_buffer(req_data));
+ res = -1;
+ goto end;
+ } else {
+ ast_test_status_update(test, "Successfully read message:\n%s", ast_str_buffer(req_data));
+ }
+ (*num_messages)++;
+ }
+
+end:
+ ast_free(req_data);
+ return res;
+};
+
+AST_TEST_DEFINE(test_tcp_message_fragmentation)
+{
+ /* Normal single message in one fragment */
+ char *normal[] = {
+ "INVITE sip:bob@example.org SIP/2.0\r\n"
+ "Via: SIP/2.0/TCP 127.0.0.1:5060;branch=[branch]\r\n"
+ "From: sipp <sip:127.0.0.1:5061>;tag=12345\r\n"
+ "To: <sip:bob@example.org:5060>\r\n"
+ "Call-ID: 12345\r\n"
+ "CSeq: 1 INVITE\r\n"
+ "Contact: sip:127.0.0.1:5061\r\n"
+ "Max-Forwards: 70\r\n"
+ "Content-Type: application/sdp\r\n"
+ "Content-Length: 130\r\n"
+ "\r\n"
+ "v=0\r\n"
+ "o=user1 53655765 2353687637 IN IP4 127.0.0.1\r\n"
+ "s=-\r\n"
+ "c=IN IP4 127.0.0.1\r\n"
+ "t=0 0\r\n"
+ "m=audio 10000 RTP/AVP 0\r\n"
+ "a=rtpmap:0 PCMU/8000\r\n"
+ };
+
+ /* Single message in two fragments.
+ * Fragments combine to make "normal"
+ */
+ char *fragmented[] = {
+ "INVITE sip:bob@example.org SIP/2.0\r\n"
+ "Via: SIP/2.0/TCP 127.0.0.1:5060;branch=[branch]\r\n"
+ "From: sipp <sip:127.0.0.1:5061>;tag=12345\r\n"
+ "To: <sip:bob@example.org:5060>\r\n"
+ "Call-ID: 12345\r\n"
+ "CSeq: 1 INVITE\r\n"
+ "Contact: sip:127.0.0.1:5061\r\n"
+ "Max-Forwards: ",
+
+ "70\r\n"
+ "Content-Type: application/sdp\r\n"
+ "Content-Length: 130\r\n"
+ "\r\n"
+ "v=0\r\n"
+ "o=user1 53655765 2353687637 IN IP4 127.0.0.1\r\n"
+ "s=-\r\n"
+ "c=IN IP4 127.0.0.1\r\n"
+ "t=0 0\r\n"
+ "m=audio 10000 RTP/AVP 0\r\n"
+ "a=rtpmap:0 PCMU/8000\r\n"
+ };
+ /* Single message in two fragments, divided precisely at the body
+ * Fragments combine to make "normal"
+ */
+ char *fragmented_body[] = {
+ "INVITE sip:bob@example.org SIP/2.0\r\n"
+ "Via: SIP/2.0/TCP 127.0.0.1:5060;branch=[branch]\r\n"
+ "From: sipp <sip:127.0.0.1:5061>;tag=12345\r\n"
+ "To: <sip:bob@example.org:5060>\r\n"
+ "Call-ID: 12345\r\n"
+ "CSeq: 1 INVITE\r\n"
+ "Contact: sip:127.0.0.1:5061\r\n"
+ "Max-Forwards: 70\r\n"
+ "Content-Type: application/sdp\r\n"
+ "Content-Length: 130\r\n"
+ "\r\n",
+
+ "v=0\r\n"
+ "o=user1 53655765 2353687637 IN IP4 127.0.0.1\r\n"
+ "s=-\r\n"
+ "c=IN IP4 127.0.0.1\r\n"
+ "t=0 0\r\n"
+ "m=audio 10000 RTP/AVP 0\r\n"
+ "a=rtpmap:0 PCMU/8000\r\n"
+ };
+
+ /* Single message in three fragments
+ * Fragments combine to make "normal"
+ */
+ char *multi_fragment[] = {
+ "INVITE sip:bob@example.org SIP/2.0\r\n"
+ "Via: SIP/2.0/TCP 127.0.0.1:5060;branch=[branch]\r\n"
+ "From: sipp <sip:127.0.0.1:5061>;tag=12345\r\n"
+ "To: <sip:bob@example.org:5060>\r\n"
+ "Call-ID: 12345\r\n"
+ "CSeq: 1 INVITE\r\n",
+
+ "Contact: sip:127.0.0.1:5061\r\n"
+ "Max-Forwards: 70\r\n"
+ "Content-Type: application/sdp\r\n"
+ "Content-Length: 130\r\n"
+ "\r\n"
+ "v=0\r\n"
+ "o=user1 53655765 2353687637 IN IP4 127.0.0.1\r\n"
+ "s=-\r\n"
+ "c=IN IP4",
+
+ " 127.0.0.1\r\n"
+ "t=0 0\r\n"
+ "m=audio 10000 RTP/AVP 0\r\n"
+ "a=rtpmap:0 PCMU/8000\r\n"
+ };
+
+ /* Two messages in a single fragment
+ * Fragments split into "multi_message_divided"
+ */
+ char *multi_message[] = {
+ "SIP/2.0 100 Trying\r\n"
+ "Via: SIP/2.0/TCP 127.0.0.1:5060;branch=[branch]\r\n"
+ "From: sipp <sip:127.0.0.1:5061>;tag=12345\r\n"
+ "To: <sip:bob@example.org:5060>\r\n"
+ "Call-ID: 12345\r\n"
+ "CSeq: 1 INVITE\r\n"
+ "Contact: <sip:bob@example.org:5060>\r\n"
+ "Content-Length: 0\r\n"
+ "\r\n"
+ "SIP/2.0 180 Ringing\r\n"
+ "Via: SIP/2.0/TCP 127.0.0.1:5060;branch=[branch]\r\n"
+ "From: sipp <sip:127.0.0.1:5061>;tag=12345\r\n"
+ "To: <sip:bob@example.org:5060>\r\n"
+ "Call-ID: 12345\r\n"
+ "CSeq: 1 INVITE\r\n"
+ "Contact: <sip:bob@example.org:5060>\r\n"
+ "Content-Length: 0\r\n"
+ "\r\n"
+ };
+ char *multi_message_divided[] = {
+ "SIP/2.0 100 Trying\r\n"
+ "Via: SIP/2.0/TCP 127.0.0.1:5060;branch=[branch]\r\n"
+ "From: sipp <sip:127.0.0.1:5061>;tag=12345\r\n"
+ "To: <sip:bob@example.org:5060>\r\n"
+ "Call-ID: 12345\r\n"
+ "CSeq: 1 INVITE\r\n"
+ "Contact: <sip:bob@example.org:5060>\r\n"
+ "Content-Length: 0\r\n"
+ "\r\n",
+
+ "SIP/2.0 180 Ringing\r\n"
+ "Via: SIP/2.0/TCP 127.0.0.1:5060;branch=[branch]\r\n"
+ "From: sipp <sip:127.0.0.1:5061>;tag=12345\r\n"
+ "To: <sip:bob@example.org:5060>\r\n"
+ "Call-ID: 12345\r\n"
+ "CSeq: 1 INVITE\r\n"
+ "Contact: <sip:bob@example.org:5060>\r\n"
+ "Content-Length: 0\r\n"
+ "\r\n"
+ };
+ /* Two messages with bodies combined into one fragment
+ * Fragments split into "multi_message_body_divided"
+ */
+ char *multi_message_body[] = {
+ "INVITE sip:bob@example.org SIP/2.0\r\n"
+ "Via: SIP/2.0/TCP 127.0.0.1:5060;branch=[branch]\r\n"
+ "From: sipp <sip:127.0.0.1:5061>;tag=12345\r\n"
+ "To: <sip:bob@example.org:5060>\r\n"
+ "Call-ID: 12345\r\n"
+ "CSeq: 1 INVITE\r\n"
+ "Contact: sip:127.0.0.1:5061\r\n"
+ "Max-Forwards: 70\r\n"
+ "Content-Type: application/sdp\r\n"
+ "Content-Length: 130\r\n"
+ "\r\n"
+ "v=0\r\n"
+ "o=user1 53655765 2353687637 IN IP4 127.0.0.1\r\n"
+ "s=-\r\n"
+ "c=IN IP4 127.0.0.1\r\n"
+ "t=0 0\r\n"
+ "m=audio 10000 RTP/AVP 0\r\n"
+ "a=rtpmap:0 PCMU/8000\r\n"
+ "INVITE sip:bob@example.org SIP/2.0\r\n"
+ "Via: SIP/2.0/TCP 127.0.0.1:5060;branch=[branch]\r\n"
+ "From: sipp <sip:127.0.0.1:5061>;tag=12345\r\n"
+ "To: <sip:bob@example.org:5060>\r\n"
+ "Call-ID: 12345\r\n"
+ "CSeq: 2 INVITE\r\n"
+ "Contact: sip:127.0.0.1:5061\r\n"
+ "Max-Forwards: 70\r\n"
+ "Content-Type: application/sdp\r\n"
+ "Content-Length: 130\r\n"
+ "\r\n"
+ "v=0\r\n"
+ "o=user1 53655765 2353687637 IN IP4 127.0.0.1\r\n"
+ "s=-\r\n"
+ "c=IN IP4 127.0.0.1\r\n"
+ "t=0 0\r\n"
+ "m=audio 10000 RTP/AVP 0\r\n"
+ "a=rtpmap:0 PCMU/8000\r\n"
+ };
+ char *multi_message_body_divided[] = {
+ "INVITE sip:bob@example.org SIP/2.0\r\n"
+ "Via: SIP/2.0/TCP 127.0.0.1:5060;branch=[branch]\r\n"
+ "From: sipp <sip:127.0.0.1:5061>;tag=12345\r\n"
+ "To: <sip:bob@example.org:5060>\r\n"
+ "Call-ID: 12345\r\n"
+ "CSeq: 1 INVITE\r\n"
+ "Contact: sip:127.0.0.1:5061\r\n"
+ "Max-Forwards: 70\r\n"
+ "Content-Type: application/sdp\r\n"
+ "Content-Length: 130\r\n"
+ "\r\n"
+ "v=0\r\n"
+ "o=user1 53655765 2353687637 IN IP4 127.0.0.1\r\n"
+ "s=-\r\n"
+ "c=IN IP4 127.0.0.1\r\n"
+ "t=0 0\r\n"
+ "m=audio 10000 RTP/AVP 0\r\n"
+ "a=rtpmap:0 PCMU/8000\r\n",
+
+ "INVITE sip:bob@example.org SIP/2.0\r\n"
+ "Via: SIP/2.0/TCP 127.0.0.1:5060;branch=[branch]\r\n"
+ "From: sipp <sip:127.0.0.1:5061>;tag=12345\r\n"
+ "To: <sip:bob@example.org:5060>\r\n"
+ "Call-ID: 12345\r\n"
+ "CSeq: 2 INVITE\r\n"
+ "Contact: sip:127.0.0.1:5061\r\n"
+ "Max-Forwards: 70\r\n"
+ "Content-Type: application/sdp\r\n"
+ "Content-Length: 130\r\n"
+ "\r\n"
+ "v=0\r\n"
+ "o=user1 53655765 2353687637 IN IP4 127.0.0.1\r\n"
+ "s=-\r\n"
+ "c=IN IP4 127.0.0.1\r\n"
+ "t=0 0\r\n"
+ "m=audio 10000 RTP/AVP 0\r\n"
+ "a=rtpmap:0 PCMU/8000\r\n"
+ };
+
+ /* Two messages that appear in two fragments. Fragment
+ * boundaries do not align with message boundaries.
+ * Fragments combine to make "multi_message_divided"
+ */
+ char *multi_message_in_fragments[] = {
+ "SIP/2.0 100 Trying\r\n"
+ "Via: SIP/2.0/TCP 127.0.0.1:5060;branch=[branch]\r\n"
+ "From: sipp <sip:127.0.0.1:5061>;tag=12345\r\n"
+ "To: <sip:bob@example.org:5060>\r\n"
+ "Call-ID: 12345\r\n"
+ "CSeq: 1 INVI",
+
+ "TE\r\n"
+ "Contact: <sip:bob@example.org:5060>\r\n"
+ "Content-Length: 0\r\n"
+ "\r\n"
+ "SIP/2.0 180 Ringing\r\n"
+ "Via: SIP/2.0/TCP 127.0.0.1:5060;branch=[branch]\r\n"
+ "From: sipp <sip:127.0.0.1:5061>;tag=12345\r\n"
+ "To: <sip:bob@example.org:5060>\r\n"
+ "Call-ID: 12345\r\n"
+ "CSeq: 1 INVITE\r\n"
+ "Contact: <sip:bob@example.org:5060>\r\n"
+ "Content-Length: 0\r\n"
+ "\r\n"
+ };
+
+ /* Message with compact content-length header
+ * Same as "normal" but with compact content-length header
+ */
+ char *compact[] = {
+ "INVITE sip:bob@example.org SIP/2.0\r\n"
+ "Via: SIP/2.0/TCP 127.0.0.1:5060;branch=[branch]\r\n"
+ "From: sipp <sip:127.0.0.1:5061>;tag=12345\r\n"
+ "To: <sip:bob@example.org:5060>\r\n"
+ "Call-ID: 12345\r\n"
+ "CSeq: 1 INVITE\r\n"
+ "Contact: sip:127.0.0.1:5061\r\n"
+ "Max-Forwards: 70\r\n"
+ "Content-Type: application/sdp\r\n"
+ "l:130\r\n" /* intentionally no space */
+ "\r\n"
+ "v=0\r\n"
+ "o=user1 53655765 2353687637 IN IP4 127.0.0.1\r\n"
+ "s=-\r\n"
+ "c=IN IP4 127.0.0.1\r\n"
+ "t=0 0\r\n"
+ "m=audio 10000 RTP/AVP 0\r\n"
+ "a=rtpmap:0 PCMU/8000\r\n"
+ };
+
+ /* Message with faux content-length headers
+ * Same as "normal" but with extra fake content-length headers
+ */
+ char *faux[] = {
+ "INVITE sip:bob@example.org SIP/2.0\r\n"
+ "Via: SIP/2.0/TCP 127.0.0.1:5060;branch=[branch]\r\n"
+ "From: sipp <sip:127.0.0.1:5061>;tag=12345\r\n"
+ "To: <sip:bob@example.org:5060>\r\n"
+ "Call-ID: 12345\r\n"
+ "CSeq: 1 INVITE\r\n"
+ "Contact: sip:127.0.0.1:5061\r\n"
+ "Max-Forwards: 70\r\n"
+ "Content-Type: application/sdp\r\n"
+ "DisContent-Length: 0\r\n"
+ "MalContent-Length: 60\r\n"
+ "Content-Length:130\r\n" /* intentionally no space */
+ "\r\n"
+ "v=0\r\n"
+ "o=user1 53655765 2353687637 IN IP4 127.0.0.1\r\n"
+ "s=-\r\n"
+ "c=IN IP4 127.0.0.1\r\n"
+ "t=0 0\r\n"
+ "m=audio 10000 RTP/AVP 0\r\n"
+ "a=rtpmap:0 PCMU/8000\r\n"
+ };
+
+ /* Message with folded Content-Length header
+ * Message is "normal" with Content-Length spread across three lines
+ *
+ * This is the test that requires pedantic=yes in order to pass
+ */
+ char *folded[] = {
+ "INVITE sip:bob@example.org SIP/2.0\r\n"
+ "Via: SIP/2.0/TCP 127.0.0.1:5060;branch=[branch]\r\n"
+ "From: sipp <sip:127.0.0.1:5061>;tag=12345\r\n"
+ "To: <sip:bob@example.org:5060>\r\n"
+ "Call-ID: 12345\r\n"
+ "CSeq: 1 INVITE\r\n"
+ "Contact: sip:127.0.0.1:5061\r\n"
+ "Max-Forwards: 70\r\n"
+ "Content-Type: application/sdp\r\n"
+ "Content-Length: \t\r\n"
+ "\t \r\n"
+ " 130\t \r\n"
+ "\r\n"
+ "v=0\r\n"
+ "o=user1 53655765 2353687637 IN IP4 127.0.0.1\r\n"
+ "s=-\r\n"
+ "c=IN IP4 127.0.0.1\r\n"
+ "t=0 0\r\n"
+ "m=audio 10000 RTP/AVP 0\r\n"
+ "a=rtpmap:0 PCMU/8000\r\n"
+ };
+
+ /* Message with compact Content-length header in message and
+ * full Content-Length header in the body. Ensure that the header
+ * in the message is read and that the one in the body is ignored
+ */
+ char *cl_in_body[] = {
+ "INVITE sip:bob@example.org SIP/2.0\r\n"
+ "Via: SIP/2.0/TCP 127.0.0.1:5060;branch=[branch]\r\n"
+ "From: sipp <sip:127.0.0.1:5061>;tag=12345\r\n"
+ "To: <sip:bob@example.org:5060>\r\n"
+ "Call-ID: 12345\r\n"
+ "CSeq: 1 INVITE\r\n"
+ "Contact: sip:127.0.0.1:5061\r\n"
+ "Max-Forwards: 70\r\n"
+ "Content-Type: application/sdp\r\n"
+ "l: 149\r\n"
+ "\r\n"
+ "v=0\r\n"
+ "Content-Length: 0\r\n"
+ "o=user1 53655765 2353687637 IN IP4 127.0.0.1\r\n"
+ "s=-\r\n"
+ "c=IN IP4 127.0.0.1\r\n"
+ "t=0 0\r\n"
+ "m=audio 10000 RTP/AVP 0\r\n"
+ "a=rtpmap:0 PCMU/8000\r\n"
+ };
+
+ struct ast_str *overflow;
+ struct {
+ char **fragments;
+ char **expected;
+ int num_expected;
+ const char *description;
+ } tests[] = {
+ { normal, normal, 1, "normal" },
+ { fragmented, normal, 1, "fragmented" },
+ { fragmented_body, normal, 1, "fragmented_body" },
+ { multi_fragment, normal, 1, "multi_fragment" },
+ { multi_message, multi_message_divided, 2, "multi_message" },
+ { multi_message_body, multi_message_body_divided, 2, "multi_message_body" },
+ { multi_message_in_fragments, multi_message_divided, 2, "multi_message_in_fragments" },
+ { compact, compact, 1, "compact" },
+ { faux, faux, 1, "faux" },
+ { folded, folded, 1, "folded" },
+ { cl_in_body, cl_in_body, 1, "cl_in_body" },
+ };
+ int i;
+ enum ast_test_result_state res = AST_TEST_PASS;
+
+ switch (cmd) {
+ case TEST_INIT:
+ info->name = "sip_tcp_message_fragmentation";
+ info->category = "/main/sip/transport/";
+ info->summary = "SIP TCP message fragmentation test";
+ info->description =
+ "Tests reception of different TCP messages that have been fragmented or"
+ "run together. This test mimicks the code that TCP reception uses.";
+ return AST_TEST_NOT_RUN;
+ case TEST_EXECUTE:
+ break;
+ }
+ if (!sip_cfg.pedanticsipchecking) {
+ ast_log(LOG_WARNING, "Not running test. Pedantic SIP checking is not enabled, so it is guaranteed to fail\n");
+ return AST_TEST_NOT_RUN;
+ }
+
+ overflow = ast_str_create(128);
+ if (!overflow) {
+ return AST_TEST_FAIL;
+ }
+ for (i = 0; i < ARRAY_LEN(tests); ++i) {
+ int num_messages = 0;
+ if (mock_tcp_loop(tests[i].fragments, ARRAY_LEN(tests[i].fragments),
+ &overflow, tests[i].expected, &num_messages, test)) {
+ ast_test_status_update(test, "Failed to parse message '%s'\n", tests[i].description);
+ res = AST_TEST_FAIL;
+ break;
+ }
+ if (num_messages != tests[i].num_expected) {
+ ast_test_status_update(test, "Did not receive the expected number of messages. "
+ "Expected %d but received %d\n", tests[i].num_expected, num_messages);
+ res = AST_TEST_FAIL;
+ break;
+ }
+ }
+ ast_free(overflow);
+ return res;
+}
+
#endif
#define DATA_EXPORT_SIP_PEER(MEMBER) \
@@ -30712,6 +31449,7 @@
#ifdef TEST_FRAMEWORK
AST_TEST_REGISTER(test_sip_peers_get);
AST_TEST_REGISTER(test_sip_mwi_subscribe_parse);
+ AST_TEST_REGISTER(test_tcp_message_fragmentation);
#endif
/* Register AstData providers */
@@ -30824,6 +31562,7 @@
#ifdef TEST_FRAMEWORK
AST_TEST_UNREGISTER(test_sip_peers_get);
AST_TEST_UNREGISTER(test_sip_mwi_subscribe_parse);
+ AST_TEST_UNREGISTER(test_tcp_message_fragmentation);
#endif
/* Unregister all the AstData providers */
ast_data_unregister(NULL);
|
[-]
[+]
|
Changed |
asterisk-1.8.19.0.tar.xz/channels/misdn/isdn_lib.c
^
|
@@ -180,7 +180,7 @@
stack->port,
stack->nt ? "NT" : "TE",
stack->ptp ? "PTP" : "PMP",
- stack->l2link ? "UP " : "DOWN",
+ (stack->nt && !stack->ptp) ? "UNKN" : stack->l2link ? "UP " : "DOWN",
stack->l1link ? "UP " : "DOWN",
stack->blocked);
} else {
@@ -772,8 +772,6 @@
bc->notify_description_code = mISDN_NOTIFY_CODE_INVALID;
- bc->evq=EVENT_NOTHING;
-
bc->progress_coding=0;
bc->progress_location=0;
bc->progress_indicator=0;
@@ -880,7 +878,7 @@
/* Pull Up L1 */
iframe_t act;
act.prim = PH_DEACTIVATE | REQUEST;
- act.addr = stack->lower_id|FLG_MSG_DOWN;
+ act.addr = stack->upper_id | FLG_MSG_DOWN;
act.dinfo = 0;
act.len = 0;
@@ -892,7 +890,7 @@
static int misdn_lib_get_l2_down(struct misdn_stack *stack)
{
- if (stack->ptp && (stack->nt) ) {
+ if (stack->ptp && stack->nt) {
msg_t *dmsg;
/* L2 */
dmsg = create_l2msg(DL_RELEASE| REQUEST, 0, 0);
@@ -901,7 +899,7 @@
if (stack->nst.manager_l3(&stack->nst, dmsg))
free_msg(dmsg);
pthread_mutex_unlock(&stack->nstlock);
- } else {
+ } else if (!stack->nt) {
iframe_t act;
act.prim = DL_RELEASE| REQUEST;
@@ -911,6 +909,7 @@
act.len = 0;
return mISDN_write(stack->midev, &act, mISDN_HEADER_LEN+act.len, TIMEOUT_1SEC);
}
+ /* cannot deestablish L2 for NT PTMP to unknown TE TEIs */
return 0;
}
@@ -921,20 +920,19 @@
/* Pull Up L1 */
iframe_t act;
act.prim = PH_ACTIVATE | REQUEST;
- act.addr = (stack->upper_id | FLG_MSG_DOWN) ;
-
+ act.addr = stack->upper_id | FLG_MSG_DOWN;
act.dinfo = 0;
act.len = 0;
+ cb_log(1, stack->port, "SENDING PH_ACTIVATE | REQ\n");
return mISDN_write(stack->midev, &act, mISDN_HEADER_LEN+act.len, TIMEOUT_1SEC);
-
}
int misdn_lib_get_l2_up(struct misdn_stack *stack)
{
- if (stack->ptp && (stack->nt) ) {
+ if (stack->ptp && stack->nt) {
msg_t *dmsg;
/* L2 */
dmsg = create_l2msg(DL_ESTABLISH | REQUEST, 0, 0);
@@ -943,7 +941,7 @@
if (stack->nst.manager_l3(&stack->nst, dmsg))
free_msg(dmsg);
pthread_mutex_unlock(&stack->nstlock);
- } else {
+ } else if (!stack->nt) {
iframe_t act;
act.prim = DL_ESTABLISH | REQUEST;
@@ -953,25 +951,11 @@
act.len = 0;
return mISDN_write(stack->midev, &act, mISDN_HEADER_LEN+act.len, TIMEOUT_1SEC);
}
+ /* cannot establish L2 for NT PTMP to unknown TE TEIs */
return 0;
}
-#if 0
-static int misdn_lib_get_l2_te_ptp_up(struct misdn_stack *stack)
-{
- iframe_t act;
-
- act.prim = DL_ESTABLISH | REQUEST;
- act.addr = (stack->upper_id & ~LAYER_ID_MASK) | 3 | FLG_MSG_DOWN;
-
- act.dinfo = 0;
- act.len = 0;
- return mISDN_write(stack->midev, &act, mISDN_HEADER_LEN+act.len, TIMEOUT_1SEC);
- return 0;
-}
-#endif
-
static int misdn_lib_get_short_status(struct misdn_stack *stack)
{
iframe_t act;
@@ -1231,7 +1215,7 @@
cb_log(8, port, "Init.BC %d.\n",bidx);
- bc->send_lock=malloc(sizeof(struct send_lock));
+ bc->send_lock = malloc(sizeof(struct send_lock)); /* XXX BUG! memory leak never freed */
if (!bc->send_lock) {
return -1;
}
@@ -1319,6 +1303,7 @@
ret = mISDN_get_stack_info(midev, port, buff, sizeof(buff));
if (ret < 0) {
cb_log(0, port, "%s: Cannot get stack info for this port. (ret=%d)\n", __FUNCTION__, ret);
+ free(stack);
return(NULL);
}
@@ -1382,27 +1367,30 @@
ret = mISDN_new_layer(midev, &li);
if (ret) {
cb_log(0, port, "%s: Cannot add layer %d to this port.\n", __FUNCTION__, nt?2:4);
+ free(stack);
return(NULL);
}
- stack->upper_id = li.id;
- ret = mISDN_register_layer(midev, stack->d_stid, stack->upper_id);
+ ret = mISDN_register_layer(midev, stack->d_stid, li.id);
if (ret)
{
cb_log(0,port,"Cannot register layer %d of this port.\n", nt?2:4);
+ free(stack);
return(NULL);
}
stack->lower_id = mISDN_get_layerid(midev, stack->d_stid, nt?1:3);
if (stack->lower_id < 0) {
cb_log(0, port, "%s: Cannot get layer(%d) id of this port.\n", __FUNCTION__, nt?1:3);
+ free(stack);
return(NULL);
}
stack->upper_id = mISDN_get_layerid(midev, stack->d_stid, nt?2:4);
if (stack->upper_id < 0) {
- cb_log(0, port, "%s: Cannot get layer(%d) id of this port.\n", __FUNCTION__, 2);
+ cb_log(0, port, "%s: Cannot get layer(%d) id of this port.\n", __FUNCTION__, nt?2:4);
+ free(stack);
return(NULL);
}
@@ -1426,7 +1414,7 @@
if (stack->pri)
stack->nst.feature |= FEATURE_NET_CRLEN2 | FEATURE_NET_EXTCID;
- stack->nst.l1_id = stack->lower_id;
+ stack->nst.l1_id = stack->lower_id; /* never used */
stack->nst.l2_id = stack->upper_id;
msg_queue_init(&stack->nst.down_queue);
@@ -1451,8 +1439,10 @@
misdn_lib_get_short_status(stack);
misdn_lib_get_l1_up(stack);
- misdn_lib_get_l2_up(stack);
-
+ /* handle_l1 will start L2 for NT. */
+ if (!stack->nt) {
+ misdn_lib_get_l2_up(stack);
+ }
}
cb_log(8, port, "stack_init: lowerId:%x upperId:%x\n", stack->lower_id, stack->upper_id);
@@ -1472,9 +1462,6 @@
cleanup_Isdnl3(&stack->nst);
}
- if (stack->lower_id)
- mISDN_write_frame(stack->midev, buf, stack->lower_id, MGR_DELLAYER | REQUEST, 0, 0, NULL, TIMEOUT_1SEC);
-
if (stack->upper_id)
mISDN_write_frame(stack->midev, buf, stack->upper_id, MGR_DELLAYER | REQUEST, 0, 0, NULL, TIMEOUT_1SEC);
@@ -1600,28 +1587,6 @@
}
-static struct misdn_bchannel *find_bc_by_channel(int port, int channel)
-{
- struct misdn_stack *stack = find_stack_by_port(port);
- int i;
-
- if (!stack) {
- return NULL;
- }
-
- for (i = 0; i <= stack->b_num; i++) {
- if (stack->bc[i].in_use && stack->bc[i].channel == channel) {
- return &stack->bc[i];
- }
- }
-
- return NULL;
-}
-
-
-
-
-
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);
@@ -1825,8 +1790,10 @@
if (!stack->l1link)
misdn_lib_get_l1_up(stack);
- if (!stack->l2link)
+ /* handle_l1 will start L2 for NT. */
+ if (!stack->l2link && !stack->nt) {
misdn_lib_get_l2_up(stack);
+ }
return 0;
}
@@ -2156,8 +2123,8 @@
case DL_RELEASE | INDICATION:
case DL_RELEASE | CONFIRM:
+ cb_log(3, stack->port, "%% GOT L2 DeActivate Info.\n");
if (stack->ptp) {
- cb_log(3 , stack->port, "%% GOT L2 DeActivate Info.\n");
if (stack->l2upcnt>3) {
cb_log(0 , stack->port, "!!! Could not Get the L2 up after 3 Attempts!!!\n");
@@ -2167,9 +2134,7 @@
stack->l2upcnt++;
}
}
-
- } else
- cb_log(3, stack->port, "%% GOT L2 DeActivate Info.\n");
+ }
stack->l2link = 0;
free_msg(msg);
@@ -2835,12 +2800,18 @@
{
iframe_t *frm = (iframe_t*) msg->data;
struct misdn_stack *stack = find_stack_by_addr(frm->addr);
- int i ;
if (!stack) return 0 ;
switch (frm->prim) {
case PH_ACTIVATE | CONFIRM:
+ /* we have to check for errors! */
+ if (frm->len) {
+ cb_log (3, stack->port, "L1: PH_ACTIVATE|REQUEST returned error!\n");
+ free_msg(msg);
+ return 1;
+ }
+ /* fall through */
case PH_ACTIVATE | INDICATION:
cb_log (3, stack->port, "L1: PH L1Link Up!\n");
stack->l1link=1;
@@ -2857,15 +2828,6 @@
} else {
free_msg(msg);
}
-
- for (i=0;i<=stack->b_num; i++) {
- if (stack->bc[i].evq != EVENT_NOTHING) {
- cb_log(4, stack->port, "Firing Queued Event %s because L1 got up\n", isdn_get_info(msgs_g, stack->bc[i].evq, 0));
- misdn_lib_send_event(&stack->bc[i],stack->bc[i].evq);
- stack->bc[i].evq=EVENT_NOTHING;
- }
-
- }
return 1;
case PH_ACTIVATE | REQUEST:
@@ -2879,6 +2841,13 @@
return 1;
case PH_DEACTIVATE | CONFIRM:
+ /* we have to check for errors! */
+ if (frm->len) {
+ cb_log (3, stack->port, "L1: PH_DEACTIVATE|REQUEST returned error!\n");
+ free_msg(msg);
+ return 1;
+ }
+ /* fall through */
case PH_DEACTIVATE | INDICATION:
cb_log (3, stack->port, "L1: PH L1Link Down! \n");
@@ -3159,7 +3128,8 @@
entity = frm->dinfo & 0xffff;
if (ret < mISDN_HEADER_LEN || !entity) {
fprintf(stderr, "cannot request MGR_NEWENTITY from mISDN: %s\n", strerror(errno));
- exit(-1);
+ mISDN_close(midev);
+ return -1;
}
return midev;
@@ -3577,11 +3547,7 @@
cb_log(6,stack->port,"SENDEVENT: stack->nt:%d stack->upperid:%x\n",stack->nt, stack->upper_id);
if ( stack->nt && !stack->l1link) {
- /** Queue Event **/
- bc->evq=event;
- cb_log(1, stack->port, "Queueing Event %s because L1 is down (btw. Activating L1)\n", isdn_get_info(msgs_g, event, 0));
misdn_lib_get_l1_up(stack);
- RETURN(0,OUT);
}
cb_log(1, stack->port,
@@ -3851,7 +3817,6 @@
{
int port=(frm->addr&MASTER_ID_MASK) >> 8;
int channel=(frm->addr&CHILD_ID_MASK) >> 16;
- struct misdn_bchannel *bc;
/*we flush the read buffer here*/
@@ -3859,31 +3824,6 @@
free_msg(msg);
return 1;
-
-
- bc = find_bc_by_channel(port, channel);
-
- if (!bc) {
- struct misdn_stack *stack = find_stack_by_port(port);
-
- if (!stack) {
- cb_log(0,0," --> stack not found\n");
- free_msg(msg);
- return 1;
- }
-
- cb_log(0,0," --> bc not found by channel\n");
- if (stack->l2link)
- misdn_lib_get_l2_down(stack);
-
- if (stack->l1link)
- misdn_lib_get_l1_down(stack);
-
- free_msg(msg);
- return 1;
- }
-
- cb_log(3,port," --> BC in state:%s\n", bc_state2str(bc->bc_state));
}
}
@@ -3897,6 +3837,13 @@
cb_log(0,0,"SERIOUS BUG, dinfo == 0xffffffff, prim == PH_DATA | CONFIRM !!!!\n");
}
+ /* Timer primitives must be handled first, because the frm->addr is a different
+ * "address space" than the stack/instance address of other Lx primitives.
+ */
+ if (handle_timers(msg)) {
+ return 0;
+ }
+
if ( ((frm->addr | ISDN_PID_BCHANNEL_BIT )>> 28 ) == 0x5) {
static int unhandled_bmsg_count=1000;
if (handle_bchan(msg)) {
@@ -3917,10 +3864,6 @@
syslog(LOG_NOTICE,"mISDN recv: ADDR:%x PRIM:%x DINFO:%x\n", frm->addr, frm->prim, frm->dinfo);
#endif
- if (handle_timers(msg))
- return 0 ;
-
-
if (handle_mgmt(msg))
return 0 ;
@@ -4190,7 +4133,7 @@
int misdn_lib_init(char *portlist, struct misdn_lib_iface *iface, void *user_data)
{
- struct misdn_lib *mgr=calloc(1, sizeof(struct misdn_lib));
+ struct misdn_lib *mgr;
char *tok, *tokb;
char plist[1024];
int midev;
@@ -4200,20 +4143,24 @@
cb_event = iface->cb_event;
cb_jb_empty = iface->cb_jb_empty;
+ if (!portlist || (*portlist == 0)) {
+ return 1;
+ }
+
+ mgr = calloc(1, sizeof(*mgr));
+ if (!mgr) {
+ return 1;
+ }
glob_mgr = mgr;
msg_init();
misdn_lib_nt_debug_init(0,NULL);
- if (!portlist || (*portlist == 0) ) return 1;
-
init_flip_bits();
- {
- strncpy(plist,portlist, 1024);
- plist[1023] = 0;
- }
+ strncpy(plist, portlist, 1024);
+ plist[1023] = 0;
memcpy(tone_425_flip,tone_425,TONE_425_SIZE);
flip_buf_bits(tone_425_flip,TONE_425_SIZE);
@@ -4222,6 +4169,11 @@
flip_buf_bits(tone_silence_flip,TONE_SILENCE_SIZE);
midev=te_lib_init();
+ if (midev <= 0) {
+ free(glob_mgr);
+ glob_mgr = NULL;
+ return 1;
+ }
mgr->midev=midev;
port_count=mISDN_get_stack_count(midev);
@@ -4246,13 +4198,13 @@
if (port > port_count) {
cb_log(0, port, "Couldn't Initialize this port since we have only %d ports\n", port_count);
- exit(1);
+ continue;
}
stack = stack_init(midev, port, ptp);
if (!stack) {
- perror("stack_init");
- exit(1);
+ cb_log(0, port, "stack_init() failed for this port\n");
+ continue;
}
/* Initialize the B channel records for real B channels. */
@@ -4260,19 +4212,29 @@
r = init_bc(stack, &stack->bc[i], stack->midev, port, i);
if (r < 0) {
cb_log(0, port, "Got Err @ init_bc :%d\n", r);
- exit(1);
+ break;
}
}
+ if (i <= stack->b_num) {
+ stack_destroy(stack);
+ free(stack);
+ continue;
+ }
#if defined(AST_MISDN_ENHANCEMENTS)
/* Initialize the B channel records for REGISTER signaling links. */
for (i = MAX_BCHANS + 1; i < ARRAY_LEN(stack->bc); ++i) {
r = init_bc(stack, &stack->bc[i], stack->midev, port, i);
if (r < 0) {
cb_log(0, port, "Got Err @ init_bc :%d\n", r);
- exit(1);
+ break;
}
stack->bc[i].is_register_pool = 1;
}
+ if (i < ARRAY_LEN(stack->bc)) {
+ stack_destroy(stack);
+ free(stack);
+ continue;
+ }
#endif /* defined(AST_MISDN_ENHANCEMENTS) */
/* Add the new stack to the end of the list */
@@ -4287,6 +4249,13 @@
}
}
+ if (!mgr->stack_list) {
+ /* no stacks were successfully initialized !? */
+ te_lib_destroy(midev);
+ free(glob_mgr);
+ glob_mgr = NULL;
+ return 1;
+ }
if (sem_init(&handler_started, 1, 0)<0)
sem_init(&handler_started, 0, 0);
@@ -4335,6 +4304,12 @@
cb_log(1, 0, "Closing mISDN device\n");
te_lib_destroy(glob_mgr->midev);
+ while ((help = glob_mgr->stack_list)) {
+ glob_mgr->stack_list = help->next;
+ free(help);
+ }
+ free(glob_mgr);
+ glob_mgr = NULL;
}
char *manager_isdn_get_info(enum event_e event)
@@ -4821,7 +4796,7 @@
if (stack->pri)
stack->nst.feature |= FEATURE_NET_CRLEN2 | FEATURE_NET_EXTCID;
- stack->nst.l1_id = stack->lower_id;
+ stack->nst.l1_id = stack->lower_id; /* never used */
stack->nst.l2_id = stack->upper_id;
msg_queue_init(&stack->nst.down_queue);
@@ -4831,7 +4806,6 @@
if (!stack->ptp)
misdn_lib_get_l1_up(stack);
- misdn_lib_get_l2_up(stack);
}
}
|
[-]
[+]
|
Changed |
asterisk-1.8.19.0.tar.xz/channels/misdn/isdn_lib.h
^
|
@@ -520,9 +520,6 @@
/*! \brief TRUE if AOCDtype and AOCD data are ready to export to Asterisk */
int AOCD_need_export;
- /*! \brief Event waiting for Layer 1 to come up */
- enum event_e evq;
-
/*** CRYPTING STUFF ***/
int crypt; /* Initialized, Not used */
int curprx; /* Initialized, Not used */
|
[-]
[+]
|
Changed |
asterisk-1.8.19.0.tar.xz/codecs/gsm/src/code.c
^
|
@@ -58,10 +58,11 @@
word * dp = S->dp0 + 120; /* [ -120...-1 ] */
word * dpp = dp; /* [ 0...39 ] */
- static word e[50];
+ word e[50];
word so[160];
+ memset(e,0,sizeof e);
Gsm_Preprocess (S, s, so);
Gsm_LPC_Analysis (S, so, LARc);
Gsm_Short_Term_Analysis_Filter (S, LARc, so);
|
[-]
[+]
|
Changed |
asterisk-1.8.19.0.tar.xz/config.guess
^
|
@@ -1,10 +1,10 @@
#! /bin/sh
# Attempt to guess a canonical system name.
# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
-# 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010
-# Free Software Foundation, Inc.
+# 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010,
+# 2011, 2012 Free Software Foundation, Inc.
-timestamp='2010-04-03'
+timestamp='2012-09-25'
# This file is free software; you can redistribute it and/or modify it
# under the terms of the GNU General Public License as published by
@@ -17,9 +17,7 @@
# General Public License for more details.
#
# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA
-# 02110-1301, USA.
+# along with this program; if not, see <http://www.gnu.org/licenses/>.
#
# As a special exception to the GNU General Public License, if you
# distribute this file as part of a program that contains a
@@ -57,8 +55,8 @@
Originally written by Per Bothner.
Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000,
-2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010 Free
-Software Foundation, Inc.
+2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012
+Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
@@ -92,7 +90,7 @@
exit 1
fi
-trap 'exit 1' HUP INT TERM
+trap 'exit 1' 1 2 15
# CC_FOR_BUILD -- compiler used by this script. Note that the use of a
# compiler to aid in system detection is discouraged as it requires
@@ -106,7 +104,7 @@
set_cc_for_build='
trap "exitcode=\$?; (rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null) && exit \$exitcode" 0 ;
-trap "rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null; exit 1" HUP INT PIPE TERM ;
+trap "rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null; exit 1" 1 2 13 15 ;
: ${TMPDIR=/tmp} ;
{ tmp=`(umask 077 && mktemp -d "$TMPDIR/cgXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" ; } ||
{ test -n "$RANDOM" && tmp=$TMPDIR/cg$$-$RANDOM && (umask 077 && mkdir $tmp) ; } ||
@@ -145,7 +143,7 @@
case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
*:NetBSD:*:*)
# NetBSD (nbsd) targets should (where applicable) match one or
- # more of the tupples: *-*-netbsdelf*, *-*-netbsdaout*,
+ # more of the tuples: *-*-netbsdelf*, *-*-netbsdaout*,
# *-*-netbsdecoff* and *-*-netbsd*. For targets that recently
# switched to ELF, *-*-netbsd* would select the old
# object file format. This provides both forward
@@ -181,7 +179,7 @@
fi
;;
*)
- os=netbsd
+ os=netbsd
;;
esac
# The OS release
@@ -202,6 +200,10 @@
# CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used.
echo "${machine}-${os}${release}"
exit ;;
+ *:Bitrig:*:*)
+ UNAME_MACHINE_ARCH=`arch | sed 's/Bitrig.//'`
+ echo ${UNAME_MACHINE_ARCH}-unknown-bitrig${UNAME_RELEASE}
+ exit ;;
*:OpenBSD:*:*)
UNAME_MACHINE_ARCH=`arch | sed 's/OpenBSD.//'`
echo ${UNAME_MACHINE_ARCH}-unknown-openbsd${UNAME_RELEASE}
@@ -224,7 +226,7 @@
UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'`
;;
*5.*)
- UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $4}'`
+ UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $4}'`
;;
esac
# According to Compaq, /usr/sbin/psrinfo has been available on
@@ -270,7 +272,10 @@
# A Xn.n version is an unreleased experimental baselevel.
# 1.2 uses "1.2" for uname -r.
echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[PVTX]//' | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'`
- exit ;;
+ # Reset EXIT trap before exiting to avoid spurious non-zero exit code.
+ exitcode=$?
+ trap '' 0
+ exit $exitcode ;;
Alpha\ *:Windows_NT*:*)
# How do we know it's Interix rather than the generic POSIX subsystem?
# Should we change UNAME_MACHINE based on the output of uname instead
@@ -296,12 +301,12 @@
echo s390-ibm-zvmoe
exit ;;
*:OS400:*:*)
- echo powerpc-ibm-os400
+ echo powerpc-ibm-os400
exit ;;
arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*)
echo arm-acorn-riscix${UNAME_RELEASE}
exit ;;
- arm:riscos:*:*|arm:RISCOS:*:*)
+ arm*:riscos:*:*|arm*:RISCOS:*:*)
echo arm-unknown-riscos
exit ;;
SR2?01:HI-UX/MPP:*:* | SR8000:HI-UX/MPP:*:*)
@@ -395,23 +400,23 @@
# MiNT. But MiNT is downward compatible to TOS, so this should
# be no problem.
atarist[e]:*MiNT:*:* | atarist[e]:*mint:*:* | atarist[e]:*TOS:*:*)
- echo m68k-atari-mint${UNAME_RELEASE}
+ echo m68k-atari-mint${UNAME_RELEASE}
exit ;;
atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*)
echo m68k-atari-mint${UNAME_RELEASE}
- exit ;;
+ exit ;;
*falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*)
- echo m68k-atari-mint${UNAME_RELEASE}
+ echo m68k-atari-mint${UNAME_RELEASE}
exit ;;
milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*)
- echo m68k-milan-mint${UNAME_RELEASE}
- exit ;;
+ echo m68k-milan-mint${UNAME_RELEASE}
+ exit ;;
hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*)
- echo m68k-hades-mint${UNAME_RELEASE}
- exit ;;
+ echo m68k-hades-mint${UNAME_RELEASE}
+ exit ;;
*:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*)
- echo m68k-unknown-mint${UNAME_RELEASE}
- exit ;;
+ echo m68k-unknown-mint${UNAME_RELEASE}
+ exit ;;
m68k:machten:*:*)
echo m68k-apple-machten${UNAME_RELEASE}
exit ;;
@@ -481,8 +486,8 @@
echo m88k-motorola-sysv3
exit ;;
AViiON:dgux:*:*)
- # DG/UX returns AViiON for all architectures
- UNAME_PROCESSOR=`/usr/bin/uname -p`
+ # DG/UX returns AViiON for all architectures
+ UNAME_PROCESSOR=`/usr/bin/uname -p`
if [ $UNAME_PROCESSOR = mc88100 ] || [ $UNAME_PROCESSOR = mc88110 ]
then
if [ ${TARGET_BINARY_INTERFACE}x = m88kdguxelfx ] || \
@@ -495,7 +500,7 @@
else
echo i586-dg-dgux${UNAME_RELEASE}
fi
- exit ;;
+ exit ;;
M88*:DolphinOS:*:*) # DolphinOS (SVR3)
echo m88k-dolphin-sysv3
exit ;;
@@ -552,7 +557,7 @@
echo rs6000-ibm-aix3.2
fi
exit ;;
- *:AIX:*:[456])
+ *:AIX:*:[4567])
IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | sed 1q | awk '{ print $1 }'`
if /usr/sbin/lsattr -El ${IBM_CPU_ID} | grep ' POWER' >/dev/null 2>&1; then
IBM_ARCH=rs6000
@@ -595,52 +600,52 @@
9000/[678][0-9][0-9])
if [ -x /usr/bin/getconf ]; then
sc_cpu_version=`/usr/bin/getconf SC_CPU_VERSION 2>/dev/null`
- sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null`
- case "${sc_cpu_version}" in
- 523) HP_ARCH="hppa1.0" ;; # CPU_PA_RISC1_0
- 528) HP_ARCH="hppa1.1" ;; # CPU_PA_RISC1_1
- 532) # CPU_PA_RISC2_0
- case "${sc_kernel_bits}" in
- 32) HP_ARCH="hppa2.0n" ;;
- 64) HP_ARCH="hppa2.0w" ;;
+ sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null`
+ case "${sc_cpu_version}" in
+ 523) HP_ARCH="hppa1.0" ;; # CPU_PA_RISC1_0
+ 528) HP_ARCH="hppa1.1" ;; # CPU_PA_RISC1_1
+ 532) # CPU_PA_RISC2_0
+ case "${sc_kernel_bits}" in
+ 32) HP_ARCH="hppa2.0n" ;;
+ 64) HP_ARCH="hppa2.0w" ;;
'') HP_ARCH="hppa2.0" ;; # HP-UX 10.20
- esac ;;
- esac
+ esac ;;
+ esac
fi
if [ "${HP_ARCH}" = "" ]; then
eval $set_cc_for_build
- sed 's/^ //' << EOF >$dummy.c
+ sed 's/^ //' << EOF >$dummy.c
+
+ #define _HPUX_SOURCE
+ #include <stdlib.h>
+ #include <unistd.h>
- #define _HPUX_SOURCE
- #include <stdlib.h>
- #include <unistd.h>
-
- int main ()
- {
- #if defined(_SC_KERNEL_BITS)
- long bits = sysconf(_SC_KERNEL_BITS);
- #endif
- long cpu = sysconf (_SC_CPU_VERSION);
-
- switch (cpu)
- {
- case CPU_PA_RISC1_0: puts ("hppa1.0"); break;
- case CPU_PA_RISC1_1: puts ("hppa1.1"); break;
- case CPU_PA_RISC2_0:
- #if defined(_SC_KERNEL_BITS)
- switch (bits)
- {
- case 64: puts ("hppa2.0w"); break;
- case 32: puts ("hppa2.0n"); break;
- default: puts ("hppa2.0"); break;
- } break;
- #else /* !defined(_SC_KERNEL_BITS) */
- puts ("hppa2.0"); break;
- #endif
- default: puts ("hppa1.0"); break;
- }
- exit (0);
- }
+ int main ()
+ {
+ #if defined(_SC_KERNEL_BITS)
+ long bits = sysconf(_SC_KERNEL_BITS);
+ #endif
+ long cpu = sysconf (_SC_CPU_VERSION);
+
+ switch (cpu)
+ {
+ case CPU_PA_RISC1_0: puts ("hppa1.0"); break;
+ case CPU_PA_RISC1_1: puts ("hppa1.1"); break;
+ case CPU_PA_RISC2_0:
+ #if defined(_SC_KERNEL_BITS)
+ switch (bits)
+ {
+ case 64: puts ("hppa2.0w"); break;
+ case 32: puts ("hppa2.0n"); break;
+ default: puts ("hppa2.0"); break;
+ } break;
+ #else /* !defined(_SC_KERNEL_BITS) */
+ puts ("hppa2.0"); break;
+ #endif
+ default: puts ("hppa1.0"); break;
+ }
+ exit (0);
+ }
EOF
(CCOPTS= $CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null) && HP_ARCH=`$dummy`
test -z "$HP_ARCH" && HP_ARCH=hppa
@@ -731,22 +736,22 @@
exit ;;
C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*)
echo c1-convex-bsd
- exit ;;
+ exit ;;
C2*:ConvexOS:*:* | convex:ConvexOS:C2*:*)
if getsysinfo -f scalar_acc
then echo c32-convex-bsd
else echo c2-convex-bsd
fi
- exit ;;
+ exit ;;
C34*:ConvexOS:*:* | convex:ConvexOS:C34*:*)
echo c34-convex-bsd
- exit ;;
+ exit ;;
C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*)
echo c38-convex-bsd
- exit ;;
+ exit ;;
C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*)
echo c4-convex-bsd
- exit ;;
+ exit ;;
CRAY*Y-MP:*:*:*)
echo ymp-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
exit ;;
@@ -770,14 +775,14 @@
exit ;;
F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*)
FUJITSU_PROC=`uname -m | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'`
- FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'`
- FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'`
- echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}"
- exit ;;
+ FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'`
+ FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'`
+ echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}"
+ exit ;;
5000:UNIX_System_V:4.*:*)
- FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'`
- FUJITSU_REL=`echo ${UNAME_RELEASE} | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/ /_/'`
- echo "sparc-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}"
+ FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'`
+ FUJITSU_REL=`echo ${UNAME_RELEASE} | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/ /_/'`
+ echo "sparc-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}"
exit ;;
i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*)
echo ${UNAME_MACHINE}-pc-bsdi${UNAME_RELEASE}
@@ -789,30 +794,35 @@
echo ${UNAME_MACHINE}-unknown-bsdi${UNAME_RELEASE}
exit ;;
*:FreeBSD:*:*)
- case ${UNAME_MACHINE} in
- pc98)
- echo i386-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;;
+ UNAME_PROCESSOR=`/usr/bin/uname -p`
+ case ${UNAME_PROCESSOR} in
amd64)
echo x86_64-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;;
*)
- echo ${UNAME_MACHINE}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;;
+ echo ${UNAME_PROCESSOR}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;;
esac
exit ;;
i*:CYGWIN*:*)
echo ${UNAME_MACHINE}-pc-cygwin
exit ;;
+ *:MINGW64*:*)
+ echo ${UNAME_MACHINE}-pc-mingw64
+ exit ;;
*:MINGW*:*)
echo ${UNAME_MACHINE}-pc-mingw32
exit ;;
+ i*:MSYS*:*)
+ echo ${UNAME_MACHINE}-pc-msys
+ exit ;;
i*:windows32*:*)
- # uname -m includes "-pc" on this system.
- echo ${UNAME_MACHINE}-mingw32
+ # uname -m includes "-pc" on this system.
+ echo ${UNAME_MACHINE}-mingw32
exit ;;
i*:PW*:*)
echo ${UNAME_MACHINE}-pc-pw32
exit ;;
*:Interix*:*)
- case ${UNAME_MACHINE} in
+ case ${UNAME_MACHINE} in
x86)
echo i586-pc-interix${UNAME_RELEASE}
exit ;;
@@ -858,6 +868,13 @@
i*86:Minix:*:*)
echo ${UNAME_MACHINE}-pc-minix
exit ;;
+ aarch64:Linux:*:*)
+ echo ${UNAME_MACHINE}-unknown-linux-gnu
+ exit ;;
+ aarch64_be:Linux:*:*)
+ UNAME_MACHINE=aarch64_be
+ echo ${UNAME_MACHINE}-unknown-linux-gnu
+ exit ;;
alpha:Linux:*:*)
case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` in
EV5) UNAME_MACHINE=alphaev5 ;;
@@ -867,7 +884,7 @@
EV6) UNAME_MACHINE=alphaev6 ;;
EV67) UNAME_MACHINE=alphaev67 ;;
EV68*) UNAME_MACHINE=alphaev68 ;;
- esac
+ esac
objdump --private-headers /bin/sh | grep -q ld.so.1
if test "$?" = 0 ; then LIBC="libc1" ; else LIBC="" ; fi
echo ${UNAME_MACHINE}-unknown-linux-gnu${LIBC}
@@ -879,20 +896,29 @@
then
echo ${UNAME_MACHINE}-unknown-linux-gnu
else
- echo ${UNAME_MACHINE}-unknown-linux-gnueabi
+ if echo __ARM_PCS_VFP | $CC_FOR_BUILD -E - 2>/dev/null \
+ | grep -q __ARM_PCS_VFP
+ then
+ echo ${UNAME_MACHINE}-unknown-linux-gnueabi
+ else
+ echo ${UNAME_MACHINE}-unknown-linux-gnueabihf
+ fi
fi
exit ;;
avr32*:Linux:*:*)
echo ${UNAME_MACHINE}-unknown-linux-gnu
exit ;;
cris:Linux:*:*)
- echo cris-axis-linux-gnu
+ echo ${UNAME_MACHINE}-axis-linux-gnu
exit ;;
crisv32:Linux:*:*)
- echo crisv32-axis-linux-gnu
+ echo ${UNAME_MACHINE}-axis-linux-gnu
exit ;;
frv:Linux:*:*)
- echo frv-unknown-linux-gnu
+ echo ${UNAME_MACHINE}-unknown-linux-gnu
+ exit ;;
+ hexagon:Linux:*:*)
+ echo ${UNAME_MACHINE}-unknown-linux-gnu
exit ;;
i*86:Linux:*:*)
LIBC=gnu
@@ -934,7 +960,7 @@
test x"${CPU}" != x && { echo "${CPU}-unknown-linux-gnu"; exit; }
;;
or32:Linux:*:*)
- echo or32-unknown-linux-gnu
+ echo ${UNAME_MACHINE}-unknown-linux-gnu
exit ;;
padre:Linux:*:*)
echo sparc-unknown-linux-gnu
@@ -960,7 +986,7 @@
echo ${UNAME_MACHINE}-ibm-linux
exit ;;
sh64*:Linux:*:*)
- echo ${UNAME_MACHINE}-unknown-linux-gnu
+ echo ${UNAME_MACHINE}-unknown-linux-gnu
exit ;;
sh*:Linux:*:*)
echo ${UNAME_MACHINE}-unknown-linux-gnu
@@ -968,14 +994,17 @@
sparc:Linux:*:* | sparc64:Linux:*:*)
echo ${UNAME_MACHINE}-unknown-linux-gnu
exit ;;
+ tile*:Linux:*:*)
+ echo ${UNAME_MACHINE}-unknown-linux-gnu
+ exit ;;
vax:Linux:*:*)
echo ${UNAME_MACHINE}-dec-linux-gnu
exit ;;
x86_64:Linux:*:*)
- echo x86_64-unknown-linux-gnu
+ echo ${UNAME_MACHINE}-unknown-linux-gnu
exit ;;
xtensa*:Linux:*:*)
- echo ${UNAME_MACHINE}-unknown-linux-gnu
+ echo ${UNAME_MACHINE}-unknown-linux-gnu
exit ;;
i*86:DYNIX/ptx:4*:*)
# ptx 4.0 does uname -s correctly, with DYNIX/ptx in there.
@@ -984,11 +1013,11 @@
echo i386-sequent-sysv4
exit ;;
i*86:UNIX_SV:4.2MP:2.*)
- # Unixware is an offshoot of SVR4, but it has its own version
- # number series starting with 2...
- # I am not positive that other SVR4 systems won't match this,
+ # Unixware is an offshoot of SVR4, but it has its own version
+ # number series starting with 2...
+ # I am not positive that other SVR4 systems won't match this,
# I just have to hope. -- rms.
- # Use sysv4.2uw... so that sysv4* matches it.
+ # Use sysv4.2uw... so that sysv4* matches it.
echo ${UNAME_MACHINE}-pc-sysv4.2uw${UNAME_VERSION}
exit ;;
i*86:OS/2:*:*)
@@ -1020,7 +1049,7 @@
fi
exit ;;
i*86:*:5:[678]*)
- # UnixWare 7.x, OpenUNIX and OpenServer 6.
+ # UnixWare 7.x, OpenUNIX and OpenServer 6.
case `/bin/uname -X | grep "^Machine"` in
*486*) UNAME_MACHINE=i486 ;;
*Pentium) UNAME_MACHINE=i586 ;;
@@ -1048,13 +1077,13 @@
exit ;;
pc:*:*:*)
# Left here for compatibility:
- # uname -m prints for DJGPP always 'pc', but it prints nothing about
- # the processor, so we play safe by assuming i586.
+ # uname -m prints for DJGPP always 'pc', but it prints nothing about
+ # the processor, so we play safe by assuming i586.
# Note: whatever this is, it MUST be the same as what config.sub
# prints for the "djgpp" host, or else GDB configury will decide that
# this is a cross-build.
echo i586-pc-msdosdjgpp
- exit ;;
+ exit ;;
Intel:Mach:3*:*)
echo i386-pc-mach3
exit ;;
@@ -1089,8 +1118,8 @@
/bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \
&& { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;;
3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*)
- /bin/uname -p 2>/dev/null | grep 86 >/dev/null \
- && { echo i486-ncr-sysv4; exit; } ;;
+ /bin/uname -p 2>/dev/null | grep 86 >/dev/null \
+ && { echo i486-ncr-sysv4; exit; } ;;
NCR*:*:4.2:* | MPRAS*:*:4.2:*)
OS_REL='.3'
test -r /etc/.relid \
@@ -1133,10 +1162,10 @@
echo ns32k-sni-sysv
fi
exit ;;
- PENTIUM:*:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort
- # says <Richard.M.Bartel@ccMail.Census.GOV>
- echo i586-unisys-sysv4
- exit ;;
+ PENTIUM:*:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort
+ # says <Richard.M.Bartel@ccMail.Census.GOV>
+ echo i586-unisys-sysv4
+ exit ;;
*:UNIX_System_V:4*:FTX*)
# From Gerald Hewes <hewes@openmarket.com>.
# How about differentiating between stratus architectures? -djm
@@ -1162,11 +1191,11 @@
exit ;;
R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*)
if [ -d /usr/nec ]; then
- echo mips-nec-sysv${UNAME_RELEASE}
+ echo mips-nec-sysv${UNAME_RELEASE}
else
- echo mips-unknown-sysv${UNAME_RELEASE}
+ echo mips-unknown-sysv${UNAME_RELEASE}
fi
- exit ;;
+ exit ;;
BeBox:BeOS:*:*) # BeOS running on hardware made by Be, PPC only.
echo powerpc-be-beos
exit ;;
@@ -1179,6 +1208,9 @@
BePC:Haiku:*:*) # Haiku running on Intel PC compatible.
echo i586-pc-haiku
exit ;;
+ x86_64:Haiku:*:*)
+ echo x86_64-unknown-haiku
+ exit ;;
SX-4:SUPER-UX:*:*)
echo sx4-nec-superux${UNAME_RELEASE}
exit ;;
@@ -1231,7 +1263,10 @@
*:QNX:*:4*)
echo i386-pc-qnx
exit ;;
- NSE-?:NONSTOP_KERNEL:*:*)
+ NEO-?:NONSTOP_KERNEL:*:*)
+ echo neo-tandem-nsk${UNAME_RELEASE}
+ exit ;;
+ NSE-*:NONSTOP_KERNEL:*:*)
echo nse-tandem-nsk${UNAME_RELEASE}
exit ;;
NSR-?:NONSTOP_KERNEL:*:*)
@@ -1276,13 +1311,13 @@
echo pdp10-unknown-its
exit ;;
SEI:*:*:SEIUX)
- echo mips-sei-seiux${UNAME_RELEASE}
+ echo mips-sei-seiux${UNAME_RELEASE}
exit ;;
*:DragonFly:*:*)
echo ${UNAME_MACHINE}-unknown-dragonfly`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`
exit ;;
*:*VMS:*:*)
- UNAME_MACHINE=`(uname -p) 2>/dev/null`
+ UNAME_MACHINE=`(uname -p) 2>/dev/null`
case "${UNAME_MACHINE}" in
A*) echo alpha-dec-vms ; exit ;;
I*) echo ia64-dec-vms ; exit ;;
@@ -1300,11 +1335,11 @@
i*86:AROS:*:*)
echo ${UNAME_MACHINE}-pc-aros
exit ;;
+ x86_64:VMkernel:*:*)
+ echo ${UNAME_MACHINE}-unknown-esx
+ exit ;;
esac
-#echo '(No uname command or uname output not recognized.)' 1>&2
-#echo "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" 1>&2
-
eval $set_cc_for_build
cat >$dummy.c <<EOF
#ifdef _SEQUENT_
@@ -1322,11 +1357,11 @@
#include <sys/param.h>
printf ("m68k-sony-newsos%s\n",
#ifdef NEWSOS4
- "4"
+ "4"
#else
- ""
+ ""
#endif
- ); exit (0);
+ ); exit (0);
#endif
#endif
|
[-]
[+]
|
Changed |
asterisk-1.8.19.0.tar.xz/config.sub
^
|
@@ -1,10 +1,10 @@
#! /bin/sh
# Configuration validation subroutine script.
# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
-# 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009
-# Free Software Foundation, Inc.
+# 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010,
+# 2011, 2012 Free Software Foundation, Inc.
-timestamp='2009-06-11'
+timestamp='2012-10-10'
# This file is (in principle) common to ALL GNU software.
# The presence of a machine in this file suggests that SOME GNU software
@@ -21,9 +21,7 @@
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA
-# 02110-1301, USA.
+# along with this program; if not, see <http://www.gnu.org/licenses/>.
#
# As a special exception to the GNU General Public License, if you
# distribute this file as part of a program that contains a
@@ -32,13 +30,16 @@
# Please send patches to <config-patches@gnu.org>. Submit a context
-# diff and a properly formatted ChangeLog entry.
+# diff and a properly formatted GNU ChangeLog entry.
#
# Configuration subroutine to validate and canonicalize a configuration type.
# Supply the specified configuration type as an argument.
# If it is invalid, we print an error message on stderr and exit with code 1.
# Otherwise, we print the canonical config type on stdout and succeed.
+# You can get the latest version of this script from:
+# http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub;hb=HEAD
+
# This file is supposed to be the same for all GNU packages
# and recognize all the CPU types, system types and aliases
# that are meaningful with *any* GNU software.
@@ -72,8 +73,9 @@
version="\
GNU config.sub ($timestamp)
-Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001,
-2002, 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc.
+Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000,
+2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012
+Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
@@ -120,13 +122,18 @@
# Here we must recognize all the valid KERNEL-OS combinations.
maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'`
case $maybe_os in
- nto-qnx* | linux-gnu* | linux-dietlibc | linux-newlib* | linux-uclibc* | \
- uclinux-uclibc* | uclinux-gnu* | kfreebsd*-gnu* | knetbsd*-gnu* | netbsd*-gnu* | \
+ nto-qnx* | linux-gnu* | linux-android* | linux-dietlibc | linux-newlib* | \
+ linux-musl* | linux-uclibc* | uclinux-uclibc* | uclinux-gnu* | kfreebsd*-gnu* | \
+ knetbsd*-gnu* | netbsd*-gnu* | \
kopensolaris*-gnu* | \
storm-chaos* | os2-emx* | rtmk-nova*)
os=-$maybe_os
basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'`
;;
+ android-linux)
+ os=-linux-android
+ basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'`-unknown
+ ;;
*)
basic_machine=`echo $1 | sed 's/-[^-]*$//'`
if [ $basic_machine != $1 ]
@@ -149,12 +156,12 @@
-convergent* | -ncr* | -news | -32* | -3600* | -3100* | -hitachi* |\
-c[123]* | -convex* | -sun | -crds | -omron* | -dg | -ultra | -tti* | \
-harris | -dolphin | -highlevel | -gould | -cbm | -ns | -masscomp | \
- -apple | -axis | -knuth | -cray)
+ -apple | -axis | -knuth | -cray | -microblaze*)
os=
basic_machine=$1
;;
- -bluegene*)
- os=-cnk
+ -bluegene*)
+ os=-cnk
;;
-sim | -cisco | -oki | -wec | -winbond)
os=
@@ -170,10 +177,10 @@
os=-chorusos
basic_machine=$1
;;
- -chorusrdb)
- os=-chorusrdb
+ -chorusrdb)
+ os=-chorusrdb
basic_machine=$1
- ;;
+ ;;
-hiux*)
os=-hiuxwe2
;;
@@ -218,6 +225,12 @@
-isc*)
basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
;;
+ -lynx*178)
+ os=-lynxos178
+ ;;
+ -lynx*5)
+ os=-lynxos5
+ ;;
-lynx*)
os=-lynxos
;;
@@ -242,20 +255,25 @@
# Some are omitted here because they have special meanings below.
1750a | 580 \
| a29k \
+ | aarch64 | aarch64_be \
| alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \
| alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] | alpha64pca5[67] \
| am33_2.0 \
| arc | arm | arm[bl]e | arme[lb] | armv[2345] | armv[345][lb] | avr | avr32 \
+ | be32 | be64 \
| bfin \
| c4x | clipper \
| d10v | d30v | dlx | dsp16xx \
+ | epiphany \
| fido | fr30 | frv \
| h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \
+ | hexagon \
| i370 | i860 | i960 | ia64 \
| ip2k | iq2000 \
+ | le32 | le64 \
| lm32 \
| m32c | m32r | m32rle | m68000 | m68k | m88k \
- | maxq | mb | microblaze | mcore | mep | metag \
+ | maxq | mb | microblaze | microblazeel | mcore | mep | metag \
| mips | mipsbe | mipseb | mipsel | mipsle \
| mips16 \
| mips64 | mips64el \
@@ -278,27 +296,39 @@
| moxie \
| mt \
| msp430 \
+ | nds32 | nds32le | nds32be \
| nios | nios2 \
| ns16k | ns32k \
+ | open8 \
| or32 \
| pdp10 | pdp11 | pj | pjl \
- | powerpc | powerpc64 | powerpc64le | powerpcle | ppcbe \
+ | powerpc | powerpc64 | powerpc64le | powerpcle \
| pyramid \
+ | rl78 | rx \
| score \
| sh | sh[1234] | sh[24]a | sh[24]aeb | sh[23]e | sh[34]eb | sheb | shbe | shle | sh[1234]le | sh3ele \
| sh64 | sh64le \
| sparc | sparc64 | sparc64b | sparc64v | sparc86x | sparclet | sparclite \
| sparcv8 | sparcv9 | sparcv9b | sparcv9v \
- | spu | strongarm \
- | tahoe | thumb | tic4x | tic80 | tron \
- | v850 | v850e \
+ | spu \
+ | tahoe | tic4x | tic54x | tic55x | tic6x | tic80 | tron \
+ | ubicom32 \
+ | v850 | v850e | v850e1 | v850e2 | v850es | v850e2v3 \
| we32k \
- | x86 | xc16x | xscale | xscalee[bl] | xstormy16 | xtensa \
+ | x86 | xc16x | xstormy16 | xtensa \
| z8k | z80)
basic_machine=$basic_machine-unknown
;;
- m6811 | m68hc11 | m6812 | m68hc12)
- # Motorola 68HC11/12.
+ c54x)
+ basic_machine=tic54x-unknown
+ ;;
+ c55x)
+ basic_machine=tic55x-unknown
+ ;;
+ c6x)
+ basic_machine=tic6x-unknown
+ ;;
+ m6811 | m68hc11 | m6812 | m68hc12 | m68hcs12x | picochip)
basic_machine=$basic_machine-unknown
os=-none
;;
@@ -308,6 +338,21 @@
basic_machine=mt-unknown
;;
+ strongarm | thumb | xscale)
+ basic_machine=arm-unknown
+ ;;
+ xgate)
+ basic_machine=$basic_machine-unknown
+ os=-none
+ ;;
+ xscaleeb)
+ basic_machine=armeb-unknown
+ ;;
+
+ xscaleel)
+ basic_machine=armel-unknown
+ ;;
+
# We use `pc' rather than `unknown'
# because (1) that's what they normally are, and
# (2) the word "unknown" tends to confuse beginning users.
@@ -322,25 +367,30 @@
# Recognize the basic CPU types with company name.
580-* \
| a29k-* \
+ | aarch64-* | aarch64_be-* \
| alpha-* | alphaev[4-8]-* | alphaev56-* | alphaev6[78]-* \
| alpha64-* | alpha64ev[4-8]-* | alpha64ev56-* | alpha64ev6[78]-* \
| alphapca5[67]-* | alpha64pca5[67]-* | arc-* \
| arm-* | armbe-* | armle-* | armeb-* | armv*-* \
| avr-* | avr32-* \
+ | be32-* | be64-* \
| bfin-* | bs2000-* \
- | c[123]* | c30-* | [cjt]90-* | c4x-* | c54x-* | c55x-* | c6x-* \
+ | c[123]* | c30-* | [cjt]90-* | c4x-* \
| clipper-* | craynv-* | cydra-* \
| d10v-* | d30v-* | dlx-* \
| elxsi-* \
| f30[01]-* | f700-* | fido-* | fr30-* | frv-* | fx80-* \
| h8300-* | h8500-* \
| hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \
+ | hexagon-* \
| i*86-* | i860-* | i960-* | ia64-* \
| ip2k-* | iq2000-* \
+ | le32-* | le64-* \
| lm32-* \
| m32c-* | m32r-* | m32rle-* \
| m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \
| m88110-* | m88k-* | maxq-* | mcore-* | metag-* \
+ | microblaze-* | microblazeel-* \
| mips-* | mipsbe-* | mipseb-* | mipsel-* | mipsle-* \
| mips16-* \
| mips64-* | mips64el-* \
@@ -362,24 +412,29 @@
| mmix-* \
| mt-* \
| msp430-* \
+ | nds32-* | nds32le-* | nds32be-* \
| nios-* | nios2-* \
| none-* | np1-* | ns16k-* | ns32k-* \
+ | open8-* \
| orion-* \
| pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \
- | powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* | ppcbe-* \
+ | powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* \
| pyramid-* \
- | romp-* | rs6000-* \
+ | rl78-* | romp-* | rs6000-* | rx-* \
| sh-* | sh[1234]-* | sh[24]a-* | sh[24]aeb-* | sh[23]e-* | sh[34]eb-* | sheb-* | shbe-* \
| shle-* | sh[1234]le-* | sh3ele-* | sh64-* | sh64le-* \
| sparc-* | sparc64-* | sparc64b-* | sparc64v-* | sparc86x-* | sparclet-* \
| sparclite-* \
- | sparcv8-* | sparcv9-* | sparcv9b-* | sparcv9v-* | strongarm-* | sv1-* | sx?-* \
- | tahoe-* | thumb-* \
- | tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* | tile-* \
+ | sparcv8-* | sparcv9-* | sparcv9b-* | sparcv9v-* | sv1-* | sx?-* \
+ | tahoe-* \
+ | tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* \
+ | tile*-* \
| tron-* \
- | v850-* | v850e-* | vax-* \
+ | ubicom32-* \
+ | v850-* | v850e-* | v850e1-* | v850es-* | v850e2-* | v850e2v3-* \
+ | vax-* \
| we32k-* \
- | x86-* | x86_64-* | xc16x-* | xps100-* | xscale-* | xscalee[bl]-* \
+ | x86-* | x86_64-* | xc16x-* | xps100-* \
| xstormy16-* | xtensa*-* \
| ymp-* \
| z8k-* | z80-*)
@@ -404,7 +459,7 @@
basic_machine=a29k-amd
os=-udi
;;
- abacus)
+ abacus)
basic_machine=abacus-unknown
;;
adobe68k)
@@ -474,11 +529,20 @@
basic_machine=powerpc-ibm
os=-cnk
;;
+ c54x-*)
+ basic_machine=tic54x-`echo $basic_machine | sed 's/^[^-]*-//'`
+ ;;
+ c55x-*)
+ basic_machine=tic55x-`echo $basic_machine | sed 's/^[^-]*-//'`
+ ;;
+ c6x-*)
+ basic_machine=tic6x-`echo $basic_machine | sed 's/^[^-]*-//'`
+ ;;
c90)
basic_machine=c90-cray
os=-unicos
;;
- cegcc)
+ cegcc)
basic_machine=arm-unknown
os=-cegcc
;;
@@ -510,7 +574,7 @@
basic_machine=craynv-cray
os=-unicosmp
;;
- cr16)
+ cr16 | cr16-*)
basic_machine=cr16-unknown
os=-elf
;;
@@ -668,7 +732,6 @@
i370-ibm* | ibm*)
basic_machine=i370-ibm
;;
-# I'm not sure what "Sysv32" means. Should this be sysv3.2?
i*86v32)
basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
os=-sysv32
@@ -726,6 +789,13 @@
basic_machine=ns32k-utek
os=-sysv
;;
+ microblaze*)
+ basic_machine=microblaze-xilinx
+ ;;
+ mingw64)
+ basic_machine=x86_64-pc
+ os=-mingw64
+ ;;
mingw32)
basic_machine=i386-pc
os=-mingw32
@@ -762,10 +832,18 @@
ms1-*)
basic_machine=`echo $basic_machine | sed -e 's/ms1-/mt-/'`
;;
+ msys)
+ basic_machine=i386-pc
+ os=-msys
+ ;;
mvs)
basic_machine=i370-ibm
os=-mvs
;;
+ nacl)
+ basic_machine=le32-unknown
+ os=-nacl
+ ;;
ncr3000)
basic_machine=i486-ncr
os=-sysv4
@@ -830,6 +908,12 @@
np1)
basic_machine=np1-gould
;;
+ neo-tandem)
+ basic_machine=neo-tandem
+ ;;
+ nse-tandem)
+ basic_machine=nse-tandem
+ ;;
nsr-tandem)
basic_machine=nsr-tandem
;;
@@ -912,9 +996,10 @@
;;
power) basic_machine=power-ibm
;;
- ppc) basic_machine=powerpc-unknown
+ ppc | ppcbe) basic_machine=powerpc-unknown
;;
- ppc-*) basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'`
+ ppc-* | ppcbe-*)
+ basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'`
;;
ppcle | powerpclittle | ppc-le | powerpc-little)
basic_machine=powerpcle-unknown
@@ -1008,6 +1093,9 @@
basic_machine=i860-stratus
os=-sysv4
;;
+ strongarm-* | thumb-*)
+ basic_machine=arm-`echo $basic_machine | sed 's/^[^-]*-//'`
+ ;;
sun2)
basic_machine=m68000-sun
;;
@@ -1064,20 +1152,8 @@
basic_machine=t90-cray
os=-unicos
;;
- tic54x | c54x*)
- basic_machine=tic54x-unknown
- os=-coff
- ;;
- tic55x | c55x*)
- basic_machine=tic55x-unknown
- os=-coff
- ;;
- tic6x | c6x*)
- basic_machine=tic6x-unknown
- os=-coff
- ;;
tile*)
- basic_machine=tile-unknown
+ basic_machine=$basic_machine-unknown
os=-linux-gnu
;;
tx39)
@@ -1147,6 +1223,9 @@
xps | xps100)
basic_machine=xps100-honeywell
;;
+ xscale-* | xscalee[bl]-*)
+ basic_machine=`echo $basic_machine | sed 's/^xscale/arm/'`
+ ;;
ymp)
basic_machine=ymp-cray
os=-unicos
@@ -1244,9 +1323,12 @@
if [ x"$os" != x"" ]
then
case $os in
- # First match some system type aliases
- # that might get confused with valid system types.
+ # First match some system type aliases
+ # that might get confused with valid system types.
# -solaris* is a basic system type, with this one exception.
+ -auroraux)
+ os=-auroraux
+ ;;
-solaris1 | -solaris1.*)
os=`echo $os | sed -e 's|solaris1|sunos4|'`
;;
@@ -1268,21 +1350,22 @@
# -sysv* is not here because it comes later, after sysvr4.
-gnu* | -bsd* | -mach* | -minix* | -genix* | -ultrix* | -irix* \
| -*vms* | -sco* | -esix* | -isc* | -aix* | -cnk* | -sunos | -sunos[34]*\
- | -hpux* | -unos* | -osf* | -luna* | -dgux* | -solaris* | -sym* \
- | -kopensolaris* \
+ | -hpux* | -unos* | -osf* | -luna* | -dgux* | -auroraux* | -solaris* \
+ | -sym* | -kopensolaris* \
| -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \
| -aos* | -aros* \
| -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \
| -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \
| -hiux* | -386bsd* | -knetbsd* | -mirbsd* | -netbsd* \
- | -openbsd* | -solidbsd* \
+ | -bitrig* | -openbsd* | -solidbsd* \
| -ekkobsd* | -kfreebsd* | -freebsd* | -riscix* | -lynxos* \
| -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \
| -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \
| -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \
| -chorusos* | -chorusrdb* | -cegcc* \
- | -cygwin* | -pe* | -psos* | -moss* | -proelf* | -rtems* \
- | -mingw32* | -linux-gnu* | -linux-newlib* | -linux-uclibc* \
+ | -cygwin* | -msys* | -pe* | -psos* | -moss* | -proelf* | -rtems* \
+ | -mingw32* | -mingw64* | -linux-gnu* | -linux-android* \
+ | -linux-newlib* | -linux-musl* | -linux-uclibc* \
| -uxpv* | -beos* | -mpeix* | -udk* \
| -interix* | -uwin* | -mks* | -rhapsody* | -darwin* | -opened* \
| -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \
@@ -1290,7 +1373,7 @@
| -os2* | -vos* | -palmos* | -uclinux* | -nucleus* \
| -morphos* | -superux* | -rtmk* | -rtmk-nova* | -windiss* \
| -powermax* | -dnix* | -nx6 | -nx7 | -sei* | -dragonfly* \
- | -skyos* | -haiku* | -rdos* | -toppers* | -drops*)
+ | -skyos* | -haiku* | -rdos* | -toppers* | -drops* | -es*)
# Remember, each alternative MUST END IN *, to match a version number.
;;
-qnx*)
@@ -1329,7 +1412,7 @@
-opened*)
os=-openedition
;;
- -os400*)
+ -os400*)
os=-os400
;;
-wince*)
@@ -1378,7 +1461,7 @@
-sinix*)
os=-sysv4
;;
- -tpf*)
+ -tpf*)
os=-tpf
;;
-triton*)
@@ -1423,6 +1506,8 @@
-dicos*)
os=-dicos
;;
+ -nacl*)
+ ;;
-none)
;;
*)
@@ -1445,10 +1530,10 @@
# system, and we'll never get to this point.
case $basic_machine in
- score-*)
+ score-*)
os=-elf
;;
- spu-*)
+ spu-*)
os=-elf
;;
*-acorn)
@@ -1460,8 +1545,20 @@
arm*-semi)
os=-aout
;;
- c4x-* | tic4x-*)
- os=-coff
+ c4x-* | tic4x-*)
+ os=-coff
+ ;;
+ hexagon-*)
+ os=-elf
+ ;;
+ tic54x-*)
+ os=-coff
+ ;;
+ tic55x-*)
+ os=-coff
+ ;;
+ tic6x-*)
+ os=-coff
;;
# This must come before the *-dec entry.
pdp10-*)
@@ -1481,14 +1578,11 @@
;;
m68000-sun)
os=-sunos3
- # This also exists in the configure program, but was not the
- # default.
- # os=-sunos4
;;
m68*-cisco)
os=-aout
;;
- mep-*)
+ mep-*)
os=-elf
;;
mips*-cisco)
@@ -1515,7 +1609,7 @@
*-ibm)
os=-aix
;;
- *-knuth)
+ *-knuth)
os=-mmixware
;;
*-wec)
|
[-]
[+]
|
Changed |
asterisk-1.8.19.0.tar.xz/configs/chan_dahdi.conf.sample
^
|
@@ -932,6 +932,33 @@
;
;faxbuffers=>6,full
;
+; Configure the default number of DAHDI buffers and the transmit policy to use.
+; This can be used to eliminate data drops when scheduling jitter prevents
+; Asterisk from writing to a DAHDI channel regularly. Most users will probably
+; want "faxbuffers" instead of "buffers".
+;
+; The policies are:
+; immediate - DAHDI will immediately start sending the data to the hardware after
+; Asterisk writes to the channel. This is the default mode. It
+; introduces the least amount of latency but has an increased chance for
+; hardware under runs if Asterisk is not able to keep the DAHDI write
+; queue from going empty.
+; half - DAHDI will wait until half of the configured buffers are full before
+; starting to transmit. This adds latency to the audio but reduces
+; the chance of under runs. Essentially, this is like an in-kernel jitter
+; buffer.
+; full - DAHDI will not start transmitting until all buffers are full.
+; Introduces the most amount of latency and is susceptible to over
+; runs from the Asterisk process.
+;
+; The receive policy is never changed. DAHDI will always pass up audio as soon
+; as possible.
+;
+; The default number of buffers is 4 (from jitterbuffers) and the default policy
+; is immediate.
+;
+;buffers=4,immediate
+;
; This option specifies a preference for which music on hold class this channel
; should listen to when put on hold if the music class has not been set on the
; channel with Set(CHANNEL(musicclass)=whatever) in the dialplan, and the peer
|
[-]
[+]
|
Changed |
asterisk-1.8.19.0.tar.xz/configure
^
|
@@ -1,5 +1,5 @@
#! /bin/sh
-# From configure.ac Revision: 361955 .
+# From configure.ac Revision: 371012 .
# Guess values for system-dependent variables and create Makefiles.
# Generated by GNU Autoconf 2.63 for asterisk trunk.
#
@@ -1067,6 +1067,7 @@
PBX_BISON
DOWNLOAD
FETCH
+GIT
XMLSTARLET
XMLLINT
KPATHSEA
@@ -8247,6 +8248,47 @@
else
{ $as_echo "$as_me:$LINENO: result: no" >&5
$as_echo "no" >&6; }
+fi
+
+
+# Extract the first word of "git", so it can be a program name with args.
+set dummy git; ac_word=$2
+{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_path_GIT+set}" = set; then
+ $as_echo_n "(cached) " >&6
+else
+ case $GIT in
+ [\\/]* | ?:[\\/]*)
+ ac_cv_path_GIT="$GIT" # Let the user override the test with a path.
+ ;;
+ *)
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+ ac_cv_path_GIT="$as_dir/$ac_word$ac_exec_ext"
+ $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+done
+IFS=$as_save_IFS
+
+ test -z "$ac_cv_path_GIT" && ac_cv_path_GIT=":"
+ ;;
+esac
+fi
+GIT=$ac_cv_path_GIT
+if test -n "$GIT"; then
+ { $as_echo "$as_me:$LINENO: result: $GIT" >&5
+$as_echo "$GIT" >&6; }
+else
+ { $as_echo "$as_me:$LINENO: result: no" >&5
+$as_echo "no" >&6; }
fi
|
[-]
[+]
|
Changed |
asterisk-1.8.19.0.tar.xz/configure.ac
^
|
@@ -20,7 +20,7 @@
AC_CONFIG_AUX_DIR(`pwd`)
AC_COPYRIGHT("Asterisk")
-AC_REVISION($Revision: 371012 $)
+AC_REVISION($Revision: 375189 $)
# preserve any CFLAGS or LDFLAGS that may be set
# NOTE: This must be done before calling any macros that end up
@@ -255,6 +255,7 @@
AC_PATH_PROG([KPATHSEA], [kpsewhich], :)
AC_PATH_PROG([XMLLINT], [xmllint], :)
AC_PATH_PROG([XMLSTARLET], [xmlstarlet], :)
+AC_PATH_PROG([GIT], [git], :)
if test "${WGET}" != ":" ; then
DOWNLOAD=${WGET}
else if test "${CURL}" != ":" ; then
|
[-]
[+]
|
Changed |
asterisk-1.8.19.0.tar.xz/contrib/scripts/ast_tls_cert
^
|
@@ -30,20 +30,45 @@
}
create_ca () {
- echo "Creating ${CAKEY}"
+ echo "Creating CA key ${CAKEY}"
openssl genrsa -des3 -out ${CAKEY} 4096 > /dev/null
- echo "Creating ${CACERT}"
+ if [ $? -ne 0 ];
+ then
+ echo "Failed"
+ exit 1
+ fi
+ echo "Creating CA certificate ${CACERT}"
openssl req -new -config ${CACFG} -x509 -days 365 -key ${CAKEY} -out ${CACERT} > /dev/null
+ if [ $? -ne 0 ];
+ then
+ echo "Failed"
+ exit 1
+ fi
}
create_cert () {
local base=${OUTPUT_DIR}/${OUTPUT_BASE}
- echo "Creating ${base}.key"
+ echo "Creating certificate ${base}.key"
openssl genrsa -out ${base}.key 1024 > /dev/null
- echo "Creating signing request"
+ if [ $? -ne 0 ];
+ then
+ echo "Failed"
+ exit 1
+ fi
+ echo "Creating signing request ${base}.csr"
openssl req -batch -new -config ${CONFIG_FILE} -key ${base}.key -out ${base}.csr > /dev/null
- echo "Creating ${base}.crt"
+ if [ $? -ne 0 ];
+ then
+ echo "Failed"
+ exit 1
+ fi
+ echo "Creating certificate ${base}.crt"
openssl x509 -req -days 365 -in ${base}.csr -CA ${CACERT} -CAkey ${CAKEY} -set_serial 01 -out ${base}.crt > /dev/null
+ if [ $? -ne 0 ];
+ then
+ echo "Failed"
+ exit 1
+ fi
echo "Combining key and crt into ${base}.pem"
cat ${base}.key > ${base}.pem
cat ${base}.crt >> ${base}.pem
@@ -181,6 +206,12 @@
CACFG=${OUTPUT_DIR}/ca.cfg
create_config ca "${CACFG}" "${DEFAULT_CA_CN}" "${DEFAULT_CA_ORG}"
create_ca
+else
+ if [ -z ${CAKEY} ]
+ then
+ echo "-k must be specified if -c is"
+ exit 1
+ fi
fi
create_cert
|
[-]
[+]
|
Changed |
asterisk-1.8.19.0.tar.xz/contrib/scripts/autosupport
^
|
@@ -33,7 +33,8 @@
# If a prefix is specified on command-line, add it.
if (set -u; : $1) 2> /dev/null
then
- if [ $1 == "-h" ] || [ $1 == "--help" ]; then
+ case "$1" in
+ -h | --help)
echo
echo "Digium autosupport script"
echo "Copyright (C) 2005-2010, Digium, Inc."
@@ -53,12 +54,15 @@
echo " XXXXXXXX_${TARBALL_OUTPUT_FILE}"
echo
exit
- elif [ $1 == "-n" ] || [ $1 == "--non-interactive" ]; then
+ ;;
+ -n | --non-interactive)
FILE_PREFIX=
NONINTERACTIVE=1
- else
+ ;;
+ *)
FILE_PREFIX="${FILE_PREFIX}${1}_";
- fi
+ ;;
+ esac
fi
MYUID=$(id -u);
|
[-]
[+]
|
Changed |
asterisk-1.8.19.0.tar.xz/include/asterisk/doxyref.h
^
|
@@ -68,7 +68,7 @@
* \arg \b Main: Asterisk Developer's website http://www.asterisk.org/developers/
* \arg \b Bugs: The Issue Tracker https://issues.asterisk.org
* \arg \b Lists: List Server http://lists.digium.com
- * \arg \b Wiki: The Asterisk Wiki http://www.voip-info.org
+ * \arg \b Wiki: The Asterisk Wiki http://wiki.asterisk..org
* \arg \b Docs: The Asterisk Documentation Project http://www.asteriskdocs.org
* \arg \b Digium: The Asterisk Company http://www.digium.com
*/
@@ -93,7 +93,21 @@
* \arg \ref AstDataRetrieval
*
* \subsection model_txt Generic Model
- * \verbinclude model.txt
+ * Description of call model:
+ * Incoming Call:
+ * Channel backend waits for a RING or equivalent on some sort of
+ * interface. Typically this is done in its own thread. When a RING is
+ * detected, the backend should create a channel structure and then call
+ * ast_pbx_start() on that channel, which will create a thread to monitor
+ * that interface. At this point, the PBX and/or applications it launches
+ * will manage the interface, and it need not be monitored by the
+ * aforementioned thread. When the applications are finished, the requisite
+ * hangup function will be called, at which the channel can be considered to
+ * be no longer valid, and the thread that controls it will imminently be
+ * terminated.
+ *
+ *
+ * \todo Link to wiki content
* \subsection channel_txt Channels
* \arg See \ref Def_Channel
*/
@@ -135,19 +149,25 @@
/*!
* \page AstDebug Debugging
* \section debug Debugging
- * \verbinclude backtrace.txt
+ * Please see the documentation on the wiki at
+ * https://wiki.asterisk.org/wiki/display/AST/Getting+a+Backtrace
+ * for more information
*/
/*!
* \page AstSpeech The Generic Speech Recognition API
* \section debug The Generic Speech Recognition API
- * \verbinclude speechrec.txt
+ * Please see the documentation on the wiki at
+ * https://wiki.asterisk.org/wiki/display/AST/Speech+Recognition+API
+ * for more information
*/
/*!
* \page DataStores Channel Data Stores
* \section debug Channel Data Stores
- * \verbinclude datastores.txt
+ * Please see the documentation on the wiki at
+ * https://wiki.asterisk.org/wiki/display/AST/Asterisk+Channel+Data+Stores
+ * for more information
*/
/*!
@@ -155,7 +175,9 @@
* \section ami AMI - The manager Interface
* \arg \link Config_ami Configuration file \endlink
* \arg \ref manager.c
- * \verbinclude manager.txt
+ * Please see the documentation on the wiki at
+ * https://wiki.asterisk.org/wiki/display/AST/Asterisk+Manager+Interface+%28AMI%29
+ * for more information
*/
/*!
@@ -163,8 +185,7 @@
* \section realtime ARA - a generic API to storage and retrieval
* Implemented in \ref config.c
* Implemented in \ref pbx_realtime.c
- * \verbinclude realtime.txt
- * \verbinclude extconfig.txt
+ * https://wiki.asterisk.org/wiki/display/AST/Realtime+Database+Configuration
*/
/*!
@@ -182,7 +203,7 @@
* \par References
* \arg DUNDi is documented at http://www.dundi.com
* \arg Implemented in \ref pbx_dundi.c and \ref dundi-parser.c
- * \arg Configuration in \link Config_dun dundi.conf \endlink
+ * \arg Configuration in \ref dundi.conf
*/
/*!
@@ -193,7 +214,9 @@
* \arg \ref cdr_drivers
* \arg \ref Config_cdr CDR configuration files
*
- * \verbinclude cdrdriver.txt
+ * Please see the documentation on the wiki at
+ * https://wiki.asterisk.org/wiki/display/AST/CDR+Storage+Backends
+ * for more information
*/
/*!
@@ -209,7 +232,9 @@
/*!
* \page AstVideo Video support in Asterisk
* \section sectAstVideo Video support in Asterisk
- * \verbinclude video.txt
+ * Please see the documentation on the wiki at
+ * https://wiki.asterisk.org/wiki/display/AST/Video+Telephony
+ * for more information
*/
/*!
@@ -224,7 +249,9 @@
* - \ref pbx_retrieve_variable()
* - \ref AstChanVar
*
- * \verbinclude channelvariables.tex
+ * Please see the documentation on the wiki at
+ * https://wiki.asterisk.org/wiki/display/AST/Channel+Variables
+ * for more information
*/
/*!
@@ -281,7 +308,9 @@
* \arg \ref enum.c
* \arg \ref func_enum.c
*
- * \verbinclude enum.txt
+ * Please see the documentation on the wiki at
+ * https://wiki.asterisk.org/wiki/display/AST/The+ENUMLOOKUP+Dialplan+Function
+ * for more information
*/
/*!
@@ -372,12 +401,16 @@
* \page Config_iax IAX2 configuration
* IAX2 is implemented in \ref chan_iax2.c
* \arg \link Config_iax iax.conf Configuration file example \endlink
- * \section iaxreadme IAX readme file
- * \verbinclude iax.txt
+ * \section iaxreadme IAX2
+ * Please see the documentation on the wiki at
+ * https://wiki.asterisk.org/wiki/display/AST/Inter-Asterisk+eXchange+protocol%2C+version+2+%28IAX2%29
+ * for more information
* \section Config_iax IAX Configuration example
* \verbinclude iax.conf.sample
* \section iaxjitter IAX Jitterbuffer information
- * \verbinclude jitterbuffer.txt
+ * Please see the documentation on the wiki at
+ * https://wiki.asterisk.org/wiki/display/AST/IAX2+Jitterbuffer
+ * for more information
*/
/*!
@@ -409,7 +442,9 @@
* \page README_misdn MISDN documentation
* \arg See \ref Config_misdn
* \section mISDN configuration
- * \verbinclude misdn.txt
+ * Please see the documentation on the wiki at
+ * https://wiki.asterisk.org/wiki/display/AST/mISDN
+ * for more information
*/
/*!
@@ -728,7 +763,7 @@
* \arg Configuration file:
* \verbinclude res_config_sqlite.conf
* \arg SQL tables:
- * \verbinclude res_config_sqlite.txt
+ * https://wiki.asterisk.org/wiki/display/AST/SQLite+Tables
* \arg See also:
* http://www.sqlite.org
*/
|
[-]
[+]
|
Changed |
asterisk-1.8.19.0.tar.xz/include/asterisk/strings.h
^
|
@@ -778,6 +778,12 @@
* ...
* }
* \endcode
+ *
+ * \note Care should be taken when using this function. The function can
+ * result in reallocating the ast_str. If a pointer to the ast_str is passed
+ * by value to a function that calls ast_str_set_va(), then the original ast_str
+ * pointer may be invalidated due to a reallocation.
+ *
*/
AST_INLINE_API(int __attribute__((format(printf, 3, 0))) ast_str_set_va(struct ast_str **buf, ssize_t max_len, const char *fmt, va_list ap),
{
@@ -789,6 +795,12 @@
* \brief Append to a dynamic string using a va_list
*
* Same as ast_str_set_va(), but append to the current content.
+ *
+ * \note Care should be taken when using this function. The function can
+ * result in reallocating the ast_str. If a pointer to the ast_str is passed
+ * by value to a function that calls ast_str_append_va(), then the original ast_str
+ * pointer may be invalidated due to a reallocation.
+ *
*/
AST_INLINE_API(int __attribute__((format(printf, 3, 0))) ast_str_append_va(struct ast_str **buf, ssize_t max_len, const char *fmt, va_list ap),
{
@@ -827,6 +839,11 @@
/*!
* \brief Set a dynamic string using variable arguments
*
+ * \note Care should be taken when using this function. The function can
+ * result in reallocating the ast_str. If a pointer to the ast_str is passed
+ * by value to a function that calls ast_str_set(), then the original ast_str
+ * pointer may be invalidated due to a reallocation.
+ *
* \param buf This is the address of a pointer to a struct ast_str which should
* have been retrieved using ast_str_thread_get. It will need to
* be updated in the case that the buffer has to be reallocated to
@@ -859,6 +876,11 @@
/*!
* \brief Append to a thread local dynamic string
*
+ * \note Care should be taken when using this function. The function can
+ * result in reallocating the ast_str. If a pointer to the ast_str is passed
+ * by value to a function that calls ast_str_append(), then the original ast_str
+ * pointer may be invalidated due to a reallocation.
+ *
* The arguments, return values, and usage of this function are the same as
* ast_str_set(), but the new data is appended to the current value.
*/
|
[-]
[+]
|
Changed |
asterisk-1.8.19.0.tar.xz/include/asterisk/tcptls.h
^
|
@@ -149,6 +149,12 @@
struct ast_tcptls_session_args *parent;
/*! XXX Why do we still use this lock when this struct is allocated as an ao2 object which has its own lock? */
ast_mutex_t lock;
+ /* Sometimes, when an entity reads TCP data, multiple
+ * logical messages might be read at the same time. In such
+ * a circumstance, there needs to be a place to stash the
+ * extra data.
+ */
+ struct ast_str *overflow_buf;
};
#if defined(HAVE_FUNOPEN)
|
[-]
[+]
|
Changed |
asterisk-1.8.19.0.tar.xz/include/asterisk/timing.h
^
|
@@ -74,7 +74,7 @@
int (*timer_open)(void);
void (*timer_close)(int handle);
int (*timer_set_rate)(int handle, unsigned int rate);
- void (*timer_ack)(int handle, unsigned int quantity);
+ int (*timer_ack)(int handle, unsigned int quantity);
int (*timer_enable_continuous)(int handle);
int (*timer_disable_continuous)(int handle);
enum ast_timer_event (*timer_get_event)(int handle);
@@ -163,10 +163,11 @@
* \note This function should only be called if timer_get_event()
* returned AST_TIMING_EVENT_EXPIRED.
*
- * \return nothing
- * \since 1.6.1
+ * \retval -1 failure, with errno set
+ * \retval 0 success
+ * \since 10.5.2
*/
-void ast_timer_ack(const struct ast_timer *handle, unsigned int quantity);
+int ast_timer_ack(const struct ast_timer *handle, unsigned int quantity);
/*!
* \brief Enable continuous mode
|
[-]
[+]
|
Changed |
asterisk-1.8.19.0.tar.xz/main/app.c
^
|
@@ -29,7 +29,7 @@
#include "asterisk.h"
-ASTERISK_FILE_VERSION(__FILE__, "$Revision: 370642 $")
+ASTERISK_FILE_VERSION(__FILE__, "$Revision: 375299 $")
#ifdef HAVE_SYS_STAT_H
#include <sys/stat.h>
@@ -1179,6 +1179,7 @@
if (!ast_strlen_zero(category) && regcomp(®exbuf_category, category, REG_EXTENDED | REG_NOSUB)) {
ast_log(LOG_ERROR, "Regex compile failed on: %s\n", category);
+ regfree(®exbuf_group);
return 0;
}
|
[-]
[+]
|
Changed |
asterisk-1.8.19.0.tar.xz/main/ccss.c
^
|
@@ -27,7 +27,7 @@
#include "asterisk.h"
-ASTERISK_FILE_VERSION(__FILE__, "$Revision: 374316 $")
+ASTERISK_FILE_VERSION(__FILE__, "$Revision: 375658 $")
#include "asterisk/astobj2.h"
#include "asterisk/strings.h"
@@ -1716,7 +1716,7 @@
* more information regarding the actual structure of the tree, see
* the documentation provided in include/asterisk/ccss.h
*/
-static const const struct ast_datastore_info dialed_cc_interfaces_info = {
+static const struct ast_datastore_info dialed_cc_interfaces_info = {
.type = "Dial CC Interfaces",
.duplicate = dialed_cc_interfaces_duplicate,
.destroy = dialed_cc_interfaces_destroy,
@@ -3289,7 +3289,7 @@
* \param dialstring A new dialstring to add
* \retval void
*/
-static void cc_unique_append(struct ast_str *str, const char *dialstring)
+static void cc_unique_append(struct ast_str **str, const char *dialstring)
{
char dialstring_search[AST_CHANNEL_NAME];
@@ -3298,10 +3298,10 @@
return;
}
snprintf(dialstring_search, sizeof(dialstring_search), "%s%c", dialstring, '&');
- if (strstr(ast_str_buffer(str), dialstring_search)) {
+ if (strstr(ast_str_buffer(*str), dialstring_search)) {
return;
}
- ast_str_append(&str, 0, "%s", dialstring_search);
+ ast_str_append(str, 0, "%s", dialstring_search);
}
/*!
@@ -3319,7 +3319,7 @@
* \param str Where we will store CC_INTERFACES
* \retval void
*/
-static void build_cc_interfaces_chanvar(struct ast_cc_monitor *starting_point, struct ast_str *str)
+static void build_cc_interfaces_chanvar(struct ast_cc_monitor *starting_point, struct ast_str **str)
{
struct extension_monitor_pvt *extension_pvt;
struct extension_child_dialstring *child_dialstring;
@@ -3328,7 +3328,7 @@
size_t length;
/* Init to an empty string. */
- ast_str_truncate(str, 0);
+ ast_str_truncate(*str, 0);
/* First we need to take all of the is_valid child_dialstrings from
* the extension monitor we found and add them to the CC_INTERFACES
@@ -3351,9 +3351,9 @@
/* str will have an extra '&' tacked onto the end of it, so we need
* to get rid of that.
*/
- length = ast_str_strlen(str);
+ length = ast_str_strlen(*str);
if (length) {
- ast_str_truncate(str, length - 1);
+ ast_str_truncate(*str, length - 1);
}
if (length <= 1) {
/* Nothing to recall? This should not happen. */
@@ -3388,7 +3388,7 @@
AST_LIST_LOCK(interface_tree);
monitor = AST_LIST_FIRST(interface_tree);
- build_cc_interfaces_chanvar(monitor, str);
+ build_cc_interfaces_chanvar(monitor, &str);
AST_LIST_UNLOCK(interface_tree);
pbx_builtin_setvar_helper(chan, "CC_INTERFACES", ast_str_buffer(str));
@@ -3440,7 +3440,7 @@
return -1;
}
- build_cc_interfaces_chanvar(monitor_iter, str);
+ build_cc_interfaces_chanvar(monitor_iter, &str);
AST_LIST_UNLOCK(interface_tree);
pbx_builtin_setvar_helper(chan, "CC_INTERFACES", ast_str_buffer(str));
|
[-]
[+]
|
Changed |
asterisk-1.8.19.0.tar.xz/main/cdr.c
^
|
@@ -37,7 +37,7 @@
#include "asterisk.h"
-ASTERISK_FILE_VERSION(__FILE__, "$Revision: 369366 $")
+ASTERISK_FILE_VERSION(__FILE__, "$Revision: 375727 $")
#include <signal.h>
@@ -295,9 +295,9 @@
cdr_get_tv(cdr->end, raw ? NULL : fmt, workspace, workspacelen);
else if (!strcasecmp(name, "duration")) {
snprintf(workspace, workspacelen, "%ld", cdr->end.tv_sec != 0 ? cdr->duration : (long)ast_tvdiff_ms(ast_tvnow(), cdr->start) / 1000);
- } else if (!strcasecmp(name, "billsec"))
- snprintf(workspace, workspacelen, "%ld", cdr->billsec || cdr->answer.tv_sec == 0 ? cdr->billsec : (long)ast_tvdiff_ms(ast_tvnow(), cdr->answer) / 1000);
- else if (!strcasecmp(name, "disposition")) {
+ } else if (!strcasecmp(name, "billsec")) {
+ snprintf(workspace, workspacelen, "%ld", (cdr->billsec || !ast_tvzero(cdr->end) || ast_tvzero(cdr->answer)) ? cdr->billsec : (long)ast_tvdiff_ms(ast_tvnow(), cdr->answer) / 1000);
+ } else if (!strcasecmp(name, "disposition")) {
if (raw) {
snprintf(workspace, workspacelen, "%ld", cdr->disposition);
} else {
@@ -1364,11 +1364,13 @@
newtail->cdr = cdr;
batch->tail = newtail;
curr = batch->size++;
- ast_mutex_unlock(&cdr_batch_lock);
/* if we have enough stuff to post, then do it */
- if (curr >= (batchsize - 1))
+ if (curr >= (batchsize - 1)) {
submit_unscheduled_batch();
+ }
+
+ ast_mutex_unlock(&cdr_batch_lock);
}
static void *do_cdr(void *data)
|
[-]
[+]
|
Changed |
asterisk-1.8.19.0.tar.xz/main/channel.c
^
|
@@ -29,7 +29,7 @@
#include "asterisk.h"
-ASTERISK_FILE_VERSION(__FILE__, "$Revision: 374177 $")
+ASTERISK_FILE_VERSION(__FILE__, "$Revision: 375893 $")
#include "asterisk/_private.h"
@@ -684,7 +684,7 @@
}
/*! \brief Datastore to put the linked list of ast_chan_trace and trace status */
-static const const struct ast_datastore_info ast_chan_trace_datastore_info = {
+static const struct ast_datastore_info ast_chan_trace_datastore_info = {
.type = "ChanTrace",
.destroy = ast_chan_trace_destroy_cb
};
@@ -2469,6 +2469,7 @@
close(fd);
if (chan->timer) {
ast_timer_close(chan->timer);
+ chan->timer = NULL;
}
#ifdef HAVE_EPOLL
for (i = 0; i < AST_MAX_FDS; i++) {
@@ -2549,7 +2550,7 @@
ast_string_field_free_memory(chan);
}
-struct ast_datastore *ast_channel_datastore_alloc(const const struct ast_datastore_info *info, const char *uid)
+struct ast_datastore *ast_channel_datastore_alloc(const struct ast_datastore_info *info, const char *uid)
{
return ast_datastore_alloc(info, uid);
}
@@ -2590,7 +2591,7 @@
return AST_LIST_REMOVE(&chan->datastores, datastore, entry) ? 0 : -1;
}
-struct ast_datastore *ast_channel_datastore_find(struct ast_channel *chan, const const struct ast_datastore_info *info, const char *uid)
+struct ast_datastore *ast_channel_datastore_find(struct ast_channel *chan, const struct ast_datastore_info *info, const char *uid)
{
struct ast_datastore *datastore = NULL;
@@ -3854,7 +3855,10 @@
switch (res) {
case AST_TIMING_EVENT_EXPIRED:
- ast_timer_ack(chan->timer, 1);
+ if (ast_timer_ack(chan->timer, 1) < 0) {
+ ast_log(LOG_ERROR, "Failed to acknoweldge timer in ast_read\n");
+ goto done;
+ }
if (chan->timingfunc) {
/* save a copy of func/data before unlocking the channel */
@@ -6097,7 +6101,7 @@
ast_free(ds);
}
-static const const struct ast_datastore_info xfer_ds_info = {
+static const struct ast_datastore_info xfer_ds_info = {
.type = "xfer_colp",
.destroy = xfer_ds_destroy,
};
@@ -9552,7 +9556,7 @@
ast_cc_config_params_destroy(cc_params);
}
-static const const struct ast_datastore_info cc_channel_datastore_info = {
+static const struct ast_datastore_info cc_channel_datastore_info = {
.type = "Call Completion",
.duplicate = channel_cc_params_copy,
.destroy = channel_cc_params_destroy,
|
[-]
[+]
|
Changed |
asterisk-1.8.19.0.tar.xz/main/features.c
^
|
@@ -29,7 +29,7 @@
#include "asterisk.h"
-ASTERISK_FILE_VERSION(__FILE__, "$Revision: 374177 $")
+ASTERISK_FILE_VERSION(__FILE__, "$Revision: 375388 $")
#include "asterisk/_private.h"
@@ -1630,10 +1630,15 @@
}
if (peer == chan) { /* pu->notquiteyet = 1 */
/* Wake up parking thread if we're really done */
- pu->hold_method = AST_CONTROL_HOLD;
- ast_indicate_data(chan, AST_CONTROL_HOLD,
- S_OR(pu->parkinglot->cfg.mohclass, NULL),
- !ast_strlen_zero(pu->parkinglot->cfg.mohclass) ? strlen(pu->parkinglot->cfg.mohclass) + 1 : 0);
+ if (ast_test_flag(args, AST_PARK_OPT_RINGING)) {
+ pu->hold_method = AST_CONTROL_RINGING;
+ ast_indicate(chan, AST_CONTROL_RINGING);
+ } else {
+ pu->hold_method = AST_CONTROL_HOLD;
+ ast_indicate_data(chan, AST_CONTROL_HOLD,
+ S_OR(pu->parkinglot->cfg.mohclass, NULL),
+ !ast_strlen_zero(pu->parkinglot->cfg.mohclass) ? strlen(pu->parkinglot->cfg.mohclass) + 1 : 0);
+ }
pu->notquiteyet = 0;
pthread_kill(parking_thread, SIGURG);
}
|
[-]
[+]
|
Changed |
asterisk-1.8.19.0.tar.xz/main/loader.c
^
|
@@ -33,7 +33,7 @@
#include "asterisk.h"
-ASTERISK_FILE_VERSION(__FILE__, "$Revision: 373909 $")
+ASTERISK_FILE_VERSION(__FILE__, "$Revision: 375862 $")
#include "asterisk/_private.h"
#include "asterisk/paths.h" /* use ast_config_AST_MODULE_DIR */
@@ -206,13 +206,14 @@
}
}
-struct ast_module_user *__ast_module_user_add(struct ast_module *mod,
- struct ast_channel *chan)
+struct ast_module_user *__ast_module_user_add(struct ast_module *mod, struct ast_channel *chan)
{
- struct ast_module_user *u = ast_calloc(1, sizeof(*u));
+ struct ast_module_user *u;
- if (!u)
+ u = ast_calloc(1, sizeof(*u));
+ if (!u) {
return NULL;
+ }
u->chan = chan;
@@ -229,6 +230,9 @@
void __ast_module_user_remove(struct ast_module *mod, struct ast_module_user *u)
{
+ if (!u) {
+ return;
+ }
AST_LIST_LOCK(&mod->users);
AST_LIST_REMOVE(&mod->users, u, entry);
AST_LIST_UNLOCK(&mod->users);
|
[-]
[+]
|
Changed |
asterisk-1.8.19.0.tar.xz/main/manager.c
^
|
@@ -47,7 +47,7 @@
#include "asterisk.h"
-ASTERISK_FILE_VERSION(__FILE__, "$Revision: 374581 $")
+ASTERISK_FILE_VERSION(__FILE__, "$Revision: 375800 $")
#include "asterisk/_private.h"
#include "asterisk/paths.h" /* use various ast_config_AST_* */
@@ -5077,6 +5077,10 @@
time_t now = time(NULL);
struct ao2_iterator i;
+ if (!sessions) {
+ return;
+ }
+
i = ao2_iterator_init(sessions, 0);
while ((session = ao2_iterator_next(&i)) && n_max > 0) {
ao2_lock(session);
@@ -6616,6 +6620,23 @@
AST_RWLIST_UNLOCK(&channelvars);
}
+/*! \internal \brief Free a user record. Should already be removed from the list */
+static void manager_free_user(struct ast_manager_user *user)
+{
+ if (user->a1_hash) {
+ ast_free(user->a1_hash);
+ }
+ if (user->secret) {
+ ast_free(user->secret);
+ }
+ ao2_t_callback(user->whitefilters, OBJ_UNLINK | OBJ_NODATA | OBJ_MULTIPLE, NULL, NULL, "unlink all white filters");
+ ao2_t_callback(user->blackfilters, OBJ_UNLINK | OBJ_NODATA | OBJ_MULTIPLE, NULL, NULL, "unlink all black filters");
+ ao2_t_ref(user->whitefilters, -1, "decrement ref for white container, should be last one");
+ ao2_t_ref(user->blackfilters, -1, "decrement ref for black container, should be last one");
+ ast_free_ha(user->ha);
+ ast_free(user);
+}
+
/*! \internal \brief Clean up resources on Asterisk shutdown */
static void manager_shutdown(void)
{
@@ -6656,6 +6677,23 @@
ast_manager_unregister("ModuleCheck");
ast_manager_unregister("AOCMessage");
ast_manager_unregister("Filter");
+ ast_cli_unregister_multiple(cli_manager, ARRAY_LEN(cli_manager));
+ }
+
+ ast_tcptls_server_stop(&ami_desc);
+ ast_tcptls_server_stop(&amis_desc);
+
+ if (ami_tls_cfg.certfile) {
+ ast_free(ami_tls_cfg.certfile);
+ ami_tls_cfg.certfile = NULL;
+ }
+ if (ami_tls_cfg.pvtfile) {
+ ast_free(ami_tls_cfg.pvtfile);
+ ami_tls_cfg.pvtfile = NULL;
+ }
+ if (ami_tls_cfg.cipher) {
+ ast_free(ami_tls_cfg.cipher);
+ ami_tls_cfg.cipher = NULL;
}
if (sessions) {
@@ -6664,13 +6702,10 @@
}
while ((user = AST_LIST_REMOVE_HEAD(&users, list))) {
- ao2_ref(user->whitefilters, -1);
- ao2_ref(user->blackfilters, -1);
- ast_free(user);
+ manager_free_user(user);
}
}
-
static int __init_manager(int reload)
{
struct ast_config *ucfg = NULL, *cfg = NULL;
@@ -7047,19 +7082,7 @@
/* We do not need to keep this user so take them out of the list */
AST_RWLIST_REMOVE_CURRENT(list);
ast_debug(4, "Pruning user '%s'\n", user->username);
- /* Free their memory now */
- if (user->a1_hash) {
- ast_free(user->a1_hash);
- }
- if (user->secret) {
- ast_free(user->secret);
- }
- ao2_t_callback(user->whitefilters, OBJ_UNLINK | OBJ_NODATA | OBJ_MULTIPLE, NULL, NULL, "unlink all white filters");
- ao2_t_callback(user->blackfilters, OBJ_UNLINK | OBJ_NODATA | OBJ_MULTIPLE, NULL, NULL, "unlink all black filters");
- ao2_t_ref(user->whitefilters, -1, "decrement ref for white container, should be last one");
- ao2_t_ref(user->blackfilters, -1, "decrement ref for black container, should be last one");
- ast_free_ha(user->ha);
- ast_free(user);
+ manager_free_user(user);
}
AST_RWLIST_TRAVERSE_SAFE_END;
|
[-]
[+]
|
Changed |
asterisk-1.8.19.0.tar.xz/main/pbx.c
^
|
@@ -29,7 +29,7 @@
#include "asterisk.h"
-ASTERISK_FILE_VERSION(__FILE__, "$Revision: 374177 $")
+ASTERISK_FILE_VERSION(__FILE__, "$Revision: 374758 $")
#include "asterisk/_private.h"
#include "asterisk/paths.h" /* use ast_config_AST_SYSTEM_NAME */
@@ -5000,6 +5000,9 @@
int invalid = 0;
int timeout = 0;
+ /* No digits pressed yet */
+ dst_exten[pos] = '\0';
+
/* loop on priorities in this context/exten */
while (!(res = ast_spawn_extension(c, c->context, c->exten, c->priority,
S_COR(c->caller.id.number.valid, c->caller.id.number.str, NULL),
|
[-]
[+]
|
Changed |
asterisk-1.8.19.0.tar.xz/main/tcptls.c
^
|
@@ -31,7 +31,7 @@
#include "asterisk.h"
-ASTERISK_FILE_VERSION(__FILE__, "$Revision: 373061 $")
+ASTERISK_FILE_VERSION(__FILE__, "$Revision: 375146 $")
#ifdef HAVE_FCNTL_H
#include <fcntl.h>
@@ -141,6 +141,7 @@
static void session_instance_destructor(void *obj)
{
struct ast_tcptls_session_instance *i = obj;
+ ast_free(i->overflow_buf);
ast_mutex_destroy(&i->lock);
}
@@ -193,11 +194,21 @@
X509 *peer;
long res;
peer = SSL_get_peer_certificate(tcptls_session->ssl);
- if (!peer)
- ast_log(LOG_WARNING, "No peer SSL certificate\n");
+ if (!peer) {
+ ast_log(LOG_ERROR, "No peer SSL certificate to verify\n");
+ ast_tcptls_close_session_file(tcptls_session);
+ ao2_ref(tcptls_session, -1);
+ return NULL;
+ }
+
res = SSL_get_verify_result(tcptls_session->ssl);
- if (res != X509_V_OK)
+ if (res != X509_V_OK) {
ast_log(LOG_ERROR, "Certificate did not verify: %s\n", X509_verify_cert_error_string(res));
+ X509_free(peer);
+ ast_tcptls_close_session_file(tcptls_session);
+ ao2_ref(tcptls_session, -1);
+ return NULL;
+ }
if (!ast_test_flag(&tcptls_session->parent->tls_cfg->flags, AST_SSL_IGNORE_COMMON_NAME)) {
ASN1_STRING *str;
unsigned char *str2;
@@ -224,16 +235,13 @@
}
if (!found) {
ast_log(LOG_ERROR, "Certificate common name did not match (%s)\n", tcptls_session->parent->hostname);
- if (peer) {
- X509_free(peer);
- }
+ X509_free(peer);
ast_tcptls_close_session_file(tcptls_session);
ao2_ref(tcptls_session, -1);
return NULL;
}
}
- if (peer)
- X509_free(peer);
+ X509_free(peer);
}
}
if (!tcptls_session->f) /* no success opening descriptor stacking */
@@ -292,6 +300,7 @@
}
ast_mutex_init(&tcptls_session->lock);
+ tcptls_session->overflow_buf = ast_str_create(128);
flags = fcntl(fd, F_GETFL);
fcntl(fd, F_SETFL, flags & ~O_NONBLOCK);
@@ -493,6 +502,7 @@
goto error;
ast_mutex_init(&tcptls_session->lock);
+ tcptls_session->overflow_buf = ast_str_create(128);
tcptls_session->client = 1;
tcptls_session->fd = desc->accept_fd;
tcptls_session->parent = desc;
|
[-]
[+]
|
Changed |
asterisk-1.8.19.0.tar.xz/main/timing.c
^
|
@@ -31,7 +31,7 @@
#include "asterisk.h"
-ASTERISK_FILE_VERSION(__FILE__, "$Revision: 369001 $")
+ASTERISK_FILE_VERSION(__FILE__, "$Revision: 375893 $")
#include "asterisk/_private.h"
@@ -150,6 +150,7 @@
void ast_timer_close(struct ast_timer *handle)
{
handle->holder->iface->timer_close(handle->fd);
+ handle->fd = -1;
ast_module_unref(handle->holder->mod);
ast_free(handle);
}
@@ -168,9 +169,13 @@
return res;
}
-void ast_timer_ack(const struct ast_timer *handle, unsigned int quantity)
+int ast_timer_ack(const struct ast_timer *handle, unsigned int quantity)
{
- handle->holder->iface->timer_ack(handle->fd, quantity);
+ int res = -1;
+
+ res = handle->holder->iface->timer_ack(handle->fd, quantity);
+
+ return res;
}
int ast_timer_enable_continuous(const struct ast_timer *handle)
@@ -269,7 +274,11 @@
if (res == 1) {
count++;
- ast_timer_ack(timer, 1);
+ if (ast_timer_ack(timer, 1) < 0) {
+ ast_cli(a->fd, "Timer failed to acknowledge.\n");
+ ast_timer_close(timer);
+ return CLI_FAILURE;
+ }
} else if (!res) {
ast_cli(a->fd, "poll() timed out! This is bad.\n");
} else if (errno != EAGAIN && errno != EINTR) {
@@ -278,6 +287,7 @@
}
ast_timer_close(timer);
+ timer = NULL;
ast_cli(a->fd, "It has been %" PRIi64 " milliseconds, and we got %d timer ticks\n",
ast_tvdiff_ms(end, start), count);
|
[-]
[+]
|
Changed |
asterisk-1.8.19.0.tar.xz/main/xmldoc.c
^
|
@@ -29,7 +29,7 @@
#include "asterisk.h"
-ASTERISK_FILE_VERSION(__FILE__, "$Revision: 371590 $")
+ASTERISK_FILE_VERSION(__FILE__, "$Revision: 375758 $")
#include "asterisk/_private.h"
#include "asterisk/paths.h"
@@ -1944,6 +1944,7 @@
while ((doctree = AST_RWLIST_REMOVE_HEAD(&xmldoc_tree, entry))) {
ast_free(doctree->filename);
ast_xml_close(doctree->doc);
+ ast_free(doctree);
}
AST_RWLIST_UNLOCK(&xmldoc_tree);
|
[-]
[+]
|
Changed |
asterisk-1.8.19.0.tar.xz/makeopts.in
^
|
@@ -34,6 +34,7 @@
MD5=@MD5@
SHA1SUM=@SHA1SUM@
OPENSSL=@OPENSSL@
+GIT=@GIT@
BUILD_PLATFORM=@BUILD_PLATFORM@
BUILD_CPU=@BUILD_CPU@
|
[-]
[+]
|
Changed |
asterisk-1.8.19.0.tar.xz/pbx/pbx_spool.c
^
|
@@ -28,7 +28,7 @@
#include "asterisk.h"
-ASTERISK_FILE_VERSION(__FILE__, "$Revision: 370642 $")
+ASTERISK_FILE_VERSION(__FILE__, "$Revision: 374686 $")
#include <sys/stat.h>
#include <time.h>
@@ -101,29 +101,50 @@
static void queue_file(const char *filename, time_t when);
#endif
-static int init_outgoing(struct outgoing *o)
+static void free_outgoing(struct outgoing *o)
+{
+ if (o->vars) {
+ ast_variables_destroy(o->vars);
+ }
+ ast_string_field_free_memory(o);
+ ast_free(o);
+}
+
+static struct outgoing *new_outgoing(const char *fn)
{
+ struct outgoing *o;
+
+ o = ast_calloc(1, sizeof(*o));
+ if (!o) {
+ return NULL;
+ }
+
+ /* Initialize the new object. */
o->priority = 1;
o->retrytime = 300;
o->waittime = 45;
o->format = AST_FORMAT_SLINEAR;
ast_set_flag(&o->options, SPOOL_FLAG_ALWAYS_DELETE);
if (ast_string_field_init(o, 128)) {
- return -1;
+ /*
+ * No need to call free_outgoing here since the failure was to
+ * allocate string fields and no variables have been allocated
+ * yet.
+ */
+ ast_free(o);
+ return NULL;
}
- return 0;
-}
-
-static void free_outgoing(struct outgoing *o)
-{
- if (o->vars) {
- ast_variables_destroy(o->vars);
+ ast_string_field_set(o, fn, fn);
+ if (ast_strlen_zero(o->fn)) {
+ /* String field set failed. Since this string is important we must fail. */
+ free_outgoing(o);
+ return NULL;
}
- ast_string_field_free_memory(o);
- ast_free(o);
+
+ return o;
}
-static int apply_outgoing(struct outgoing *o, const char *fn, FILE *f)
+static int apply_outgoing(struct outgoing *o, FILE *f)
{
char buf[256];
char *c, *c2;
@@ -157,105 +178,103 @@
}
/* Trim trailing white space */
- while(!ast_strlen_zero(buf) && buf[strlen(buf) - 1] < 33)
- buf[strlen(buf) - 1] = '\0';
- if (!ast_strlen_zero(buf)) {
- c = strchr(buf, ':');
- if (c) {
- *c = '\0';
- c++;
- while ((*c) && (*c < 33))
- c++;
+ ast_trim_blanks(buf);
+ if (ast_strlen_zero(buf)) {
+ continue;
+ }
+ c = strchr(buf, ':');
+ if (!c) {
+ ast_log(LOG_NOTICE, "Syntax error at line %d of %s\n", lineno, o->fn);
+ continue;
+ }
+ *c = '\0';
+ c = ast_skip_blanks(c + 1);
#if 0
- printf("'%s' is '%s' at line %d\n", buf, c, lineno);
+ printf("'%s' is '%s' at line %d\n", buf, c, lineno);
#endif
- if (!strcasecmp(buf, "channel")) {
- if ((c2 = strchr(c, '/'))) {
- *c2 = '\0';
- c2++;
- ast_string_field_set(o, tech, c);
- ast_string_field_set(o, dest, c2);
+ if (!strcasecmp(buf, "channel")) {
+ if ((c2 = strchr(c, '/'))) {
+ *c2 = '\0';
+ c2++;
+ ast_string_field_set(o, tech, c);
+ ast_string_field_set(o, dest, c2);
+ } else {
+ ast_log(LOG_NOTICE, "Channel should be in form Tech/Dest at line %d of %s\n", lineno, o->fn);
+ }
+ } else if (!strcasecmp(buf, "callerid")) {
+ char cid_name[80] = {0}, cid_num[80] = {0};
+ ast_callerid_split(c, cid_name, sizeof(cid_name), cid_num, sizeof(cid_num));
+ ast_string_field_set(o, cid_num, cid_num);
+ ast_string_field_set(o, cid_name, cid_name);
+ } else if (!strcasecmp(buf, "application")) {
+ ast_string_field_set(o, app, c);
+ } else if (!strcasecmp(buf, "data")) {
+ ast_string_field_set(o, data, c);
+ } else if (!strcasecmp(buf, "maxretries")) {
+ if (sscanf(c, "%30d", &o->maxretries) != 1) {
+ ast_log(LOG_WARNING, "Invalid max retries at line %d of %s\n", lineno, o->fn);
+ o->maxretries = 0;
+ }
+ } else if (!strcasecmp(buf, "codecs")) {
+ ast_parse_allow_disallow(NULL, &o->format, c, 1);
+ } else if (!strcasecmp(buf, "context")) {
+ ast_string_field_set(o, context, c);
+ } else if (!strcasecmp(buf, "extension")) {
+ ast_string_field_set(o, exten, c);
+ } else if (!strcasecmp(buf, "priority")) {
+ if ((sscanf(c, "%30d", &o->priority) != 1) || (o->priority < 1)) {
+ ast_log(LOG_WARNING, "Invalid priority at line %d of %s\n", lineno, o->fn);
+ o->priority = 1;
+ }
+ } else if (!strcasecmp(buf, "retrytime")) {
+ if ((sscanf(c, "%30d", &o->retrytime) != 1) || (o->retrytime < 1)) {
+ ast_log(LOG_WARNING, "Invalid retrytime at line %d of %s\n", lineno, o->fn);
+ o->retrytime = 300;
+ }
+ } else if (!strcasecmp(buf, "waittime")) {
+ if ((sscanf(c, "%30d", &o->waittime) != 1) || (o->waittime < 1)) {
+ ast_log(LOG_WARNING, "Invalid waittime at line %d of %s\n", lineno, o->fn);
+ o->waittime = 45;
+ }
+ } else if (!strcasecmp(buf, "retry")) {
+ o->retries++;
+ } else if (!strcasecmp(buf, "startretry")) {
+ if (sscanf(c, "%30ld", &o->callingpid) != 1) {
+ ast_log(LOG_WARNING, "Unable to retrieve calling PID!\n");
+ o->callingpid = 0;
+ }
+ } else if (!strcasecmp(buf, "endretry") || !strcasecmp(buf, "abortretry")) {
+ o->callingpid = 0;
+ o->retries++;
+ } else if (!strcasecmp(buf, "delayedretry")) {
+ } else if (!strcasecmp(buf, "setvar") || !strcasecmp(buf, "set")) {
+ c2 = c;
+ strsep(&c2, "=");
+ if (c2) {
+ var = ast_variable_new(c, c2, o->fn);
+ if (var) {
+ /* Always insert at the end, because some people want to treat the spool file as a script */
+ if (last) {
+ last->next = var;
} else {
- ast_log(LOG_NOTICE, "Channel should be in form Tech/Dest at line %d of %s\n", lineno, fn);
- }
- } else if (!strcasecmp(buf, "callerid")) {
- char cid_name[80] = {0}, cid_num[80] = {0};
- ast_callerid_split(c, cid_name, sizeof(cid_name), cid_num, sizeof(cid_num));
- ast_string_field_set(o, cid_num, cid_num);
- ast_string_field_set(o, cid_name, cid_name);
- } else if (!strcasecmp(buf, "application")) {
- ast_string_field_set(o, app, c);
- } else if (!strcasecmp(buf, "data")) {
- ast_string_field_set(o, data, c);
- } else if (!strcasecmp(buf, "maxretries")) {
- if (sscanf(c, "%30d", &o->maxretries) != 1) {
- ast_log(LOG_WARNING, "Invalid max retries at line %d of %s\n", lineno, fn);
- o->maxretries = 0;
- }
- } else if (!strcasecmp(buf, "codecs")) {
- ast_parse_allow_disallow(NULL, &o->format, c, 1);
- } else if (!strcasecmp(buf, "context")) {
- ast_string_field_set(o, context, c);
- } else if (!strcasecmp(buf, "extension")) {
- ast_string_field_set(o, exten, c);
- } else if (!strcasecmp(buf, "priority")) {
- if ((sscanf(c, "%30d", &o->priority) != 1) || (o->priority < 1)) {
- ast_log(LOG_WARNING, "Invalid priority at line %d of %s\n", lineno, fn);
- o->priority = 1;
- }
- } else if (!strcasecmp(buf, "retrytime")) {
- if ((sscanf(c, "%30d", &o->retrytime) != 1) || (o->retrytime < 1)) {
- ast_log(LOG_WARNING, "Invalid retrytime at line %d of %s\n", lineno, fn);
- o->retrytime = 300;
+ o->vars = var;
}
- } else if (!strcasecmp(buf, "waittime")) {
- if ((sscanf(c, "%30d", &o->waittime) != 1) || (o->waittime < 1)) {
- ast_log(LOG_WARNING, "Invalid waittime at line %d of %s\n", lineno, fn);
- o->waittime = 45;
- }
- } else if (!strcasecmp(buf, "retry")) {
- o->retries++;
- } else if (!strcasecmp(buf, "startretry")) {
- if (sscanf(c, "%30ld", &o->callingpid) != 1) {
- ast_log(LOG_WARNING, "Unable to retrieve calling PID!\n");
- o->callingpid = 0;
- }
- } else if (!strcasecmp(buf, "endretry") || !strcasecmp(buf, "abortretry")) {
- o->callingpid = 0;
- o->retries++;
- } else if (!strcasecmp(buf, "delayedretry")) {
- } else if (!strcasecmp(buf, "setvar") || !strcasecmp(buf, "set")) {
- c2 = c;
- strsep(&c2, "=");
- if (c2) {
- var = ast_variable_new(c, c2, fn);
- if (var) {
- /* Always insert at the end, because some people want to treat the spool file as a script */
- if (last) {
- last->next = var;
- } else {
- o->vars = var;
- }
- last = var;
- }
- } else
- ast_log(LOG_WARNING, "Malformed \"%s\" argument. Should be \"%s: variable=value\"\n", buf, buf);
- } else if (!strcasecmp(buf, "account")) {
- ast_string_field_set(o, account, c);
- } else if (!strcasecmp(buf, "alwaysdelete")) {
- ast_set2_flag(&o->options, ast_true(c), SPOOL_FLAG_ALWAYS_DELETE);
- } else if (!strcasecmp(buf, "archive")) {
- ast_set2_flag(&o->options, ast_true(c), SPOOL_FLAG_ARCHIVE);
- } else {
- ast_log(LOG_WARNING, "Unknown keyword '%s' at line %d of %s\n", buf, lineno, fn);
+ last = var;
}
} else
- ast_log(LOG_NOTICE, "Syntax error at line %d of %s\n", lineno, fn);
+ ast_log(LOG_WARNING, "Malformed \"%s\" argument. Should be \"%s: variable=value\"\n", buf, buf);
+ } else if (!strcasecmp(buf, "account")) {
+ ast_string_field_set(o, account, c);
+ } else if (!strcasecmp(buf, "alwaysdelete")) {
+ ast_set2_flag(&o->options, ast_true(c), SPOOL_FLAG_ALWAYS_DELETE);
+ } else if (!strcasecmp(buf, "archive")) {
+ ast_set2_flag(&o->options, ast_true(c), SPOOL_FLAG_ARCHIVE);
+ } else {
+ ast_log(LOG_WARNING, "Unknown keyword '%s' at line %d of %s\n", buf, lineno, o->fn);
}
}
- ast_string_field_set(o, fn, fn);
if (ast_strlen_zero(o->tech) || ast_strlen_zero(o->dest) || (ast_strlen_zero(o->app) && ast_strlen_zero(o->exten))) {
- ast_log(LOG_WARNING, "At least one of app or extension must be specified, along with tech and dest in file %s\n", fn);
+ ast_log(LOG_WARNING, "At least one of app or extension must be specified, along with tech and dest in file %s\n", o->fn);
return -1;
}
return 0;
@@ -319,7 +338,7 @@
}
snprintf(newfn, sizeof(newfn), "%s/%s", qdonedir, bname);
- /* a existing call file the archive dir is overwritten */
+ /* If there is already a call file with the name in the archive dir, it will be overwritten. */
unlink(newfn);
if (rename(o->fn, newfn) != 0) {
unlink(o->fn);
@@ -384,47 +403,46 @@
/* Called from scan_thread or queue_file */
static int scan_service(const char *fn, time_t now)
{
- struct outgoing *o = NULL;
+ struct outgoing *o;
FILE *f;
- int res = 0;
+ int res;
- if (!(o = ast_calloc(1, sizeof(*o)))) {
- ast_log(LOG_WARNING, "Out of memory ;(\n");
- return -1;
- }
-
- if (init_outgoing(o)) {
- /* No need to call free_outgoing here since we know the failure
- * was to allocate string fields and no variables have been allocated
- * yet.
- */
- ast_free(o);
+ o = new_outgoing(fn);
+ if (!o) {
return -1;
}
/* Attempt to open the file */
- if (!(f = fopen(fn, "r"))) {
+ f = fopen(o->fn, "r");
+ if (!f) {
+#if defined(HAVE_INOTIFY) || defined(HAVE_KQUEUE)
+ /*!
+ * \todo XXX There is some odd delayed duplicate servicing of
+ * call files going on. We need to suppress the error message
+ * if the file does not exist as a result.
+ */
+ if (errno != ENOENT)
+#endif
+ {
+ ast_log(LOG_WARNING, "Unable to open %s: '%s'(%d), deleting\n",
+ o->fn, strerror(errno), (int) errno);
+ }
remove_from_queue(o, "Failed");
free_outgoing(o);
-#if !defined(HAVE_INOTIFY) && !defined(HAVE_KQUEUE)
- ast_log(LOG_WARNING, "Unable to open %s: %s, deleting\n", fn, strerror(errno));
-#endif
return -1;
}
/* Read in and verify the contents */
- if (apply_outgoing(o, fn, f)) {
+ res = apply_outgoing(o, f);
+ fclose(f);
+ if (res) {
+ ast_log(LOG_WARNING, "Invalid file contents in %s, deleting\n", o->fn);
remove_from_queue(o, "Failed");
free_outgoing(o);
- ast_log(LOG_WARNING, "Invalid file contents in %s, deleting\n", fn);
- fclose(f);
return -1;
}
-#if 0
- printf("Filename: %s, Retries: %d, max: %d\n", fn, o->retries, o->maxretries);
-#endif
- fclose(f);
+ ast_debug(1, "Filename: %s, Retries: %d, max: %d\n", o->fn, o->retries, o->maxretries);
if (o->retries <= o->maxretries) {
now += o->retrytime;
if (o->callingpid && (o->callingpid == ast_mainpid)) {
@@ -442,14 +460,14 @@
safe_append(o, now, "StartRetry");
launch_service(o);
}
- res = now;
- } else {
- ast_log(LOG_NOTICE, "Queued call to %s/%s expired without completion after %d attempt%s\n", o->tech, o->dest, o->retries - 1, ((o->retries - 1) != 1) ? "s" : "");
- remove_from_queue(o, "Expired");
- free_outgoing(o);
+ return now;
}
- return res;
+ ast_log(LOG_NOTICE, "Queued call to %s/%s expired without completion after %d attempt%s\n",
+ o->tech, o->dest, o->retries - 1, ((o->retries - 1) != 1) ? "s" : "");
+ remove_from_queue(o, "Expired");
+ free_outgoing(o);
+ return 0;
}
#if defined(HAVE_INOTIFY) || defined(HAVE_KQUEUE)
|
[-]
[+]
|
Changed |
asterisk-1.8.19.0.tar.xz/res/res_calendar_ews.c
^
|
@@ -27,7 +27,7 @@
#include "asterisk.h"
-ASTERISK_FILE_VERSION(__FILE__, "$Revision: 366740 $")
+ASTERISK_FILE_VERSION(__FILE__, "$Revision: 375528 $")
#include <ne_request.h>
#include <ne_session.h>
@@ -80,7 +80,9 @@
/* Important states of XML parsing */
enum {
+ XML_EVENT_CALENDAR_ITEM = 9,
XML_EVENT_NAME = 10,
+ XML_EVENT_DESCRIPTION,
XML_EVENT_START,
XML_EVENT_END,
XML_EVENT_BUSY,
@@ -180,7 +182,7 @@
/* Nodes needed for traversing until CalendarItem is found */
if (!strcmp(name, "Envelope") ||
- !strcmp(name, "Body") ||
+ (!strcmp(name, "Body") && parent != XML_EVENT_CALENDAR_ITEM) ||
!strcmp(name, "FindItemResponse") ||
!strcmp(name, "GetItemResponse") ||
!strcmp(name, "CreateItemResponse") ||
@@ -228,7 +230,7 @@
return NE_XML_ABORT;
}
- return 1;
+ return XML_EVENT_CALENDAR_ITEM;
} else if (!strcmp(name, "ItemId")) {
/* Event UID */
if (ctx->op == XML_OP_FIND) {
@@ -255,6 +257,13 @@
}
ast_str_reset(ctx->cdata);
return XML_EVENT_NAME;
+ } else if (!strcmp(name, "Body") && parent == XML_EVENT_CALENDAR_ITEM) {
+ /* Event body/description */
+ if (!ctx->cdata) {
+ return NE_XML_ABORT;
+ }
+ ast_str_reset(ctx->cdata);
+ return XML_EVENT_DESCRIPTION;
} else if (!strcmp(name, "Start")) {
/* Event start time */
return XML_EVENT_START;
@@ -387,6 +396,11 @@
ast_string_field_set(ctx->event, summary, ast_str_buffer(ctx->cdata));
ast_debug(3, "EWS: XML: Summary: %s\n", ctx->event->summary);
ast_str_reset(ctx->cdata);
+ } else if (!strcmp(name, "Body") && state == XML_EVENT_DESCRIPTION) {
+ /* Event body/description end */
+ ast_string_field_set(ctx->event, description, ast_str_buffer(ctx->cdata));
+ ast_debug(3, "EWS: XML: Description: %s\n", ctx->event->description);
+ ast_str_reset(ctx->cdata);
} else if (!strcmp(name, "Organizer")) {
/* Event organizer end */
ast_string_field_set(ctx->event, organizer, ast_str_buffer(ctx->cdata));
|
[-]
[+]
|
Changed |
asterisk-1.8.19.0.tar.xz/res/res_fax_spandsp.c
^
|
@@ -33,7 +33,7 @@
#include "asterisk.h"
-ASTERISK_FILE_VERSION(__FILE__, "$Revision: 352144 $")
+ASTERISK_FILE_VERSION(__FILE__, "$Revision: 375893 $")
#define SPANDSP_EXPOSE_INTERNAL_STRUCTURES
#include <spandsp.h>
@@ -146,7 +146,7 @@
p->isdone = 1;
ast_timer_close(p->timer);
-
+ p->timer = NULL;
fax_release(&p->fax_state);
t38_terminal_release(&p->t38_state);
@@ -525,7 +525,10 @@
struct ast_frame *f = &fax_frame;
- ast_timer_ack(p->timer, 1);
+ if (ast_timer_ack(p->timer, 1) < 0) {
+ ast_log(LOG_ERROR, "Failed to acknowledge timer for FAX session '%d'\n", s->id);
+ return NULL;
+ }
/* XXX do we need to lock here? */
if (p->isdone) {
|
[-]
[+]
|
Changed |
asterisk-1.8.19.0.tar.xz/res/res_musiconhold.c
^
|
@@ -32,7 +32,7 @@
#include "asterisk.h"
-ASTERISK_FILE_VERSION(__FILE__, "$Revision: 374177 $")
+ASTERISK_FILE_VERSION(__FILE__, "$Revision: 375893 $")
#include <ctype.h>
#include <signal.h>
@@ -653,7 +653,10 @@
#endif
/* Pause some amount of time */
if (ast_poll(&pfd, 1, -1) > 0) {
- ast_timer_ack(class->timer, 1);
+ if (ast_timer_ack(class->timer, 1) < 0) {
+ ast_log(LOG_ERROR, "Failed to acknowledge timer for mp3player\n");
+ return NULL;
+ }
res = 320;
} else {
ast_log(LOG_WARNING, "poll() failed: %s\n", strerror(errno));
|
[-]
[+]
|
Changed |
asterisk-1.8.19.0.tar.xz/res/res_timing_dahdi.c
^
|
@@ -30,7 +30,7 @@
#include "asterisk.h"
-ASTERISK_FILE_VERSION(__FILE__, "$Revision: 349194 $");
+ASTERISK_FILE_VERSION(__FILE__, "$Revision: 375893 $");
#include <sys/types.h>
#include <sys/stat.h>
@@ -48,7 +48,7 @@
static int dahdi_timer_open(void);
static void dahdi_timer_close(int handle);
static int dahdi_timer_set_rate(int handle, unsigned int rate);
-static void dahdi_timer_ack(int handle, unsigned int quantity);
+static int dahdi_timer_ack(int handle, unsigned int quantity);
static int dahdi_timer_enable_continuous(int handle);
static int dahdi_timer_disable_continuous(int handle);
static enum ast_timer_event dahdi_timer_get_event(int handle);
@@ -94,9 +94,9 @@
return 0;
}
-static void dahdi_timer_ack(int handle, unsigned int quantity)
+static int dahdi_timer_ack(int handle, unsigned int quantity)
{
- ioctl(handle, DAHDI_TIMERACK, &quantity);
+ return ioctl(handle, DAHDI_TIMERACK, &quantity) ? -1 : 0;
}
static int dahdi_timer_enable_continuous(int handle)
|
[-]
[+]
|
Changed |
asterisk-1.8.19.0.tar.xz/res/res_timing_kqueue.c
^
|
@@ -49,7 +49,7 @@
static int kqueue_timer_open(void);
static void kqueue_timer_close(int handle);
static int kqueue_timer_set_rate(int handle, unsigned int rate);
-static void kqueue_timer_ack(int handle, unsigned int quantity);
+static int kqueue_timer_ack(int handle, unsigned int quantity);
static int kqueue_timer_enable_continuous(int handle);
static int kqueue_timer_disable_continuous(int handle);
static enum ast_timer_event kqueue_timer_get_event(int handle);
@@ -195,20 +195,25 @@
return 0;
}
-static void kqueue_timer_ack(int handle, unsigned int quantity)
+static int kqueue_timer_ack(int handle, unsigned int quantity)
{
struct kqueue_timer *our_timer;
if (!(our_timer = lookup_timer(handle))) {
- return;
+ return -1;
}
if (our_timer->unacked < quantity) {
ast_debug(1, "Acking more events than have expired?!!\n");
our_timer->unacked = 0;
+ ao2_ref(our_timer, -1);
+ return -1;
} else {
our_timer->unacked -= quantity;
}
+
+ ao2_ref(our_timer, -1);
+ return 0;
}
static int kqueue_timer_enable_continuous(int handle)
|
[-]
[+]
|
Changed |
asterisk-1.8.19.0.tar.xz/res/res_timing_pthread.c
^
|
@@ -29,7 +29,7 @@
#include "asterisk.h"
-ASTERISK_FILE_VERSION(__FILE__, "$Revision: 349194 $");
+ASTERISK_FILE_VERSION(__FILE__, "$Revision: 375893 $");
#include <math.h>
#include <sys/select.h>
@@ -47,7 +47,7 @@
static int pthread_timer_open(void);
static void pthread_timer_close(int handle);
static int pthread_timer_set_rate(int handle, unsigned int rate);
-static void pthread_timer_ack(int handle, unsigned int quantity);
+static int pthread_timer_ack(int handle, unsigned int quantity);
static int pthread_timer_enable_continuous(int handle);
static int pthread_timer_disable_continuous(int handle);
static enum ast_timer_event pthread_timer_get_event(int handle);
@@ -97,7 +97,7 @@
static void pthread_timer_destructor(void *obj);
static struct pthread_timer *find_timer(int handle, int unlinkobj);
static void write_byte(struct pthread_timer *timer);
-static void read_pipe(struct pthread_timer *timer, unsigned int num);
+static int read_pipe(struct pthread_timer *timer, unsigned int num);
/*!
* \brief Data for the timing thread
@@ -190,21 +190,24 @@
return 0;
}
-static void pthread_timer_ack(int handle, unsigned int quantity)
+static int pthread_timer_ack(int handle, unsigned int quantity)
{
struct pthread_timer *timer;
+ int res;
ast_assert(quantity > 0);
if (!(timer = find_timer(handle, 0))) {
- return;
+ return -1;
}
ao2_lock(timer);
- read_pipe(timer, quantity);
+ res = read_pipe(timer, quantity);
ao2_unlock(timer);
ao2_ref(timer, -1);
+
+ return res;
}
static int pthread_timer_enable_continuous(int handle)
@@ -240,7 +243,12 @@
ao2_lock(timer);
if (timer->continuous) {
timer->continuous = 0;
- read_pipe(timer, 1);
+ if (read_pipe(timer, 1) != 0) {
+ /* Let the errno from read_pipe propagate up */
+ ao2_unlock(timer);
+ ao2_ref(timer, -1);
+ return -1;
+ }
}
ao2_unlock(timer);
@@ -358,8 +366,10 @@
/*!
* \internal
* \pre timer is locked
+ * \retval 0 if nothing to read or read success
+ * \retval -1 on error
*/
-static void read_pipe(struct pthread_timer *timer, unsigned int quantity)
+static int read_pipe(struct pthread_timer *timer, unsigned int quantity)
{
int rd_fd = timer->pipe[PIPE_READ];
int pending_ticks = timer->pending_ticks;
@@ -375,7 +385,7 @@
}
if (!quantity) {
- return;
+ return 0;
}
do {
@@ -389,7 +399,7 @@
if (ast_poll(&pfd, 1, 0) != 1) {
ast_debug(1, "Reading not available on timing pipe, "
"quantity: %u\n", quantity);
- break;
+ return -1;
}
res = read(rd_fd, buf,
@@ -401,12 +411,14 @@
}
ast_log(LOG_ERROR, "read failed on timing pipe: %s\n",
strerror(errno));
- break;
+ return -1;
}
quantity -= res;
timer->pending_ticks -= res;
} while (quantity);
+
+ return 0;
}
/*!
|
[-]
[+]
|
Changed |
asterisk-1.8.19.0.tar.xz/res/res_timing_timerfd.c
^
|
@@ -44,7 +44,7 @@
static int timerfd_timer_open(void);
static void timerfd_timer_close(int handle);
static int timerfd_timer_set_rate(int handle, unsigned int rate);
-static void timerfd_timer_ack(int handle, unsigned int quantity);
+static int timerfd_timer_ack(int handle, unsigned int quantity);
static int timerfd_timer_enable_continuous(int handle);
static int timerfd_timer_disable_continuous(int handle);
static enum ast_timer_event timerfd_timer_get_event(int handle);
@@ -91,6 +91,7 @@
{
struct timerfd_timer *timer = obj;
close(timer->handle);
+ timer->handle = -1;
}
static int timerfd_timer_open(void)
@@ -121,6 +122,11 @@
.handle = handle,
};
+ if (handle == -1) {
+ ast_log(LOG_ERROR, "Attempting to close timerfd handle -1");
+ return;
+ }
+
if (!(our_timer = ao2_find(timerfd_timers, &find_helper, OBJ_POINTER))) {
ast_log(LOG_ERROR, "Couldn't find timer with handle %d\n", handle);
return;
@@ -137,6 +143,11 @@
};
int res = 0;
+ if (handle == -1) {
+ ast_log(LOG_ERROR, "Attempting to set rate on timerfd handle -1");
+ return -1;
+ }
+
if (!(our_timer = ao2_find(timerfd_timers, &find_helper, OBJ_POINTER))) {
ast_log(LOG_ERROR, "Couldn't find timer with handle %d\n", handle);
return -1;
@@ -158,17 +169,23 @@
return res;
}
-static void timerfd_timer_ack(int handle, unsigned int quantity)
+static int timerfd_timer_ack(int handle, unsigned int quantity)
{
uint64_t expirations;
int read_result = 0;
+ int res = 0;
struct timerfd_timer *our_timer, find_helper = {
.handle = handle,
};
+ if (handle == -1) {
+ ast_log(LOG_ERROR, "Attempting to ack timerfd handle -1");
+ return -1;
+ }
+
if (!(our_timer = ao2_find(timerfd_timers, &find_helper, OBJ_POINTER))) {
ast_log(LOG_ERROR, "Couldn't find a timer with handle %d\n", handle);
- return;
+ return -1;
}
ao2_lock(our_timer);
@@ -177,8 +194,9 @@
struct itimerspec timer_status;
if (timerfd_gettime(handle, &timer_status)) {
- ast_log(LOG_ERROR, "Call to timerfd_gettime() error: %s\n", strerror(errno));
+ ast_log(LOG_ERROR, "Call to timerfd_gettime() using handle %d error: %s\n", handle, strerror(errno));
expirations = 0;
+ res = -1;
break;
}
@@ -194,6 +212,7 @@
continue;
} else {
ast_log(LOG_ERROR, "Read error: %s\n", strerror(errno));
+ res = -1;
break;
}
}
@@ -205,6 +224,7 @@
if (expirations != quantity) {
ast_debug(2, "Expected to acknowledge %u ticks but got %llu instead\n", quantity, (unsigned long long) expirations);
}
+ return res;
}
static int timerfd_timer_enable_continuous(int handle)
@@ -217,6 +237,11 @@
.handle = handle,
};
+ if (handle == -1) {
+ ast_log(LOG_ERROR, "Attempting to enable timerfd handle -1");
+ return -1;
+ }
+
if (!(our_timer = ao2_find(timerfd_timers, &find_helper, OBJ_POINTER))) {
ast_log(LOG_ERROR, "Couldn't find timer with handle %d\n", handle);
return -1;
@@ -246,13 +271,18 @@
.handle = handle,
};
+ if (handle == -1) {
+ ast_log(LOG_ERROR, "Attempting to disable timerfd handle -1");
+ return -1;
+ }
+
if (!(our_timer = ao2_find(timerfd_timers, &find_helper, OBJ_POINTER))) {
ast_log(LOG_ERROR, "Couldn't find timer with handle %d\n", handle);
return -1;
}
ao2_lock(our_timer);
- if(!our_timer->is_continuous) {
+ if (!our_timer->is_continuous) {
/* No reason to do anything if we're not
* in continuous mode
*/
@@ -276,6 +306,11 @@
.handle = handle,
};
+ if (handle == -1) {
+ ast_log(LOG_ERROR, "Attempting to get event from timerfd handle -1");
+ return -1;
+ }
+
if (!(our_timer = ao2_find(timerfd_timers, &find_helper, OBJ_POINTER))) {
ast_log(LOG_ERROR, "Couldn't find timer with handle %d\n", handle);
return -1;
|