Compare commits

...

15 Commits

Author SHA1 Message Date
Asterisk Autobuilder
248d8ac9c4 Importing release summary for 10.6.1 release.
git-svn-id: https://origsvn.digium.com/svn/asterisk/tags/10.6.1@370108 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2012-07-16 14:51:50 +00:00
Asterisk Autobuilder
6a2446e841 Update ChangeLog
git-svn-id: https://origsvn.digium.com/svn/asterisk/tags/10.6.1@370106 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2012-07-16 14:40:18 +00:00
Asterisk Autobuilder
b5607cdb59 Merge 369732 for 10.6.1
git-svn-id: https://origsvn.digium.com/svn/asterisk/tags/10.6.1@370102 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2012-07-16 14:29:25 +00:00
Asterisk Autobuilder
2cfe97162e Create 10.6.1
git-svn-id: https://origsvn.digium.com/svn/asterisk/tags/10.6.1@370079 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2012-07-16 13:41:01 +00:00
Asterisk Autobuilder
60ec12a609 Importing release summary for 10.6.0 release.
git-svn-id: https://origsvn.digium.com/svn/asterisk/tags/10.6.0@369897 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2012-07-10 15:11:01 +00:00
Asterisk Autobuilder
ebe3211bb6 Update version, ChangeLog, remove old summaries
git-svn-id: https://origsvn.digium.com/svn/asterisk/tags/10.6.0@369894 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2012-07-10 14:57:57 +00:00
Asterisk Autobuilder
e5bae0ddc5 Create 10.6.0
git-svn-id: https://origsvn.digium.com/svn/asterisk/tags/10.6.0@369891 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2012-07-10 14:52:40 +00:00
Asterisk Autobuilder
1d55849d73 Importing release summary for 10.6.0-rc2 release.
git-svn-id: https://origsvn.digium.com/svn/asterisk/tags/10.6.0-rc2@369692 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2012-07-05 23:10:55 +00:00
Asterisk Autobuilder
7ea5977f2f Commit changes for 10.6.0-rc2
ASTERISK-19905: r368947
ASTERISK-20040: r369215
ASTERISK-19992: r369437,369558,369580,369627
ASTERISK-19923: r369653
ASTERISK-20008: r369067
ASTERISK-20012: r369044


git-svn-id: https://origsvn.digium.com/svn/asterisk/tags/10.6.0-rc2@369688 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2012-07-05 23:05:44 +00:00
Asterisk Autobuilder
068ff012d5 Create 10.6.0-rc2
git-svn-id: https://origsvn.digium.com/svn/asterisk/tags/10.6.0-rc2@369686 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2012-07-05 22:34:45 +00:00
Asterisk Autobuilder
f70d82e739 Tweak ChangeLog to include -rc1 specifier
git-svn-id: https://origsvn.digium.com/svn/asterisk/tags/10.6.0-rc1@368709 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2012-06-08 15:51:16 +00:00
Asterisk Autobuilder
6f651f939e Use autotagged externals
git-svn-id: https://origsvn.digium.com/svn/asterisk/tags/10.6.0-rc1@368708 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2012-06-08 15:28:28 +00:00
Asterisk Autobuilder
143fa8adf6 Importing release summary for 10.6.0-rc1 release.
git-svn-id: https://origsvn.digium.com/svn/asterisk/tags/10.6.0-rc1@368707 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2012-06-08 15:28:17 +00:00
Asterisk Autobuilder
b8fc5be107 Importing files for 10.6.0-rc1 release.
git-svn-id: https://origsvn.digium.com/svn/asterisk/tags/10.6.0-rc1@368706 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2012-06-08 15:28:10 +00:00
Asterisk Autobuilder
9fec338749 Creating tag for the release of asterisk-10.6.0-rc1
git-svn-id: https://origsvn.digium.com/svn/asterisk/tags/10.6.0-rc1@368705 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2012-06-08 15:26:58 +00:00
11 changed files with 25524 additions and 136 deletions

3
.lastclean Normal file
View File

@@ -0,0 +1,3 @@
39

1
.version Normal file
View File

@@ -0,0 +1 @@
10.6.1

