mirror of
https://github.com/asterisk/asterisk.git
synced 2025-09-05 04:11:08 +00:00
Compare commits
19 Commits
certified/
...
1.8.10.0
Author | SHA1 | Date | |
---|---|---|---|
|
39a8426d17 | ||
|
50ec04db80 | ||
|
b983299c11 | ||
|
81fae67d11 | ||
|
a0273c2bdc | ||
|
2f4b4cde38 | ||
|
fcaa93a479 | ||
|
bf8a903818 | ||
|
9a71c7e999 | ||
|
bd22ba192b | ||
|
4eff135fd8 | ||
|
a9d66795a9 | ||
|
caf711d026 | ||
|
2e0d859e78 | ||
|
b8261abd35 | ||
|
54b5406e3d | ||
|
ebbaabb3fe | ||
|
ef0f8d1eec | ||
|
64e74cca32 |
3
.lastclean
Normal file
3
.lastclean
Normal file
@@ -0,0 +1,3 @@
|
||||
39
|
||||
|
||||
|
@@ -140,6 +140,7 @@ static int parkandannounce_exec(struct ast_channel *chan, const char *data)
|
||||
}
|
||||
|
||||
/* Save the CallerID because the masquerade turns chan into a ZOMBIE. */
|
||||
ast_party_id_init(&caller_id);
|
||||
ast_channel_lock(chan);
|
||||
ast_party_id_copy(&caller_id, &chan->caller.id);
|
||||
ast_channel_unlock(chan);
|
||||
|
303
asterisk-1.8.10.0-summary.html
Normal file
303
asterisk-1.8.10.0-summary.html
Normal file
@@ -0,0 +1,303 @@
|
||||
<!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.10.0</title></head>
|
||||
<body>
|
||||
<h1 align="center"><a name="top">Release Summary</a></h1>
|
||||
<h3 align="center">asterisk-1.8.10.0</h3>
|
||||
<h3 align="center">Date: 2012-03-05</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.9.0.</p>
|
||||
<hr/>
|
||||
<a name="contributors"><h2 align="center">Contributors</h2></a>
|
||||
<center><a href="#top">[Back to Top]</a></center><br/><p>This table lists the people who have submitted code, those that have tested patches, as well as those that reported issues on the issue tracker that were resolved in this release. For coders, the number is how many of their patches (of any size) were committed into this release. For testers, the number is the number of times their name was listed as assisting with testing a patch. Finally, for reporters, the number is the number of issues that they reported that were closed by commits that went into this release.</p>
|
||||
<table width="100%" border="0">
|
||||
<tr>
|
||||
<td width="33%"><h3>Coders</h3></td>
|
||||
<td width="33%"><h3>Testers</h3></td>
|
||||
<td width="33%"><h3>Reporters</h3></td>
|
||||
</tr>
|
||||
<tr valign="top">
|
||||
<td>
|
||||
18 rmudgett<br/>
|
||||
14 mjordan<br/>
|
||||
12 jrose<br/>
|
||||
9 kmoore<br/>
|
||||
8 mmichelson<br/>
|
||||
6 kpfleming<br/>
|
||||
5 twilson<br/>
|
||||
3 bebuild<br/>
|
||||
3 file<br/>
|
||||
3 russell<br/>
|
||||
2 alecdavis<br/>
|
||||
2 schmidts<br/>
|
||||
2 wdoekes<br/>
|
||||
1 may<br/>
|
||||
1 pabelanger<br/>
|
||||
1 Yuri<br/>
|
||||
</td>
|
||||
<td>
|
||||
1 Kristjan Vrban<br/>
|
||||
</td>
|
||||
<td>
|
||||
1 rossbeer<br/>
|
||||
1 ys<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: Channels/chan_sip/Subscriptions</h3><br/>
|
||||
<a href="https://issues.asterisk.org/jira/browse/ASTERISK-19057">ASTERISK-19057</a>: message-summary NOTIFY: Port in Message-Account added twice and mwi_from (sip.conf) has no effect<br/>
|
||||
Revision: <a href="http://svn.digium.com/view/asterisk/branches/1.8?view=revision&revision=351759">351759</a><br/>
|
||||
Reporter: ys<br/>
|
||||
Coders: Yuri<br/>
|
||||
<br/>
|
||||
<h3>Category: Channels/chan_sip/Transfers</h3><br/>
|
||||
<a href="https://issues.asterisk.org/jira/browse/ASTERISK-19173">ASTERISK-19173</a>: All blind transfers failing on 1.8.9.0-rc1<br/>
|
||||
Revision: <a href="http://svn.digium.com/view/asterisk/branches/1.8?view=revision&revision=352199">352199</a><br/>
|
||||
Reporter: rossbeer<br/>
|
||||
Testers: Kristjan Vrban<br/>
|
||||
Coders: mmichelson<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=349450">349450</a></td><td>jrose</td><td>Fix documentation for SayNumber to reflect the fact that language is changed in CHANNEL()</td>
|
||||
<td><a href="https://issues.asterisk.org/jira/browse/ASTERISK-18962">ASTERISK-18962</a></td></tr><tr><td><a href="http://svn.digium.com/view/asterisk/branches/1.8?view=revision&revision=349482">349482</a></td><td>jrose</td><td>Adds Subscription-State header to notify with call completion. per RFC3265</td>
|
||||
<td><a href="https://issues.asterisk.org/jira/browse/ASTERISK-17953">ASTERISK-17953</a></td></tr><tr><td><a href="http://svn.digium.com/view/asterisk/branches/1.8?view=revision&revision=349504">349504</a></td><td>kmoore</td><td>Update autosupport script and man page</td>
|
||||
<td></td></tr><tr><td><a href="http://svn.digium.com/view/asterisk/branches/1.8?view=revision&revision=349529">349529</a></td><td>kmoore</td><td>Make debian init script conform to the LSB standard</td>
|
||||
<td><a href="https://issues.asterisk.org/jira/browse/ASTERISK-17958">ASTERISK-17958</a></td></tr><tr><td><a href="http://svn.digium.com/view/asterisk/branches/1.8?view=revision&revision=349558">349558</a></td><td>rmudgett</td><td>Fix segfault in chan_dahdi for CHANNEL(dahdi_span) evaluation on hangup.</td>
|
||||
<td><a href="https://issues.asterisk.org/jira/browse/ASTERISK-19142">ASTERISK-19142</a></td></tr><tr><td><a href="http://svn.digium.com/view/asterisk/branches/1.8?view=revision&revision=349672">349672</a></td><td>jrose</td><td>Ensures Asterisk closes when receiving terminal signals in 'no fork' mode.</td>
|
||||
<td><a href="https://issues.asterisk.org/jira/browse/ASTERISK-19127">ASTERISK-19127</a></td></tr><tr><td><a href="http://svn.digium.com/view/asterisk/branches/1.8?view=revision&revision=349728">349728</a></td><td>jrose</td><td>Fix an issue where dsp.c would interpret multiple dtmf events from a single key press.</td>
|
||||
<td><a href="https://issues.asterisk.org/jira/browse/ASTERISK-17493">ASTERISK-17493</a></td></tr><tr><td><a href="http://svn.digium.com/view/asterisk/branches/1.8?view=revision&revision=349731">349731</a></td><td>kmoore</td><td>Allow playback of formats that don't support seeking</td>
|
||||
<td><a href="https://issues.asterisk.org/jira/browse/ASTERISK-18994">ASTERISK-18994</a></td></tr><tr><td><a href="http://svn.digium.com/view/asterisk/branches/1.8?view=revision&revision=349819">349819</a></td><td>rmudgett</td><td>Make not assume that the cel_sqlite3_custom SQL table primary key is AcctId.</td>
|
||||
<td><a href="https://issues.asterisk.org/jira/browse/ASTERISK-18963">ASTERISK-18963</a></td></tr><tr><td><a href="http://svn.digium.com/view/asterisk/branches/1.8?view=revision&revision=349872">349872</a></td><td>rmudgett</td><td>Fix memory leaks in app_followme find_realtime().</td>
|
||||
<td><a href="https://issues.asterisk.org/jira/browse/ASTERISK-19055">ASTERISK-19055</a></td></tr><tr><td><a href="http://svn.digium.com/view/asterisk/branches/1.8?view=revision&revision=349968">349968</a></td><td>twilson</td><td>Don't leak CID in From header when presentation=unavailable</td>
|
||||
<td><a href="https://issues.asterisk.org/jira/browse/ASTERISK-16538">ASTERISK-16538</a></td></tr><tr><td><a href="http://svn.digium.com/view/asterisk/branches/1.8?view=revision&revision=350023">350023</a></td><td>kmoore</td><td>Prevent SLA settings from getting wiped out on reload</td>
|
||||
<td></td></tr><tr><td><a href="http://svn.digium.com/view/asterisk/branches/1.8?view=revision&revision=350075">350075</a></td><td>rmudgett</td><td>Make Asterisk -x command line parameter imply -r parameter presence.</td>
|
||||
<td><a href="https://issues.asterisk.org/jira/browse/ASTERISK-19094">ASTERISK-19094</a></td></tr><tr><td><a href="http://svn.digium.com/view/asterisk/branches/1.8?view=revision&revision=350127">350127</a></td><td>rmudgett</td><td>Update contrib script live_ast to invoke Asterisk with valgrind and suppression file.</td>
|
||||
<td><a href="https://issues.asterisk.org/jira/browse/ASTERISK-17339">ASTERISK-17339</a></td></tr><tr><td><a href="http://svn.digium.com/view/asterisk/branches/1.8?view=revision&revision=350128">350128</a></td><td>rmudgett</td><td>live_ast: valgrind: run asterisk under valgrind</td>
|
||||
<td></td></tr><tr><td><a href="http://svn.digium.com/view/asterisk/branches/1.8?view=revision&revision=350220">350220</a></td><td>rmudgett</td><td>Fix joinable thread terminating without joiner memory leak in chan_iax.c.</td>
|
||||
<td><a href="https://issues.asterisk.org/jira/browse/ASTERISK-17339">ASTERISK-17339</a>, <a href="https://issues.asterisk.org/jira/browse/ASTERISK-17825">ASTERISK-17825</a></td></tr><tr><td><a href="http://svn.digium.com/view/asterisk/branches/1.8?view=revision&revision=350311">350311</a></td><td>rmudgett</td><td>Fix absolute/relative time mismatch in LOCK function.</td>
|
||||
<td><a href="https://issues.asterisk.org/jira/browse/ASTERISK-16868">ASTERISK-16868</a></td></tr><tr><td><a href="http://svn.digium.com/view/asterisk/branches/1.8?view=revision&revision=350364">350364</a></td><td>rmudgett</td><td>Make FollowMe optionally update connected line information when the accepting endpoint is bridged.</td>
|
||||
<td><a href="https://issues.asterisk.org/jira/browse/ASTERISK-18969">ASTERISK-18969</a></td></tr><tr><td><a href="http://svn.digium.com/view/asterisk/branches/1.8?view=revision&revision=350452">350452</a></td><td>rmudgett</td><td>Remove extraneous BRIDGEPEER AMI VarSet event on a CEL dummy channel.</td>
|
||||
<td><a href="https://issues.asterisk.org/jira/browse/ASTERISK-19180">ASTERISK-19180</a></td></tr><tr><td><a href="http://svn.digium.com/view/asterisk/branches/1.8?view=revision&revision=350501">350501</a></td><td>jrose</td><td>Adds peer to CEL report on CEL_BRIDGE_START and CEL_BRIDGE_END</td>
|
||||
<td><a href="https://issues.asterisk.org/jira/browse/ASTERISK-17940">ASTERISK-17940</a></td></tr><tr><td><a href="http://svn.digium.com/view/asterisk/branches/1.8?view=revision&revision=350552">350552</a></td><td>mjordan</td><td>Realtime queues failed to load queue information without queue member table</td>
|
||||
<td><a href="https://issues.asterisk.org/jira/browse/ASTERISK-19170">ASTERISK-19170</a></td></tr><tr><td><a href="http://svn.digium.com/view/asterisk/branches/1.8?view=revision&revision=350555">350555</a></td><td>rmudgett</td><td>Add missing CEL logging fields to various CEL backends.</td>
|
||||
<td><a href="https://issues.asterisk.org/jira/browse/ASTERISK-17190">ASTERISK-17190</a></td></tr><tr><td><a href="http://svn.digium.com/view/asterisk/branches/1.8?view=revision&revision=350571">350571</a></td><td>rmudgett</td><td>Use compatible names for event extra data for various CEL backends.</td>
|
||||
<td><a href="https://issues.asterisk.org/jira/browse/ASTERISK-17190">ASTERISK-17190</a></td></tr><tr><td><a href="http://svn.digium.com/view/asterisk/branches/1.8?view=revision&revision=350679">350679</a></td><td>mmichelson</td><td>Set port to a default sane value if a bogus one is provided when parsing hostnames.</td>
|
||||
<td></td></tr><tr><td><a href="http://svn.digium.com/view/asterisk/branches/1.8?view=revision&revision=350730">350730</a></td><td>kmoore</td><td>Make sure asterisk builds on OpenBSD</td>
|
||||
<td><a href="https://issues.asterisk.org/jira/browse/ASTERISK-18929">ASTERISK-18929</a></td></tr><tr><td><a href="http://svn.digium.com/view/asterisk/branches/1.8?view=revision&revision=350733">350733</a></td><td>rmudgett</td><td>Correct eventtype names in cel_odbc and cel_pgsql sample files</td>
|
||||
<td></td></tr><tr><td><a href="http://svn.digium.com/view/asterisk/branches/1.8?view=revision&revision=350736">350736</a></td><td>kmoore</td><td>Run bootstrap.sh for the for the ASTERISK-18929 fix</td>
|
||||
<td><a href="https://issues.asterisk.org/jira/browse/ASTERISK-18929">ASTERISK-18929</a></td></tr><tr><td><a href="http://svn.digium.com/view/asterisk/branches/1.8?view=revision&revision=350788">350788</a></td><td>kpfleming</td><td>Ensure that two prerequisites are properly installed on Debian-style distributions.</td>
|
||||
<td></td></tr><tr><td><a href="http://svn.digium.com/view/asterisk/branches/1.8?view=revision&revision=350789">350789</a></td><td>kpfleming</td><td>Correct some 'set-but-not-used' variable warnings.</td>
|
||||
<td></td></tr><tr><td><a href="http://svn.digium.com/view/asterisk/branches/1.8?view=revision&revision=350837">350837</a></td><td>kpfleming</td><td>Ensure that all AC_LANG_PROGRAM calls in the configure script are properly quoted.</td>
|
||||
<td></td></tr><tr><td><a href="http://svn.digium.com/view/asterisk/branches/1.8?view=revision&revision=350885">350885</a></td><td>wdoekes</td><td>Fix -Werror=unused-but-set-variable compile error in utils/extconf.c.</td>
|
||||
<td><a href="https://issues.asterisk.org/jira/browse/ASTERISK-15350">ASTERISK-15350</a></td></tr><tr><td><a href="http://svn.digium.com/view/asterisk/branches/1.8?view=revision&revision=350888">350888</a></td><td>wdoekes</td><td>Allow only one thread at a time to do asterisk cleanup/shutdown.</td>
|
||||
<td><a href="https://issues.asterisk.org/jira/browse/ASTERISK-18883">ASTERISK-18883</a></td></tr><tr><td><a href="http://svn.digium.com/view/asterisk/branches/1.8?view=revision&revision=350975">350975</a></td><td>file</td><td>Add missing code to set direct RTP setup information during dialing.</td>
|
||||
<td></td></tr><tr><td><a href="http://svn.digium.com/view/asterisk/branches/1.8?view=revision&revision=351027">351027</a></td><td>mjordan</td><td>Create and initialize udptl only when dialog negotiates for image media</td>
|
||||
<td><a href="https://issues.asterisk.org/jira/browse/ASTERISK-16698">ASTERISK-16698</a>, <a href="https://issues.asterisk.org/jira/browse/ASTERISK-16794">ASTERISK-16794</a></td></tr><tr><td><a href="http://svn.digium.com/view/asterisk/branches/1.8?view=revision&revision=351080">351080</a></td><td>twilson</td><td>Don't prematurely stop SIP session timer</td>
|
||||
<td><a href="https://issues.asterisk.org/jira/browse/ASTERISK-18996">ASTERISK-18996</a></td></tr><tr><td><a href="http://svn.digium.com/view/asterisk/branches/1.8?view=revision&revision=351130">351130</a></td><td>twilson</td><td>Ensure ACK retransmit & hangup on non-200 response to INVITE</td>
|
||||
<td><a href="https://issues.asterisk.org/jira/browse/ASTERISK-17717">ASTERISK-17717</a></td></tr><tr><td><a href="http://svn.digium.com/view/asterisk/branches/1.8?view=revision&revision=351182">351182</a></td><td>russell</td><td>Add some missing locking in chan_sip.</td>
|
||||
<td><a href="https://issues.asterisk.org/jira/browse/ASTERISK-18979">ASTERISK-18979</a></td></tr><tr><td><a href="http://svn.digium.com/view/asterisk/branches/1.8?view=revision&revision=351233">351233</a></td><td>mjordan</td><td>Fix udptl issue with initial INVITE introduced by r351027</td>
|
||||
<td></td></tr><tr><td><a href="http://svn.digium.com/view/asterisk/branches/1.8?view=revision&revision=351284">351284</a></td><td>mmichelson</td><td>Use built-in parsing functions for Contact and Record-Route headers.</td>
|
||||
<td><a href="https://issues.asterisk.org/jira/browse/ASTERISK-18990">ASTERISK-18990</a></td></tr><tr><td><a href="http://svn.digium.com/view/asterisk/branches/1.8?view=revision&revision=351287">351287</a></td><td>jrose</td><td>Adds pjmedia probation concepts to res_rtp_asterisk's learning mode.</td>
|
||||
<td></td></tr><tr><td><a href="http://svn.digium.com/view/asterisk/branches/1.8?view=revision&revision=351306">351306</a></td><td>mmichelson</td><td>Eliminate odd initialization of probation variable.</td>
|
||||
<td></td></tr><tr><td><a href="http://svn.digium.com/view/asterisk/branches/1.8?view=revision&revision=351396">351396</a></td><td>schmidts</td><td>The get_pai function in chan_sip.c didn't recognized a proper callerid name and</td>
|
||||
<td></td></tr><tr><td><a href="http://svn.digium.com/view/asterisk/branches/1.8?view=revision&revision=351450">351450</a></td><td>mjordan</td><td>Include iLBC source code for distribution with Asterisk</td>
|
||||
<td><a href="https://issues.asterisk.org/jira/browse/ASTERISK-18943">ASTERISK-18943</a></td></tr><tr><td><a href="http://svn.digium.com/view/asterisk/branches/1.8?view=revision&revision=351504">351504</a></td><td>file</td><td>Prevent crash when an SDP offer is received with an encrypted video stream when support for video is disabled and res_srtp is loaded.</td>
|
||||
<td><a href="https://issues.asterisk.org/jira/browse/ASTERISK-19202">ASTERISK-19202</a></td></tr><tr><td><a href="http://svn.digium.com/view/asterisk/branches/1.8?view=revision&revision=351559">351559</a></td><td>jrose</td><td>Eliminates doubling the :port part of SIP Notify Message-Account headers.</td>
|
||||
<td><a href="https://issues.asterisk.org/jira/browse/ASTERISK-19057">ASTERISK-19057</a></td></tr><tr><td><a href="http://svn.digium.com/view/asterisk/branches/1.8?view=revision&revision=351611">351611</a></td><td>kmoore</td><td>Correct output of RTCP jitter statistics in SR and RR reports</td>
|
||||
<td><a href="https://issues.asterisk.org/jira/browse/ASTERISK-14530">ASTERISK-14530</a></td></tr><tr><td><a href="http://svn.digium.com/view/asterisk/branches/1.8?view=revision&revision=351618">351618</a></td><td>rmudgett</td><td>Misc minor fixes in reqresp_parser.c and chan_sip.c.</td>
|
||||
<td></td></tr><tr><td><a href="http://svn.digium.com/view/asterisk/branches/1.8?view=revision&revision=351707">351707</a></td><td>schmidts</td><td>enable doxygen build for files in the channels/sip folder like reqresp_parser.c</td>
|
||||
<td></td></tr><tr><td><a href="http://svn.digium.com/view/asterisk/branches/1.8?view=revision&revision=351760">351760</a></td><td>mjordan</td><td>Remove unused variable 'tmp' from helpfun in ilbc codec</td>
|
||||
<td></td></tr><tr><td><a href="http://svn.digium.com/view/asterisk/branches/1.8?view=revision&revision=351765">351765</a></td><td>jrose</td><td>Accidentally left off a semicolon only in 1.8 somehow for previous patch.</td>
|
||||
<td></td></tr><tr><td><a href="http://svn.digium.com/view/asterisk/branches/1.8?view=revision&revision=351858">351858</a></td><td>kmoore</td><td>Allow ilbc code to build under dev mode</td>
|
||||
<td></td></tr><tr><td><a href="http://svn.digium.com/view/asterisk/branches/1.8?view=revision&revision=351860">351860</a></td><td>kmoore</td><td>More corrections for the ilbc code</td>
|
||||
<td></td></tr><tr><td><a href="http://svn.digium.com/view/asterisk/branches/1.8?view=revision&revision=352014">352014</a></td><td>mmichelson</td><td>Fix RTP reference leak.</td>
|
||||
<td><a href="https://issues.asterisk.org/jira/browse/ASTERISK-19192">ASTERISK-19192</a></td></tr><tr><td><a href="http://svn.digium.com/view/asterisk/branches/1.8?view=revision&revision=352016">352016</a></td><td>mmichelson</td><td>Remove XXX comment that is not necessary.</td>
|
||||
<td></td></tr><tr><td><a href="http://svn.digium.com/view/asterisk/branches/1.8?view=revision&revision=352029">352029</a></td><td>rmudgett</td><td>Fix ast_app_dtget() time unit inconsistency.</td>
|
||||
<td><a href="https://issues.asterisk.org/jira/browse/ASTERISK-16817">ASTERISK-16817</a></td></tr><tr><td><a href="http://svn.digium.com/view/asterisk/branches/1.8?view=revision&revision=352090">352090</a></td><td>rmudgett</td><td>Fix sip_cfg.notifycid to be set with the defined enum values.</td>
|
||||
<td><a href="https://issues.asterisk.org/jira/browse/ASTERISK-19232">ASTERISK-19232</a></td></tr><tr><td><a href="http://svn.digium.com/view/asterisk/branches/1.8?view=revision&revision=352144">352144</a></td><td>mjordan</td><td>Correctly apply FAXOPT settings (V17, V27, V29) before starting spandsp layer</td>
|
||||
<td><a href="https://issues.asterisk.org/jira/browse/ASTERISK-16409">ASTERISK-16409</a></td></tr><tr><td><a href="http://svn.digium.com/view/asterisk/branches/1.8?view=revision&revision=352230">352230</a></td><td>mmichelson</td><td>Fix grammar of comment.</td>
|
||||
<td></td></tr><tr><td><a href="http://svn.digium.com/view/asterisk/branches/1.8?view=revision&revision=352287">352287</a></td><td>file</td><td>Move RTP timeout check to before bridged channel check so it is actually executed.</td>
|
||||
<td><a href="https://issues.asterisk.org/jira/browse/ASTERISK-19179">ASTERISK-19179</a>, <a href="https://issues.asterisk.org/jira/browse/ASTERISK-14534">ASTERISK-14534</a></td></tr><tr><td><a href="http://svn.digium.com/view/asterisk/branches/1.8?view=revision&revision=352291">352291</a></td><td>rmudgett</td><td>Fix locking issues with channel datastores in func_odbc.c.</td>
|
||||
<td><a href="https://issues.asterisk.org/jira/browse/ASTERISK-17948">ASTERISK-17948</a></td></tr><tr><td><a href="http://svn.digium.com/view/asterisk/branches/1.8?view=revision&revision=352367">352367</a></td><td>jrose</td><td>Set core sounds version to 1.4.22.</td>
|
||||
<td><a href="https://issues.asterisk.org/jira/browse/ASTERISK-18978">ASTERISK-18978</a></td></tr><tr><td><a href="http://svn.digium.com/view/asterisk/branches/1.8?view=revision&revision=352424">352424</a></td><td>mmichelson</td><td>Don't do a DNS lookup on an outbound REGISTER host if there is an outbound proxy configured.</td>
|
||||
<td><a href="https://issues.asterisk.org/jira/browse/ASTERISK-16550">ASTERISK-16550</a></td></tr><tr><td><a href="http://svn.digium.com/view/asterisk/branches/1.8?view=revision&revision=352511">352511</a></td><td>jrose</td><td>Redocuments sip types peer, user, friend in sip.conf.sample</td>
|
||||
<td><a href="https://issues.asterisk.org/jira/browse/ASTERISK-15537">ASTERISK-15537</a></td></tr><tr><td><a href="http://svn.digium.com/view/asterisk/branches/1.8?view=revision&revision=352514">352514</a></td><td>twilson</td><td>Clean up some SIP registry-related memory leaks</td>
|
||||
<td></td></tr><tr><td><a href="http://svn.digium.com/view/asterisk/branches/1.8?view=revision&revision=352551">352551</a></td><td>twilson</td><td>Remove some extraneous debugging from registry memleak fix</td>
|
||||
<td></td></tr><tr><td><a href="http://svn.digium.com/view/asterisk/branches/1.8?view=revision&revision=352612">352612</a></td><td>kpfleming</td><td>Avoid unnecessary rebuilds of main/test.c.</td>
|
||||
<td></td></tr><tr><td><a href="http://svn.digium.com/view/asterisk/branches/1.8?view=revision&revision=352643">352643</a></td><td>pabelanger</td><td>Fix -Werror=unused-but-set-variable compiler error (gcc 4.6.2)</td>
|
||||
<td></td></tr><tr><td><a href="http://svn.digium.com/view/asterisk/branches/1.8?view=revision&revision=352704">352704</a></td><td>alecdavis</td><td>Cleanup dialog-info+xml Notify dialog</td>
|
||||
<td></td></tr><tr><td><a href="http://svn.digium.com/view/asterisk/branches/1.8?view=revision&revision=352755">352755</a></td><td>jrose</td><td>Copy amaflags to sip_pvt from peer during create_addr_from_peer</td>
|
||||
<td><a href="https://issues.asterisk.org/jira/browse/ASTERISK-19029">ASTERISK-19029</a></td></tr><tr><td><a href="http://svn.digium.com/view/asterisk/branches/1.8?view=revision&revision=352807">352807</a></td><td>may</td><td>Fix outbound DTMF for inband mode (tell asterisk core to generate DTMF</td>
|
||||
<td><a href="https://issues.asterisk.org/jira/browse/ASTERISK-19233">ASTERISK-19233</a></td></tr><tr><td><a href="http://svn.digium.com/view/asterisk/branches/1.8?view=revision&revision=352862">352862</a></td><td>alecdavis</td><td>rfc4235 - Section 4.1: Versions MUST be representable using a non-negative 32 bit integer.</td>
|
||||
<td></td></tr><tr><td><a href="http://svn.digium.com/view/asterisk/branches/1.8?view=revision&revision=352955">352955</a></td><td>rmudgett</td><td>Audit of ao2_iterator_init() usage for v1.8.</td>
|
||||
<td></td></tr><tr><td><a href="http://svn.digium.com/view/asterisk/branches/1.8?view=revision&revision=352959">352959</a></td><td>jrose</td><td>Make failed PauseMonitor and UnpauseMonitor with no valid channel not close AMI session.</td>
|
||||
<td><a href="https://issues.asterisk.org/jira/browse/ASTERISK-19249">ASTERISK-19249</a></td></tr><tr><td><a href="http://svn.digium.com/view/asterisk/branches/1.8?view=revision&revision=353077">353077</a></td><td>russell</td><td>Update ast_set_default_eid() to find more network interfaces.</td>
|
||||
<td></td></tr><tr><td><a href="http://svn.digium.com/view/asterisk/branches/1.8?view=revision&revision=353126">353126</a></td><td>kpfleming</td><td>Add 'L16-256' MIME subtype alias for slin16.</td>
|
||||
<td></td></tr><tr><td><a href="http://svn.digium.com/view/asterisk/branches/1.8?view=revision&revision=353175">353175</a></td><td>russell</td><td>Find even more network interfaces.</td>
|
||||
<td></td></tr><tr><td><a href="http://svn.digium.com/view/asterisk/branches/1.8?view=revision&revision=353260">353260</a></td><td>kpfleming</td><td>Clarify log WARNING message when port-zero SDP 'm' lines received.</td>
|
||||
<td></td></tr><tr><td><a href="http://svn.digium.com/view/asterisk/branches/1.8?view=revision&revision=354882">354882</a></td><td>mjordan</td><td>Create 1.8.10.0-rc2</td>
|
||||
<td></td></tr><tr><td><a href="http://svn.digium.com/view/asterisk/branches/1.8?view=revision&revision=354884">354884</a></td><td>mjordan</td><td>Commit r353371,353999,353915,354495,354542,354547 for rc2</td>
|
||||
<td></td></tr><tr><td><a href="http://svn.digium.com/view/asterisk/branches/1.8?view=revision&revision=354886">354886</a></td><td>bebuild</td><td>Importing release summary for 1.8.10.0-rc2 release.</td>
|
||||
<td></td></tr><tr><td><a href="http://svn.digium.com/view/asterisk/branches/1.8?view=revision&revision=357261">357261</a></td><td>mjordan</td><td>Create 1.8.10.0-rc3</td>
|
||||
<td></td></tr><tr><td><a href="http://svn.digium.com/view/asterisk/branches/1.8?view=revision&revision=357264">357264</a></td><td>mjordan</td><td>Updates for 1.8.10.0-rc3</td>
|
||||
<td></td></tr><tr><td><a href="http://svn.digium.com/view/asterisk/branches/1.8?view=revision&revision=357267">357267</a></td><td>bebuild</td><td>Importing release summary for 1.8.10.0-rc3 release.</td>
|
||||
<td></td></tr><tr><td><a href="http://svn.digium.com/view/asterisk/branches/1.8?view=revision&revision=357268">357268</a></td><td>mjordan</td><td>Updated ChangeLog slightly</td>
|
||||
<td></td></tr><tr><td><a href="http://svn.digium.com/view/asterisk/branches/1.8?view=revision&revision=357717">357717</a></td><td>mjordan</td><td>Created tag for 1.8.10.0-rc4</td>
|
||||
<td></td></tr><tr><td><a href="http://svn.digium.com/view/asterisk/branches/1.8?view=revision&revision=357724">357724</a></td><td>mjordan</td><td>Merge 357665, update .version and ChangeLog</td>
|
||||
<td></td></tr><tr><td><a href="http://svn.digium.com/view/asterisk/branches/1.8?view=revision&revision=357732">357732</a></td><td>mjordan</td><td>Update date in ChangeLog</td>
|
||||
<td></td></tr><tr><td><a href="http://svn.digium.com/view/asterisk/branches/1.8?view=revision&revision=357735">357735</a></td><td>bebuild</td><td>Importing release summary for 1.8.10.0-rc4 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
|
||||
CHANGES | 22
|
||||
ChangeLog | 13
|
||||
addons/chan_mobile.c | 9
|
||||
addons/chan_ooh323.c | 23
|
||||
apps/app_chanspy.c | 13
|
||||
apps/app_dial.c | 4
|
||||
apps/app_followme.c | 262
|
||||
apps/app_meetme.c | 31
|
||||
apps/app_queue.c | 36
|
||||
apps/app_voicemail.c | 17
|
||||
asterisk-1.8.10.0-rc3-summary.html | 61
|
||||
asterisk-1.8.10.0-rc3-summary.txt | 89
|
||||
asterisk-1.8.10.0-rc4-summary.html | 61
|
||||
asterisk-1.8.10.0-rc4-summary.txt | 91
|
||||
autoconf/ast_gcc_attribute.m4 | 8
|
||||
autoconf/libcurl.m4 | 4
|
||||
bootstrap.sh | 4
|
||||
cel/cel_manager.c | 34
|
||||
cel/cel_odbc.c | 2
|
||||
cel/cel_pgsql.c | 2
|
||||
cel/cel_sqlite3_custom.c | 2
|
||||
channels/chan_dahdi.c | 15
|
||||
channels/chan_h323.c | 9
|
||||
channels/chan_iax2.c | 24
|
||||
channels/chan_sip.c | 525 -
|
||||
channels/sip/config_parser.c | 4
|
||||
channels/sip/include/sip.h | 2
|
||||
channels/sip/reqresp_parser.c | 200
|
||||
codecs/codec_ilbc.c | 1
|
||||
codecs/ilbc/FrameClassify.c | 114
|
||||
codecs/ilbc/FrameClassify.h | 27
|
||||
codecs/ilbc/LICENSE | 29
|
||||
codecs/ilbc/LICENSE_ADDENDUM | 55
|
||||
codecs/ilbc/LPCdecode.c | 158
|
||||
codecs/ilbc/LPCdecode.h | 52
|
||||
codecs/ilbc/LPCencode.c | 240
|
||||
codecs/ilbc/LPCencode.h | 28
|
||||
codecs/ilbc/Makefile | 11
|
||||
codecs/ilbc/PATENTS | 24
|
||||
codecs/ilbc/StateConstructW.c | 86
|
||||
codecs/ilbc/StateConstructW.h | 31
|
||||
codecs/ilbc/StateSearchW.c | 211
|
||||
codecs/ilbc/StateSearchW.h | 52
|
||||
codecs/ilbc/anaFilter.c | 72
|
||||
codecs/ilbc/anaFilter.h | 30
|
||||
codecs/ilbc/constants.c | 770 ++
|
||||
codecs/ilbc/constants.h | 80
|
||||
codecs/ilbc/createCB.c | 231
|
||||
codecs/ilbc/createCB.h | 58
|
||||
codecs/ilbc/doCPLC.c | 270
|
||||
codecs/ilbc/doCPLC.h | 29
|
||||
codecs/ilbc/enhancer.c | 701 ++
|
||||
codecs/ilbc/enhancer.h | 36
|
||||
codecs/ilbc/extract-cfile.awk | 24
|
||||
codecs/ilbc/filter.c | 175
|
||||
codecs/ilbc/filter.h | 80
|
||||
codecs/ilbc/gainquant.c | 116
|
||||
codecs/ilbc/gainquant.h | 30
|
||||
codecs/ilbc/getCBvec.c | 193
|
||||
codecs/ilbc/getCBvec.h | 25
|
||||
codecs/ilbc/helpfun.c | 324
|
||||
codecs/ilbc/helpfun.h | 106
|
||||
codecs/ilbc/hpInput.c | 65
|
||||
codecs/ilbc/hpInput.h | 24
|
||||
codecs/ilbc/hpOutput.c | 61
|
||||
codecs/ilbc/hpOutput.h | 24
|
||||
codecs/ilbc/iCBConstruct.c | 112
|
||||
codecs/ilbc/iCBConstruct.h | 40
|
||||
codecs/ilbc/iCBSearch.c | 512 +
|
||||
codecs/ilbc/iCBSearch.h | 37
|
||||
codecs/ilbc/iLBC_decode.c | 651 +
|
||||
codecs/ilbc/iLBC_decode.h | 42
|
||||
codecs/ilbc/iLBC_define.h | 217
|
||||
codecs/ilbc/iLBC_encode.c | 543 +
|
||||
codecs/ilbc/iLBC_encode.h | 39
|
||||
codecs/ilbc/iLBC_test.c | 314
|
||||
codecs/ilbc/lsf.c | 283
|
||||
codecs/ilbc/lsf.h | 27
|
||||
codecs/ilbc/packing.c | 182
|
||||
codecs/ilbc/packing.h | 68
|
||||
codecs/ilbc/rfc3951.txt |10867 +++++++++++++++++++++++++++++++++
|
||||
codecs/ilbc/syntFilter.c | 80
|
||||
codecs/ilbc/syntFilter.h | 24
|
||||
configs/cel.conf.sample | 6
|
||||
configs/cel_custom.conf.sample | 13
|
||||
configs/cel_odbc.conf.sample | 53
|
||||
configs/cel_pgsql.conf.sample | 56
|
||||
configs/cel_sqlite3_custom.conf.sample | 16
|
||||
configs/rtp.conf.sample | 7
|
||||
configs/sip.conf.sample | 28
|
||||
configure.ac | 119
|
||||
contrib/asterisk-ng-doxygen | 1
|
||||
contrib/init.d/rc.debian.asterisk | 2
|
||||
contrib/scripts/autosupport | 100
|
||||
contrib/scripts/autosupport.8 | 9
|
||||
contrib/scripts/get_ilbc_source.sh | 7
|
||||
contrib/scripts/install_prereq | 4
|
||||
contrib/scripts/live_ast | 9
|
||||
contrib/scripts/valgrind_compare | 21
|
||||
funcs/func_lock.c | 23
|
||||
funcs/func_odbc.c | 24
|
||||
funcs/func_timeout.c | 4
|
||||
include/asterisk/autoconfig.h.in | 14
|
||||
include/asterisk/indications.h | 3
|
||||
include/asterisk/netsock2.h | 8
|
||||
main/acl.c | 9
|
||||
main/app.c | 12
|
||||
main/asterisk.c | 213
|
||||
main/cel.c | 15
|
||||
main/dsp.c | 63
|
||||
main/features.c | 15
|
||||
main/file.c | 16
|
||||
main/indications.c | 2
|
||||
main/netsock.c | 32
|
||||
main/pbx.c | 3
|
||||
main/rtp_engine.c | 5
|
||||
main/taskprocessor.c | 2
|
||||
main/test.c | 8
|
||||
res/res_fax_spandsp.c | 27
|
||||
res/res_monitor.c | 35
|
||||
res/res_odbc.c | 5
|
||||
res/res_rtp_asterisk.c | 85
|
||||
res/res_srtp.c | 46
|
||||
res/snmp/agent.c | 9
|
||||
sounds/Makefile | 2
|
||||
utils/extconf.c | 7
|
||||
127 files changed, 20400 insertions(+), 988 deletions(-)
|
||||
</pre><br/>
|
||||
<hr/>
|
||||
</body>
|
||||
</html>
|
505
asterisk-1.8.10.0-summary.txt
Normal file
505
asterisk-1.8.10.0-summary.txt
Normal file
@@ -0,0 +1,505 @@
|
||||
Release Summary
|
||||
|
||||
asterisk-1.8.10.0
|
||||
|
||||
Date: 2012-03-05
|
||||
|
||||
<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.9.0.
|
||||
|
||||
----------------------------------------------------------------------
|
||||
|
||||
Contributors
|
||||
|
||||
[Back to Top]
|
||||
|
||||
This table lists the people who have submitted code, those that have
|
||||
tested patches, as well as those that reported issues on the issue tracker
|
||||
that were resolved in this release. For coders, the number is how many of
|
||||
their patches (of any size) were committed into this release. For testers,
|
||||
the number is the number of times their name was listed as assisting with
|
||||
testing a patch. Finally, for reporters, the number is the number of
|
||||
issues that they reported that were closed by commits that went into this
|
||||
release.
|
||||
|
||||
Coders Testers Reporters
|
||||
18 rmudgett 1 Kristjan Vrban 1 rossbeer
|
||||
14 mjordan 1 ys
|
||||
12 jrose
|
||||
9 kmoore
|
||||
8 mmichelson
|
||||
6 kpfleming
|
||||
5 twilson
|
||||
3 bebuild
|
||||
3 file
|
||||
3 russell
|
||||
2 alecdavis
|
||||
2 schmidts
|
||||
2 wdoekes
|
||||
1 may
|
||||
1 pabelanger
|
||||
1 Yuri
|
||||
|
||||
----------------------------------------------------------------------
|
||||
|
||||
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: Channels/chan_sip/Subscriptions
|
||||
|
||||
ASTERISK-19057: message-summary NOTIFY: Port in Message-Account added
|
||||
twice and mwi_from (sip.conf) has no effect
|
||||
Revision: 351759
|
||||
Reporter: ys
|
||||
Coders: Yuri
|
||||
|
||||
Category: Channels/chan_sip/Transfers
|
||||
|
||||
ASTERISK-19173: All blind transfers failing on 1.8.9.0-rc1
|
||||
Revision: 352199
|
||||
Reporter: rossbeer
|
||||
Testers: Kristjan Vrban
|
||||
Coders: mmichelson
|
||||
|
||||
----------------------------------------------------------------------
|
||||
|
||||
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 |
|
||||
|--------+----------+------------------------------------------+---------------|
|
||||
| | |Fix documentation for SayNumber to reflect| |
|
||||
|349450 |jrose |the fact that language is changed in |ASTERISK-18962 |
|
||||
| | |CHANNEL() | |
|
||||
|--------+----------+------------------------------------------+---------------|
|
||||
|349482 |jrose |Adds Subscription-State header to notify |ASTERISK-17953 |
|
||||
| | |with call completion. per RFC3265 | |
|
||||
|--------+----------+------------------------------------------+---------------|
|
||||
|349504 |kmoore |Update autosupport script and man page | |
|
||||
|--------+----------+------------------------------------------+---------------|
|
||||
|349529 |kmoore |Make debian init script conform to the LSB|ASTERISK-17958 |
|
||||
| | |standard | |
|
||||
|--------+----------+------------------------------------------+---------------|
|
||||
|349558 |rmudgett |Fix segfault in chan_dahdi for |ASTERISK-19142 |
|
||||
| | |CHANNEL(dahdi_span) evaluation on hangup. | |
|
||||
|--------+----------+------------------------------------------+---------------|
|
||||
|349672 |jrose |Ensures Asterisk closes when receiving |ASTERISK-19127 |
|
||||
| | |terminal signals in 'no fork' mode. | |
|
||||
|--------+----------+------------------------------------------+---------------|
|
||||
| | |Fix an issue where dsp.c would interpret | |
|
||||
|349728 |jrose |multiple dtmf events from a single key |ASTERISK-17493 |
|
||||
| | |press. | |
|
||||
|--------+----------+------------------------------------------+---------------|
|
||||
|349731 |kmoore |Allow playback of formats that don't |ASTERISK-18994 |
|
||||
| | |support seeking | |
|
||||
|--------+----------+------------------------------------------+---------------|
|
||||
| | |Make not assume that the | |
|
||||
|349819 |rmudgett |cel_sqlite3_custom SQL table primary key |ASTERISK-18963 |
|
||||
| | |is AcctId. | |
|
||||
|--------+----------+------------------------------------------+---------------|
|
||||
|349872 |rmudgett |Fix memory leaks in app_followme |ASTERISK-19055 |
|
||||
| | |find_realtime(). | |
|
||||
|--------+----------+------------------------------------------+---------------|
|
||||
|349968 |twilson |Don't leak CID in From header when |ASTERISK-16538 |
|
||||
| | |presentation=unavailable | |
|
||||
|--------+----------+------------------------------------------+---------------|
|
||||
|350023 |kmoore |Prevent SLA settings from getting wiped | |
|
||||
| | |out on reload | |
|
||||
|--------+----------+------------------------------------------+---------------|
|
||||
|350075 |rmudgett |Make Asterisk -x command line parameter |ASTERISK-19094 |
|
||||
| | |imply -r parameter presence. | |
|
||||
|--------+----------+------------------------------------------+---------------|
|
||||
| | |Update contrib script live_ast to invoke | |
|
||||
|350127 |rmudgett |Asterisk with valgrind and suppression |ASTERISK-17339 |
|
||||
| | |file. | |
|
||||
|--------+----------+------------------------------------------+---------------|
|
||||
|350128 |rmudgett |live_ast: valgrind: run asterisk under | |
|
||||
| | |valgrind | |
|
||||
|--------+----------+------------------------------------------+---------------|
|
||||
|350220 |rmudgett |Fix joinable thread terminating without |ASTERISK-17339,|
|
||||
| | |joiner memory leak in chan_iax.c. |ASTERISK-17825 |
|
||||
|--------+----------+------------------------------------------+---------------|
|
||||
|350311 |rmudgett |Fix absolute/relative time mismatch in |ASTERISK-16868 |
|
||||
| | |LOCK function. | |
|
||||
|--------+----------+------------------------------------------+---------------|
|
||||
| | |Make FollowMe optionally update connected | |
|
||||
|350364 |rmudgett |line information when the accepting |ASTERISK-18969 |
|
||||
| | |endpoint is bridged. | |
|
||||
|--------+----------+------------------------------------------+---------------|
|
||||
|350452 |rmudgett |Remove extraneous BRIDGEPEER AMI VarSet |ASTERISK-19180 |
|
||||
| | |event on a CEL dummy channel. | |
|
||||
|--------+----------+------------------------------------------+---------------|
|
||||
|350501 |jrose |Adds peer to CEL report on |ASTERISK-17940 |
|
||||
| | |CEL_BRIDGE_START and CEL_BRIDGE_END | |
|
||||
|--------+----------+------------------------------------------+---------------|
|
||||
|350552 |mjordan |Realtime queues failed to load queue |ASTERISK-19170 |
|
||||
| | |information without queue member table | |
|
||||
|--------+----------+------------------------------------------+---------------|
|
||||
|350555 |rmudgett |Add missing CEL logging fields to various |ASTERISK-17190 |
|
||||
| | |CEL backends. | |
|
||||
|--------+----------+------------------------------------------+---------------|
|
||||
|350571 |rmudgett |Use compatible names for event extra data |ASTERISK-17190 |
|
||||
| | |for various CEL backends. | |
|
||||
|--------+----------+------------------------------------------+---------------|
|
||||
| | |Set port to a default sane value if a | |
|
||||
|350679 |mmichelson|bogus one is provided when parsing | |
|
||||
| | |hostnames. | |
|
||||
|--------+----------+------------------------------------------+---------------|
|
||||
|350730 |kmoore |Make sure asterisk builds on OpenBSD |ASTERISK-18929 |
|
||||
|--------+----------+------------------------------------------+---------------|
|
||||
|350733 |rmudgett |Correct eventtype names in cel_odbc and | |
|
||||
| | |cel_pgsql sample files | |
|
||||
|--------+----------+------------------------------------------+---------------|
|
||||
|350736 |kmoore |Run bootstrap.sh for the for the |ASTERISK-18929 |
|
||||
| | |ASTERISK-18929 fix | |
|
||||
|--------+----------+------------------------------------------+---------------|
|
||||
|350788 |kpfleming |Ensure that two prerequisites are properly| |
|
||||
| | |installed on Debian-style distributions. | |
|
||||
|--------+----------+------------------------------------------+---------------|
|
||||
|350789 |kpfleming |Correct some 'set-but-not-used' variable | |
|
||||
| | |warnings. | |
|
||||
|--------+----------+------------------------------------------+---------------|
|
||||
|350837 |kpfleming |Ensure that all AC_LANG_PROGRAM calls in | |
|
||||
| | |the configure script are properly quoted. | |
|
||||
|--------+----------+------------------------------------------+---------------|
|
||||
|350885 |wdoekes |Fix -Werror=unused-but-set-variable |ASTERISK-15350 |
|
||||
| | |compile error in utils/extconf.c. | |
|
||||
|--------+----------+------------------------------------------+---------------|
|
||||
|350888 |wdoekes |Allow only one thread at a time to do |ASTERISK-18883 |
|
||||
| | |asterisk cleanup/shutdown. | |
|
||||
|--------+----------+------------------------------------------+---------------|
|
||||
|350975 |file |Add missing code to set direct RTP setup | |
|
||||
| | |information during dialing. | |
|
||||
|--------+----------+------------------------------------------+---------------|
|
||||
|351027 |mjordan |Create and initialize udptl only when |ASTERISK-16698,|
|
||||
| | |dialog negotiates for image media |ASTERISK-16794 |
|
||||
|--------+----------+------------------------------------------+---------------|
|
||||
|351080 |twilson |Don't prematurely stop SIP session timer |ASTERISK-18996 |
|
||||
|--------+----------+------------------------------------------+---------------|
|
||||
|351130 |twilson |Ensure ACK retransmit & hangup on non-200 |ASTERISK-17717 |
|
||||
| | |response to INVITE | |
|
||||
|--------+----------+------------------------------------------+---------------|
|
||||
|351182 |russell |Add some missing locking in chan_sip. |ASTERISK-18979 |
|
||||
|--------+----------+------------------------------------------+---------------|
|
||||
|351233 |mjordan |Fix udptl issue with initial INVITE | |
|
||||
| | |introduced by r351027 | |
|
||||
|--------+----------+------------------------------------------+---------------|
|
||||
|351284 |mmichelson|Use built-in parsing functions for Contact|ASTERISK-18990 |
|
||||
| | |and Record-Route headers. | |
|
||||
|--------+----------+------------------------------------------+---------------|
|
||||
|351287 |jrose |Adds pjmedia probation concepts to | |
|
||||
| | |res_rtp_asterisk's learning mode. | |
|
||||
|--------+----------+------------------------------------------+---------------|
|
||||
|351306 |mmichelson|Eliminate odd initialization of probation | |
|
||||
| | |variable. | |
|
||||
|--------+----------+------------------------------------------+---------------|
|
||||
|351396 |schmidts |The get_pai function in chan_sip.c didn't | |
|
||||
| | |recognized a proper callerid name and | |
|
||||
|--------+----------+------------------------------------------+---------------|
|
||||
|351450 |mjordan |Include iLBC source code for distribution |ASTERISK-18943 |
|
||||
| | |with Asterisk | |
|
||||
|--------+----------+------------------------------------------+---------------|
|
||||
| | |Prevent crash when an SDP offer is | |
|
||||
|351504 |file |received with an encrypted video stream |ASTERISK-19202 |
|
||||
| | |when support for video is disabled and | |
|
||||
| | |res_srtp is loaded. | |
|
||||
|--------+----------+------------------------------------------+---------------|
|
||||
|351559 |jrose |Eliminates doubling the :port part of SIP |ASTERISK-19057 |
|
||||
| | |Notify Message-Account headers. | |
|
||||
|--------+----------+------------------------------------------+---------------|
|
||||
|351611 |kmoore |Correct output of RTCP jitter statistics |ASTERISK-14530 |
|
||||
| | |in SR and RR reports | |
|
||||
|--------+----------+------------------------------------------+---------------|
|
||||
|351618 |rmudgett |Misc minor fixes in reqresp_parser.c and | |
|
||||
| | |chan_sip.c. | |
|
||||
|--------+----------+------------------------------------------+---------------|
|
||||
|351707 |schmidts |enable doxygen build for files in the | |
|
||||
| | |channels/sip folder like reqresp_parser.c | |
|
||||
|--------+----------+------------------------------------------+---------------|
|
||||
|351760 |mjordan |Remove unused variable 'tmp' from helpfun | |
|
||||
| | |in ilbc codec | |
|
||||
|--------+----------+------------------------------------------+---------------|
|
||||
|351765 |jrose |Accidentally left off a semicolon only in | |
|
||||
| | |1.8 somehow for previous patch. | |
|
||||
|--------+----------+------------------------------------------+---------------|
|
||||
|351858 |kmoore |Allow ilbc code to build under dev mode | |
|
||||
|--------+----------+------------------------------------------+---------------|
|
||||
|351860 |kmoore |More corrections for the ilbc code | |
|
||||
|--------+----------+------------------------------------------+---------------|
|
||||
|352014 |mmichelson|Fix RTP reference leak. |ASTERISK-19192 |
|
||||
|--------+----------+------------------------------------------+---------------|
|
||||
|352016 |mmichelson|Remove XXX comment that is not necessary. | |
|
||||
|--------+----------+------------------------------------------+---------------|
|
||||
|352029 |rmudgett |Fix ast_app_dtget() time unit |ASTERISK-16817 |
|
||||
| | |inconsistency. | |
|
||||
|--------+----------+------------------------------------------+---------------|
|
||||
|352090 |rmudgett |Fix sip_cfg.notifycid to be set with the |ASTERISK-19232 |
|
||||
| | |defined enum values. | |
|
||||
|--------+----------+------------------------------------------+---------------|
|
||||
|352144 |mjordan |Correctly apply FAXOPT settings (V17, V27,|ASTERISK-16409 |
|
||||
| | |V29) before starting spandsp layer | |
|
||||
|--------+----------+------------------------------------------+---------------|
|
||||
|352230 |mmichelson|Fix grammar of comment. | |
|
||||
|--------+----------+------------------------------------------+---------------|
|
||||
|352287 |file |Move RTP timeout check to before bridged |ASTERISK-19179,|
|
||||
| | |channel check so it is actually executed. |ASTERISK-14534 |
|
||||
|--------+----------+------------------------------------------+---------------|
|
||||
|352291 |rmudgett |Fix locking issues with channel datastores|ASTERISK-17948 |
|
||||
| | |in func_odbc.c. | |
|
||||
|--------+----------+------------------------------------------+---------------|
|
||||
|352367 |jrose |Set core sounds version to 1.4.22. |ASTERISK-18978 |
|
||||
|--------+----------+------------------------------------------+---------------|
|
||||
| | |Don't do a DNS lookup on an outbound | |
|
||||
|352424 |mmichelson|REGISTER host if there is an outbound |ASTERISK-16550 |
|
||||
| | |proxy configured. | |
|
||||
|--------+----------+------------------------------------------+---------------|
|
||||
|352511 |jrose |Redocuments sip types peer, user, friend |ASTERISK-15537 |
|
||||
| | |in sip.conf.sample | |
|
||||
|--------+----------+------------------------------------------+---------------|
|
||||
|352514 |twilson |Clean up some SIP registry-related memory | |
|
||||
| | |leaks | |
|
||||
|--------+----------+------------------------------------------+---------------|
|
||||
|352551 |twilson |Remove some extraneous debugging from | |
|
||||
| | |registry memleak fix | |
|
||||
|--------+----------+------------------------------------------+---------------|
|
||||
|352612 |kpfleming |Avoid unnecessary rebuilds of main/test.c.| |
|
||||
|--------+----------+------------------------------------------+---------------|
|
||||
|352643 |pabelanger|Fix -Werror=unused-but-set-variable | |
|
||||
| | |compiler error (gcc 4.6.2) | |
|
||||
|--------+----------+------------------------------------------+---------------|
|
||||
|352704 |alecdavis |Cleanup dialog-info+xml Notify dialog | |
|
||||
|--------+----------+------------------------------------------+---------------|
|
||||
|352755 |jrose |Copy amaflags to sip_pvt from peer during |ASTERISK-19029 |
|
||||
| | |create_addr_from_peer | |
|
||||
|--------+----------+------------------------------------------+---------------|
|
||||
|352807 |may |Fix outbound DTMF for inband mode (tell |ASTERISK-19233 |
|
||||
| | |asterisk core to generate DTMF | |
|
||||
|--------+----------+------------------------------------------+---------------|
|
||||
| | |rfc4235 - Section 4.1: Versions MUST be | |
|
||||
|352862 |alecdavis |representable using a non-negative 32 bit | |
|
||||
| | |integer. | |
|
||||
|--------+----------+------------------------------------------+---------------|
|
||||
|352955 |rmudgett |Audit of ao2_iterator_init() usage for | |
|
||||
| | |v1.8. | |
|
||||
|--------+----------+------------------------------------------+---------------|
|
||||
| | |Make failed PauseMonitor and | |
|
||||
|352959 |jrose |UnpauseMonitor with no valid channel not |ASTERISK-19249 |
|
||||
| | |close AMI session. | |
|
||||
|--------+----------+------------------------------------------+---------------|
|
||||
|353077 |russell |Update ast_set_default_eid() to find more | |
|
||||
| | |network interfaces. | |
|
||||
|--------+----------+------------------------------------------+---------------|
|
||||
|353126 |kpfleming |Add 'L16-256' MIME subtype alias for | |
|
||||
| | |slin16. | |
|
||||
|--------+----------+------------------------------------------+---------------|
|
||||
|353175 |russell |Find even more network interfaces. | |
|
||||
|--------+----------+------------------------------------------+---------------|
|
||||
|353260 |kpfleming |Clarify log WARNING message when port-zero| |
|
||||
| | |SDP 'm' lines received. | |
|
||||
|--------+----------+------------------------------------------+---------------|
|
||||
|354882 |mjordan |Create 1.8.10.0-rc2 | |
|
||||
|--------+----------+------------------------------------------+---------------|
|
||||
| | |Commit | |
|
||||
|354884 |mjordan |r353371,353999,353915,354495,354542,354547| |
|
||||
| | |for rc2 | |
|
||||
|--------+----------+------------------------------------------+---------------|
|
||||
|354886 |bebuild |Importing release summary for 1.8.10.0-rc2| |
|
||||
| | |release. | |
|
||||
|--------+----------+------------------------------------------+---------------|
|
||||
|357261 |mjordan |Create 1.8.10.0-rc3 | |
|
||||
|--------+----------+------------------------------------------+---------------|
|
||||
|357264 |mjordan |Updates for 1.8.10.0-rc3 | |
|
||||
|--------+----------+------------------------------------------+---------------|
|
||||
|357267 |bebuild |Importing release summary for 1.8.10.0-rc3| |
|
||||
| | |release. | |
|
||||
|--------+----------+------------------------------------------+---------------|
|
||||
|357268 |mjordan |Updated ChangeLog slightly | |
|
||||
|--------+----------+------------------------------------------+---------------|
|
||||
|357717 |mjordan |Created tag for 1.8.10.0-rc4 | |
|
||||
|--------+----------+------------------------------------------+---------------|
|
||||
|357724 |mjordan |Merge 357665, update .version and | |
|
||||
| | |ChangeLog | |
|
||||
|--------+----------+------------------------------------------+---------------|
|
||||
|357732 |mjordan |Update date in ChangeLog | |
|
||||
|--------+----------+------------------------------------------+---------------|
|
||||
|357735 |bebuild |Importing release summary for 1.8.10.0-rc4| |
|
||||
| | |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
|
||||
CHANGES | 22
|
||||
ChangeLog | 13
|
||||
addons/chan_mobile.c | 9
|
||||
addons/chan_ooh323.c | 23
|
||||
apps/app_chanspy.c | 13
|
||||
apps/app_dial.c | 4
|
||||
apps/app_followme.c | 262
|
||||
apps/app_meetme.c | 31
|
||||
apps/app_queue.c | 36
|
||||
apps/app_voicemail.c | 17
|
||||
asterisk-1.8.10.0-rc3-summary.html | 61
|
||||
asterisk-1.8.10.0-rc3-summary.txt | 89
|
||||
asterisk-1.8.10.0-rc4-summary.html | 61
|
||||
asterisk-1.8.10.0-rc4-summary.txt | 91
|
||||
autoconf/ast_gcc_attribute.m4 | 8
|
||||
autoconf/libcurl.m4 | 4
|
||||
bootstrap.sh | 4
|
||||
cel/cel_manager.c | 34
|
||||
cel/cel_odbc.c | 2
|
||||
cel/cel_pgsql.c | 2
|
||||
cel/cel_sqlite3_custom.c | 2
|
||||
channels/chan_dahdi.c | 15
|
||||
channels/chan_h323.c | 9
|
||||
channels/chan_iax2.c | 24
|
||||
channels/chan_sip.c | 525 -
|
||||
channels/sip/config_parser.c | 4
|
||||
channels/sip/include/sip.h | 2
|
||||
channels/sip/reqresp_parser.c | 200
|
||||
codecs/codec_ilbc.c | 1
|
||||
codecs/ilbc/FrameClassify.c | 114
|
||||
codecs/ilbc/FrameClassify.h | 27
|
||||
codecs/ilbc/LICENSE | 29
|
||||
codecs/ilbc/LICENSE_ADDENDUM | 55
|
||||
codecs/ilbc/LPCdecode.c | 158
|
||||
codecs/ilbc/LPCdecode.h | 52
|
||||
codecs/ilbc/LPCencode.c | 240
|
||||
codecs/ilbc/LPCencode.h | 28
|
||||
codecs/ilbc/Makefile | 11
|
||||
codecs/ilbc/PATENTS | 24
|
||||
codecs/ilbc/StateConstructW.c | 86
|
||||
codecs/ilbc/StateConstructW.h | 31
|
||||
codecs/ilbc/StateSearchW.c | 211
|
||||
codecs/ilbc/StateSearchW.h | 52
|
||||
codecs/ilbc/anaFilter.c | 72
|
||||
codecs/ilbc/anaFilter.h | 30
|
||||
codecs/ilbc/constants.c | 770 ++
|
||||
codecs/ilbc/constants.h | 80
|
||||
codecs/ilbc/createCB.c | 231
|
||||
codecs/ilbc/createCB.h | 58
|
||||
codecs/ilbc/doCPLC.c | 270
|
||||
codecs/ilbc/doCPLC.h | 29
|
||||
codecs/ilbc/enhancer.c | 701 ++
|
||||
codecs/ilbc/enhancer.h | 36
|
||||
codecs/ilbc/extract-cfile.awk | 24
|
||||
codecs/ilbc/filter.c | 175
|
||||
codecs/ilbc/filter.h | 80
|
||||
codecs/ilbc/gainquant.c | 116
|
||||
codecs/ilbc/gainquant.h | 30
|
||||
codecs/ilbc/getCBvec.c | 193
|
||||
codecs/ilbc/getCBvec.h | 25
|
||||
codecs/ilbc/helpfun.c | 324
|
||||
codecs/ilbc/helpfun.h | 106
|
||||
codecs/ilbc/hpInput.c | 65
|
||||
codecs/ilbc/hpInput.h | 24
|
||||
codecs/ilbc/hpOutput.c | 61
|
||||
codecs/ilbc/hpOutput.h | 24
|
||||
codecs/ilbc/iCBConstruct.c | 112
|
||||
codecs/ilbc/iCBConstruct.h | 40
|
||||
codecs/ilbc/iCBSearch.c | 512 +
|
||||
codecs/ilbc/iCBSearch.h | 37
|
||||
codecs/ilbc/iLBC_decode.c | 651 +
|
||||
codecs/ilbc/iLBC_decode.h | 42
|
||||
codecs/ilbc/iLBC_define.h | 217
|
||||
codecs/ilbc/iLBC_encode.c | 543 +
|
||||
codecs/ilbc/iLBC_encode.h | 39
|
||||
codecs/ilbc/iLBC_test.c | 314
|
||||
codecs/ilbc/lsf.c | 283
|
||||
codecs/ilbc/lsf.h | 27
|
||||
codecs/ilbc/packing.c | 182
|
||||
codecs/ilbc/packing.h | 68
|
||||
codecs/ilbc/rfc3951.txt |10867 +++++++++++++++++++++++++++++++++
|
||||
codecs/ilbc/syntFilter.c | 80
|
||||
codecs/ilbc/syntFilter.h | 24
|
||||
configs/cel.conf.sample | 6
|
||||
configs/cel_custom.conf.sample | 13
|
||||
configs/cel_odbc.conf.sample | 53
|
||||
configs/cel_pgsql.conf.sample | 56
|
||||
configs/cel_sqlite3_custom.conf.sample | 16
|
||||
configs/rtp.conf.sample | 7
|
||||
configs/sip.conf.sample | 28
|
||||
configure.ac | 119
|
||||
contrib/asterisk-ng-doxygen | 1
|
||||
contrib/init.d/rc.debian.asterisk | 2
|
||||
contrib/scripts/autosupport | 100
|
||||
contrib/scripts/autosupport.8 | 9
|
||||
contrib/scripts/get_ilbc_source.sh | 7
|
||||
contrib/scripts/install_prereq | 4
|
||||
contrib/scripts/live_ast | 9
|
||||
contrib/scripts/valgrind_compare | 21
|
||||
funcs/func_lock.c | 23
|
||||
funcs/func_odbc.c | 24
|
||||
funcs/func_timeout.c | 4
|
||||
include/asterisk/autoconfig.h.in | 14
|
||||
include/asterisk/indications.h | 3
|
||||
include/asterisk/netsock2.h | 8
|
||||
main/acl.c | 9
|
||||
main/app.c | 12
|
||||
main/asterisk.c | 213
|
||||
main/cel.c | 15
|
||||
main/dsp.c | 63
|
||||
main/features.c | 15
|
||||
main/file.c | 16
|
||||
main/indications.c | 2
|
||||
main/netsock.c | 32
|
||||
main/pbx.c | 3
|
||||
main/rtp_engine.c | 5
|
||||
main/taskprocessor.c | 2
|
||||
main/test.c | 8
|
||||
res/res_fax_spandsp.c | 27
|
||||
res/res_monitor.c | 35
|
||||
res/res_odbc.c | 5
|
||||
res/res_rtp_asterisk.c | 85
|
||||
res/res_srtp.c | 46
|
||||
res/snmp/agent.c | 9
|
||||
sounds/Makefile | 2
|
||||
utils/extconf.c | 7
|
||||
127 files changed, 20400 insertions(+), 988 deletions(-)
|
||||
|
||||
----------------------------------------------------------------------
|
@@ -1,7 +1,7 @@
|
||||
/*
|
||||
* Asterisk -- An open source telephony toolkit.
|
||||
*
|
||||
* Copyright (C) 1999 - 2006, Digium, Inc.
|
||||
* Copyright (C) 1999 - 2012, Digium, Inc.
|
||||
*
|
||||
* Mark Spencer <markster@digium.com>
|
||||
*
|
||||
@@ -374,6 +374,43 @@ static const struct ast_channel_tech agent_tech = {
|
||||
.set_base_channel = agent_set_base_channel,
|
||||
};
|
||||
|
||||
/*!
|
||||
* \brief Locks the owning channel for a LOCKED pvt while obeying locking order. The pvt
|
||||
* must enter this function locked and will be returned locked, but this function will
|
||||
* unlock the pvt for a short time, so it can't be used while expecting the pvt to remain
|
||||
* static. If function returns a non NULL channel, it will need to be unlocked and
|
||||
* unrefed once it is no longer needed.
|
||||
*
|
||||
* \param pvt Pointer to the LOCKED agent_pvt for which the owner is needed
|
||||
* \ret locked channel which owns the pvt at the time of completion. NULL if not available.
|
||||
*/
|
||||
static struct ast_channel *agent_lock_owner(struct agent_pvt *pvt)
|
||||
{
|
||||
struct ast_channel *owner;
|
||||
|
||||
for (;;) {
|
||||
if (!pvt->owner) { /* No owner. Nothing to do. */
|
||||
return NULL;
|
||||
}
|
||||
|
||||
/* If we don't ref the owner, it could be killed when we unlock the pvt. */
|
||||
owner = ast_channel_ref(pvt->owner);
|
||||
|
||||
/* Locking order requires us to lock channel, then pvt. */
|
||||
ast_mutex_unlock(&pvt->lock);
|
||||
ast_channel_lock(owner);
|
||||
ast_mutex_lock(&pvt->lock);
|
||||
|
||||
/* Check if owner changed during pvt unlock period */
|
||||
if (owner != pvt->owner) { /* Channel changed. Unref and do another pass. */
|
||||
ast_channel_unlock(owner);
|
||||
owner = ast_channel_unref(owner);
|
||||
} else { /* Channel stayed the same. Return it. */
|
||||
return owner;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/*!
|
||||
* Adds an agent to the global list of agents.
|
||||
*
|
||||
@@ -554,7 +591,11 @@ static struct ast_frame *agent_read(struct ast_channel *ast)
|
||||
struct ast_frame *f = NULL;
|
||||
static struct ast_frame answer_frame = { AST_FRAME_CONTROL, { AST_CONTROL_ANSWER } };
|
||||
int cur_time = time(NULL);
|
||||
struct ast_channel *owner;
|
||||
|
||||
ast_mutex_lock(&p->lock);
|
||||
owner = agent_lock_owner(p);
|
||||
|
||||
CHECK_FORMATS(ast, p);
|
||||
if (!p->start) {
|
||||
p->start = cur_time;
|
||||
@@ -584,13 +625,11 @@ static struct ast_frame *agent_read(struct ast_channel *ast)
|
||||
int howlong = cur_time - p->start;
|
||||
if (p->autologoff && (howlong >= p->autologoff)) {
|
||||
ast_log(LOG_NOTICE, "Agent '%s' didn't answer/confirm within %d seconds (waited %d)\n", p->name, p->autologoff, howlong);
|
||||
if (p->owner || p->chan) {
|
||||
while (p->owner && ast_channel_trylock(p->owner)) {
|
||||
DEADLOCK_AVOIDANCE(&p->lock);
|
||||
}
|
||||
if (p->owner) {
|
||||
ast_softhangup(p->owner, AST_SOFTHANGUP_EXPLICIT);
|
||||
ast_channel_unlock(p->owner);
|
||||
if (owner || p->chan) {
|
||||
if (owner) {
|
||||
ast_softhangup(owner, AST_SOFTHANGUP_EXPLICIT);
|
||||
ast_channel_unlock(owner);
|
||||
owner = ast_channel_unref(owner);
|
||||
}
|
||||
|
||||
while (p->chan && ast_channel_trylock(p->chan)) {
|
||||
@@ -652,6 +691,11 @@ static struct ast_frame *agent_read(struct ast_channel *ast)
|
||||
}
|
||||
}
|
||||
|
||||
if (owner) {
|
||||
ast_channel_unlock(owner);
|
||||
owner = ast_channel_unref(owner);
|
||||
}
|
||||
|
||||
CLEANUP(ast,p);
|
||||
if (p->chan && !p->chan->_bridge) {
|
||||
if (strcasecmp(p->chan->tech->type, "Local")) {
|
||||
@@ -887,6 +931,14 @@ int agent_set_base_channel(struct ast_channel *chan, struct ast_channel *base)
|
||||
static int agent_hangup(struct ast_channel *ast)
|
||||
{
|
||||
struct agent_pvt *p = ast->tech_pvt;
|
||||
struct ast_channel *indicate_chan = NULL;
|
||||
char *tmp_moh; /* moh buffer for indicating after unlocking p */
|
||||
|
||||
if (p->pending) {
|
||||
AST_LIST_LOCK(&agents);
|
||||
AST_LIST_REMOVE(&agents, p, list);
|
||||
AST_LIST_UNLOCK(&agents);
|
||||
}
|
||||
|
||||
ast_mutex_lock(&p->lock);
|
||||
p->owner = NULL;
|
||||
@@ -909,7 +961,7 @@ static int agent_hangup(struct ast_channel *ast)
|
||||
if (p->start && (ast->_state != AST_STATE_UP)) {
|
||||
p->start = 0;
|
||||
} else
|
||||
p->start = 0;
|
||||
p->start = 0;
|
||||
if (p->chan) {
|
||||
p->chan->_bridge = NULL;
|
||||
/* If they're dead, go ahead and hang up on the agent now */
|
||||
@@ -918,15 +970,21 @@ static int agent_hangup(struct ast_channel *ast)
|
||||
ast_softhangup(p->chan, AST_SOFTHANGUP_EXPLICIT);
|
||||
ast_channel_unlock(p->chan);
|
||||
} else if (p->loginstart) {
|
||||
ast_channel_lock(p->chan);
|
||||
ast_indicate_data(p->chan, AST_CONTROL_HOLD,
|
||||
S_OR(p->moh, NULL),
|
||||
!ast_strlen_zero(p->moh) ? strlen(p->moh) + 1 : 0);
|
||||
ast_channel_unlock(p->chan);
|
||||
indicate_chan = ast_channel_ref(p->chan);
|
||||
tmp_moh = ast_strdupa(p->moh);
|
||||
}
|
||||
}
|
||||
ast_mutex_unlock(&p->lock);
|
||||
|
||||
if (indicate_chan) {
|
||||
ast_channel_lock(indicate_chan);
|
||||
ast_indicate_data(indicate_chan, AST_CONTROL_HOLD,
|
||||
S_OR(tmp_moh, NULL),
|
||||
!ast_strlen_zero(tmp_moh) ? strlen(tmp_moh) + 1 : 0);
|
||||
ast_channel_unlock(indicate_chan);
|
||||
indicate_chan = ast_channel_unref(indicate_chan);
|
||||
}
|
||||
|
||||
/* Only register a device state change if the agent is still logged in */
|
||||
if (!p->loginstart) {
|
||||
p->logincallerid[0] = '\0';
|
||||
@@ -934,11 +992,6 @@ static int agent_hangup(struct ast_channel *ast)
|
||||
ast_devstate_changed(AST_DEVICE_NOT_INUSE, "Agent/%s", p->agent);
|
||||
}
|
||||
|
||||
if (p->pending) {
|
||||
AST_LIST_LOCK(&agents);
|
||||
AST_LIST_REMOVE(&agents, p, list);
|
||||
AST_LIST_UNLOCK(&agents);
|
||||
}
|
||||
if (p->abouttograb) {
|
||||
/* Let the "about to grab" thread know this isn't valid anymore, and let it
|
||||
kill it later */
|
||||
@@ -1491,6 +1544,8 @@ static force_inline int powerof(unsigned int d)
|
||||
/*!
|
||||
* Lists agents and their status to the Manager API.
|
||||
* It is registered on load_module() and it gets called by the manager backend.
|
||||
* This function locks both the pvt and the channel that owns it for a while, but
|
||||
* does not keep these locks.
|
||||
* \param s
|
||||
* \param m
|
||||
* \returns
|
||||
@@ -1513,7 +1568,9 @@ static int action_agents(struct mansession *s, const struct message *m)
|
||||
astman_send_ack(s, m, "Agents will follow");
|
||||
AST_LIST_LOCK(&agents);
|
||||
AST_LIST_TRAVERSE(&agents, p, list) {
|
||||
ast_mutex_lock(&p->lock);
|
||||
struct ast_channel *owner;
|
||||
ast_mutex_lock(&p->lock);
|
||||
owner = agent_lock_owner(p);
|
||||
|
||||
/* Status Values:
|
||||
AGENT_LOGGEDOFF - Agent isn't logged in
|
||||
@@ -1528,16 +1585,14 @@ static int action_agents(struct mansession *s, const struct message *m)
|
||||
|
||||
if (p->chan) {
|
||||
loginChan = ast_strdupa(p->chan->name);
|
||||
if (p->owner && p->owner->_bridge) {
|
||||
if (owner && owner->_bridge) {
|
||||
talkingto = S_COR(p->chan->caller.id.number.valid,
|
||||
p->chan->caller.id.number.str, "n/a");
|
||||
ast_channel_lock(p->owner);
|
||||
if ((bridge = ast_bridged_channel(p->owner))) {
|
||||
if ((bridge = ast_bridged_channel(owner))) {
|
||||
talkingtoChan = ast_strdupa(bridge->name);
|
||||
} else {
|
||||
talkingtoChan = "n/a";
|
||||
}
|
||||
ast_channel_unlock(p->owner);
|
||||
status = "AGENT_ONCALL";
|
||||
} else {
|
||||
talkingto = "n/a";
|
||||
@@ -1551,6 +1606,11 @@ static int action_agents(struct mansession *s, const struct message *m)
|
||||
status = "AGENT_LOGGEDOFF";
|
||||
}
|
||||
|
||||
if (owner) {
|
||||
ast_channel_unlock(owner);
|
||||
owner = ast_channel_unref(owner);
|
||||
}
|
||||
|
||||
astman_append(s, "Event: Agents\r\n"
|
||||
"Agent: %s\r\n"
|
||||
"Name: %s\r\n"
|
||||
@@ -1582,14 +1642,14 @@ static int agent_logoff(const char *agent, int soft)
|
||||
ret = 0;
|
||||
if (p->owner || p->chan) {
|
||||
if (!soft) {
|
||||
struct ast_channel *owner;
|
||||
ast_mutex_lock(&p->lock);
|
||||
owner = agent_lock_owner(p);
|
||||
|
||||
while (p->owner && ast_channel_trylock(p->owner)) {
|
||||
DEADLOCK_AVOIDANCE(&p->lock);
|
||||
}
|
||||
if (p->owner) {
|
||||
ast_softhangup(p->owner, AST_SOFTHANGUP_EXPLICIT);
|
||||
ast_channel_unlock(p->owner);
|
||||
if (owner) {
|
||||
ast_softhangup(owner, AST_SOFTHANGUP_EXPLICIT);
|
||||
ast_channel_unlock(owner);
|
||||
owner = ast_channel_unref(owner);
|
||||
}
|
||||
|
||||
while (p->chan && ast_channel_trylock(p->chan)) {
|
||||
@@ -1726,7 +1786,9 @@ static char *agents_show(struct ast_cli_entry *e, int cmd, struct ast_cli_args *
|
||||
|
||||
AST_LIST_LOCK(&agents);
|
||||
AST_LIST_TRAVERSE(&agents, p, list) {
|
||||
struct ast_channel *owner;
|
||||
ast_mutex_lock(&p->lock);
|
||||
owner = agent_lock_owner(p);
|
||||
if (p->pending) {
|
||||
if (p->group)
|
||||
ast_cli(a->fd, "-- Pending call to group %d\n", powerof(p->group));
|
||||
@@ -1739,10 +1801,11 @@ static char *agents_show(struct ast_cli_entry *e, int cmd, struct ast_cli_args *
|
||||
username[0] = '\0';
|
||||
if (p->chan) {
|
||||
snprintf(location, sizeof(location), "logged in on %s", p->chan->name);
|
||||
if (p->owner && ast_bridged_channel(p->owner))
|
||||
if (owner && ast_bridged_channel(owner)) {
|
||||
snprintf(talkingto, sizeof(talkingto), " talking to %s", ast_bridged_channel(p->owner)->name);
|
||||
else
|
||||
} else {
|
||||
strcpy(talkingto, " is idle");
|
||||
}
|
||||
online_agents++;
|
||||
} else {
|
||||
strcpy(location, "not logged in");
|
||||
@@ -1755,6 +1818,11 @@ static char *agents_show(struct ast_cli_entry *e, int cmd, struct ast_cli_args *
|
||||
username, location, talkingto, music);
|
||||
count_agents++;
|
||||
}
|
||||
|
||||
if (owner) {
|
||||
ast_channel_unlock(owner);
|
||||
owner = ast_channel_unref(owner);
|
||||
}
|
||||
ast_mutex_unlock(&p->lock);
|
||||
}
|
||||
AST_LIST_UNLOCK(&agents);
|
||||
@@ -1795,21 +1863,32 @@ static char *agents_show_online(struct ast_cli_entry *e, int cmd, struct ast_cli
|
||||
|
||||
AST_LIST_LOCK(&agents);
|
||||
AST_LIST_TRAVERSE(&agents, p, list) {
|
||||
struct ast_channel *owner;
|
||||
|
||||
agent_status = 0; /* reset it to offline */
|
||||
ast_mutex_lock(&p->lock);
|
||||
owner = agent_lock_owner(p);
|
||||
|
||||
if (!ast_strlen_zero(p->name))
|
||||
snprintf(username, sizeof(username), "(%s) ", p->name);
|
||||
else
|
||||
username[0] = '\0';
|
||||
if (p->chan) {
|
||||
snprintf(location, sizeof(location), "logged in on %s", p->chan->name);
|
||||
if (p->owner && ast_bridged_channel(p->owner))
|
||||
snprintf(talkingto, sizeof(talkingto), " talking to %s", ast_bridged_channel(p->owner)->name);
|
||||
else
|
||||
if (owner && ast_bridged_channel(owner)) {
|
||||
snprintf(talkingto, sizeof(talkingto), " talking to %s", ast_bridged_channel(owner)->name);
|
||||
} else {
|
||||
strcpy(talkingto, " is idle");
|
||||
}
|
||||
agent_status = 1;
|
||||
online_agents++;
|
||||
}
|
||||
|
||||
if (owner) {
|
||||
ast_channel_unlock(owner);
|
||||
owner = ast_channel_unref(owner);
|
||||
}
|
||||
|
||||
if (!ast_strlen_zero(p->moh))
|
||||
snprintf(music, sizeof(music), " (musiconhold is '%s')", p->moh);
|
||||
if (agent_status)
|
||||
@@ -2381,12 +2460,16 @@ static int agents_data_provider_get(const struct ast_data_search *search,
|
||||
|
||||
AST_LIST_LOCK(&agents);
|
||||
AST_LIST_TRAVERSE(&agents, p, list) {
|
||||
struct ast_channel *owner;
|
||||
|
||||
data_agent = ast_data_add_node(data_root, "agent");
|
||||
if (!data_agent) {
|
||||
continue;
|
||||
}
|
||||
|
||||
ast_mutex_lock(&p->lock);
|
||||
owner = agent_lock_owner(p);
|
||||
|
||||
if (!(p->pending)) {
|
||||
ast_data_add_str(data_agent, "id", p->agent);
|
||||
ast_data_add_structure(agent_pvt, data_agent, p);
|
||||
@@ -2397,17 +2480,25 @@ static int agents_data_provider_get(const struct ast_data_search *search,
|
||||
if (!data_channel) {
|
||||
ast_mutex_unlock(&p->lock);
|
||||
ast_data_remove_node(data_root, data_agent);
|
||||
if (owner) {
|
||||
ast_channel_unlock(owner);
|
||||
owner = ast_channel_unref(owner);
|
||||
}
|
||||
continue;
|
||||
}
|
||||
ast_channel_data_add_structure(data_channel, p->chan, 0);
|
||||
if (p->owner && ast_bridged_channel(p->owner)) {
|
||||
if (owner && ast_bridged_channel(owner)) {
|
||||
data_talkingto = ast_data_add_node(data_agent, "talkingto");
|
||||
if (!data_talkingto) {
|
||||
ast_mutex_unlock(&p->lock);
|
||||
ast_data_remove_node(data_root, data_agent);
|
||||
if (owner) {
|
||||
ast_channel_unlock(owner);
|
||||
owner = ast_channel_unref(owner);
|
||||
}
|
||||
continue;
|
||||
}
|
||||
ast_channel_data_add_structure(data_talkingto, ast_bridged_channel(p->owner), 0);
|
||||
ast_channel_data_add_structure(data_talkingto, ast_bridged_channel(owner), 0);
|
||||
}
|
||||
} else {
|
||||
ast_data_add_node(data_agent, "talkingto");
|
||||
@@ -2415,6 +2506,12 @@ static int agents_data_provider_get(const struct ast_data_search *search,
|
||||
}
|
||||
ast_data_add_str(data_agent, "musiconhold", p->moh);
|
||||
}
|
||||
|
||||
if (owner) {
|
||||
ast_channel_unlock(owner);
|
||||
owner = ast_channel_unref(owner);
|
||||
}
|
||||
|
||||
ast_mutex_unlock(&p->lock);
|
||||
|
||||
/* if this agent doesn't match remove the added agent. */
|
||||
|
@@ -1280,7 +1280,7 @@ static int auto_congest(const void *arg);
|
||||
static struct sip_pvt *find_call(struct sip_request *req, struct ast_sockaddr *addr, const int intended_method);
|
||||
static void free_old_route(struct sip_route *route);
|
||||
static void list_route(struct sip_route *route);
|
||||
static void build_route(struct sip_pvt *p, struct sip_request *req, int backwards);
|
||||
static void build_route(struct sip_pvt *p, struct sip_request *req, int backwards, int resp);
|
||||
static enum check_auth_result register_verify(struct sip_pvt *p, struct ast_sockaddr *addr,
|
||||
struct sip_request *req, const char *uri);
|
||||
static struct sip_pvt *get_sip_pvt_byid_locked(const char *callid, const char *totag, const char *fromtag);
|
||||
@@ -2877,6 +2877,11 @@ static int match_and_cleanup_peer_sched(void *peerobj, void *arg, int flags)
|
||||
|
||||
if (which == SIP_PEERS_ALL || peer->the_mark) {
|
||||
peer_sched_cleanup(peer);
|
||||
if (peer->dnsmgr) {
|
||||
ast_dnsmgr_release(peer->dnsmgr);
|
||||
peer->dnsmgr = NULL;
|
||||
unref_peer(peer, "Release peer from dnsmgr");
|
||||
}
|
||||
return CMP_MATCH;
|
||||
}
|
||||
return 0;
|
||||
@@ -4647,8 +4652,6 @@ static void sip_destroy_peer(struct sip_peer *peer)
|
||||
ao2_t_ref(peer->auth, -1, "Removing peer authentication");
|
||||
peer->auth = NULL;
|
||||
}
|
||||
if (peer->dnsmgr)
|
||||
ast_dnsmgr_release(peer->dnsmgr);
|
||||
|
||||
if (peer->socket.tcptls_session) {
|
||||
ao2_ref(peer->socket.tcptls_session, -1);
|
||||
@@ -5385,6 +5388,12 @@ static int create_addr_from_peer(struct sip_pvt *dialog, struct sip_peer *peer)
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*! \brief The default sip port for the given transport */
|
||||
static inline int default_sip_port(enum sip_transport type)
|
||||
{
|
||||
return type == SIP_TRANSPORT_TLS ? STANDARD_TLS_PORT : STANDARD_SIP_PORT;
|
||||
}
|
||||
|
||||
/*! \brief create address structure from device name
|
||||
* Or, if peer not found, find it in the global DNS
|
||||
* returns TRUE (-1) on failure, FALSE on success */
|
||||
@@ -5487,9 +5496,7 @@ static int create_addr(struct sip_pvt *dialog, const char *opeer, struct ast_soc
|
||||
}
|
||||
|
||||
if (!ast_sockaddr_port(&dialog->sa)) {
|
||||
ast_sockaddr_set_port(&dialog->sa,
|
||||
(dialog->socket.type == SIP_TRANSPORT_TLS) ?
|
||||
STANDARD_TLS_PORT : STANDARD_SIP_PORT);
|
||||
ast_sockaddr_set_port(&dialog->sa, default_sip_port(dialog->socket.type));
|
||||
}
|
||||
ast_sockaddr_copy(&dialog->recv, &dialog->sa);
|
||||
return 0;
|
||||
@@ -5704,12 +5711,11 @@ static void sip_registry_destroy(struct sip_registry *reg)
|
||||
reg->call = dialog_unref(reg->call, "unref reg->call");
|
||||
/* reg->call = sip_destroy(reg->call); */
|
||||
}
|
||||
AST_SCHED_DEL(sched, reg->expire);
|
||||
AST_SCHED_DEL(sched, reg->expire);
|
||||
AST_SCHED_DEL(sched, reg->timeout);
|
||||
|
||||
|
||||
ast_string_field_free_memory(reg);
|
||||
ast_atomic_fetchadd_int(®objs, -1);
|
||||
ast_dnsmgr_release(reg->dnsmgr);
|
||||
ast_free(reg);
|
||||
}
|
||||
|
||||
@@ -5723,7 +5729,6 @@ static void sip_subscribe_mwi_destroy(struct sip_subscription_mwi *mwi)
|
||||
|
||||
AST_SCHED_DEL(sched, mwi->resub);
|
||||
ast_string_field_free_memory(mwi);
|
||||
ast_dnsmgr_release(mwi->dnsmgr);
|
||||
ast_free(mwi);
|
||||
}
|
||||
|
||||
@@ -9211,6 +9216,10 @@ static int process_sdp(struct sip_pvt *p, struct sip_request *req, int t38action
|
||||
/* Ensure RTCP is enabled since it may be inactive
|
||||
if we're coming back from a T.38 session */
|
||||
ast_rtp_instance_set_prop(p->rtp, AST_RTP_PROPERTY_RTCP, 1);
|
||||
/* Ensure audio RTCP reads are enabled */
|
||||
if (p->owner) {
|
||||
ast_channel_set_fd(p->owner, 1, ast_rtp_instance_fd(p->rtp, 1));
|
||||
}
|
||||
|
||||
if (ast_test_flag(&p->flags[0], SIP_DTMF) == SIP_DTMF_AUTO) {
|
||||
ast_clear_flag(&p->flags[0], SIP_DTMF);
|
||||
@@ -9227,6 +9236,10 @@ static int process_sdp(struct sip_pvt *p, struct sip_request *req, int t38action
|
||||
} else if (udptlportno > 0) {
|
||||
if (debug)
|
||||
ast_verbose("Got T.38 Re-invite without audio. Keeping RTP active during T.38 session.\n");
|
||||
/* Prevent audio RTCP reads */
|
||||
if (p->owner) {
|
||||
ast_channel_set_fd(p->owner, 1, -1);
|
||||
}
|
||||
/* Silence RTCP while audio RTP is inactive */
|
||||
ast_rtp_instance_set_prop(p->rtp, AST_RTP_PROPERTY_RTCP, 0);
|
||||
} else {
|
||||
@@ -10339,7 +10352,15 @@ static int reqprep(struct sip_request *req, struct sip_pvt *p, int sipmethod, in
|
||||
snprintf(tmp, sizeof(tmp), "%d %s", seqno, sip_methods[sipmethod].text);
|
||||
|
||||
add_header(req, "Via", p->via);
|
||||
if (p->route) {
|
||||
/*
|
||||
* Use the learned route set unless this is a CANCEL on an ACK for a non-2xx
|
||||
* final response. For a CANCEL or ACK, we have to send to the same destination
|
||||
* as the original INVITE.
|
||||
*/
|
||||
if (sipmethod == SIP_CANCEL ||
|
||||
(sipmethod == SIP_ACK && (p->invitestate == INV_COMPLETED || p->invitestate == INV_CANCELLED))) {
|
||||
set_destination(p, ast_strdupa(p->uri));
|
||||
} else if (p->route) {
|
||||
set_destination(p, p->route->hop);
|
||||
add_route(req, is_strict ? p->route->next : p->route);
|
||||
}
|
||||
@@ -12314,6 +12335,72 @@ static int sip_subscribe_mwi_do(const void *data)
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void on_dns_update_registry(struct ast_sockaddr *old, struct ast_sockaddr *new, void *data)
|
||||
{
|
||||
struct sip_registry *reg = data;
|
||||
const char *old_str;
|
||||
|
||||
/* This shouldn't happen, but just in case */
|
||||
if (ast_sockaddr_isnull(new)) {
|
||||
ast_debug(1, "Empty sockaddr change...ignoring!\n");
|
||||
return;
|
||||
}
|
||||
|
||||
if (!ast_sockaddr_port(new)) {
|
||||
ast_sockaddr_set_port(new, reg->portno);
|
||||
}
|
||||
|
||||
old_str = ast_strdupa(ast_sockaddr_stringify(old));
|
||||
|
||||
ast_debug(1, "Changing registry %s from %s to %s\n", S_OR(reg->peername, reg->hostname), old_str, ast_sockaddr_stringify(new));
|
||||
ast_sockaddr_copy(®->us, new);
|
||||
}
|
||||
|
||||
static void on_dns_update_peer(struct ast_sockaddr *old, struct ast_sockaddr *new, void *data)
|
||||
{
|
||||
struct sip_peer *peer = data;
|
||||
const char *old_str;
|
||||
|
||||
/* This shouldn't happen, but just in case */
|
||||
if (ast_sockaddr_isnull(new)) {
|
||||
ast_debug(1, "Empty sockaddr change...ignoring!\n");
|
||||
return;
|
||||
}
|
||||
|
||||
if (!ast_sockaddr_isnull(&peer->addr)) {
|
||||
ao2_unlink(peers_by_ip, peer);
|
||||
}
|
||||
|
||||
if (!ast_sockaddr_port(new)) {
|
||||
ast_sockaddr_set_port(new, default_sip_port(peer->socket.type));
|
||||
}
|
||||
|
||||
old_str = ast_strdupa(ast_sockaddr_stringify(old));
|
||||
ast_debug(1, "Changing peer %s address from %s to %s\n", peer->name, old_str, ast_sockaddr_stringify(new));
|
||||
|
||||
ao2_lock(peer);
|
||||
ast_sockaddr_copy(&peer->addr, new);
|
||||
ao2_unlock(peer);
|
||||
|
||||
ao2_link(peers_by_ip, peer);
|
||||
}
|
||||
|
||||
static void on_dns_update_mwi(struct ast_sockaddr *old, struct ast_sockaddr *new, void *data)
|
||||
{
|
||||
struct sip_subscription_mwi *mwi = data;
|
||||
const char *old_str;
|
||||
|
||||
/* This shouldn't happen, but just in case */
|
||||
if (ast_sockaddr_isnull(new)) {
|
||||
ast_debug(1, "Empty sockaddr change...ignoring!\n");
|
||||
return;
|
||||
}
|
||||
|
||||
old_str = ast_strdupa(ast_sockaddr_stringify(old));
|
||||
ast_debug(1, "Changing mwi %s from %s to %s\n", mwi->hostname, old_str, ast_sockaddr_stringify(new));
|
||||
ast_sockaddr_copy(&mwi->us, new);
|
||||
}
|
||||
|
||||
/*! \brief Actually setup an MWI subscription or resubscribe */
|
||||
static int __sip_subscribe_mwi_do(struct sip_subscription_mwi *mwi)
|
||||
{
|
||||
@@ -12323,7 +12410,11 @@ static int __sip_subscribe_mwi_do(struct sip_subscription_mwi *mwi)
|
||||
snprintf(transport, sizeof(transport), "_%s._%s", get_srv_service(mwi->transport), get_srv_protocol(mwi->transport));
|
||||
|
||||
mwi->us.ss.ss_family = get_address_family_filter(&bindaddr); /* Filter address family */
|
||||
ast_dnsmgr_lookup(mwi->hostname, &mwi->us, &mwi->dnsmgr, sip_cfg.srvlookup ? transport : NULL);
|
||||
ASTOBJ_REF(mwi); /* Add a ref for storing the mwi on the dnsmgr for updates */
|
||||
ast_dnsmgr_lookup_cb(mwi->hostname, &mwi->us, &mwi->dnsmgr, sip_cfg.srvlookup ? transport : NULL, on_dns_update_mwi, mwi);
|
||||
if (!mwi->dnsmgr) {
|
||||
ASTOBJ_UNREF(mwi, sip_subscribe_mwi_destroy); /* dnsmgr disabled, remove reference */
|
||||
}
|
||||
}
|
||||
|
||||
/* If we already have a subscription up simply send a resubscription */
|
||||
@@ -13004,17 +13095,8 @@ static int sip_reg_timeout(const void *data)
|
||||
}
|
||||
|
||||
if (r->dnsmgr) {
|
||||
struct sip_peer *peer;
|
||||
/* If the registration has timed out, maybe the IP changed. Force a refresh. */
|
||||
ast_dnsmgr_refresh(r->dnsmgr);
|
||||
/* If we are resolving a peer, we have to make sure the refreshed address gets copied */
|
||||
if ((peer = find_peer(r->hostname, NULL, TRUE, FINDPEERS, FALSE, 0))) {
|
||||
ast_sockaddr_copy(&peer->addr, &r->us);
|
||||
if (r->portno) {
|
||||
ast_sockaddr_set_port(&peer->addr, r->portno);
|
||||
}
|
||||
peer = unref_peer(peer, "unref after find_peer");
|
||||
}
|
||||
}
|
||||
|
||||
/* If the initial tranmission failed, we may not have an existing dialog,
|
||||
@@ -13103,7 +13185,12 @@ static int transmit_register(struct sip_registry *r, int sipmethod, const char *
|
||||
* or peer NULL. Since we're only concerned with its existence, we're not going to
|
||||
* bother getting a ref to the proxy*/
|
||||
if (!obproxy_get(r->call, peer)) {
|
||||
ast_dnsmgr_lookup(peer ? peer->tohost : r->hostname, &r->us, &r->dnsmgr, sip_cfg.srvlookup ? transport : NULL);
|
||||
registry_addref(r, "add reg ref for dnsmgr");
|
||||
ast_dnsmgr_lookup_cb(peer ? peer->tohost : r->hostname, &r->us, &r->dnsmgr, sip_cfg.srvlookup ? transport : NULL, on_dns_update_registry, r);
|
||||
if (!r->dnsmgr) {
|
||||
/*dnsmgr refresh disabled, no reference added! */
|
||||
registry_unref(r, "remove reg ref, dnsmgr disabled");
|
||||
}
|
||||
}
|
||||
if (peer) {
|
||||
peer = unref_peer(peer, "removing peer ref for dnsmgr_lookup");
|
||||
@@ -13136,18 +13223,21 @@ static int transmit_register(struct sip_registry *r, int sipmethod, const char *
|
||||
}
|
||||
|
||||
/* Use port number specified if no SRV record was found */
|
||||
if (!ast_sockaddr_port(&r->us) && r->portno) {
|
||||
ast_sockaddr_set_port(&r->us, r->portno);
|
||||
}
|
||||
|
||||
/* It is possible that DNS is unavailable at the time the peer is created. Here, if
|
||||
* we've updated the address in the registry, we copy it to the peer so that
|
||||
* create_addr() can copy it to the dialog via create_addr_from_peer */
|
||||
if ((peer = find_peer(r->hostname, NULL, TRUE, FINDPEERS, FALSE, 0))) {
|
||||
if (ast_sockaddr_isnull(&peer->addr) && !(ast_sockaddr_isnull(&r->us))) {
|
||||
ast_sockaddr_copy(&peer->addr, &r->us);
|
||||
if (!ast_sockaddr_isnull(&r->us)) {
|
||||
if (!ast_sockaddr_port(&r->us) && r->portno) {
|
||||
ast_sockaddr_set_port(&r->us, r->portno);
|
||||
}
|
||||
|
||||
/* It is possible that DNS was unavailable at the time the peer was created.
|
||||
* Here, if we've updated the address in the registry via manually calling
|
||||
* ast_dnsmgr_lookup_cb() above, then we call the same function that dnsmgr would
|
||||
* call if it was updating a peer's address */
|
||||
if ((peer = find_peer(S_OR(r->peername, r->hostname), NULL, TRUE, FINDPEERS, FALSE, 0))) {
|
||||
if (ast_sockaddr_cmp(&peer->addr, &r->us)) {
|
||||
on_dns_update_peer(&peer->addr, &r->us, peer);
|
||||
}
|
||||
peer = unref_peer(peer, "unref after find_peer");
|
||||
}
|
||||
peer = unref_peer(peer, "unref after find_peer");
|
||||
}
|
||||
|
||||
/* Find address to hostname */
|
||||
@@ -13497,15 +13587,15 @@ static int transmit_request(struct sip_pvt *p, int sipmethod, int seqno, enum xm
|
||||
{
|
||||
struct sip_request resp;
|
||||
|
||||
if (sipmethod == SIP_ACK) {
|
||||
p->invitestate = INV_CONFIRMED;
|
||||
}
|
||||
|
||||
reqprep(&resp, p, sipmethod, seqno, newbranch);
|
||||
if (sipmethod == SIP_CANCEL && p->answered_elsewhere) {
|
||||
add_header(&resp, "Reason", "SIP;cause=200;text=\"Call completed elsewhere\"");
|
||||
}
|
||||
|
||||
if (sipmethod == SIP_ACK) {
|
||||
p->invitestate = INV_CONFIRMED;
|
||||
}
|
||||
|
||||
return send_request(p, &resp, reliable, seqno ? seqno : p->ocseq);
|
||||
}
|
||||
|
||||
@@ -13961,9 +14051,7 @@ static enum parse_register_result parse_register_contact(struct sip_pvt *pvt, st
|
||||
peer->portinuri = ast_sockaddr_port(&testsa) ? TRUE : FALSE;
|
||||
|
||||
if (!ast_sockaddr_port(&testsa)) {
|
||||
ast_sockaddr_set_port(&testsa,
|
||||
transport_type == SIP_TRANSPORT_TLS ?
|
||||
STANDARD_TLS_PORT : STANDARD_SIP_PORT);
|
||||
ast_sockaddr_set_port(&testsa, default_sip_port(transport_type));
|
||||
}
|
||||
|
||||
ast_sockaddr_copy(&peer->addr, &testsa);
|
||||
@@ -14070,8 +14158,9 @@ static void list_route(struct sip_route *route)
|
||||
}
|
||||
}
|
||||
|
||||
/*! \brief Build route list from Record-Route header */
|
||||
static void build_route(struct sip_pvt *p, struct sip_request *req, int backwards)
|
||||
/*! \brief Build route list from Record-Route header
|
||||
\param resp the SIP response code or 0 for a request */
|
||||
static void build_route(struct sip_pvt *p, struct sip_request *req, int backwards, int resp)
|
||||
{
|
||||
struct sip_route *thishop, *head, *tail;
|
||||
int start = 0;
|
||||
@@ -14089,9 +14178,12 @@ static void build_route(struct sip_pvt *p, struct sip_request *req, int backward
|
||||
p->route = NULL;
|
||||
}
|
||||
|
||||
/* We only want to create the route set the first time this is called */
|
||||
p->route_persistent = 1;
|
||||
|
||||
/* We only want to create the route set the first time this is called except
|
||||
it is called from a provisional response.*/
|
||||
if ((resp < 100) || (resp > 199)) {
|
||||
p->route_persistent = 1;
|
||||
}
|
||||
|
||||
/* Build a tailq, then assign it to p->route when done.
|
||||
* If backwards, we add entries from the head so they end up
|
||||
* in reverse order. However, we do need to maintain a correct
|
||||
@@ -18623,7 +18715,8 @@ static void handle_request_info(struct sip_pvt *p, struct sip_request *req)
|
||||
|
||||
/* Need to check the media/type */
|
||||
if (!strcasecmp(c, "application/dtmf-relay") ||
|
||||
!strcasecmp(c, "application/vnd.nortelnetworks.digits")) {
|
||||
!strcasecmp(c, "application/vnd.nortelnetworks.digits") ||
|
||||
!strcasecmp(c, "application/dtmf")) {
|
||||
unsigned int duration = 0;
|
||||
|
||||
if (!p->owner) { /* not a PBX call */
|
||||
@@ -18632,91 +18725,62 @@ static void handle_request_info(struct sip_pvt *p, struct sip_request *req)
|
||||
return;
|
||||
}
|
||||
|
||||
/* Try getting the "signal=" part */
|
||||
if (ast_strlen_zero(c = get_body(req, "Signal", '=')) && ast_strlen_zero(c = get_body(req, "d", '='))) {
|
||||
ast_log(LOG_WARNING, "Unable to retrieve DTMF signal from INFO message from %s\n", p->callid);
|
||||
transmit_response(p, "200 OK", req); /* Should return error */
|
||||
return;
|
||||
/* If dtmf-relay or vnd.nortelnetworks.digits, parse the signal and duration;
|
||||
* otherwise use the body as the signal */
|
||||
if (strcasecmp(c, "application/dtmf")) {
|
||||
const char *msg_body;
|
||||
|
||||
if ( ast_strlen_zero(msg_body = get_body(req, "Signal", '='))
|
||||
&& ast_strlen_zero(msg_body = get_body(req, "d", '='))) {
|
||||
ast_log(LOG_WARNING, "Unable to retrieve DTMF signal for INFO message on "
|
||||
"call %s\n", p->callid);
|
||||
transmit_response(p, "200 OK", req);
|
||||
return;
|
||||
}
|
||||
ast_copy_string(buf, msg_body, sizeof(buf));
|
||||
|
||||
if (!ast_strlen_zero((msg_body = get_body(req, "Duration", '=')))) {
|
||||
sscanf(msg_body, "%30u", &duration);
|
||||
}
|
||||
} else {
|
||||
ast_copy_string(buf, c, sizeof(buf));
|
||||
/* Type is application/dtmf, simply use what's in the message body */
|
||||
get_msg_text(buf, sizeof(buf), req);
|
||||
}
|
||||
|
||||
if (!ast_strlen_zero((c = get_body(req, "Duration", '='))))
|
||||
duration = atoi(c);
|
||||
if (!duration)
|
||||
duration = 100; /* 100 ms */
|
||||
|
||||
|
||||
/* An empty message body requires us to send a 200 OK */
|
||||
if (ast_strlen_zero(buf)) {
|
||||
transmit_response(p, "200 OK", req);
|
||||
return;
|
||||
}
|
||||
|
||||
if ('0' <= buf[0] && buf[0] <= '9') {
|
||||
event = buf[0] - '0';
|
||||
} else if (buf[0] == '*') {
|
||||
if (!duration) {
|
||||
duration = 100; /* 100 ms */
|
||||
}
|
||||
|
||||
if (buf[0] == '*') {
|
||||
event = 10;
|
||||
} else if (buf[0] == '#') {
|
||||
event = 11;
|
||||
} else if (buf[0] == '!') {
|
||||
event = 16;
|
||||
} else if ('A' <= buf[0] && buf[0] <= 'D') {
|
||||
event = 12 + buf[0] - 'A';
|
||||
} else if ('a' <= buf[0] && buf[0] <= 'd') {
|
||||
event = 12 + buf[0] - 'a';
|
||||
} else if (buf[0] == '!') {
|
||||
event = 16;
|
||||
} else {
|
||||
/* Unknown digit */
|
||||
event = 0;
|
||||
} else if ((sscanf(buf, "%30u", &event) != 1) || event > 16) {
|
||||
ast_log(AST_LOG_WARNING, "Unable to convert DTMF event signal code to a valid "
|
||||
"value for INFO message on call %s\n", p->callid);
|
||||
transmit_response(p, "200 OK", req);
|
||||
return;
|
||||
}
|
||||
|
||||
if (event == 16) {
|
||||
/* send a FLASH event */
|
||||
struct ast_frame f = { AST_FRAME_CONTROL, { AST_CONTROL_FLASH, } };
|
||||
ast_queue_frame(p->owner, &f);
|
||||
if (sipdebug)
|
||||
if (sipdebug) {
|
||||
ast_verbose("* DTMF-relay event received: FLASH\n");
|
||||
} else {
|
||||
/* send a DTMF event */
|
||||
struct ast_frame f = { AST_FRAME_DTMF, };
|
||||
if (event < 10) {
|
||||
f.subclass.integer = '0' + event;
|
||||
} else if (event == 10) {
|
||||
f.subclass.integer = '*';
|
||||
} else if (event == 11) {
|
||||
f.subclass.integer = '#';
|
||||
} else if (event < 16) {
|
||||
f.subclass.integer = 'A' + (event - 12);
|
||||
}
|
||||
f.len = duration;
|
||||
ast_queue_frame(p->owner, &f);
|
||||
if (sipdebug)
|
||||
ast_verbose("* DTMF-relay event received: %c\n", (int) f.subclass.integer);
|
||||
}
|
||||
transmit_response(p, "200 OK", req);
|
||||
return;
|
||||
} else if (!strcasecmp(c, "application/dtmf")) {
|
||||
/*! \todo Note: Doesn't read the duration of the DTMF. Should be fixed. */
|
||||
unsigned int duration = 0;
|
||||
|
||||
if (!p->owner) { /* not a PBX call */
|
||||
transmit_response(p, "481 Call leg/transaction does not exist", req);
|
||||
sip_scheddestroy(p, DEFAULT_TRANS_TIMEOUT);
|
||||
return;
|
||||
}
|
||||
|
||||
get_msg_text(buf, sizeof(buf), req);
|
||||
duration = 100; /* 100 ms */
|
||||
|
||||
if (ast_strlen_zero(buf)) {
|
||||
transmit_response(p, "200 OK", req);
|
||||
return;
|
||||
}
|
||||
event = atoi(buf);
|
||||
if (event == 16) {
|
||||
/* send a FLASH event */
|
||||
struct ast_frame f = { AST_FRAME_CONTROL, { AST_CONTROL_FLASH }, };
|
||||
ast_queue_frame(p->owner, &f);
|
||||
if (sipdebug)
|
||||
ast_verbose("* DTMF-relay event received: FLASH\n");
|
||||
} else {
|
||||
/* send a DTMF event */
|
||||
struct ast_frame f = { AST_FRAME_DTMF, };
|
||||
@@ -18726,20 +18790,17 @@ static void handle_request_info(struct sip_pvt *p, struct sip_request *req)
|
||||
f.subclass.integer = '*';
|
||||
} else if (event == 11) {
|
||||
f.subclass.integer = '#';
|
||||
} else if (event < 16) {
|
||||
f.subclass.integer = 'A' + (event - 12);
|
||||
} else {
|
||||
/* Unknown digit. */
|
||||
f.subclass.integer = '0';
|
||||
f.subclass.integer = 'A' + (event - 12);
|
||||
}
|
||||
f.len = duration;
|
||||
ast_queue_frame(p->owner, &f);
|
||||
if (sipdebug)
|
||||
if (sipdebug) {
|
||||
ast_verbose("* DTMF-relay event received: %c\n", (int) f.subclass.integer);
|
||||
}
|
||||
}
|
||||
transmit_response(p, "200 OK", req);
|
||||
return;
|
||||
|
||||
} else if (!strcasecmp(c, "application/media_control+xml")) {
|
||||
/* Eh, we'll just assume it's a fast picture update for now */
|
||||
if (p->owner)
|
||||
@@ -19908,7 +19969,7 @@ static void handle_response_invite(struct sip_pvt *p, int resp, const char *rest
|
||||
* */
|
||||
parse_ok_contact(p, req);
|
||||
if (!reinvite) {
|
||||
build_route(p, req, 1);
|
||||
build_route(p, req, 1, resp);
|
||||
}
|
||||
if (!req->ignore && p->owner) {
|
||||
if (get_rpid(p, req)) {
|
||||
@@ -19958,7 +20019,7 @@ static void handle_response_invite(struct sip_pvt *p, int resp, const char *rest
|
||||
* */
|
||||
parse_ok_contact(p, req);
|
||||
if (!reinvite) {
|
||||
build_route(p, req, 1);
|
||||
build_route(p, req, 1, resp);
|
||||
}
|
||||
if (!req->ignore && p->owner) {
|
||||
struct ast_party_redirecting redirecting;
|
||||
@@ -19984,7 +20045,7 @@ static void handle_response_invite(struct sip_pvt *p, int resp, const char *rest
|
||||
* */
|
||||
parse_ok_contact(p, req);
|
||||
if (!reinvite) {
|
||||
build_route(p, req, 1);
|
||||
build_route(p, req, 1, resp);
|
||||
}
|
||||
if (!req->ignore && p->owner) {
|
||||
if (get_rpid(p, req)) {
|
||||
@@ -20084,7 +20145,7 @@ static void handle_response_invite(struct sip_pvt *p, int resp, const char *rest
|
||||
parse_ok_contact(p, req);
|
||||
/* Save Record-Route for any later requests we make on this dialogue */
|
||||
if (!reinvite)
|
||||
build_route(p, req, 1);
|
||||
build_route(p, req, 1, resp);
|
||||
|
||||
if(set_address_from_contact(p)) {
|
||||
/* Bad contact - we don't know how to reach this device */
|
||||
@@ -22588,7 +22649,7 @@ static int handle_request_invite(struct sip_pvt *p, struct sip_request *req, int
|
||||
*recount = 1;
|
||||
|
||||
/* Save Record-Route for any later requests we make on this dialogue */
|
||||
build_route(p, req, 0);
|
||||
build_route(p, req, 0, 0);
|
||||
|
||||
if (c) {
|
||||
ast_party_redirecting_init(&redirecting);
|
||||
@@ -24470,7 +24531,7 @@ static int handle_request_subscribe(struct sip_pvt *p, struct sip_request *req,
|
||||
if (sipdebug)
|
||||
ast_debug(4, "Initializing initreq for method %s - callid %s\n", sip_methods[req->method].text, p->callid);
|
||||
check_via(p, req);
|
||||
build_route(p, req, 0);
|
||||
build_route(p, req, 0, 0);
|
||||
} else if (req->debug && req->ignore)
|
||||
ast_verbose("Ignoring this SUBSCRIBE request\n");
|
||||
|
||||
@@ -27650,11 +27711,17 @@ static struct sip_peer *build_peer(const char *name, struct ast_variable *v, str
|
||||
snprintf(transport, sizeof(transport), "_%s._%s", get_srv_service(peer->socket.type), get_srv_protocol(peer->socket.type));
|
||||
|
||||
peer->addr.ss.ss_family = get_address_family_filter(&bindaddr); /* Filter address family */
|
||||
if (ast_dnsmgr_lookup(_srvlookup, &peer->addr, &peer->dnsmgr, sip_cfg.srvlookup && !peer->portinuri ? transport : NULL)) {
|
||||
if (ast_dnsmgr_lookup_cb(_srvlookup, &peer->addr, &peer->dnsmgr, sip_cfg.srvlookup && !peer->portinuri ? transport : NULL,
|
||||
on_dns_update_peer, ref_peer(peer, "Store peer on dnsmgr"))) {
|
||||
ast_log(LOG_ERROR, "srvlookup failed for host: %s, on peer %s, removing peer\n", _srvlookup, peer->name);
|
||||
unref_peer(peer, "dnsmgr lookup failed, getting rid of peer dnsmgr ref");
|
||||
unref_peer(peer, "getting rid of a peer pointer");
|
||||
return NULL;
|
||||
}
|
||||
if (!peer->dnsmgr) {
|
||||
/* dnsmgr refresh disabeld, release reference */
|
||||
unref_peer(peer, "dnsmgr disabled, unref peer");
|
||||
}
|
||||
|
||||
ast_string_field_set(peer, tohost, srvlookup);
|
||||
|
||||
@@ -27770,7 +27837,7 @@ static void cleanup_all_regs(void)
|
||||
/* First, destroy all outstanding registry calls */
|
||||
/* This is needed, since otherwise active registry entries will not be destroyed */
|
||||
ASTOBJ_CONTAINER_TRAVERSE(®l, 1, do { /* regl is locked */
|
||||
ASTOBJ_RDLOCK(iterator); /* now regl is locked, and the object is also locked */
|
||||
ASTOBJ_WRLOCK(iterator); /* now regl is locked, and the object is also locked */
|
||||
if (iterator->call) {
|
||||
ast_debug(3, "Destroying active SIP dialog for registry %s@%s\n", iterator->username, iterator->hostname);
|
||||
/* This will also remove references to the registry */
|
||||
@@ -27783,6 +27850,11 @@ static void cleanup_all_regs(void)
|
||||
if (iterator->timeout > -1) {
|
||||
AST_SCHED_DEL_UNREF(sched, iterator->timeout, registry_unref(iterator, "reg ptr unref from reload config"));
|
||||
}
|
||||
if (iterator->dnsmgr) {
|
||||
ast_dnsmgr_release(iterator->dnsmgr);
|
||||
iterator->dnsmgr = NULL;
|
||||
registry_unref(iterator, "reg ptr unref from dnsmgr");
|
||||
}
|
||||
ASTOBJ_UNLOCK(iterator);
|
||||
} while(0));
|
||||
}
|
||||
@@ -30394,6 +30466,16 @@ static int unload_module(void)
|
||||
cleanup_all_regs();
|
||||
ASTOBJ_CONTAINER_DESTROYALL(®l, sip_registry_destroy);
|
||||
ASTOBJ_CONTAINER_DESTROY(®l);
|
||||
|
||||
ASTOBJ_CONTAINER_TRAVERSE(&submwil, 1, do {
|
||||
ASTOBJ_WRLOCK(iterator);
|
||||
if (iterator->dnsmgr) {
|
||||
ast_dnsmgr_release(iterator->dnsmgr);
|
||||
iterator->dnsmgr = NULL;
|
||||
ASTOBJ_UNREF(iterator, sip_subscribe_mwi_destroy);
|
||||
}
|
||||
ASTOBJ_UNLOCK(iterator);
|
||||
} while(0));
|
||||
ASTOBJ_CONTAINER_DESTROYALL(&submwil, sip_subscribe_mwi_destroy);
|
||||
ASTOBJ_CONTAINER_DESTROY(&submwil);
|
||||
|
||||
|
@@ -37,6 +37,8 @@ extern "C" {
|
||||
*/
|
||||
struct ast_dnsmgr_entry;
|
||||
|
||||
typedef void (*dns_update_func)(struct ast_sockaddr *old_addr, struct ast_sockaddr *new_addr, void *data);
|
||||
|
||||
/*!
|
||||
* \brief Allocate a new DNS manager entry
|
||||
*
|
||||
@@ -104,6 +106,31 @@ void ast_dnsmgr_release(struct ast_dnsmgr_entry *entry);
|
||||
*/
|
||||
int ast_dnsmgr_lookup(const char *name, struct ast_sockaddr *result, struct ast_dnsmgr_entry **dnsmgr, const char *service);
|
||||
|
||||
/*!
|
||||
* \brief Allocate and initialize a DNS manager entry, with update callback
|
||||
*
|
||||
* \param name the hostname
|
||||
* \param result The addr which is intended to be updated in the update callback when DNS manager calls it on refresh.
|
||||
* The address family is used as an input parameter to filter the returned addresses.
|
||||
* If it is 0, both IPv4 and IPv6 addresses can be returned.
|
||||
* \param dnsmgr Where to store the allocate DNS manager entry
|
||||
* \param service
|
||||
* \param func The update callback function
|
||||
* The update callback will be called when DNS manager detects that an IP address has been changed.
|
||||
* Instead of updating the addr itself, DNS manager will call this callback function with the old
|
||||
* and new addresses. It is the responsibility of the callback to perform any updates
|
||||
* \param data A pointer to data that will be passed through to the callback function
|
||||
*
|
||||
* \note
|
||||
* This function allocates a new DNS manager entry object, and fills it with
|
||||
* the provided hostname and IP address. This function _does_ force an initial
|
||||
* lookup, so it may block for some period of time.
|
||||
*
|
||||
* \retval 0 success
|
||||
* \retval non-zero failure
|
||||
*/
|
||||
int ast_dnsmgr_lookup_cb(const char *name, struct ast_sockaddr *result, struct ast_dnsmgr_entry **dnsmgr, const char *service, dns_update_func func, void *data);
|
||||
|
||||
/*!
|
||||
* \brief Force a refresh of a dnsmgr entry
|
||||
*
|
||||
|
@@ -737,6 +737,7 @@ int ast_find_ourip(struct ast_sockaddr *ourip, const struct ast_sockaddr *bindad
|
||||
{
|
||||
char ourhost[MAXHOSTNAMELEN] = "";
|
||||
struct ast_sockaddr root;
|
||||
int res, port = ast_sockaddr_port(ourip);
|
||||
|
||||
/* just use the bind address if it is nonzero */
|
||||
if (!ast_sockaddr_is_any(bindaddr)) {
|
||||
@@ -749,6 +750,8 @@ int ast_find_ourip(struct ast_sockaddr *ourip, const struct ast_sockaddr *bindad
|
||||
ast_log(LOG_WARNING, "Unable to get hostname\n");
|
||||
} else {
|
||||
if (resolve_first(ourip, ourhost, PARSE_PORT_FORBID, family) == 0) {
|
||||
/* reset port since resolve_first wipes this out */
|
||||
ast_sockaddr_set_port(ourip, port);
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
@@ -756,8 +759,12 @@ int ast_find_ourip(struct ast_sockaddr *ourip, const struct ast_sockaddr *bindad
|
||||
/* A.ROOT-SERVERS.NET. */
|
||||
if (!resolve_first(&root, "A.ROOT-SERVERS.NET", PARSE_PORT_FORBID, 0) &&
|
||||
!ast_ouraddrfor(&root, ourip)) {
|
||||
/* reset port since resolve_first wipes this out */
|
||||
ast_sockaddr_set_port(ourip, port);
|
||||
return 0;
|
||||
}
|
||||
return get_local_address(ourip);
|
||||
res = get_local_address(ourip);
|
||||
ast_sockaddr_set_port(ourip, port);
|
||||
return res;
|
||||
}
|
||||
|
||||
|
@@ -5351,6 +5351,16 @@ struct ast_channel *__ast_request_and_dial(const char *type, format_t format, co
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* I seems strange to set the CallerID on an outgoing call leg
|
||||
* to whom we are calling, but this function's callers are doing
|
||||
* various Originate methods. This call leg goes to the local
|
||||
* user. Once the local user answers, the dialplan needs to be
|
||||
* able to access the CallerID from the CALLERID function as if
|
||||
* the local user had placed this call.
|
||||
*/
|
||||
ast_set_callerid(chan, cid_num, cid_name, cid_num);
|
||||
|
||||
ast_set_flag(chan->cdr, AST_CDR_FLAG_ORIGINATED);
|
||||
ast_party_connected_line_set_init(&connected, &chan->connected);
|
||||
if (cid_num) {
|
||||
|
@@ -58,6 +58,10 @@ struct ast_dnsmgr_entry {
|
||||
unsigned int family;
|
||||
/*! Set to 1 if the entry changes */
|
||||
unsigned int changed:1;
|
||||
/*! Data to pass back to update_func */
|
||||
void *data;
|
||||
/*! The callback function to execute on address update */
|
||||
dns_update_func update_func;
|
||||
ast_mutex_t lock;
|
||||
AST_RWLIST_ENTRY(ast_dnsmgr_entry) list;
|
||||
/*! just 1 here, but we use calloc to allocate the correct size */
|
||||
@@ -129,7 +133,7 @@ void ast_dnsmgr_release(struct ast_dnsmgr_entry *entry)
|
||||
ast_free(entry);
|
||||
}
|
||||
|
||||
int ast_dnsmgr_lookup(const char *name, struct ast_sockaddr *result, struct ast_dnsmgr_entry **dnsmgr, const char *service)
|
||||
static int internal_dnsmgr_lookup(const char *name, struct ast_sockaddr *result, struct ast_dnsmgr_entry **dnsmgr, const char *service, dns_update_func func, void *data)
|
||||
{
|
||||
unsigned int family;
|
||||
|
||||
@@ -164,9 +168,21 @@ int ast_dnsmgr_lookup(const char *name, struct ast_sockaddr *result, struct ast_
|
||||
|
||||
ast_verb(3, "adding dns manager for '%s'\n", name);
|
||||
*dnsmgr = ast_dnsmgr_get_family(name, result, service, family);
|
||||
(*dnsmgr)->update_func = func;
|
||||
(*dnsmgr)->data = data;
|
||||
return !*dnsmgr;
|
||||
}
|
||||
|
||||
int ast_dnsmgr_lookup(const char *name, struct ast_sockaddr *result, struct ast_dnsmgr_entry **dnsmgr, const char *service)
|
||||
{
|
||||
return internal_dnsmgr_lookup(name, result, dnsmgr, service, NULL, NULL);
|
||||
}
|
||||
|
||||
int ast_dnsmgr_lookup_cb(const char *name, struct ast_sockaddr *result, struct ast_dnsmgr_entry **dnsmgr, const char *service, dns_update_func func, void *data)
|
||||
{
|
||||
return internal_dnsmgr_lookup(name, result, dnsmgr, service, func, data);
|
||||
}
|
||||
|
||||
/*
|
||||
* Refresh a dnsmgr entry
|
||||
*/
|
||||
@@ -186,16 +202,19 @@ static int dnsmgr_refresh(struct ast_dnsmgr_entry *entry, int verbose)
|
||||
if (!ast_sockaddr_port(&tmp)) {
|
||||
ast_sockaddr_set_port(&tmp, ast_sockaddr_port(entry->result));
|
||||
}
|
||||
|
||||
if (ast_sockaddr_cmp(&tmp, entry->result)) {
|
||||
const char *old_addr = ast_strdupa(ast_sockaddr_stringify(entry->result));
|
||||
const char *new_addr = ast_strdupa(ast_sockaddr_stringify(&tmp));
|
||||
|
||||
ast_log(LOG_NOTICE, "dnssrv: host '%s' changed from %s to %s\n",
|
||||
entry->name, old_addr, new_addr);
|
||||
if (entry->update_func) {
|
||||
entry->update_func(entry->result, &tmp, entry->data);
|
||||
} else {
|
||||
ast_log(LOG_NOTICE, "dnssrv: host '%s' changed from %s to %s\n",
|
||||
entry->name, old_addr, new_addr);
|
||||
|
||||
ast_sockaddr_copy(entry->result, &tmp);
|
||||
changed = entry->changed = 1;
|
||||
ast_sockaddr_copy(entry->result, &tmp);
|
||||
changed = entry->changed = 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user