mirror of
https://github.com/asterisk/asterisk.git
synced 2025-11-02 03:48:02 +00:00
Compare commits
21 Commits
certified/
...
1.8.3-rc3
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
bb557ef09e | ||
|
|
cdefffdef6 | ||
|
|
adb4d0c459 | ||
|
|
309eeca3ab | ||
|
|
49c97a0c77 | ||
|
|
c758083583 | ||
|
|
e2952f0eac | ||
|
|
b1dcf107cc | ||
|
|
1ccd414a7a | ||
|
|
63ad9a5fc3 | ||
|
|
50b9225488 | ||
|
|
aa1b76ed43 | ||
|
|
42c197581f | ||
|
|
3176066ba7 | ||
|
|
0fb49e5a4b | ||
|
|
231aacbb10 | ||
|
|
393b831d7b | ||
|
|
0a7c80b013 | ||
|
|
ada81295fb | ||
|
|
d703c9965c | ||
|
|
9167927b0f |
3
.lastclean
Normal file
3
.lastclean
Normal file
@@ -0,0 +1,3 @@
|
||||
38
|
||||
|
||||
|
||||
@@ -3558,7 +3558,6 @@ static struct callattempt *wait_for_answer(struct queue_ent *qe, struct callatte
|
||||
ast_moh_stop(qe->chan);
|
||||
ast_indicate(qe->chan, AST_CONTROL_RINGING);
|
||||
}
|
||||
ast_indicate(in, AST_CONTROL_RINGING);
|
||||
break;
|
||||
case AST_CONTROL_OFFHOOK:
|
||||
/* Ignore going off hook */
|
||||
|
||||
60
asterisk-1.8.3-rc3-summary.html
Normal file
60
asterisk-1.8.3-rc3-summary.html
Normal file
@@ -0,0 +1,60 @@
|
||||
<!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.3-rc3</title></head>
|
||||
<body>
|
||||
<h1 align="center"><a name="top">Release Summary</a></h1>
|
||||
<h3 align="center">asterisk-1.8.3-rc3</h3>
|
||||
<h3 align="center">Date: 2011-02-16</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="#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.3-rc2.</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>
|
||||
2 lmadsen<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/1.8?view=revision&revision=308141">308141</a></td><td>lmadsen</td><td>Create 1.8.3-rc3 from 1.8.3-rc2</td>
|
||||
<td></td></tr><tr><td><a href="http://svn.digium.com/view/asterisk/branches/1.8?view=revision&revision=308144">308144</a></td><td>lmadsen</td><td>Update .version and ChangeLog files. Remove old summary files. Merge in changes for chan_sip and app_queue.</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 | 36 +++++++++++++
|
||||
apps/app_queue.c | 1
|
||||
asterisk-1.8.3-rc2-summary.html | 68 -------------------------
|
||||
asterisk-1.8.3-rc2-summary.txt | 107 ----------------------------------------
|
||||
5 files changed, 37 insertions(+), 177 deletions(-)
|
||||
</pre><br/>
|
||||
<hr/>
|
||||
</body>
|
||||
</html>
|
||||
92
asterisk-1.8.3-rc3-summary.txt
Normal file
92
asterisk-1.8.3-rc3-summary.txt
Normal file
@@ -0,0 +1,92 @@
|
||||
Release Summary
|
||||
|
||||
asterisk-1.8.3-rc3
|
||||
|
||||
Date: 2011-02-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-1.8.3-rc2.
|
||||
|
||||
----------------------------------------------------------------------
|
||||
|
||||
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
|
||||
2 lmadsen
|
||||
|
||||
----------------------------------------------------------------------
|
||||
|
||||
Commits Not Associated with an Issue
|
||||
|
||||
[Back to Top]
|
||||
|
||||
This is a list of all changes that went into this release that did not
|
||||
directly close an issue from the issue tracker. The commits may have been
|
||||
marked as being related to an issue. If that is the case, the issue
|
||||
numbers are listed here, as well.
|
||||
|
||||
+------------------------------------------------------------------------+
|
||||
| Revision | Author | Summary | Issues Referenced |
|
||||
|----------+---------+-------------------------------+-------------------|
|
||||
| 308141 | lmadsen | Create 1.8.3-rc3 from | |
|
||||
| | | 1.8.3-rc2 | |
|
||||
|----------+---------+-------------------------------+-------------------|
|
||||
| | | Update .version and ChangeLog | |
|
||||
| 308144 | lmadsen | files. Remove old summary | |
|
||||
| | | files. Merge in changes for | |
|
||||
| | | chan_sip and app_queue. | |
|
||||
+------------------------------------------------------------------------+
|
||||
|
||||
----------------------------------------------------------------------
|
||||
|
||||
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 | 36 +++++++++++++
|
||||
apps/app_queue.c | 1
|
||||
asterisk-1.8.3-rc2-summary.html | 68 -------------------------
|
||||
asterisk-1.8.3-rc2-summary.txt | 107 ----------------------------------------
|
||||
5 files changed, 37 insertions(+), 177 deletions(-)
|
||||
|
||||
----------------------------------------------------------------------
|
||||
@@ -58,10 +58,8 @@ enum ast_fax_modems {
|
||||
|
||||
/*! \brief current state of a fax session */
|
||||
enum ast_fax_state {
|
||||
/*! reserved state */
|
||||
AST_FAX_STATE_RESERVED = 0,
|
||||
/*! uninitialized state */
|
||||
AST_FAX_STATE_UNINITIALIZED,
|
||||
AST_FAX_STATE_UNINITIALIZED = 0,
|
||||
/*! initialized state */
|
||||
AST_FAX_STATE_INITIALIZED,
|
||||
/*! fax resources open state */
|
||||
@@ -70,6 +68,10 @@ enum ast_fax_state {
|
||||
AST_FAX_STATE_ACTIVE,
|
||||
/*! fax session complete */
|
||||
AST_FAX_STATE_COMPLETE,
|
||||
/*! reserved state */
|
||||
AST_FAX_STATE_RESERVED,
|
||||
/*! inactive state */
|
||||
AST_FAX_STATE_INACTIVE,
|
||||
};
|
||||
|
||||
/*! \brief fax session options */
|
||||
@@ -186,8 +188,6 @@ struct ast_fax_session {
|
||||
unsigned long frames_sent;
|
||||
/*! the fax technology callbacks */
|
||||
const struct ast_fax_tech *tech;
|
||||
/*! the token used to reserve this session */
|
||||
struct ast_fax_tech_token *token;
|
||||
/*! private implementation pointer */
|
||||
void *tech_pvt;
|
||||
/*! fax state */
|
||||
@@ -202,10 +202,6 @@ struct ast_fax_session {
|
||||
struct ast_fax_debug_info *debug_info;
|
||||
/*! used to take variable-sized frames in and output frames of an expected size to the fax stack */
|
||||
struct ast_smoother *smoother;
|
||||
|
||||
/*! some flags to track the stat counters for this session */
|
||||
unsigned int reserved:1;
|
||||
unsigned int active:1;
|
||||
};
|
||||
|
||||
/*! \brief used to register a FAX technology module with res_fax */
|
||||
@@ -250,14 +246,6 @@ struct ast_fax_tech {
|
||||
char * (* const cli_show_settings)(int);
|
||||
};
|
||||
|
||||
/*! \brief used by res_fax to reserve a FAX session */
|
||||
struct ast_fax_tech_token {
|
||||
/*! the fax technology callbacks */
|
||||
const struct ast_fax_tech *tech;
|
||||
/*! private implementation pointer */
|
||||
void *tech_pvt;
|
||||
};
|
||||
|
||||
/*! \brief register a fax technology */
|
||||
int ast_fax_tech_register(struct ast_fax_tech *tech);
|
||||
|
||||
|
||||
@@ -4108,7 +4108,7 @@ int manage_parkinglot(struct ast_parkinglot *curlot, const struct pollfd *pfds,
|
||||
continue;
|
||||
}
|
||||
|
||||
if (!(pfds[y].revents & (POLLIN | POLLERR))) {
|
||||
if (!(pfds[y].revents & (POLLIN | POLLERR | POLLPRI))) {
|
||||
/* Next x */
|
||||
continue;
|
||||
}
|
||||
@@ -4167,7 +4167,7 @@ std: for (x = 0; x < AST_MAX_FDS; x++) { /* mark fds for next round */
|
||||
}
|
||||
*new_pfds = tmp;
|
||||
(*new_pfds)[*new_nfds].fd = chan->fds[x];
|
||||
(*new_pfds)[*new_nfds].events = POLLIN | POLLERR;
|
||||
(*new_pfds)[*new_nfds].events = POLLIN | POLLERR | POLLPRI;
|
||||
(*new_pfds)[*new_nfds].revents = 0;
|
||||
(*new_nfds)++;
|
||||
}
|
||||
|
||||
@@ -4787,7 +4787,7 @@ int __ast_manager_event_multichan(int category, const char *event, int chancount
|
||||
struct ast_str *buf;
|
||||
int i;
|
||||
|
||||
if (!sessions && AST_RWLIST_EMPTY(&manager_hooks)) {
|
||||
if (!(sessions && ao2_container_count(sessions)) && AST_RWLIST_EMPTY(&manager_hooks)) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
@@ -638,6 +638,10 @@ const char *ast_fax_state_to_str(enum ast_fax_state state)
|
||||
return "Active";
|
||||
case AST_FAX_STATE_COMPLETE:
|
||||
return "Complete";
|
||||
case AST_FAX_STATE_RESERVED:
|
||||
return "Reserved";
|
||||
case AST_FAX_STATE_INACTIVE:
|
||||
return "Inactive";
|
||||
default:
|
||||
ast_log(LOG_WARNING, "unhandled FAX state: %d\n", state);
|
||||
return "Unknown";
|
||||
@@ -678,16 +682,15 @@ static unsigned int fax_rate_str_to_int(const char *ratestr)
|
||||
}
|
||||
}
|
||||
|
||||
static void fax_session_release(struct ast_fax_session *s)
|
||||
static void fax_session_release(struct ast_fax_session *s, struct ast_fax_tech_token *token)
|
||||
{
|
||||
if (s->token) {
|
||||
s->tech->release_token(s->token);
|
||||
s->token = NULL;
|
||||
if (token) {
|
||||
s->tech->release_token(token);
|
||||
}
|
||||
|
||||
if (s->reserved) {
|
||||
if (s->state == AST_FAX_STATE_RESERVED) {
|
||||
ast_atomic_fetchadd_int(&faxregistry.reserved_sessions, -1);
|
||||
s->reserved = 0;
|
||||
s->state = AST_FAX_STATE_INACTIVE;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -697,7 +700,7 @@ static void destroy_session(void *session)
|
||||
struct ast_fax_session *s = session;
|
||||
|
||||
if (s->tech) {
|
||||
fax_session_release(s);
|
||||
fax_session_release(s, NULL);
|
||||
if (s->tech_pvt) {
|
||||
s->tech->destroy_session(s);
|
||||
}
|
||||
@@ -717,16 +720,15 @@ static void destroy_session(void *session)
|
||||
ast_smoother_free(s->smoother);
|
||||
}
|
||||
|
||||
if (s->active) {
|
||||
if (s->state != AST_FAX_STATE_INACTIVE) {
|
||||
ast_atomic_fetchadd_int(&faxregistry.active_sessions, -1);
|
||||
s->active = 0;
|
||||
}
|
||||
|
||||
ast_free(s->channame);
|
||||
ast_free(s->chan_uniqueid);
|
||||
}
|
||||
|
||||
static struct ast_fax_session *fax_session_reserve(struct ast_fax_session_details *details)
|
||||
static struct ast_fax_session *fax_session_reserve(struct ast_fax_session_details *details, struct ast_fax_tech_token **token)
|
||||
{
|
||||
struct ast_fax_session *s;
|
||||
struct fax_module *faxmod;
|
||||
@@ -736,7 +738,7 @@ static struct ast_fax_session *fax_session_reserve(struct ast_fax_session_detail
|
||||
return NULL;
|
||||
}
|
||||
|
||||
s->state = AST_FAX_STATE_RESERVED;
|
||||
s->state = AST_FAX_STATE_INACTIVE;
|
||||
|
||||
/* locate a FAX technology module that can handle said requirements
|
||||
* Note: the requirements have not yet been finalized as T.38
|
||||
@@ -764,19 +766,19 @@ static struct ast_fax_session *fax_session_reserve(struct ast_fax_session_detail
|
||||
return s;
|
||||
}
|
||||
|
||||
if (!(s->token = s->tech->reserve_session(s))) {
|
||||
if (!(*token = s->tech->reserve_session(s))) {
|
||||
ao2_ref(s, -1);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
s->reserved = 1;
|
||||
s->state = AST_FAX_STATE_RESERVED;
|
||||
ast_atomic_fetchadd_int(&faxregistry.reserved_sessions, 1);
|
||||
|
||||
return s;
|
||||
}
|
||||
|
||||
/*! \brief create a FAX session */
|
||||
static struct ast_fax_session *fax_session_new(struct ast_fax_session_details *details, struct ast_channel *chan, struct ast_fax_session *reserved)
|
||||
static struct ast_fax_session *fax_session_new(struct ast_fax_session_details *details, struct ast_channel *chan, struct ast_fax_session *reserved, struct ast_fax_tech_token *token)
|
||||
{
|
||||
struct ast_fax_session *s = NULL;
|
||||
struct fax_module *faxmod;
|
||||
@@ -786,9 +788,9 @@ static struct ast_fax_session *fax_session_new(struct ast_fax_session_details *d
|
||||
s = reserved;
|
||||
ao2_ref(reserved, +1);
|
||||
|
||||
if (s->reserved) {
|
||||
if (s->state == AST_FAX_STATE_RESERVED) {
|
||||
ast_atomic_fetchadd_int(&faxregistry.reserved_sessions, -1);
|
||||
s->reserved = 0;
|
||||
s->state = AST_FAX_STATE_UNINITIALIZED;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -796,18 +798,19 @@ static struct ast_fax_session *fax_session_new(struct ast_fax_session_details *d
|
||||
return NULL;
|
||||
}
|
||||
|
||||
s->active = 1;
|
||||
ast_atomic_fetchadd_int(&faxregistry.active_sessions, 1);
|
||||
s->state = AST_FAX_STATE_UNINITIALIZED;
|
||||
|
||||
if (details->option.debug && (details->caps & AST_FAX_TECH_AUDIO)) {
|
||||
if (!(s->debug_info = ast_calloc(1, sizeof(*(s->debug_info))))) {
|
||||
fax_session_release(s, token);
|
||||
ao2_ref(s, -1);
|
||||
return NULL;
|
||||
}
|
||||
if (!(s->debug_info->dsp = ast_dsp_new())) {
|
||||
ast_free(s->debug_info);
|
||||
s->debug_info = NULL;
|
||||
fax_session_release(s, token);
|
||||
ao2_ref(s, -1);
|
||||
return NULL;
|
||||
}
|
||||
@@ -815,11 +818,13 @@ static struct ast_fax_session *fax_session_new(struct ast_fax_session_details *d
|
||||
}
|
||||
|
||||
if (!(s->channame = ast_strdup(chan->name))) {
|
||||
fax_session_release(s, token);
|
||||
ao2_ref(s, -1);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
if (!(s->chan_uniqueid = ast_strdup(chan->uniqueid))) {
|
||||
fax_session_release(s, token);
|
||||
ao2_ref(s, -1);
|
||||
return NULL;
|
||||
}
|
||||
@@ -830,7 +835,7 @@ static struct ast_fax_session *fax_session_new(struct ast_fax_session_details *d
|
||||
|
||||
details->id = s->id = ast_atomic_fetchadd_int(&faxregistry.nextsessionname, 1);
|
||||
|
||||
if (!s->tech) {
|
||||
if (!token) {
|
||||
/* locate a FAX technology module that can handle said requirements */
|
||||
AST_RWLIST_RDLOCK(&faxmodules);
|
||||
AST_RWLIST_TRAVERSE(&faxmodules, faxmod, list) {
|
||||
@@ -851,7 +856,7 @@ static struct ast_fax_session *fax_session_new(struct ast_fax_session_details *d
|
||||
}
|
||||
}
|
||||
|
||||
if (!(s->tech_pvt = s->tech->new_session(s, s->token))) {
|
||||
if (!(s->tech_pvt = s->tech->new_session(s, token))) {
|
||||
ast_log(LOG_ERROR, "FAX session failed to initialize.\n");
|
||||
ao2_ref(s, -1);
|
||||
return NULL;
|
||||
@@ -1116,7 +1121,7 @@ static struct ast_control_t38_parameters our_t38_parameters = {
|
||||
};
|
||||
|
||||
/*! \brief this is the generic FAX session handling function */
|
||||
static int generic_fax_exec(struct ast_channel *chan, struct ast_fax_session_details *details, struct ast_fax_session *reserved)
|
||||
static int generic_fax_exec(struct ast_channel *chan, struct ast_fax_session_details *details, struct ast_fax_session *reserved, struct ast_fax_tech_token *token)
|
||||
{
|
||||
int ms;
|
||||
int timeout = RES_FAX_TIMEOUT;
|
||||
@@ -1134,7 +1139,7 @@ static int generic_fax_exec(struct ast_channel *chan, struct ast_fax_session_det
|
||||
chancount = 1;
|
||||
|
||||
/* create the FAX session */
|
||||
if (!(fax = fax_session_new(details, chan, reserved))) {
|
||||
if (!(fax = fax_session_new(details, chan, reserved, token))) {
|
||||
ast_log(LOG_ERROR, "Can't create a FAX session, FAX attempt failed.\n");
|
||||
report_fax_status(chan, details, "No Available Resource");
|
||||
return -1;
|
||||
@@ -1533,6 +1538,7 @@ static int receivefax_exec(struct ast_channel *chan, const char *data)
|
||||
int channel_alive;
|
||||
struct ast_fax_session_details *details;
|
||||
struct ast_fax_session *s;
|
||||
struct ast_fax_tech_token *token = NULL;
|
||||
struct ast_fax_document *doc;
|
||||
AST_DECLARE_APP_ARGS(args,
|
||||
AST_APP_ARG(filename);
|
||||
@@ -1676,7 +1682,7 @@ static int receivefax_exec(struct ast_channel *chan, const char *data)
|
||||
details->option.allow_audio = AST_FAX_OPTFLAG_TRUE;
|
||||
}
|
||||
|
||||
if (!(s = fax_session_reserve(details))) {
|
||||
if (!(s = fax_session_reserve(details, &token))) {
|
||||
ast_atomic_fetchadd_int(&faxregistry.fax_failures, 1);
|
||||
ast_string_field_set(details, resultstr, "error reserving fax session");
|
||||
set_channel_variables(chan, details);
|
||||
@@ -1692,6 +1698,7 @@ static int receivefax_exec(struct ast_channel *chan, const char *data)
|
||||
ast_string_field_set(details, resultstr, "error answering channel");
|
||||
set_channel_variables(chan, details);
|
||||
ast_log(LOG_WARNING, "Channel '%s' failed answer attempt.\n", chan->name);
|
||||
fax_session_release(s, token);
|
||||
ao2_ref(s, -1);
|
||||
ao2_ref(details, -1);
|
||||
return -1;
|
||||
@@ -1703,6 +1710,7 @@ static int receivefax_exec(struct ast_channel *chan, const char *data)
|
||||
ast_string_field_set(details, error, "T38_NEG_ERROR");
|
||||
ast_string_field_set(details, resultstr, "error negotiating T.38");
|
||||
set_channel_variables(chan, details);
|
||||
fax_session_release(s, token);
|
||||
ao2_ref(s, -1);
|
||||
ao2_ref(details, -1);
|
||||
return -1;
|
||||
@@ -1714,6 +1722,7 @@ static int receivefax_exec(struct ast_channel *chan, const char *data)
|
||||
ast_string_field_set(details, error, "T38_NEG_ERROR");
|
||||
ast_string_field_set(details, resultstr, "error negotiating T.38");
|
||||
set_channel_variables(chan, details);
|
||||
fax_session_release(s, token);
|
||||
ao2_ref(s, -1);
|
||||
ao2_ref(details, -1);
|
||||
ast_log(LOG_ERROR, "error initializing channel '%s' in T.38 mode\n", chan->name);
|
||||
@@ -1723,7 +1732,7 @@ static int receivefax_exec(struct ast_channel *chan, const char *data)
|
||||
details->option.send_ced = 1;
|
||||
}
|
||||
|
||||
if ((channel_alive = generic_fax_exec(chan, details, s)) < 0) {
|
||||
if ((channel_alive = generic_fax_exec(chan, details, s, token)) < 0) {
|
||||
ast_atomic_fetchadd_int(&faxregistry.fax_failures, 1);
|
||||
}
|
||||
|
||||
@@ -2000,6 +2009,7 @@ static int sendfax_exec(struct ast_channel *chan, const char *data)
|
||||
int channel_alive, file_count;
|
||||
struct ast_fax_session_details *details;
|
||||
struct ast_fax_session *s;
|
||||
struct ast_fax_tech_token *token = NULL;
|
||||
struct ast_fax_document *doc;
|
||||
AST_DECLARE_APP_ARGS(args,
|
||||
AST_APP_ARG(filenames);
|
||||
@@ -2167,7 +2177,7 @@ static int sendfax_exec(struct ast_channel *chan, const char *data)
|
||||
details->option.request_t38 = AST_FAX_OPTFLAG_TRUE;
|
||||
}
|
||||
|
||||
if (!(s = fax_session_reserve(details))) {
|
||||
if (!(s = fax_session_reserve(details, &token))) {
|
||||
ast_atomic_fetchadd_int(&faxregistry.fax_failures, 1);
|
||||
ast_string_field_set(details, resultstr, "error reserving fax session");
|
||||
set_channel_variables(chan, details);
|
||||
@@ -2183,6 +2193,7 @@ static int sendfax_exec(struct ast_channel *chan, const char *data)
|
||||
ast_string_field_set(details, resultstr, "error answering channel");
|
||||
set_channel_variables(chan, details);
|
||||
ast_log(LOG_WARNING, "Channel '%s' failed answer attempt.\n", chan->name);
|
||||
fax_session_release(s, token);
|
||||
ao2_ref(s, -1);
|
||||
ao2_ref(details, -1);
|
||||
return -1;
|
||||
@@ -2194,6 +2205,7 @@ static int sendfax_exec(struct ast_channel *chan, const char *data)
|
||||
ast_string_field_set(details, error, "T38_NEG_ERROR");
|
||||
ast_string_field_set(details, resultstr, "error negotiating T.38");
|
||||
set_channel_variables(chan, details);
|
||||
fax_session_release(s, token);
|
||||
ao2_ref(s, -1);
|
||||
ao2_ref(details, -1);
|
||||
return -1;
|
||||
@@ -2205,6 +2217,7 @@ static int sendfax_exec(struct ast_channel *chan, const char *data)
|
||||
ast_string_field_set(details, error, "T38_NEG_ERROR");
|
||||
ast_string_field_set(details, resultstr, "error negotiating T.38");
|
||||
set_channel_variables(chan, details);
|
||||
fax_session_release(s, token);
|
||||
ao2_ref(s, -1);
|
||||
ao2_ref(details, -1);
|
||||
ast_log(LOG_ERROR, "error initializing channel '%s' in T.38 mode\n", chan->name);
|
||||
@@ -2214,7 +2227,7 @@ static int sendfax_exec(struct ast_channel *chan, const char *data)
|
||||
details->option.send_cng = 1;
|
||||
}
|
||||
|
||||
if ((channel_alive = generic_fax_exec(chan, details, s)) < 0) {
|
||||
if ((channel_alive = generic_fax_exec(chan, details, s, token)) < 0) {
|
||||
ast_atomic_fetchadd_int(&faxregistry.fax_failures, 1);
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user