25145
ChangeLog Normal file

File diff suppressed because it is too large Load Diff

View File

@@ -1759,25 +1759,28 @@ static void free_user(struct ast_vm_user *vmu)
static int vm_allocate_dh(struct vm_state *vms, struct ast_vm_user *vmu, int count_msg) {
int arraysize = (vmu->maxmsg > count_msg ? vmu->maxmsg : count_msg);
if (!vms->dh_arraysize) {
/* initial allocation */
/* remove old allocation */
if (vms->deleted) {
ast_free(vms->deleted);
vms->deleted = NULL;
}
if (vms->heard) {
ast_free(vms->heard);
vms->heard = NULL;
}
vms->dh_arraysize = 0;
if (arraysize > 0) {
if (!(vms->deleted = ast_calloc(arraysize, sizeof(int)))) {
return -1;
}
if (!(vms->heard = ast_calloc(arraysize, sizeof(int)))) {
ast_free(vms->deleted);
vms->deleted = NULL;
return -1;
}
vms->dh_arraysize = arraysize;
} else if (vms->dh_arraysize < arraysize) {
if (!(vms->deleted = ast_realloc(vms->deleted, arraysize * sizeof(int)))) {
return -1;
}
if (!(vms->heard = ast_realloc(vms->heard, arraysize * sizeof(int)))) {
return -1;
}
memset(vms->deleted, 0, arraysize * sizeof(int));
memset(vms->heard, 0, arraysize * sizeof(int));
vms->dh_arraysize = arraysize;
}
return 0;
@@ -6554,13 +6557,20 @@ static void adsi_message(struct ast_channel *chan, struct vm_state *vms)
ast_callerid_parse(cid, &name, &num);
if (!name)
name = num;
} else
} else {
name = "Unknown Caller";
}
/* If deleted, show "undeleted" */
if (vms->deleted[vms->curmsg])
#ifdef IMAP_STORAGE
ast_mutex_lock(&vms->lock);
#endif
if (vms->deleted[vms->curmsg]) {
keys[1] = ADSI_KEY_SKT | (ADSI_KEY_APPS + 11);
}
#ifdef IMAP_STORAGE
ast_mutex_unlock(&vms->lock);
#endif
/* Except "Exit" */
keys[5] = ADSI_KEY_SKT | (ADSI_KEY_APPS + 5);
@@ -6613,8 +6623,15 @@ static void adsi_delete(struct ast_channel *chan, struct vm_state *vms)
}
/* If deleted, show "undeleted" */
if (vms->deleted[vms->curmsg])
#ifdef IMAP_STORAGE
ast_mutex_lock(&vms->lock);
#endif
if (vms->deleted[vms->curmsg]) {
keys[1] = ADSI_KEY_SKT | (ADSI_KEY_APPS + 11);
}
#ifdef IMAP_STORAGE
ast_mutex_unlock(&vms->lock);
#endif
/* Except "Exit" */
keys[5] = ADSI_KEY_SKT | (ADSI_KEY_APPS + 5);
@@ -7795,8 +7812,12 @@ static int play_message(struct ast_channel *chan, struct ast_vm_user *vmu, struc
if (!res) {
make_file(vms->fn, sizeof(vms->fn), vms->curdir, vms->curmsg);
#ifdef IMAP_STORAGE
ast_mutex_lock(&vms->lock);
#endif
vms->heard[vms->curmsg] = 1;
#ifdef IMAP_STORAGE
ast_mutex_unlock(&vms->lock);
/*IMAP storage stores any prepended message from a forward
* as a separate file from the rest of the message
*/
@@ -8011,6 +8032,7 @@ static int close_mailbox(struct vm_state *vms, struct ast_vm_user *vmu)
}
ast_unlock_path(vms->curdir);
#else /* defined(IMAP_STORAGE) */
ast_mutex_lock(&vms->lock);
if (vms->deleted) {
/* Since we now expunge after each delete, deleting in reverse order
* ensures that no reordering occurs between each step. */
@@ -8025,12 +8047,18 @@ static int close_mailbox(struct vm_state *vms, struct ast_vm_user *vmu)
#endif
done:
if (vms->deleted && last_msg_idx) {
if (vms->deleted) {
ast_free(vms->deleted);
vms->deleted = NULL;
}
if (vms->heard && last_msg_idx) {
if (vms->heard) {
ast_free(vms->heard);
vms->heard = NULL;
}
vms->dh_arraysize = 0;
#ifdef IMAP_STORAGE
ast_mutex_unlock(&vms->lock);
#endif
return 0;
}
@@ -9125,14 +9153,25 @@ static int vm_instructions_en(struct ast_channel *chan, struct ast_vm_user *vmu,
res = ast_play_and_wait(chan, "vm-next");
}
if (!res) {
if (!vms->deleted[vms->curmsg])
int curmsg_deleted;
#ifdef IMAP_STORAGE
ast_mutex_lock(&vms->lock);
#endif
curmsg_deleted = vms->deleted[vms->curmsg];
#ifdef IMAP_STORAGE
ast_mutex_unlock(&vms->lock);
#endif
if (!curmsg_deleted) {
res = ast_play_and_wait(chan, "vm-delete");
else
} else {
res = ast_play_and_wait(chan, "vm-undelete");
if (!res)
}
if (!res) {
res = ast_play_and_wait(chan, "vm-toforward");
if (!res)
}
if (!res) {
res = ast_play_and_wait(chan, "vm-savemessage");
}
}
}
if (!res) {
@@ -10169,6 +10208,7 @@ static int vm_execmain(struct ast_channel *chan, const char *data)
}
vms.starting = 1;
vms.curmsg = 0;
break;
case '3': /* Advanced options */
ast_test_suite_event_notify("ADVOPTIONS", "Message: entering advanced options menu");

View File

@@ -0,0 +1,61 @@
<!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-10.6.1</title></head>
<body>
<h1 align="center"><a name="top">Release Summary</a></h1>
<h3 align="center">asterisk-10.6.1</h3>
<h3 align="center">Date: 2012-07-16</h3>
<h3 align="center">&lt;asteriskteam@digium.com&gt;</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="#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-10.6.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>
3 bebuild<br/>
</td>
<td>
</td>
<td>
</td>
</tr>
</table>
<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/10?view=revision&revision=370079">370079</a></td><td>bebuild</td><td>Create 10.6.1</td>
<td></td></tr><tr><td><a href="http://svn.digium.com/view/asterisk/branches/10?view=revision&revision=370102">370102</a></td><td>bebuild</td><td>Merge 369732 for 10.6.1</td>
<td></td></tr><tr><td><a href="http://svn.digium.com/view/asterisk/branches/10?view=revision&revision=370106">370106</a></td><td>bebuild</td><td>Update ChangeLog</td>
<td></td></tr></table>
<hr/>
<a name="diffstat"><h2 align="center">Diffstat Results</h2></a>
<center><a href="#top">[Back to Top]</a></center><br/><p>This is a summary of the changes to the source code that went into this release that was generated using the diffstat utility.</p>
<pre>
.version | 2
ChangeLog | 16 +
asterisk-10.6.0-summary.html | 439 ---------------------------------
asterisk-10.6.0-summary.txt | 570 -------------------------------------------
main/tcptls.c | 3
5 files changed, 17 insertions(+), 1013 deletions(-)
</pre><br/>
<hr/>
</body>
</html>

View File

@@ -0,0 +1,90 @@
Release Summary
asterisk-10.6.1
Date: 2012-07-16
<asteriskteam@digium.com>
----------------------------------------------------------------------
Table of Contents
1. Summary
2. Contributors
3. Other Changes
4. 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-10.6.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
3 bebuild
----------------------------------------------------------------------
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 |
|------------+-----------+--------------------------+--------------------|
| 370079 | bebuild | Create 10.6.1 | |
|------------+-----------+--------------------------+--------------------|
| 370102 | bebuild | Merge 369732 for 10.6.1 | |
|------------+-----------+--------------------------+--------------------|
| 370106 | bebuild | Update ChangeLog | |
+------------------------------------------------------------------------+
----------------------------------------------------------------------
Diffstat Results
[Back to Top]
This is a summary of the changes to the source code that went into this
release that was generated using the diffstat utility.
.version | 2
ChangeLog | 16 +
asterisk-10.6.0-summary.html | 439 ---------------------------------
asterisk-10.6.0-summary.txt | 570 -------------------------------------------
main/tcptls.c | 3
5 files changed, 17 insertions(+), 1013 deletions(-)
----------------------------------------------------------------------

View File

@@ -3870,7 +3870,7 @@ static int __sip_autodestruct(const void *data)
ast_debug(3, "Re-scheduled destruction of SIP call %s\n", p->callid ? p->callid : "<unknown>");
append_history(p, "ReliableXmit", "timeout");
if (sscanf(p->lastmsg, "Tx: %30s", method_str) == 1 || sscanf(p->lastmsg, "Rx: %30s", method_str) == 1) {
if (method_match(SIP_CANCEL, method_str) || method_match(SIP_BYE, method_str)) {
if (p->ongoing_reinvite || method_match(SIP_CANCEL, method_str) || method_match(SIP_BYE, method_str)) {
pvt_set_needdestroy(p, "autodestruct");
}
}
@@ -6266,6 +6266,21 @@ const char *hangup_cause2sip(int cause)
return 0;
}
static int reinvite_timeout(const void *data)
{
struct sip_pvt *dialog = (struct sip_pvt *) data;
struct ast_channel *owner = sip_pvt_lock_full(dialog);
dialog->reinviteid = -1;
check_pendings(dialog);
if (owner) {
ast_channel_unlock(owner);
ast_channel_unref(owner);
}
ao2_unlock(dialog);
dialog_unref(dialog, "unref for reinvite timeout");
return 0;
}
/*! \brief sip_hangup: Hangup SIP call
* Part of PBX interface, called from ast_hangup */
static int sip_hangup(struct ast_channel *ast)
@@ -6460,8 +6475,16 @@ static int sip_hangup(struct ast_channel *ast)
ast_set_flag(&p->flags[0], SIP_PENDINGBYE);
ast_clear_flag(&p->flags[0], SIP_NEEDREINVITE);
AST_SCHED_DEL_UNREF(sched, p->waitid, dialog_unref(p, "when you delete the waitid sched, you should dec the refcount for the stored dialog ptr"));
if (sip_cancel_destroy(p))
if (sip_cancel_destroy(p)) {
ast_log(LOG_WARNING, "Unable to cancel SIP destruction. Expect bad things.\n");
}
/* If we have an ongoing reinvite, there is a chance that we have gotten a provisional
* response, but something weird has happened and we will never receive a final response.
* So, just in case, check for pending actions after a bit of time to trigger the pending
* bye that we are setting above */
if (p->ongoing_reinvite && p->reinviteid < 0) {
p->reinviteid = ast_sched_add(sched, 32 * p->timer_t1, reinvite_timeout, dialog_ref(p, "ref for reinvite_timeout"));
}
}
}
}
@@ -7791,6 +7814,7 @@ struct sip_pvt *sip_alloc(ast_string_field callid, struct ast_sockaddr *addr,
p->method = intended_method;
p->initid = -1;
p->waitid = -1;
p->reinviteid = -1;
p->autokillid = -1;
p->request_queue_sched_id = -1;
p->provisional_keepalive_sched_id = -1;
@@ -10657,10 +10681,9 @@ static int reqprep(struct sip_request *req, struct sip_pvt *p, int sipmethod, ui
* 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) {
if (p->route &&
!(sipmethod == SIP_CANCEL ||
(sipmethod == SIP_ACK && (p->invitestate == INV_COMPLETED || p->invitestate == INV_CANCELLED)))) {
set_destination(p, p->route->hop);
add_route(req, is_strict ? p->route->next : p->route);
}
@@ -12278,7 +12301,7 @@ static int transmit_reinvite_with_sdp(struct sip_pvt *p, int t38version, int old
initialize_initreq(p, &req);
p->lastinvite = p->ocseq;
ast_set_flag(&p->flags[0], SIP_OUTGOING); /* Change direction of this dialog */
p->ongoing_reinvite = 1;
return send_request(p, &req, XMIT_CRITICAL, p->ocseq);
}
@@ -20463,8 +20486,11 @@ static void parse_moved_contact(struct sip_pvt *p, struct sip_request *req, char
static void check_pendings(struct sip_pvt *p)
{
if (ast_test_flag(&p->flags[0], SIP_PENDINGBYE)) {
/* if we can't BYE, then this is really a pending CANCEL */
if (p->invitestate == INV_PROCEEDING || p->invitestate == INV_EARLY_MEDIA) {
if (p->reinviteid > -1) {
/* Outstanding p->reinviteid timeout, so wait... */
return;
} else if (p->invitestate == INV_PROCEEDING || p->invitestate == INV_EARLY_MEDIA) {
/* if we can't BYE, then this is really a pending CANCEL */
p->invitestate = INV_CANCELLED;
transmit_request(p, SIP_CANCEL, p->lastinvite, XMIT_RELIABLE, FALSE);
/* If the cancel occurred on an initial invite, cancel the pending BYE */
@@ -20475,8 +20501,9 @@ static void check_pendings(struct sip_pvt *p)
INVITE, but do set an autodestruct just in case we never get it. */
} else {
/* We have a pending outbound invite, don't send something
new in-transaction */
if (p->pendinginvite)
* new in-transaction, unless it is a pending reinvite, then
* by the time we are called here, we should probably just hang up. */
if (p->pendinginvite && !p->ongoing_reinvite)
return;
if (p->owner) {
@@ -20686,9 +20713,17 @@ static void handle_response_invite(struct sip_pvt *p, int resp, const char *rest
if (resp >= 300 && (p->invitestate == INV_CALLING || p->invitestate == INV_PROCEEDING || p->invitestate == INV_EARLY_MEDIA ))
p->invitestate = INV_COMPLETED;
if ((resp >= 200 && reinvite)) {
p->ongoing_reinvite = 0;
if (p->reinviteid > -1) {
AST_SCHED_DEL_UNREF(sched, p->reinviteid, dialog_unref(p, "unref dialog for reinvite timeout because of a final response"));
}
}
/* Final response, clear out pending invite */
if ((resp == 200 || resp >= 300) && p->pendinginvite && seqno == p->pendinginvite)
if ((resp == 200 || resp >= 300) && p->pendinginvite && seqno == p->pendinginvite) {
p->pendinginvite = 0;
}
/* If this is a response to our initial INVITE, we need to set what we can use
* for this peer.
@@ -30064,6 +30099,12 @@ static int apply_directmedia_ha(struct sip_pvt *p1, struct sip_pvt *p2, const ch
ast_rtp_instance_get_remote_address(p1->rtp, &them);
ast_rtp_instance_get_local_address(p1->rtp, &us);
/* If p2 is a guest call, there will be no peer. If there is no peer, there
* is no directmediaha, so go ahead and allow it */
if (!p2->relatedpeer) {
return res;
}
if ((res = ast_apply_ha(p2->relatedpeer->directmediaha, &them)) == AST_SENSE_DENY) {
const char *us_addr = ast_strdupa(ast_sockaddr_stringify(&us));
const char *them_addr = ast_strdupa(ast_sockaddr_stringify(&them));

View File

@@ -4976,6 +4976,11 @@ static void setsubstate(struct skinny_subchannel *sub, int state)
pthread_t t;
int actualstate = state;
if (!l->device) {
ast_log(LOG_WARNING, "Device for line %s is not registered.\n", l->name);
return;
}
if (sub->substate == SUBSTATE_ONHOOK) {
return;
}
@@ -5365,15 +5370,20 @@ static void dumpsub(struct skinny_subchannel *sub, int forcehangup)
struct skinny_subchannel *activatesub = NULL;
struct skinny_subchannel *tsub;
if (!l->device) {
ast_log(LOG_WARNING, "Device for line %s is not registered.\n", l->name);
return;
}
if (skinnydebug) {
ast_verb(3, "Sub %d - Dumping\n", sub->callid);
}
if (!forcehangup && sub->substate == SUBSTATE_HOLD) {
l->activesub = NULL;
return;
}
if (sub == l->activesub) {
d->hookstate = SKINNY_ONHOOK;
transmit_speaker_mode(d, SKINNY_SPEAKEROFF);

View File

@@ -1099,6 +1099,7 @@ struct sip_pvt {
struct sip_auth_container *peerauth;/*!< Realm authentication credentials */
int noncecount; /*!< Nonce-count */
unsigned int stalenonce:1; /*!< Marks the current nonce as responded too */
unsigned int ongoing_reinvite:1; /*!< There is a reinvite in progress that might need to be cleaned up */
char lastmsg[256]; /*!< Last Message sent/received */
int amaflags; /*!< AMA Flags */
uint32_t pendinginvite; /*!< Any pending INVITE or state NOTIFY (in subscribe pvt's) ? (seqno of this) */
@@ -1111,6 +1112,7 @@ struct sip_pvt {
int initid; /*!< Auto-congest ID if appropriate (scheduler) */
int waitid; /*!< Wait ID for scheduler after 491 or other delays */
int reinviteid; /*!< Reinvite in case of provisional, but no final response */
int autokillid; /*!< Auto-kill ID (scheduler) */
int t38id; /*!< T.38 Response ID */
struct sip_refer *refer; /*!< REFER: SIP transfer data structure */

View File

@@ -4619,7 +4619,6 @@ static int manage_parked_call(struct parkeduser *pu, const struct pollfd *pfds,
struct ast_channel *chan = pu->chan; /* shorthand */
int tms; /* timeout for this item */
int x; /* fd index in channel */
int parking_complete = 0;
tms = ast_tvdiff_ms(ast_tvnow(), pu->start);
if (tms > pu->parkingtime) {
@@ -4734,104 +4733,103 @@ static int manage_parked_call(struct parkeduser *pu, const struct pollfd *pfds,
}
/* And take them out of the parking lot */
parking_complete = 1;
} else { /* still within parking time, process descriptors */
x = 0;
if (pfds) {
for (; x < AST_MAX_FDS; x++) {
struct ast_frame *f;
int y;
if (chan->fds[x] == -1) {
continue; /* nothing on this descriptor */
}
for (y = 0; y < nfds; y++) {
if (pfds[y].fd == chan->fds[x]) {
/* Found poll record! */
break;
}
}
if (y == nfds) {
/* Not found */
continue;
}
if (!(pfds[y].revents & (POLLIN | POLLERR | POLLPRI))) {
/* Next x */
continue;
}
if (pfds[y].revents & POLLPRI) {
ast_set_flag(chan, AST_FLAG_EXCEPTION);
} else {
ast_clear_flag(chan, AST_FLAG_EXCEPTION);
}
chan->fdno = x;
/* See if they need servicing */
f = ast_read(pu->chan);
/* Hangup? */
if (!f || (f->frametype == AST_FRAME_CONTROL
&& f->subclass.integer == AST_CONTROL_HANGUP)) {
if (f) {
ast_frfree(f);
}
post_manager_event("ParkedCallGiveUp", pu);
ast_cel_report_event(pu->chan, AST_CEL_PARK_END, NULL, "ParkedCallGiveUp",
NULL);
/* There's a problem, hang them up */
ast_verb(2, "%s got tired of being parked\n", chan->name);
ast_hangup(chan);
/* And take them out of the parking lot */
parking_complete = 1;
break;
} else {
/* XXX Maybe we could do something with packets, like dial "0" for operator or something XXX */
ast_frfree(f);
if (pu->hold_method == AST_CONTROL_HOLD
&& pu->moh_trys < 3
&& !chan->generatordata) {
ast_debug(1,
"MOH on parked call stopped by outside source. Restarting on channel %s.\n",
chan->name);
ast_indicate_data(chan, AST_CONTROL_HOLD,
S_OR(pu->parkinglot->cfg.mohclass, NULL),
(!ast_strlen_zero(pu->parkinglot->cfg.mohclass)
? strlen(pu->parkinglot->cfg.mohclass) + 1 : 0));
pu->moh_trys++;
}
goto std; /* XXX Ick: jumping into an else statement??? XXX */
}
} /* End for */
}
if (x >= AST_MAX_FDS) {
std:
for (x = 0; x < AST_MAX_FDS; x++) { /* mark fds for next round */
if (chan->fds[x] > -1) {
void *tmp = ast_realloc(*new_pfds,
(*new_nfds + 1) * sizeof(struct pollfd));
if (!tmp) {
continue;
}
*new_pfds = tmp;
(*new_pfds)[*new_nfds].fd = chan->fds[x];
(*new_pfds)[*new_nfds].events = POLLIN | POLLERR | POLLPRI;
(*new_pfds)[*new_nfds].revents = 0;
(*new_nfds)++;
}
}
/* Keep track of our shortest wait */
if (tms < *ms || *ms < 0) {
*ms = tms;
}
}
return 1;
}
return parking_complete;
/* still within parking time, process descriptors */
if (pfds) {
for (x = 0; x < AST_MAX_FDS; x++) {
struct ast_frame *f;
int y;
if (chan->fds[x] == -1) {
continue; /* nothing on this descriptor */
}
for (y = 0; y < nfds; y++) {
if (pfds[y].fd == chan->fds[x]) {
/* Found poll record! */
break;
}
}
if (y == nfds) {
/* Not found */
continue;
}
if (!(pfds[y].revents & (POLLIN | POLLERR | POLLPRI))) {
/* Next x */
continue;
}
if (pfds[y].revents & POLLPRI) {
ast_set_flag(chan, AST_FLAG_EXCEPTION);
} else {
ast_clear_flag(chan, AST_FLAG_EXCEPTION);
}
chan->fdno = x;
/* See if they need servicing */
f = ast_read(pu->chan);
/* Hangup? */
if (!f || (f->frametype == AST_FRAME_CONTROL
&& f->subclass.integer == AST_CONTROL_HANGUP)) {
if (f) {
ast_frfree(f);
}
post_manager_event("ParkedCallGiveUp", pu);
ast_cel_report_event(pu->chan, AST_CEL_PARK_END, NULL, "ParkedCallGiveUp",
NULL);
/* There's a problem, hang them up */
ast_verb(2, "%s got tired of being parked\n", chan->name);
ast_hangup(chan);
/* And take them out of the parking lot */
return 1;
} else {
/* XXX Maybe we could do something with packets, like dial "0" for operator or something XXX */
ast_frfree(f);
if (pu->hold_method == AST_CONTROL_HOLD
&& pu->moh_trys < 3
&& !chan->generatordata) {
ast_debug(1,
"MOH on parked call stopped by outside source. Restarting on channel %s.\n",
chan->name);
ast_indicate_data(chan, AST_CONTROL_HOLD,
S_OR(pu->parkinglot->cfg.mohclass, NULL),
(!ast_strlen_zero(pu->parkinglot->cfg.mohclass)
? strlen(pu->parkinglot->cfg.mohclass) + 1 : 0));
pu->moh_trys++;
}
break;
}
} /* End for */
}
/* mark fds for next round */
for (x = 0; x < AST_MAX_FDS; x++) {
if (chan->fds[x] > -1) {
void *tmp = ast_realloc(*new_pfds,
(*new_nfds + 1) * sizeof(struct pollfd));
if (!tmp) {
continue;
}
*new_pfds = tmp;
(*new_pfds)[*new_nfds].fd = chan->fds[x];
(*new_pfds)[*new_nfds].events = POLLIN | POLLERR | POLLPRI;
(*new_pfds)[*new_nfds].revents = 0;
(*new_nfds)++;
}
}
/* Keep track of our shortest wait */
if (tms < *ms || *ms < 0) {
*ms = tms;
}
/* Stay in the parking lot. */
return 0;
}
/*! \brief Run management on parkinglots, called once per parkinglot */

View File

@@ -130,9 +130,6 @@ HOOK_T ast_tcptls_server_write(struct ast_tcptls_session_instance *tcptls_sessio
static void session_instance_destructor(void *obj)
{
struct ast_tcptls_session_instance *i = obj;
if (i->parent && i->parent->tls_cfg) {
ast_ssl_teardown(i->parent->tls_cfg);
}
ast_mutex_destroy(&i->lock);
}