Sponsor: VoiceMeUp - Corporate & Wholesale VoIP Services

VoIP Mailing List Archives
Mailing list archives for the VoIP community
 SearchSearch 

[asterisk-users] Fwd: Asterisk pjsip auto dtmf mode


 
Post new topic   Reply to topic    VoIP Mailing List Archives Forum Index -> Asterisk Users
View previous topic :: View next topic  
Author Message
nachum.yaron at gmail.com
Guest





PostPosted: Sat Jan 17, 2015 1:04 am    Post subject: [asterisk-users] Fwd: Asterisk pjsip auto dtmf mode Reply with quote

Hello Asterisk Users,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.
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.
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 ...
I based my development on 13.1.0. The following are my changes:


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):
150:
static void get_codecs(struct ast_sip_session *session, const struct pjmedia_sdp_media *stream, struct ast_rtp_codecs *codecs, struct ast_sip_session_media *session_media)

159:
        char fmt_param[256];

        int tel_event = 0;
177:
                ast_copy_pj_str(name, &rtpmap->enc_name, sizeof(name));

                if (strcmp(name,"telephone-event") == 0) {
                        tel_event++;
                }

202:
        }
        if (tel_event==0) {
                ast_rtp_instance_dtmf_mode_set(session_media->rtp, AST_RTP_DTMF_MODE_INBAND);
        }

        /* Get the packetization, if it exists */

241:
        get_codecs(session, stream, &codecs, session_media);



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):
1062:
        if (endpoint->dtmf == AST_SIP_DTMF_INBAND || endpoint->dtmf == AST_SIP_DTMF_RFC_4733) {
                dsp_features |= DSP_FEATURE_DIGIT_DETECT;
        }



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)
543:
       if (session->endpoint->dtmf == AST_SIP_DTMF_INBAND || session->endpoint->dtmf == AST_SIP_DTMF_RFC_4733) {
                ast_dsp_set_features(session->dsp, DSP_FEATURE_DIGIT_DETECT);

1420:
               if (!media || !media->rtp || (ast_rtp_instance_dtmf_mode_get(media->rtp) == AST_RTP_DTMF_MODE_INBAND)) {

                        return -1;

1523:
               if (!media || !media->rtp || (ast_rtp_instance_dtmf_mode_get(media->rtp) == AST_RTP_DTMF_MODE_INBAND)) {

                        return -1;



That's it!!! It works fine for me. Any remarks / advice would be appreciated.


Yaron.
Back to top
mjordan at digium.com
Guest





PostPosted: Mon Jan 19, 2015 10:34 am    Post subject: [asterisk-users] Fwd: Asterisk pjsip auto dtmf mode Reply with quote

On Sat, Jan 17, 2015 at 12:04 AM, Yaron Nachum <nachum.yaron@gmail.com (nachum.yaron@gmail.com)> wrote:
Quote:
Hello Asterisk Users,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.
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.
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 ...
I based my development on 13.1.0. The following are my changes:


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):
150:
static void get_codecs(struct ast_sip_session *session, const struct pjmedia_sdp_media *stream, struct ast_rtp_codecs *codecs, struct ast_sip_session_media *session_media)

159:
        char fmt_param[256];

        int tel_event = 0;
177:
                ast_copy_pj_str(name, &rtpmap->enc_name, sizeof(name));

                if (strcmp(name,"telephone-event") == 0) {
                        tel_event++;
                }

202:
        }
        if (tel_event==0) {
                ast_rtp_instance_dtmf_mode_set(session_media->rtp, AST_RTP_DTMF_MODE_INBAND);
        }

        /* Get the packetization, if it exists */

241:
        get_codecs(session, stream, &codecs, session_media);



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):
1062:
        if (endpoint->dtmf == AST_SIP_DTMF_INBAND || endpoint->dtmf == AST_SIP_DTMF_RFC_4733) {
                dsp_features |= DSP_FEATURE_DIGIT_DETECT;
        }



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)
543:
       if (session->endpoint->dtmf == AST_SIP_DTMF_INBAND || session->endpoint->dtmf == AST_SIP_DTMF_RFC_4733) {
                ast_dsp_set_features(session->dsp, DSP_FEATURE_DIGIT_DETECT);

1420:
               if (!media || !media->rtp || (ast_rtp_instance_dtmf_mode_get(media->rtp) == AST_RTP_DTMF_MODE_INBAND)) {

                        return -1;

1523:
               if (!media || !media->rtp || (ast_rtp_instance_dtmf_mode_get(media->rtp) == AST_RTP_DTMF_MODE_INBAND)) {

                        return -1;



That's it!!! It works fine for me. Any remarks / advice would be appreciated.






Hey Yaron:

Sounds like a good contribution. Since it is a code change, you may want to discuss it further over on the asterisk-dev list.

If you're interested in submitting the contribution upstream to the project, you can find instructions on the Asterisk wiki:

https://wiki.asterisk.org/wiki/display/AST/Patch+Contribution+Process


Thanks!

Matt


--
Matthew Jordan

Digium, Inc. | Engineering Manager
445 Jan Davis Drive NW - Huntsville, AL 35806 - USA
Check us out at: http://digium.com & http://asterisk.org
Back to top
Display posts from previous:   
Post new topic   Reply to topic    VoIP Mailing List Archives Forum Index -> Asterisk Users All times are GMT - 5 Hours
Page 1 of 1

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum


Powered by phpBB © 2001, 2005 phpBB Group

VoiceMeUp - Corporate & Wholesale VoIP Services