mirror of
				https://github.com/asterisk/asterisk.git
				synced 2025-10-31 02:37:10 +00:00 
			
		
		
		
	app_mf, app_sf: Return -1 if channel hangs up.
The ReceiveMF and ReceiveSF applications currently always return 0, even if a channel has hung up. The call will still end but generally applications are expected to return -1 if the channel has hung up. We now return -1 if a hangup occured to bring this behavior in line with this norm. This has no functional impact, but merely increases conformity with how these modules interact with the PBX core. ASTERISK-29951 #close Change-Id: I234d755050ab8ed58f197c6925b968ba26b14033
This commit is contained in:
		
				
					committed by
					
						 Kevin Harwell
						Kevin Harwell
					
				
			
			
				
	
			
			
			
						parent
						
							b7edc08e33
						
					
				
				
					commit
					9024bb989b
				
			| @@ -155,6 +155,21 @@ AST_APP_OPTIONS(read_app_options, { | ||||
| static const char *readsf_name = "ReceiveSF"; | ||||
| static const char sendsf_name[] = "SendSF"; | ||||
|  | ||||
| /*! | ||||
|  * \brief Detects SF digits on channel using DSP | ||||
|  * | ||||
|  * \param chan channel on which to read digits | ||||
|  * \param buf Buffer in which to store digits | ||||
|  * \param buflen Size of buffer | ||||
|  * \param timeout ms to wait for all digits before giving up | ||||
|  * \param maxdigits Maximum number of digits | ||||
|  * \param freq Frequency to use | ||||
|  * \param features DSP features | ||||
|  * \param extrapulses Whether to recognize extra pulses | ||||
|  * | ||||
|  * \retval 0 if successful | ||||
|  * \retval -1 if unsuccessful (including hangup). | ||||
|  */ | ||||
| static int read_sf_digits(struct ast_channel *chan, char *buf, int buflen, int timeout, int maxdigits, int freq, int features, int extrapulses) { | ||||
| 	/* Bell System Technical Journal 39 (Nov. 1960) */ | ||||
| 	#define SF_MIN_OFF 25 | ||||
| @@ -169,6 +184,7 @@ static int read_sf_digits(struct ast_channel *chan, char *buf, int buflen, int t | ||||
| 	char *str = buf; | ||||
| 	int hits = 0, digits_read = 0; | ||||
| 	unsigned short int sf_on = 0; | ||||
| 	int res = 0; | ||||
|  | ||||
| 	if (!(dsp = ast_dsp_new())) { | ||||
| 		ast_log(LOG_WARNING, "Unable to allocate DSP!\n"); | ||||
| @@ -261,7 +277,7 @@ static int read_sf_digits(struct ast_channel *chan, char *buf, int buflen, int t | ||||
| 								ast_debug(2, "Got more than 10 pulses, truncating to 10\n"); | ||||
| 								hits = 0; /* 10 dial pulses = digit 0 */ | ||||
| 								*str++ = hits + '0'; | ||||
| 								} | ||||
| 							} | ||||
| 						} else { | ||||
| 							if (hits == 10) { | ||||
| 								hits = 0; /* 10 dial pulses = digit 0 */ | ||||
| @@ -281,13 +297,14 @@ static int read_sf_digits(struct ast_channel *chan, char *buf, int buflen, int t | ||||
| 			ast_frfree(frame); | ||||
| 		} else { | ||||
| 			pbx_builtin_setvar_helper(chan, "RECEIVESFSTATUS", "HANGUP"); | ||||
| 			res = -1; | ||||
| 		} | ||||
| 	} | ||||
| 	if (dsp) { | ||||
| 		ast_dsp_free(dsp); | ||||
| 	} | ||||
| 	ast_debug(3, "channel '%s' - event loop stopped { timeout: %d, remaining_time: %d }\n", ast_channel_name(chan), timeout, remaining_time); | ||||
| 	return 0; | ||||
| 	return res; | ||||
| } | ||||
|  | ||||
| static int read_sf_exec(struct ast_channel *chan, const char *data) | ||||
| @@ -297,7 +314,7 @@ static int read_sf_exec(struct ast_channel *chan, const char *data) | ||||
| 	double tosec; | ||||
| 	struct ast_flags flags = {0}; | ||||
| 	char *argcopy = NULL; | ||||
| 	int features = 0, digits = 0, to = 0, freq = 2600; | ||||
| 	int res, features = 0, digits = 0, to = 0, freq = 2600; | ||||
|  | ||||
| 	AST_DECLARE_APP_ARGS(arglist, | ||||
| 		AST_APP_ARG(variable); | ||||
| @@ -360,14 +377,14 @@ static int read_sf_exec(struct ast_channel *chan, const char *data) | ||||
| 		features |= DSP_DIGITMODE_RELAXDTMF; | ||||
| 	} | ||||
|  | ||||
| 	read_sf_digits(chan, tmp, BUFFER_SIZE, to, digits, freq, features, ast_test_flag(&flags, OPT_EXTRAPULSES)); | ||||
| 	res = read_sf_digits(chan, tmp, BUFFER_SIZE, to, digits, freq, features, ast_test_flag(&flags, OPT_EXTRAPULSES)); | ||||
| 	pbx_builtin_setvar_helper(chan, arglist.variable, tmp); | ||||
| 	if (!ast_strlen_zero(tmp)) { | ||||
| 		ast_verb(3, "SF digits received: '%s'\n", tmp); | ||||
| 	} else { | ||||
| 	} else if (!res) { /* if channel hung up, don't print anything out */ | ||||
| 		ast_verb(3, "No SF digits received.\n"); | ||||
| 	} | ||||
| 	return 0; | ||||
| 	return res; | ||||
| } | ||||
|  | ||||
| static int sendsf_exec(struct ast_channel *chan, const char *vdata) | ||||
|   | ||||
		Reference in New Issue
	
	Block a user