]> git.ipfire.org Git - thirdparty/asterisk.git/commitdiff
Send a SRCCHANGE indication when we masquerade
authorTerry Wilson <twilson@digium.com>
Mon, 16 Aug 2010 17:06:37 +0000 (17:06 +0000)
committerTerry Wilson <twilson@digium.com>
Mon, 16 Aug 2010 17:06:37 +0000 (17:06 +0000)
Masquerading a channel means that the src of the audio is potentially
changing, so send a SRCCHANGE so that RTP-based media streams can get
a new SSRC generated to reflect the change. Original patch by addix
(along with lots of testing--thanks!).

(closes issue #17007)
Reported by: addix
Patches:
      1001-reset-SSRC-original-channel.diff uploaded by addix (license 1006)
      srcchange.diff uploaded by twilson (license 396)
Tested by: addix, twilson

Review: https://reviewboard.asterisk.org/r/862/

git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.4@282430 65c4cc65-6c06-0410-ace0-fbb531ad65f3

main/channel.c

index 06f15d176386f0afa7d2b9e89099aa2c4737ffd7..bd64c50fa5f12cef2e40118607abc160396ee6c0 100644 (file)
@@ -4032,6 +4032,7 @@ int ast_do_masquerade(struct ast_channel *original)
        void *t_pvt;
        struct ast_callerid tmpcid;
        struct ast_channel *clone = original->masq;
+       struct ast_channel *bridged;
        struct ast_cdr *cdr;
        int rformat = original->readformat;
        int wformat = original->writeformat;
@@ -4298,6 +4299,15 @@ int ast_do_masquerade(struct ast_channel *original)
                pthread_kill(original->blocker, SIGURG);
        if (option_debug)
                ast_log(LOG_DEBUG, "Done Masquerading %s (%d)\n", original->name, original->_state);
+
+       if ((bridged = ast_bridged_channel(original))) {
+               ast_channel_lock(bridged);
+               ast_indicate(bridged, AST_CONTROL_SRCCHANGE);
+               ast_channel_unlock(bridged);
+       }
+
+       ast_indicate(original, AST_CONTROL_SRCCHANGE);
+
        return 0;
 }