Merged revisions 282468 via svnmerge from
authorTerry Wilson <twilson@digium.com>
Mon, 16 Aug 2010 20:40:55 +0000 (20:40 +0000)
committerTerry Wilson <twilson@digium.com>
Mon, 16 Aug 2010 20:40:55 +0000 (20:40 +0000)
https://origsvn.digium.com/svn/asterisk/branches/1.8

................
  r282468 | twilson | 2010-08-16 12:53:44 -0500 (Mon, 16 Aug 2010) | 30 lines

  Merged revisions 282467 via svnmerge from
  https://origsvn.digium.com/svn/asterisk/branches/1.6.2

  ................
    r282467 | twilson | 2010-08-16 12:32:01 -0500 (Mon, 16 Aug 2010) | 23 lines

    Merged revisions 282430 via svnmerge from
    https://origsvn.digium.com/svn/asterisk/branches/1.4

    ........
      r282430 | twilson | 2010-08-16 12:06:37 -0500 (Mon, 16 Aug 2010) | 16 lines

      Send a SRCCHANGE indication when we masquerade

      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/trunk@282502 65c4cc65-6c06-0410-ace0-fbb531ad65f3

main/channel.c

index 3c64c57..c0a37aa 100644 (file)
@@ -5863,6 +5863,7 @@ int ast_do_masquerade(struct ast_channel *original)
                struct ast_party_redirecting redirecting;
        } exchange;
        struct ast_channel *clonechan, *chans[2];
+       struct ast_channel *bridged;
        struct ast_cdr *cdr;
        format_t rformat = original->readformat;
        format_t wformat = original->writeformat;
@@ -6185,6 +6186,14 @@ int ast_do_masquerade(struct ast_channel *original)
                pthread_kill(original->blocker, SIGURG);
        ast_debug(1, "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);
+
 done:
        /* it is possible for the clone channel to disappear during this */
        if (clonechan) {
@@ -6196,6 +6205,7 @@ done:
                ast_channel_unlock(original);
                ao2_link(channels, original);
        }
+
        return 0;
 }