Index: channels/chan_sip.c =================================================================== --- channels/chan_sip.c (revision 13281) +++ channels/chan_sip.c (working copy) @@ -2981,6 +2981,9 @@ for (v = i->chanvars ; v ; v = v->next) pbx_builtin_setvar_helper(tmp,v->name,v->value); + if (ast_test_flag (i, SIP_DTMF_INFO)) + tmp->dtmf_nbridge = 1; + return tmp; } Index: include/asterisk/channel.h =================================================================== --- include/asterisk/channel.h (revision 13281) +++ include/asterisk/channel.h (working copy) @@ -372,6 +372,8 @@ char dtmfq[AST_MAX_EXTENSION]; /*! DTMF frame */ struct ast_frame dtmff; + /*! Alternative dtmf source can do native bridge, defaults to false */ + unsigned char dtmf_nbridge; /*! PBX private structure */ struct ast_pbx *pbx; Index: rtp.c =================================================================== --- rtp.c (revision 13281) +++ rtp.c (working copy) @@ -1582,8 +1582,9 @@ memset(&vac0, 0, sizeof(vac0)); memset(&vac1, 0, sizeof(vac1)); - /* if need DTMF, cant native bridge */ - if (flags & (AST_BRIDGE_DTMF_CHANNEL_0 | AST_BRIDGE_DTMF_CHANNEL_1)) + /* if need DTMF, and dtmf_nbridge=0, cant native bridge */ + if ( ((flags & AST_BRIDGE_DTMF_CHANNEL_0) && !(c0->dtmf_nbridge)) || + ((flags & AST_BRIDGE_DTMF_CHANNEL_1) && !(c1->dtmf_nbridge))) return AST_BRIDGE_FAILED_NOWARN; /* Lock channels */