]> git.ipfire.org Git - thirdparty/asterisk.git/commitdiff
Fix a problem where inbound rfc2833 audio would be sent to the
authorMark Michelson <mmichelson@digium.com>
Wed, 9 Jul 2008 19:32:20 +0000 (19:32 +0000)
committerMark Michelson <mmichelson@digium.com>
Wed, 9 Jul 2008 19:32:20 +0000 (19:32 +0000)
core instead of being P2P bridged. When the core regenerated
the rfc2833 packet for the outbound leg, the SSRC would be different
than the RTP audio on the call leg causing DTMF detection issues on
the far end.

(closes issue #12955)
Reported by: tonyredstone
Patches:
      dynamic_rtp.patch uploaded by tsearle (license 373)
Tested by: tonyredstone

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

main/rtp.c

index f18b86ed790f0794990737e9b9c82990970f48ff..14d8aafcdbc51cfac23e7d87ae9c39daa5ad8d4d 100644 (file)
@@ -1062,10 +1062,6 @@ static int bridge_p2p_rtp_write(struct ast_rtp *rtp, struct ast_rtp *bridged, un
        /* Check what the payload value should be */
        rtpPT = ast_rtp_lookup_pt(rtp, payload);
 
-       /* 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 (!bridged->current_RTP_PT[payload].code)
-               return -1;
-
        /* If the payload is DTMF, and we are listening for DTMF - then feed it into the core */
        if (ast_test_flag(rtp, FLAG_P2P_NEED_DTMF) && !rtpPT.isAstFormat && rtpPT.code == AST_RTP_DTMF)
                return -1;
@@ -1073,6 +1069,11 @@ static int bridge_p2p_rtp_write(struct ast_rtp *rtp, struct ast_rtp *bridged, un
        /* Otherwise adjust bridged payload to match */
        bridged_payload = ast_rtp_lookup_code(bridged, rtpPT.isAstFormat, rtpPT.code);
 
+       /* 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 (!bridged->current_RTP_PT[bridged_payload].code)
+               return -1;
+
+
        /* If the mark bit has not been sent yet... do it now */
        if (!ast_test_flag(rtp, FLAG_P2P_SENT_MARK)) {
                mark = 1;