mirror of
https://github.com/asterisk/asterisk.git
synced 2025-09-03 11:25:35 +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);
|
||||
|
||||
|
@@ -1488,10 +1488,6 @@ if test "x${PBX_SPANDSP}" = "x1" ; then
|
||||
AST_EXT_LIB_CHECK([SPANDSP], [spandsp], [t38_terminal_init], [spandsp.h], [-ltiff])
|
||||
fi
|
||||
|
||||
if test "x${PBX_SPANDSP}" = "x1" ; then
|
||||
AC_CHECK_HEADER([spandsp/expose.h], [AC_DEFINE_UNQUOTED([HAVE_SPANDSP_EXPOSE_H], 1, [Define to 1 if spandsp/expose.h is available.])], [], [#include <spandsp.h>])
|
||||
fi
|
||||
|
||||
AST_EXT_LIB_CHECK([SS7], [ss7], [ss7_pollflags], [libss7.h])
|
||||
|
||||
AST_EXT_LIB_CHECK([OPENR2], [openr2], [openr2_chan_new], [openr2.h])
|
||||
|
@@ -860,9 +860,6 @@
|
||||
/* Define this to indicate the ${SPANDSP_DESCRIP} library */
|
||||
#undef HAVE_SPANDSP
|
||||
|
||||
/* Define to 1 if spandsp/expose.h is available. */
|
||||
#undef HAVE_SPANDSP_EXPOSE_H
|
||||
|
||||
/* Define to indicate the ${SPANDSP_DESCRIP} library version */
|
||||
#undef HAVE_SPANDSP_VERSION
|
||||
|
||||
@@ -1295,9 +1292,6 @@
|
||||
/* Define to the version of this package. */
|
||||
#undef PACKAGE_VERSION
|
||||
|
||||
/* Define to 1 if the C compiler supports function prototypes. */
|
||||
#undef PROTOTYPES
|
||||
|
||||
/* Define to necessary symbol if this constant uses a non-standard name on
|
||||
your system. */
|
||||
#undef PTHREAD_CREATE_JOINABLE
|
||||
@@ -1314,11 +1308,6 @@
|
||||
/* Define to the type of arg 5 for `select'. */
|
||||
#undef SELECT_TYPE_ARG5
|
||||
|
||||
/* Define to 1 if the `setvbuf' function takes the buffering type as its
|
||||
second argument and the buffer pointer as the third, as on System V before
|
||||
release 3. */
|
||||
#undef SETVBUF_REVERSED
|
||||
|
||||
/* The size of `int', as computed by sizeof. */
|
||||
#undef SIZEOF_INT
|
||||
|
||||
@@ -1339,20 +1328,30 @@
|
||||
/* Define to 1 if your <sys/time.h> declares `struct tm'. */
|
||||
#undef TM_IN_SYS_TIME
|
||||
|
||||
/* Define to 1 if on AIX 3.
|
||||
System headers sometimes define this.
|
||||
We just want to avoid a redefinition error message. */
|
||||
/* Enable extensions on AIX 3, Interix. */
|
||||
#ifndef _ALL_SOURCE
|
||||
# undef _ALL_SOURCE
|
||||
#endif
|
||||
|
||||
/* Number of bits in a file offset, on hosts where this is settable. */
|
||||
#undef _FILE_OFFSET_BITS
|
||||
|
||||
/* Enable GNU extensions on systems that have them. */
|
||||
#ifndef _GNU_SOURCE
|
||||
# undef _GNU_SOURCE
|
||||
#endif
|
||||
/* Enable threading extensions on Solaris. */
|
||||
#ifndef _POSIX_PTHREAD_SEMANTICS
|
||||
# undef _POSIX_PTHREAD_SEMANTICS
|
||||
#endif
|
||||
/* Enable extensions on HP NonStop. */
|
||||
#ifndef _TANDEM_SOURCE
|
||||
# undef _TANDEM_SOURCE
|
||||
#endif
|
||||
/* Enable general extensions on Solaris. */
|
||||
#ifndef __EXTENSIONS__
|
||||
# undef __EXTENSIONS__
|
||||
#endif
|
||||
|
||||
|
||||
/* Number of bits in a file offset, on hosts where this is settable. */
|
||||
#undef _FILE_OFFSET_BITS
|
||||
|
||||
/* Define to 1 to make fseeko visible on some hosts (e.g. glibc 2.2). */
|
||||
#undef _LARGEFILE_SOURCE
|
||||
@@ -1370,20 +1369,6 @@
|
||||
/* Define to 1 if you need to in order for `stat' and other things to work. */
|
||||
#undef _POSIX_SOURCE
|
||||
|
||||
/* Enable extensions on Solaris. */
|
||||
#ifndef __EXTENSIONS__
|
||||
# undef __EXTENSIONS__
|
||||
#endif
|
||||
#ifndef _POSIX_PTHREAD_SEMANTICS
|
||||
# undef _POSIX_PTHREAD_SEMANTICS
|
||||
#endif
|
||||
#ifndef _TANDEM_SOURCE
|
||||
# undef _TANDEM_SOURCE
|
||||
#endif
|
||||
|
||||
/* Define like PROTOTYPES; this can be used by system headers. */
|
||||
#undef __PROTOTYPES
|
||||
|
||||
/* Define to empty if `const' does not conform to ANSI C. */
|
||||
#undef const
|
||||
|
||||
|
Reference in New Issue
Block a user