mirror of
https://github.com/asterisk/asterisk.git
synced 2025-09-04 03:50:31 +00:00
Minor improvements to app_fax.
This patch makes some small changes to handle watchdog timeouts in a better way, and also uses a 'cleaner' method of including the spandsp header files. (closes issue #14769) Reported by: andrew Patches: app_fax-20090406.diff uploaded by andrew (license 240) v1-14769.patch uploaded by dimas (license 88) Tested by: freh, deti, caspy, dimas, sgimeno, Dovid git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@210777 65c4cc65-6c06-0410-ace0-fbb531ad65f3
This commit is contained in:
@@ -28,10 +28,8 @@ ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
|
||||
#include <errno.h>
|
||||
#include <tiffio.h>
|
||||
|
||||
#define SPANDSP_EXPOSE_INTERNAL_STRUCTURES
|
||||
#include <spandsp.h>
|
||||
#ifdef HAVE_SPANDSP_EXPOSE_H
|
||||
#include <spandsp/expose.h>
|
||||
#endif
|
||||
#include <spandsp/version.h>
|
||||
|
||||
#include "asterisk/lock.h"
|
||||
@@ -492,25 +490,27 @@ static int transmit_audio(fax_session *s)
|
||||
while (!s->finished) {
|
||||
inf = NULL;
|
||||
|
||||
if ((res = ast_waitfor(s->chan, 20)) < 0) {
|
||||
if ((res = ast_waitfor(s->chan, 25)) < 0) {
|
||||
ast_debug(1, "Error waiting for a frame\n");
|
||||
break;
|
||||
}
|
||||
|
||||
/* if nothing arrived, check the watchdog timers */
|
||||
if (res == 0) {
|
||||
now = ast_tvnow();
|
||||
if (ast_tvdiff_sec(now, start) > WATCHDOG_TOTAL_TIMEOUT || ast_tvdiff_sec(now, state_change) > WATCHDOG_STATE_TIMEOUT) {
|
||||
ast_log(LOG_WARNING, "It looks like we hung. Aborting.\n");
|
||||
res = -1;
|
||||
break;
|
||||
} else {
|
||||
/* timers have not triggered, loop around to wait
|
||||
* again
|
||||
*/
|
||||
continue;
|
||||
}
|
||||
/* Watchdog */
|
||||
now = ast_tvnow();
|
||||
if (ast_tvdiff_sec(now, start) > WATCHDOG_TOTAL_TIMEOUT || ast_tvdiff_sec(now, state_change) > WATCHDOG_STATE_TIMEOUT) {
|
||||
ast_log(LOG_WARNING, "It looks like we hung. Aborting.\n");
|
||||
res = -1;
|
||||
break;
|
||||
}
|
||||
|
||||
if (!res) {
|
||||
/* There was timeout waiting for a frame. Loop around and wait again */
|
||||
continue;
|
||||
}
|
||||
|
||||
/* There is a frame available. Get it */
|
||||
res = 0;
|
||||
|
||||
if (!(inf = ast_read(s->chan))) {
|
||||
ast_debug(1, "Channel hangup\n");
|
||||
res = -1;
|
||||
@@ -644,28 +644,31 @@ static int transmit_t38(fax_session *s)
|
||||
|
||||
while (!s->finished) {
|
||||
inf = NULL;
|
||||
if ((res = ast_waitfor(s->chan, 20)) < 0) {
|
||||
|
||||
if ((res = ast_waitfor(s->chan, 25)) < 0) {
|
||||
ast_debug(1, "Error waiting for a frame\n");
|
||||
break;
|
||||
}
|
||||
|
||||
last_frame = now;
|
||||
|
||||
/* Watchdog */
|
||||
now = ast_tvnow();
|
||||
/* if nothing arrived, check the watchdog timers */
|
||||
if (res == 0) {
|
||||
if (ast_tvdiff_sec(now, start) > WATCHDOG_TOTAL_TIMEOUT || ast_tvdiff_sec(now, state_change) > WATCHDOG_STATE_TIMEOUT) {
|
||||
ast_log(LOG_WARNING, "It looks like we hung. Aborting.\n");
|
||||
res = -1;
|
||||
break;
|
||||
} else {
|
||||
/* timers have not triggered, loop around to wait
|
||||
* again
|
||||
*/
|
||||
t38_terminal_send_timeout(&t38, ast_tvdiff_us(now, last_frame) / (1000000 / 8000));
|
||||
continue;
|
||||
}
|
||||
if (ast_tvdiff_sec(now, start) > WATCHDOG_TOTAL_TIMEOUT || ast_tvdiff_sec(now, state_change) > WATCHDOG_STATE_TIMEOUT) {
|
||||
ast_log(LOG_WARNING, "It looks like we hung. Aborting.\n");
|
||||
res = -1;
|
||||
break;
|
||||
}
|
||||
|
||||
t38_terminal_send_timeout(&t38, ast_tvdiff_us(now, last_frame) / (1000000 / 8000));
|
||||
|
||||
if (!res) {
|
||||
/* There was timeout waiting for a frame. Loop around and wait again */
|
||||
continue;
|
||||
}
|
||||
|
||||
t38_terminal_send_timeout(&t38, ast_tvdiff_us(now, last_frame) / (1000000 / 8000));
|
||||
/* There is a frame available. Get it */
|
||||
res = 0;
|
||||
|
||||
if (!(inf = ast_read(s->chan))) {
|
||||
ast_debug(1, "Channel hangup\n");
|
||||
@@ -714,7 +717,7 @@ static int transmit(fax_session *s)
|
||||
|
||||
pbx_builtin_setvar_helper(s->chan, "FAXMODE", NULL);
|
||||
pbx_builtin_setvar_helper(s->chan, "REMOTESTATIONID", NULL);
|
||||
pbx_builtin_setvar_helper(s->chan, "FAXPAGES", NULL);
|
||||
pbx_builtin_setvar_helper(s->chan, "FAXPAGES", "0");
|
||||
pbx_builtin_setvar_helper(s->chan, "FAXRESOLUTION", NULL);
|
||||
pbx_builtin_setvar_helper(s->chan, "FAXBITRATE", NULL);
|
||||
|
||||
|
Reference in New Issue
Block a user