mirror of
				https://github.com/asterisk/asterisk.git
				synced 2025-10-31 02:37:10 +00:00 
			
		
		
		
	res_agi: Respect "transmit_silence" option for "RECORD FILE".
The "RECORD FILE" command in res_agi has its own implementation for actually doing the recording. This has resulted in it not actually obeying the option "transmit_silence" when recording. This change causes it to now send silence if the option is enabled. ASTERISK-30314 Change-Id: Ib3a85601ff35d1b904f836691bad8a4b7e957174
This commit is contained in:
		
				
					committed by
					
						 Joshua Colp
						Joshua Colp
					
				
			
			
				
	
			
			
			
						parent
						
							6e59b01e1a
						
					
				
				
					commit
					61922d2934
				
			| @@ -2907,6 +2907,7 @@ static int handle_recordfile(struct ast_channel *chan, AGI *agi, int argc, const | ||||
| 	int gotsilence = 0;             /* did we timeout for silence? */ | ||||
| 	char *silencestr = NULL; | ||||
| 	RAII_VAR(struct ast_format *, rfmt, NULL, ao2_cleanup); | ||||
| 	struct ast_silence_generator *silgen = NULL; | ||||
|  | ||||
| 	/* XXX EAGI FIXME XXX */ | ||||
|  | ||||
| @@ -2984,6 +2985,10 @@ static int handle_recordfile(struct ast_channel *chan, AGI *agi, int argc, const | ||||
| 		ast_seekstream(fs, sample_offset, SEEK_SET); | ||||
| 		ast_truncstream(fs); | ||||
|  | ||||
| 		if (ast_opt_transmit_silence) { | ||||
| 			silgen = ast_channel_start_silence_generator(chan); | ||||
| 		} | ||||
|  | ||||
| 		start = ast_tvnow(); | ||||
| 		while ((ms < 0) || ast_tvdiff_ms(ast_tvnow(), start) < ms) { | ||||
| 			res = ast_waitfor(chan, ms - ast_tvdiff_ms(ast_tvnow(), start)); | ||||
| @@ -2992,6 +2997,8 @@ static int handle_recordfile(struct ast_channel *chan, AGI *agi, int argc, const | ||||
| 				ast_agi_send(agi->fd, chan, "200 result=%d (waitfor) endpos=%ld\n", res,sample_offset); | ||||
| 				if (sildet) | ||||
| 					ast_dsp_free(sildet); | ||||
| 				if (silgen) | ||||
| 					ast_channel_stop_silence_generator(chan, silgen); | ||||
| 				return RESULT_FAILURE; | ||||
| 			} | ||||
| 			f = ast_read(chan); | ||||
| @@ -3000,6 +3007,8 @@ static int handle_recordfile(struct ast_channel *chan, AGI *agi, int argc, const | ||||
| 				ast_agi_send(agi->fd, chan, "200 result=%d (hangup) endpos=%ld\n", -1, sample_offset); | ||||
| 				if (sildet) | ||||
| 					ast_dsp_free(sildet); | ||||
| 				if (silgen) | ||||
| 					ast_channel_stop_silence_generator(chan, silgen); | ||||
| 				return RESULT_FAILURE; | ||||
| 			} | ||||
| 			switch(f->frametype) { | ||||
| @@ -3016,6 +3025,8 @@ static int handle_recordfile(struct ast_channel *chan, AGI *agi, int argc, const | ||||
| 					ast_frfree(f); | ||||
| 					if (sildet) | ||||
| 						ast_dsp_free(sildet); | ||||
| 					if (silgen) | ||||
| 						ast_channel_stop_silence_generator(chan, silgen); | ||||
| 					return RESULT_SUCCESS; | ||||
| 				} | ||||
| 				break; | ||||
| @@ -3067,6 +3078,10 @@ static int handle_recordfile(struct ast_channel *chan, AGI *agi, int argc, const | ||||
| 		ast_dsp_free(sildet); | ||||
| 	} | ||||
|  | ||||
| 	if (silgen) { | ||||
| 		ast_channel_stop_silence_generator(chan, silgen); | ||||
| 	} | ||||
|  | ||||
| 	return RESULT_SUCCESS; | ||||
| } | ||||
|  | ||||
|   | ||||
		Reference in New Issue
	
	Block a user