mirror of
				https://github.com/asterisk/asterisk.git
				synced 2025-10-31 10:47:18 +00:00 
			
		
		
		
	ARI: channel/bridge recording errors when invalid format specified
Asterisk will now issue 422 if recording is requested against channels or bridges with an unknown format (closes issue ASTERISK-22626) Reported by: Joshua Colp Review: https://reviewboard.asterisk.org/r/2939/ ........ Merged revisions 402001 from http://svn.asterisk.org/svn/asterisk/branches/12 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@402002 65c4cc65-6c06-0410-ace0-fbb531ad65f3
This commit is contained in:
		| @@ -439,6 +439,27 @@ void ast_ari_record_bridge(struct ast_variable *headers, struct ast_record_bridg | ||||
| 		stasis_app_recording_if_exists_parse(args->if_exists); | ||||
| 	options->beep = args->beep; | ||||
|  | ||||
| 	if (options->terminate_on == STASIS_APP_RECORDING_TERMINATE_INVALID) { | ||||
| 		ast_ari_response_error( | ||||
| 			response, 400, "Bad Request", | ||||
| 			"terminateOn invalid"); | ||||
| 		return; | ||||
| 	} | ||||
|  | ||||
| 	if (options->if_exists == -1) { | ||||
| 		ast_ari_response_error( | ||||
| 			response, 400, "Bad Request", | ||||
| 			"ifExists invalid"); | ||||
| 		return; | ||||
| 	} | ||||
|  | ||||
| 	if (!ast_get_format_for_file_ext(options->format)) { | ||||
| 		ast_ari_response_error( | ||||
| 			response, 422, "Unprocessable Entity", | ||||
| 			"specified format is unknown on this system"); | ||||
| 		return; | ||||
| 	} | ||||
|  | ||||
| 	recording = stasis_app_control_record(control, options); | ||||
| 	if (recording == NULL) { | ||||
| 		switch(errno) { | ||||
|   | ||||
| @@ -407,6 +407,13 @@ void ast_ari_record_channel(struct ast_variable *headers, | ||||
| 		return; | ||||
| 	} | ||||
|  | ||||
| 	if (!ast_get_format_for_file_ext(options->format)) { | ||||
| 		ast_ari_response_error( | ||||
| 			response, 422, "Unprocessable Entity", | ||||
| 			"specified format is unknown on this system"); | ||||
| 		return; | ||||
| 	} | ||||
|  | ||||
| 	recording = stasis_app_control_record(control, options); | ||||
| 	if (recording == NULL) { | ||||
| 		switch(errno) { | ||||
|   | ||||
| @@ -745,6 +745,7 @@ static void ast_ari_record_bridge_cb( | ||||
| 	case 400: /* Invalid parameters */ | ||||
| 	case 404: /* Bridge not found */ | ||||
| 	case 409: /* Bridge is not in a Stasis application; A recording with the same name already exists on the system and can not be overwritten because it is in progress or ifExists=fail */ | ||||
| 	case 422: /* The format specified is unknown on this system */ | ||||
| 		is_valid = 1; | ||||
| 		break; | ||||
| 	default: | ||||
|   | ||||
| @@ -993,6 +993,7 @@ static void ast_ari_record_channel_cb( | ||||
| 	case 400: /* Invalid parameters */ | ||||
| 	case 404: /* Channel not found */ | ||||
| 	case 409: /* Channel is not in a Stasis application; the channel is currently bridged with other hcannels; A recording with the same name already exists on the system and can not be overwritten because it is in progress or ifExists=fail */ | ||||
| 	case 422: /* The format specified is unknown on this system */ | ||||
| 		is_valid = 1; | ||||
| 		break; | ||||
| 	default: | ||||
|   | ||||
| @@ -466,7 +466,11 @@ | ||||
|                         { | ||||
|                             "code": 409, | ||||
|                             "reason": "Bridge is not in a Stasis application; A recording with the same name already exists on the system and can not be overwritten because it is in progress or ifExists=fail" | ||||
|                         } | ||||
|                         }, | ||||
| 						{ | ||||
| 							"code": 422, | ||||
| 							"reason": "The format specified is unknown on this system" | ||||
| 						} | ||||
|                     ] | ||||
| 				} | ||||
| 			] | ||||
|   | ||||
| @@ -721,6 +721,10 @@ | ||||
| 						{ | ||||
| 							"code": 409, | ||||
| 							"reason": "Channel is not in a Stasis application; the channel is currently bridged with other hcannels; A recording with the same name already exists on the system and can not be overwritten because it is in progress or ifExists=fail" | ||||
| 						}, | ||||
| 						{ | ||||
| 							"code": 422, | ||||
| 							"reason": "The format specified is unknown on this system" | ||||
| 						} | ||||
| 					] | ||||
| 				} | ||||
|   | ||||
		Reference in New Issue
	
	Block a user