mirror of
				https://github.com/asterisk/asterisk.git
				synced 2025-10-31 02:37:10 +00:00 
			
		
		
		
	Re-fix sending unnegotiated payloads during a P2P RTP bridge.
The previous fix still would look in the static_RTP_PT table, which is inappropriate since we specifically want to find a codec that has been negotiated. (closes issue ASTERISK-20296) reported by NITESH BANSAL Patches: codec_negotiation.patch Uploaded by NITESH BANSAL (License #6418) ........ Merged revisions 372311 from http://svn.asterisk.org/svn/asterisk/branches/11 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@372319 65c4cc65-6c06-0410-ace0-fbb531ad65f3
This commit is contained in:
		| @@ -1216,6 +1216,24 @@ void ast_rtp_codecs_payload_formats(struct ast_rtp_codecs *codecs, struct ast_fo | ||||
|  * \since 1.8 | ||||
|  */ | ||||
| int ast_rtp_codecs_payload_code(struct ast_rtp_codecs *codecs, int asterisk_format, const struct ast_format *format, int code); | ||||
| /*! | ||||
|  * \brief Search for a payload code in the ast_rtp_codecs structure | ||||
|  * | ||||
|  * \param codecs Codecs structure to look in | ||||
|  * \param code The format to look for | ||||
|  * | ||||
|  * \retval Numerical payload or -1 if unable to find payload in codecs | ||||
|  * | ||||
|  * Example usage: | ||||
|  * | ||||
|  * \code | ||||
|  * int payload = ast_rtp_codecs_payload_code(&codecs, 0); | ||||
|  * \endcode | ||||
|  * | ||||
|  * This looks for the numerical payload for ULAW in the codecs structure. | ||||
|  * | ||||
|  */ | ||||
| int ast_rtp_codecs_find_payload_code(struct ast_rtp_codecs *codecs, int code); | ||||
|  | ||||
| /*! | ||||
|  * \brief Retrieve mime subtype information on a payload | ||||
|   | ||||
| @@ -762,7 +762,21 @@ int ast_rtp_codecs_payload_code(struct ast_rtp_codecs *codecs, int asterisk_form | ||||
|  | ||||
| 	return res; | ||||
| } | ||||
| int ast_rtp_codecs_find_payload_code(struct ast_rtp_codecs *codecs, int code) | ||||
| { | ||||
| 	struct ast_rtp_payload_type *type; | ||||
| 	int res = -1; | ||||
|  | ||||
| 	/* Search the payload type in the codecs passed */ | ||||
| 	if ((type = ao2_find(codecs->payloads, &code, OBJ_NOLOCK | OBJ_KEY))) | ||||
| 	{ | ||||
| 		res = type->payload; | ||||
| 		ao2_ref(type, -1); | ||||
| 		return res; | ||||
| 	} | ||||
|  | ||||
| 	return res; | ||||
| } | ||||
| const char *ast_rtp_lookup_mime_subtype2(const int asterisk_format, struct ast_format *format, int code, enum ast_rtp_options options) | ||||
| { | ||||
| 	int i; | ||||
|   | ||||
| @@ -2790,8 +2790,9 @@ static int bridge_p2p_rtp_write(struct ast_rtp_instance *instance, unsigned int | ||||
| 	} | ||||
|  | ||||
| 	/* If the payload coming in is not one of the negotiated ones then send it to the core, this will cause formats to change and the bridge to break */ | ||||
| 	if ((ast_rtp_codecs_payload_code(ast_rtp_instance_get_codecs(instance1), 0, NULL, bridged_payload) == -1) && | ||||
| 	    !ast_rtp_codecs_get_payload_format(ast_rtp_instance_get_codecs(instance1), bridged_payload)) { | ||||
| 	if (ast_rtp_codecs_find_payload_code(ast_rtp_instance_get_codecs(instance1),bridged_payload) == -1) | ||||
| 	{ | ||||
| 		ast_debug(1, "Unsupported payload type received \n"); | ||||
| 		return -1; | ||||
| 	} | ||||
|  | ||||
|   | ||||
		Reference in New Issue
	
	Block a user