mirror of
https://github.com/asterisk/asterisk.git
synced 2025-11-09 11:28:25 +00:00
Merge "res_rtp_asterisk: Allow remote SSRC to change on an RTP instance."
This commit is contained in:
@@ -6186,10 +6186,35 @@ static void ast_rtp_set_remote_ssrc(struct ast_rtp_instance *instance, unsigned
|
|||||||
{
|
{
|
||||||
struct ast_rtp *rtp = ast_rtp_instance_get_data(instance);
|
struct ast_rtp *rtp = ast_rtp_instance_get_data(instance);
|
||||||
|
|
||||||
if (rtp->themssrc) {
|
if (rtp->themssrc == ssrc) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* If this is bundled we need to update the SSRC mapping */
|
||||||
|
if (rtp->bundled) {
|
||||||
|
struct ast_rtp *bundled_rtp;
|
||||||
|
int index;
|
||||||
|
|
||||||
|
ao2_unlock(instance);
|
||||||
|
|
||||||
|
/* The child lock can't be held while accessing the parent */
|
||||||
|
ao2_lock(rtp->bundled);
|
||||||
|
bundled_rtp = ast_rtp_instance_get_data(rtp->bundled);
|
||||||
|
|
||||||
|
for (index = 0; index < AST_VECTOR_SIZE(&bundled_rtp->ssrc_mapping); ++index) {
|
||||||
|
struct rtp_ssrc_mapping *mapping = AST_VECTOR_GET_ADDR(&bundled_rtp->ssrc_mapping, index);
|
||||||
|
|
||||||
|
if (mapping->ssrc == rtp->themssrc) {
|
||||||
|
mapping->ssrc = ssrc;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
ao2_unlock(rtp->bundled);
|
||||||
|
|
||||||
|
ao2_lock(instance);
|
||||||
|
}
|
||||||
|
|
||||||
rtp->themssrc = ssrc;
|
rtp->themssrc = ssrc;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user