<div dir="ltr">Thank you Matthew,<div>I will start working on the contribution. </div><div><br></div><div>I have a question for the developers, but before that I will explain what I did.</div><div><br></div><div>I have been able to add auto dtmf mode on PJSIP channel. The basic idea is to setup the dtmf mode just like RFC4733, but when going over the codecs in <span style="font-size:12.7272720336914px">res_pjsip_sdp_rtp.c, I look for telephone-event, and if none exists I set the dtmf settings on ast_sip_session_media->rtp instance to inband. </span></div><div><span style="font-size:12.7272720336914px"><br></span></div><div><span style="font-size:12.7272720336914px">When sending dtmf in </span><span style="font-size:12.7272720336914px">chan_pjsip.c I have added a condition if the dtmf settings on ast_sip_</span><span style="font-size:12.7272720336914px">session_media->rtp instance is inband send the dtmf as inband.</span></div><div><span style="font-size:12.7272720336914px"><br></span></div><div><span style="font-size:12.7272720336914px">The only thing I wasn't able to do is enable DSP for dtmf only when the </span><span style="font-size:12.7272720336914px">dtmf settings on ast_sip_</span><span style="font-size:12.7272720336914px">session_media->rtp instance is inband. This is done in </span><span style="font-size:12.7272720336914px">res_pjsip_session.c</span><span style="font-size:12.7272720336914px">  - </span>ast_sip_session_alloc, and in chan_pjsip - chan_pjsip_cng_tone_detected. The reason is that ast_sip_session_media instance is not handled in these functions. </div><div><br></div><div>The question is how do I get access to ast_sip_session_media instance? I have in both functions access to ast_sip_session instance. </div><div><br></div><div>Thank you,</div><div>Yaron.</div><div><br></div><div><br></div><div><br></div></div><div class="gmail_extra"><br><div class="gmail_quote">On Mon, Jan 19, 2015 at 5:33 PM, Matthew Jordan <span dir="ltr"><<a href="mailto:mjordan@digium.com" target="_blank">mjordan@digium.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr"><div><div class="h5"><br><div class="gmail_extra"><br><div class="gmail_quote">On Sat, Jan 17, 2015 at 12:04 AM, Yaron Nachum <span dir="ltr"><<a href="mailto:nachum.yaron@gmail.com" target="_blank">nachum.yaron@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="ltr"><div class="gmail_quote"><div dir="ltr">Hello Asterisk Users,<div>I have been looking for similar auto dtmf mode implementation on pjsip, but didn't see it coming, so I decided to give it a try.</div><div>My basic plan was to do it as simple as possible with minimum changes because I am not familiar with all Asterisk code. My idea is to use rfc4733 settings, but when going over the codecs check if telephone-event appear and if not set the dtmf mode to inband on rtp instance.</div><div>I would appreciate if someone would look at what I did and see if I didn't do stupid things. If you think this is something you would like to add to one of the next releases I am willing to help - add the additional dtmf mode ...</div><div>I based my development on 13.1.0. The following are my changes:</div><div><div><br></div><div>In res/res_pjsip_sdp_rtp.c (I added session_media to get_codecs and used it in order to update dtmf settings on rtp instance when telephone-event is not included in the sdp):</div><div>150:</div><div>static void get_codecs(struct ast_sip_session *session, const struct pjmedia_sdp_media *stream, struct ast_rtp_codecs *codecs<span style="background-color:rgb(255,255,0)">, struct ast_sip_session_media *session_media</span>)</div></div><div>159:</div><div><div>        char fmt_param[256];</div></div><div>        <span style="background-color:rgb(255,255,0)">int tel_event = 0;</span></div><div>177:</div><div><div>                ast_copy_pj_str(name, &rtpmap->enc_name, sizeof(name));</div></div><div><div><span style="background-color:rgb(255,255,0)">                if (strcmp(name,"telephone-event") == 0) {</span></div><div><span style="background-color:rgb(255,255,0)">                        tel_event++;</span></div><div><span style="background-color:rgb(255,255,0)">                }</span></div></div><div>202:</div><div><div>        }</div><div><div> <span style="background-color:rgb(255,255,0)">       if (tel_event==0) {</span></div><div><span style="background-color:rgb(255,255,0)">                ast_rtp_instance_dtmf_mode_set(session_media->rtp, AST_RTP_DTMF_MODE_INBAND);</span></div><div><span style="background-color:rgb(255,255,0)">        }</span></div></div><div>        /* Get the packetization, if it exists */</div></div><div>241:</div><div><div>        get_codecs(session, stream, &codecs<span style="background-color:rgb(255,255,0)">, session_media</span>);</div></div><div><br></div><div>In res/res_pjsip_session.c (Just activated DSP also on RFC dtmf mode - I didn't find a way to test the rtp instance dtmf settiings because session_media pointer is not there. Any advice for doing so would be appreciated):</div><div>1062:</div><div><div>        if (endpoint->dtmf == AST_SIP_DTMF_INBAND <span style="background-color:rgb(255,255,0)">|| endpoint->dtmf == AST_SIP_DTMF_RFC_4733</span>) {</div><div>                dsp_features |= DSP_FEATURE_DIGIT_DETECT;</div><div>        }</div></div><div><br></div><div>In channels/chan_pjsip.c (1 change similar to the above, and 2 more changes to send inband dtmf when rtp instance dtmf settings is inband)</div><div>543:</div><div><div>       if (session->endpoint->dtmf == AST_SIP_DTMF_INBAND <span style="background-color:rgb(255,255,0)">|| session->endpoint->dtmf == AST_SIP_DTMF_RFC_4733</span>) {</div><div>                ast_dsp_set_features(session->dsp, DSP_FEATURE_DIGIT_DETECT);</div></div><div>1420:</div><div>               if (!media || !media->rtp <span style="background-color:rgb(255,255,0)">|| (ast_rtp_instance_dtmf_mode_get(media->rtp) == AST_RTP_DTMF_MODE_INBAND)</span>) {<br></div><div>                        return -1;<br></div><div>1523:</div><div><div>               if (!media || !media->rtp <span style="background-color:rgb(255,255,0)">|| (ast_rtp_instance_dtmf_mode_get(media->rtp) == AST_RTP_DTMF_MODE_INBAND)</span>) {<br></div><div>                        return -1;</div></div><div><br></div><div>That's it!!! It works fine for me. Any remarks / advice would be appreciated.</div><span><font color="#888888"><span></span></font></span><br clear="all"></div></div></div></blockquote></div><br></div></div></div><div class="gmail_extra">Hey Yaron:<br><br>Sounds like a good contribution. Since it is a code change, you may want to discuss it further over on the asterisk-dev list.<br><br>If you're interested in submitting the contribution upstream to the project, you can find instructions on the Asterisk wiki:<br><br><a href="https://wiki.asterisk.org/wiki/display/AST/Patch+Contribution+Process" target="_blank">https://wiki.asterisk.org/wiki/display/AST/Patch+Contribution+Process</a><br><br></div><div class="gmail_extra">Thanks!<br><br>Matt<span class="HOEnZb"><font color="#888888"><br></font></span></div><span class="HOEnZb"><font color="#888888"><div class="gmail_extra"><br>-- <br><div><div dir="ltr"><div>Matthew Jordan<br></div><div>Digium, Inc. | Engineering Manager</div><div>445 Jan Davis Drive NW - Huntsville, AL 35806 - USA</div><div>Check us out at: <a href="http://digium.com" target="_blank">http://digium.com</a> & <a href="http://asterisk.org" target="_blank">http://asterisk.org</a></div></div></div>
</div></font></span></div>
<br>--<br>
_____________________________________________________________________<br>
-- Bandwidth and Colocation Provided by <a href="http://www.api-digital.com" target="_blank">http://www.api-digital.com</a> --<br>
New to Asterisk? Join us for a live introductory webinar every Thurs:<br>
               <a href="http://www.asterisk.org/hello" target="_blank">http://www.asterisk.org/hello</a><br>
<br>
asterisk-users mailing list<br>
To UNSUBSCRIBE or update options visit:<br>
   <a href="http://lists.digium.com/mailman/listinfo/asterisk-users" target="_blank">http://lists.digium.com/mailman/listinfo/asterisk-users</a><br></blockquote></div><br></div>