mirror of
				https://github.com/asterisk/asterisk.git
				synced 2025-10-31 10:47:18 +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